3、代码审查
(1)代码的检查与走查
代码检查与代码走查是两种主要的基于人工测试的白盒测试方法。 目的:找出错误,而不是改正错误,是测试而不是调试。 优点:能够精确地定位的错误,降低调试成本。 可以成批的发现错误,而计算机测试往往是逐个发现错误并改正。
代码检查和走查是对桌面检查过程(再提交测试前由程序员阅读自己的程序的过程)的改进,与原方法相比,代码检查和走查更为有效,因为在执行过程中,除了软件的编写者还有其他人参与进来。使用这些技术能够有效的发现30%-70%的逻辑错误和编码错误
注意:代码检查、代码走查、基于计算机的测试三者是互补的
代码检查:以组为单位阅读代码,是一系列规程和错误检查技术的集合。 代码检查小组由小组主导者、代码编写者、设计人员、测试专家组成。 代码编写者组逐条语句讲解程序的逻辑结构,小组参考代码检查错误列表分析程序。 代码检查错误列表有:数据引用错误、数据声明错误、运算错误、比较错误、控制流错误、接口错误、输入/输出错误、其他错误。
代码走查的概念和代码检查的概念相似,但是代码走查小组中指定的测试人员会携带书面的测试用例来参加会议。 这些测试用例必须是结果简单数量少,在代码走查过程中,这是测试用例并不起到关键性作用,测试用例在小组成员脑袋中推演的过程,很多问题是在向程序员提问的过程中发现的,而不是有测试用例本身发现的。
桌面检查是由单人进行的代码检查或代码走查,效率低,但是比没有检查好。
(2)代码检查错误详细列表
|数据引用错误 | 数据运算错误| |–|–| | 是否有引用的变量未赋值或未初始化? | 是否存在非算术变量间的运算? | | 下标的值是否在范围之内? | 是否存在混合模式的运算?| | 是否存在非整数下标? | 是否存在不同字长变量间的运算? | |是否存在虚调用? | 目标变量的大小是否小于赋值大小? | |当使用别名时属性是否正确? | 中间结果是否上溢或下溢? | |记录和结构的属性是否匹配? | 是否存在被0除? | |是否计算位串的地址?是否传递位串参数? | 是否存在二进制的不精确度?| |基础的存储属性是否正确? | 变量的值是否超过了有意义的范围? | |跨过程的结构定义是否匹配? | 操作符的优先顺序是否被正确理解? | |索引或下标操作是否有“仅差一个”的错误? | 整数除法是否正确? |
| 数据声明错误 | 比较错误 |
|---|---|
| 是否所有的变量都已声明? | 是否存在不同类型变量间的比较? |
| 默认的属性是否被正确理解? | 是否存在混合模式的比较运算? |
| 数组和字符串的初始化是否正确? | 比较运算符是否正确? |
| 变量是否赋予了正确的长度、类型和存储类? | 布尔表达式是否正确? |
| 初始化是否与存储类相一致? | 比较运算是否与布尔表达式相混合? |
| 是否有相似的变量名? | 是否存在二进制小数的比较? |
| 操作符的优先顺序是否被正确理解? | —— |
| 编译器对布尔表达式的计算方式是否 被正确理解? | —— |
| 控制流错误 | 输入/输出错误 |
|---|---|
| 是否超出了多条分支路径? | 文件属性是否正确? |
| 是否每个循环都终止了? | OPEN语句是否正确? |
| 是否每个程序都终止了? | I/O语句是否符合格式规范? |
| 是否存在由于入口条件不满足而跳过循环体? | 缓冲大小与记录大小是否匹配? |
| 可能的循环越界是否正确? | 文件在使用前是否打开? |
| 是否存在“仅差一个”的迭代错误? | 文件在使用后是否关闭? |
| DO/END语句是否匹配? | 文件结束条件是否被正确处理? |
| 是否存在不能穷尽的判断? | 是否处理了I/O错误? |
| 输出信息中是否有文字或语法错误? | —— |
|接口错误 | 其他检查| |–|–| |形参的数量是否等于实参的数量? | 在交叉引用列表中是否存在未引用过的变量?| |形参的属性是否与实参的属性相匹配? | 属性列表是否与预期的相一致?| |形参的量纲是否与实参的量纲相匹配? | 是否存在“警告”或“提示”信息?| |传递给被调用模块的实参个数是否等于其形参个数? | 是否对输入的合法性进行了检查?| |传递给被调用模块的实参属性是否与其他形参属性匹配?|——| |传递给被调用模块的实参量纲是否与其他形参量纲匹配?|——| |调用内部函数的实参数量、属性、顺序是否正确?|——| |是否引用了当前入口点无关的形参?|——| |是否改变了某个原本仅为输入值的形参?|——| |是否引用了当前入口点无关的形参|——| |常数是否以实参形式传递过|——|
(3)代码走查
走查和代码检查很相似,但是进行的规格和使用的错误发现技术稍有不同,走查实施的过程中,走查人员对程序进行模拟,一步步演示程序是如何处理相关数据的,在模拟程序的过程中,每个走查组的成员在自己的脑海中也进行着程序逻辑的模拟,这样一来能够高效的发现程序中的错误,并且可以精确的定位这些错误。
(4)同行评审
同行评审是一种通过作者同行来确认缺陷和需要变更区域的检查方法,它涉及的范围比较广,主要分为管理评审,技术评审,文档评审和过程评审等,简而言之,同行评审的对象并不只是程序,而是软件生命周期中可能产生的各类产品,同时,同行评审的技术和方法从非正式的到最严谨的都各不相同,在评审过程中,应该先了解评审经常出现的问题有哪些,然后采取相对应的对策进行解决。