检查功能项 | 检查项描述 | 是否可以自动化检查 |
内存管理 | 1.指针在定义的时候必须初始化,如果未分配内存则置为NULL | 是 |
2.指针指向的内存被释放时,指针必须置为NULL | 是 | |
3.在栈上禁止分配大块内存,应分配在堆上 | 否 | |
4.内存是否进行了越界检查 | 是 | |
5.进行访问数组时是否进行了越界检查 | 是 | |
6.内存释放的参数中是否有nSize参数(非必须) | 否 | |
错误处理 | 1.错误码是否进行了处理,或者传递给上层函数处理 | 否 |
2.对正常情况不应该出现的错误码必须记日志 | 否 | |
3.是否对错误路径进行跟踪处理 | 否 | |
4.对传入函数的有效指针是否用assert进行检测 | 否 | |
传入参数检查 | 1.函数传入指针其指向的内存在函数内未修改,应加const | 是 |
2.函数参数传入的字符串或者常数,应在钱加const | 是 | |
跨平台代码检查 | 1.平台相关的数据类型是否写入了文件 | 否 |
2.禁止向一个文件直接读写一个结构 | 否 | |
3.禁止利用和平台相关的函数 | 否 | |
线程管理 | 1.会被多线程调用的代码是否线程安全 | 否 |
2.锁的设计是否高效并保证不会死锁 | 否 | |
代码风格 | 1.是否出现神秘数字 | 是 |
2.代码注释是否符合doxygen语法 | 否 | |
3.变量命名是否采取匈牙利命名法 | 否 | |
4.宏定义是否采取了大写字母,宏的输入在计算时是否加括号 | 是 | |
5.相关联的关键字和“{“和”}”要么处于同一行,要么处于同一列 | 否 | |
6.在做函数返回值或者是字符比较时,需要把数字或者宏定义放在前面 | 是 | |
7.未在实现它的c文件外被调用的函数,禁止将该函数的申明放在头文件中 | 是 | |
8.变量是否为null判断,为了避免出错,建议"null==变量" | 是 | |
9.无重复代码,如果有重复代码,是否合并成一个函数 | 否 | |
10.全局变量是否采用g_方式,比如g_szFileName表示全局的文件名 | 否 | |
11.函数命名是否采取了小写字母+下划线+小写字母方式,比如open_file(); | 否 | |
12.对于复杂函数是否采取分割的策略 | 否 | |
13.变量在使用时是否赋初值,内存在使用时是否被初始化 | 是 | |
代码注释 | 1.是否为函数(方法)添加了标准的注释 | 否 |
2.对于判断语句(超过10行),要说明判断的条件和程序的走向 | 否 | |
3.对于循环语句(超过20行,如while,do while,for),要说明循环继续和终止的条件 | 否 | |
4.对全局变量以及结构体、联合体进行注释,说明数据共享的含义 | 否 | |
1.逻辑上是否完全覆盖 | 否 | |
2.边界值和典型值是否测试 | 否 | |
3.测试数据是否具有代表性 | 否 |
C代码评审检查列表
最新推荐文章于 2022-06-13 12:02:53 发布