白盒测试
白盒测试基本技术
1.控制流图
控制流图是简化的程序流程图,突出地显示出程序的控制结构,反映控制流的转移过程。
控制流图由节点和控制流组成
2.代码覆盖率分析
白盒测试最常用的基本技术是代码覆盖率分析(Code Coverage Analysis),即设计出足够的测试用例来完成对被测试程序进行全方位的执行覆盖。它一般主要包括逻辑覆盖和路径相关的覆盖两种方法,或者说,这是从两个不同的角度来实现代码覆盖,它们之间既有联系,也有区别。
路径覆盖分析方法与逻辑覆盖法关系非常紧密,但是它们之间也是存在一些区别的。路径覆盖主要是从由于各种逻辑判定条件所形成的复杂的程序执行路径这个角度入手,来进行分析。
逻辑覆盖法
逻辑覆盖是用测试用例数据来运行被测程序,以考察对程序逻辑的覆盖程度,所以说,逻辑覆盖主要是针对程序中的由于判定条件所产生的逻辑分支结构进行测试。
典型的逻辑覆盖度量标准有以下几种:
语句覆盖SC (Statement Coverage)、判定覆盖 DC (Decision coverage)、条件覆盖CC (Condition Coverage)、条件/判定覆盖 CDC(Condition/ Decision Coverage)、多条件覆盖(条件组合覆盖) MCC(Multiple Condition Coverage)、修正条件/判定覆盖 MCDC(Multiple Condition Decision Coverage)
1)语句覆盖
语句覆盖(Statement Coverage)是一个最弱的逻辑覆盖标准。它的涵义是指通过选择足够的测试用例,使得运行这些测试用例时,被测程序的每个语句至少被执行一次。
2)判定覆盖
判定覆盖(Decision Coverage)又称为分支覆盖,判定覆盖较语句覆盖的标准稍强一些,它是指通过设计足够的测试用例,使得程序中的每一个判定至少都获得一次“真值”和“假值”的机会,或者说使得程序中的每一个分支都至少通过一次。因此判定覆盖要比语句覆盖更严格,因为如果每个分支都执行过了,则每个语句也就必然被执行过了。
3)条件覆盖
条件覆盖(Contidition Coverage)的涵义是指,对于每个判定中所包含的若干个条件,应设计足够多的测试用例,使得判定中的每个条件都至少取到一次“真值”和“假值”的机会,也就就是说,判定中的每个条件的所有可能结果至少出现一次,满足条件覆盖的语句不一定满足判定覆盖。
4)判定/条件覆盖
在较少的情况下,覆盖了条件的测试用例并不一定覆盖了分支。因此,为了解决这一矛盾,需要对条件和分支兼顾,这就是判定/条件覆盖(Decision/Contidition Coverage)。它的涵义是指,通过设计足够多的测试用例,使得运行这些测试用例时,判定中的每个条件的所有可能结果至少出现一次,并且每个判定本身的所有可能结果也至少出现一次。
达到100%判定-条件覆盖标准一定能够达到100%条件覆盖、100%判定覆盖和100%语句覆盖。