在白盒测试时需要代码检查,在代码检查中有一份错误列表作为参考,更容易发现程序是否存在常见错误。代码检查错误主要类型如下:数据引用错误、数据声明错误、运算错误、比较错误、控制流程错误、接口错误、输入/输出错误、其他检查。
数据引用错误
- 是否有引用的变量未赋值或未初始化?
- 下标的值是否在范围之内。
- 是否存在非整数下标?
- 当使用别名是属性是否正确?
- 记录和结构的属性是否匹配?
- 基础的存储属性是否正确?
- 索引或下标操作是否有“仅差一个”的错误?也就是说,是否能正确获取数组第一个数和数组最后一个数。
- 对于对象语言,继承需求是否得满足?
数据声明错误
是否所有的变量都已声明?
默认的属性是否被正确理解?
数组和字符串的初始化是否正确?
变量是否赋予了正确的长度、类型?
初始化是否与存储类相一致?
是否有相似的变量名?
运算错误
- 是否存在不一致数据类型(如非算术变量间)的运算?
- 是否错在混合模式的运算?如浮点变量与一个整型变量做运算。
- 是否存在相同数据类型、不同字长变量间的运算?
- 目标变量的大小是否小于右边表达式结果?
- 中间结果是否上溢或下溢? 也就是说,最终的结果看起来是个有效值,但中间结果对于编程语言的数据类型可能过大或者过小。
- 是否存在被0除?
- 是否存在二进制的不精确度?
- 变量的值是否超过了有意义的范围?
- 操作符的优先顺序是否被正确理解?
- 整数运算是否有使用不当
比较错误
- 是否存在不同类型变量间的比较?例如字符串与日期相比较。
- 是否存在混合模式的比较运算,或不同长度的变量的比较运算?例如整型和浮点型相加减。
- 比较运算符是否正确?”至多“、”至少“、”大于“、"小于"、”等于”等比较关系
- 布尔表达式所叙述的内容是否正确?涉及到“与”、“或”、”非“的表达式
- 比较运算是否与布尔表达式相混合?例如判断a、b、c是否相等,在数学判断方法:a== b == c,而在编写实际是 (a== b )&&( b ==c)
- 是否存在二进制小数的比较?
- 操作符的优先顺序是否被正确理解?
- 区分&和&&区别。
控制流程错误
- 是否超出了多条分支路径?
- 是否每个循环都终止了?
- 是否某个程序都终止了?
- 是否存在有入口条件不满足而跳过循环体?
- 可能的循环越界是否正确?
- 是否存在“仅差一个”的迭代错误?迭代数量恰恰多一次或少一次?
- 在语句组或代码块的括号位置是否正确。
- 是否存在不能穷尽的判断?
接口错误
- 形参的数量是否等于实参的数量?
- 形参的属性是否与实参的属性相匹配?
- 传递给被调用模块的实参个数是否等于其形参个数?
- 调用内置函数,实参的数量、属性、顺序是否正确?
输入/输出错误
- 文件属性是否正确?
- OPEN语句是否正确?
- I/O语句是否符合格式规范?
- 缓冲大小与记录大小是否匹配?
- 文件在使用前是否打开?
- 文件在使用后是否关闭?
- 文件结束条件是否别正确处理?
- 是否处理I/O错误?
其他检查
- 在交叉引用列表中是否存在未引用过的变量。
- 属性列表是否与预期的相一致?
- 是否存在“警告”或“提示“信息?
- 是否对输入的合法性进行了检查?
结语
文中列出常见检查清单,列出共性问题,读者把自己使用编程语言中特有错误加入到列表中,日后不断完善。