一、常规功能与可读性(P1+P2)

序号 审查项 判定标准(二元可验证) 优先级
1 功能实现完整性 代码覆盖所有预期需求点(对照需求清单无遗漏,无逻辑错误,如模板特化、重载函数功能符合设计) P1
2 代码易懂性 新接手开发者可在 10 分钟内理解核心逻辑(无过度复杂模板嵌套、晦涩宏定义、无拼音 / 英文混杂命名) P1
3 编码规范符合性 完全匹配团队 C++ 规范(如大括号位置、命名空间使用、const/constexpr正确修饰、缩进无违规) P1
4 冗余代码清理 无重复代码(≥3 行相同逻辑未抽取为函数 / 模板)、无注释掉的无效代码块(如废弃的类成员、未使用的全局函数) P1
5 循环安全性 循环有明确终止条件(无死循环风险),无循环内重计算(如重复获取std::vector长度),无迭代器失效场景(如循环中增删容器元素) P1
6 全局变量 / 对象合理性 无不必要全局变量(可替换为局部变量 / 函数参数),全局对象无初始化顺序依赖风险(如跨文件全局对象相互引用) P2
7 库函数 / STL 复用性 无自定义代码可被 C++ 标准库 / STL 替代(如手动实现容器遍历而非用std::for_each,手动内存拷贝而非用std::copy) P2
8 调试代码清理 无残留日志(如std::cout/printf)、调试断点、临时测试代码(如未删除的main函数测试逻辑) P2

二、安全合规(P1,全部高优先级)

序号 审查项 判定标准(二元可验证) 优先级
9 输入校验完整性 所有用户输入(接口参数 / 文件数据)完成类型、长度、范围校验(防缓冲区溢出、非法指针传入) P1
10 第三方错误捕获 使用第三方库(如 Boost、数据库 SDK)时,所有可能的错误(返回码 / 异常)均被捕获处理(无未处理的std::exception子类) P1
11 内存管理安全性 无内存泄漏(new/malloc分配的内存均有对应delete/free),无野指针(未初始化 / 已释放指针无访问) P1
12 无效参数处理 函数接收无效参数(如nullptr、超出范围的枚举值)时,有明确容错逻辑(如返回错误码 / 抛指定异常,无崩溃) P1
13 敏感数据保护 密码用哈希 + 盐值存储(无明文),敏感数据(如身份证号)传输 / 存储时用std::string加密处理,日志无敏感信息打印 P1
14 指针 / 引用安全 无悬垂引用(引用已销毁对象),指针使用前均做非空判断(无nullptr解引用风险) P1

三、文档完整性(P1+P2)

序号 审查项 判定标准(二元可验证) 优先级
15 核心注释有效性 复杂逻辑(如算法实现、模板特化规则)有注释,描述 “为什么做” 而非 “做了什么”(如解释const_cast使用原因) P1
16 函数 / 类文档完整性 所有公共函数 / 类有注释(包含入参类型 / 出参含义 / 异常类型、模板参数约束、const成员函数语义) P1
17 边界情况说明 代码处理边界场景(如空容器、极值输入、模板参数非法值)时,有注释说明设计意图(如 “此处需避免std::vector扩容开销”) P2
18 第三方依赖文档 使用第三方库的关键接口(如数据库连接、网络通信)时,有注释标注库版本要求、接口限制(如 “仅支持 Boost 1.74+”) P2
19 未完成代码标记 未完成代码(如待优化的模板实现)有TODO: [姓名] [日期] 描述清晰标记(如 “TODO: 2024-XX-XX 补充 constexpr 优化”) P2

四、测试有效性(P1+P2)

序号 审查项 判定标准(二元可验证) 优先级
20 代码可测试性 无隐藏依赖(如硬编码文件路径、全局静态变量),支持单元测试初始化(如用 Google Test 可构造测试对象) P1
21 单元测试覆盖度 核心业务逻辑(如支付处理、数据解析)单元测试覆盖率≥70%(用gcov等工具统计,含模板实例化场景) P1
22 测试用例有效性 单元测试有明确断言(无 “空跑测试”),覆盖 C++ 特有场景(如异常抛出测试、模板参数非法值测试、内存泄漏检测) P1
23 容器 / 数组安全测试 数组下标访问、容器迭代器操作有对应的越界测试用例(如std::vector的at()与[]边界测试) P2
24 测试代码复用 无重复测试代码(≥3 行相同测试逻辑已抽取为测试工具函数 / 夹具,如 Google Test 的TEST_F共享初始化) P2

五、可维护性(P2,中优先级)

序号 审查项 判定标准(二元可验证) 优先级
25 模块化设计 无 “万能类 / 函数”(类职责≤2 个,函数行数≤80 行),模板类 / 函数接口简洁(无过度复杂模板参数) P2
26 配置集中管理 无硬编码配置(如数据库地址、端口号,统一存于配置文件 /constexpr变量,无分散的魔法数字) P2
27 依赖合理性 类 / 函数依赖外部模块≤5 个(无过度耦合,如避免类继承链过长、减少friend类使用) P2
28 异常信息清晰度 自定义异常(继承std::exception)包含关键上下文(如参数值、业务 ID),what()方法返回明确错误信息 P2
29 析构函数完整性 有析构函数的类(尤其是含指针成员的类),析构函数无内存泄漏(如正确释放动态内存),虚基类析构函数为virtual P2
30 RAII 机制使用 资源(如文件句柄、锁、网络连接)通过 RAII 类管理(如用std::lock_guard而非手动加解锁,无资源泄漏风险) P2

清单使用说明

审查流程

  • 提交者先自查(勾选 P1 项)→ 审查者重点核查 P1 项 + 随机抽查 30% P2 项 → 问题标记 “阻塞 / 非阻塞” → 修复后复核。

优先级应用

  • P1 项不通过则代码不可合并;P2 项可记录为 “后续优化项”,但需在迭代内闭环。

动态更新

  • 每季度统计 “高频问题项”(如某 P2 项连续 3 次出现),升级为 P1 项;无出现场景的项(如非支付业务的 “防重放攻击”)可暂存为 “可选项”。