1、数据引用错误
- 是否有引用的变量未赋值或未初始化
- 对于所有的数组引用,是否每一个下标的值都在相应规定的界限之内
- 对于所有的数组引用,是否每一个下标的值都是整数
- 对于所有的通过指针或引用变量的引用,当前引用的内存单元是否分配
- 如果一个内存区域具有不同属性的别名,当通过别名进行引用时,内存区域中的数据值是否具有正确的属性
- 变量值的类型或属性是否与编译器所预期的一致
- 在使用的计算机上,当内存分配的单元小于内存可寻址的单元大小时,是否存在直接或间接的寻址错误
- 当使用指针或者引用变量时,被引用的内存属性是否与编译器所预期的一致
- 假如一个数据结构在多个过程或者子程序中被引用,那么每个过程或子程序对该结构的定义是否都相同
- 如果字符串有索引,当对数组进行索引操作或下标引用,字符串的边界值是否有仅差一个的错误
- 对于面向对象的语言,是否所有的继承需求都在实现类中得到满足
2、数据声明错误
- 是否所有的变量都进行了明确的声明
- 如果变量所有的属性在声明中没有明确说明,那么默认的属性能否被正确理解
- 如果变量在声明语句中被初始化,那么它的初始化是否正确
- 是否每个变量都被赋予了正确的长度和数据类型
- 变量的初始化是否与其存储空间的类型一致
- 是否存在着相似名称的变量
3、运算错误
- 是否存在不一致的数据类型的变量间的运算
- 是否有混合模式的运算
- 是否有相同数据类型,不同字长变量间的运算
- 赋值语句的目标变量的数据类型是否小于右边表达式的数据类型或结果
- 在表达式的运算中是否存在表达式向上或向下溢出的情况
- 除法运算中的除数是否可能为0
- 如果计算机表达变量的基本方式是基于二进制的,那么运算结果是否不精确
- 在特定场合,变量的值是否超出了有意义的范围
- 对于包含一个以上操作符的表达式,赋值顺序和操作符的优先顺序是否正确
- 整数的运算是否有使用不当的情况,尤其是除法
4、比较错误
- 是否有不同数据类型的变量之间的比较运算
- 是否有混合模式的比较运算
- 比较运算符是否正确
- 每个布尔表达式所叙述的内容是否都正确
- 布尔运算符的操作数是否是布尔类型的
- 在二进制的计算机上,是否有用二进制表示小数或浮点数的比较运算
- 对于那些包含一个以上布尔运算符的表达式,赋值顺序以及运算符的优先顺序是否正确
- 编译器计算布尔表达式的方式是否会对程序产生影响
5、控制流程错误
- 如果程序包含多条分支路径,比如有计算goto语句,索引变量的值是否会大于可能的分支数量
- 是否所有的循环最终都终止了
- 程序、模块或子程序是否最终都终止了
- 由于实际情况没有满足循环的入口条件,循环体内是否有可能从未执行过
- 如果循环同时由迭代变量和一个布尔条件所控制,如果循环越界了,后果会如何
- 是否存在仅差一个的错误
- 如果编程语言中有语句组成或者代码块的概念,是否每一组语句都有一个明确的while语句,并且do语句也与其相应的语句组对应
- 是否存在不能穷尽的判断
6、接口错误
- 被调用模块接受到的形参数量是否等于调用模块发送的实参数量
- 实参的属性是否与相应的形参的属性相匹配
- 实参的量纲是否与对应形参的量纲相匹配
- 此模块传递给彼模块的实参的属性,是否与彼模块相应形参的属性匹配
- 此模块传递给彼模块的实参量纲,是否与彼模块相应形参的量纲相匹配
- 如果调用了内置函数,实参的数量属性顺序是否正确
- 如果某个模块或类有多个入口点,是否引用了与当前入口点无关的形参
- 是否有子程序改变了某个原本仅为输入值的形参
- 如果存在全局变量,在所有引用他们的模块中,他们的定义和属性是否相同
- 常数是否以实参形式传递过
7、输入/输出错误
- 如果对文件明确声明过,其属性是否正确
- 打开文件的语句中各项属性的设置是否正确
- 格式规范是否与I/O语句中的信息相吻合
- 是否有足够的可用内存空间,来报了程序将读取的文件
- 是否所有的文件在使用之前都打开了
- 是否所有的文件再使用之后都关闭了
- 是否判断文件结束的条件,并正确处理
- 对I/O出错情况处理是否正确
- 任何打印或显示的文本信息中是否存在拼写或语法错误
8、其它检查
- 如果编译器建立了一个标识符交叉引用列表,那么对该列表进行检查,查看是否有变量从未引用过,或仅被引用过一次
- 如果编译器建立了一个属性列表,那么对每个变量的属性进行检查,确保没有赋予过不希望的默认属性值
- 如果程序编译通过了,但计算机提供了一个或多个警告或提示信息,应对此逐一检查
- 程序或模块是否具有足够的鲁棒性
- 程序是否遗漏了某个功能