检查功能项 |
检查项描述 |
是否可以自动化检查 |
内存管理 |
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.测试数据是否具有代表性 |
否 |