4.3 白盒测试技术
由于普及性和简单性,本节将重点介绍两种与代码相关的白盒测试技术:
• 语句测试
• 分支测试
安全关键、任务关键或高完整性环境中使用了更严格的技术,用于实现更全面的代码覆盖。白盒测试技术还能用于更高的测试级别(例如,API 测试),或使用与代码无关的覆盖(例如,神经网络测试中的神经元覆盖)。
4.3.1 语句测试和语句覆盖
在语句测试中,覆盖项是可执行语句。目的是设计测试用例,通过执行代码中的语句,直到达到可接受的覆盖率级别。覆盖率是用测试用例执行的语句数除以代码中可执行语句的总数度量,并以百分比表示。
达到 100%语句覆盖率时,能确保代码中的所有可执行语句至少已被执行过一次。需要特别注意的是,带有缺陷的每条语句将被执行到,这可能导致失效,从而证明缺陷的存在。然而,使用测试用例执行语句不能在所有的情况下都检测到缺陷。例如,可能检测不到那些与数据相关的缺陷(例如:只有当分母被设置为 0 时才会发生的除以 0 的错误)。同样,100%的语句覆盖率不能确保所有的判定逻辑都被测试过,例如,它可能执行不到代码中的所有分支。
4.3.2 分支测试和分支覆盖
在控制流图中,分支指的是两个节点之间的控制转移,它显示了源代码语句在测试对象中执行时的可能顺序。每次控制转移可以是无条件的(如直线式代码)或有条件的(如判定结果)。
在分支测试中,覆盖项是分支。目的是设计测试用例,以执行代码中的分支,直到达成可接受的覆盖率级别为止。覆盖率是用测试用例执行的分支数除以分支总数度量,并以百分比表示。
当达到 100%的分支覆盖时,代码中的所有分支,不满足条件的以及满足条件的,都被测试用例执行。条件分支通常对应于“if…then”判定中的真(true)或假(false)结果、switch/case 语句的结果,或是退出或继续执行循环的判定。然而,使用测试用例来执行分支并不能在所有情况下都检测到缺陷。例如,可能无法检测到需要执行代码中特定路径的缺陷。
分支覆盖包含语句覆盖。任何一组测试用例,如果实现了 100%的分支覆盖率,也就实现了 100%的语句覆盖率(但反之不成立)。
4.3.3 白盒测试的价值
所有白盒技术都具有的基本优点是,在测试期间考虑到整个软件实现,这有助于在软件规格说明模糊、过时或不完整时检测缺陷。相应的弱点是如果软件没有实现一个或多个需求,白盒测试可能无法检测到由此产生的遗漏缺陷。
白盒技术可用于静态测试(例如,在代码试运行期间)。白盒技术非常适合于对尚未准备好执行的代码进行评审,以及伪代码和其他可以用控制流图建模的高层逻辑或自顶向下的逻辑。
仅执行黑盒测试不能提供实际代码覆盖率的度量。白盒覆盖率的度量数据提供了客观的覆盖率度量,并提供了必要的信息,以允许生成额外的测试来提高覆盖率,从而增加对代码的信心。
原创文章,作者:iTestCat,保留所有权利,禁止转载,如若转载,请联系作者!