推荐步骤
先使用黑盒测试方法来设计测试用例,然后视情况需要使用白盒测试方法来设计补充的测试用例
黑盒测试 | 白盒测试 |
---|---|
等价类划分 | 语句覆盖 |
边界值分析 | 判定覆盖 |
因果图分析 | 条件覆盖 |
错误猜测 | 判定 / 条件覆盖 |
多重条件覆盖 |
白盒测试
白盒测试关注的是测试用例执行的程度或覆盖程序逻辑结构(源代码)的程度。完全的白盒测试是将程序中的每条路径都执行到,然而对一个带有循环的程序来说,完全的路径测试并不切合实际
语句覆盖这个准则本身有很大的不足,以至于它通常没什么用
判定覆盖或分支覆盖是较强一些的逻辑覆盖准则。该准则要求必须编写足够的测试用例,使得每一个判断都至少有一个为真和为假的输出结果。也就是说,每条分支路径都必须至少遍历一次。分支或判定语句的例子中包括switch、do-while和if-else语句。
判定覆盖通常可以满足语句覆盖
判定覆盖要求每个判断都必须有“是”和”否“的结果,并且每条语句都至少执行一次。 这种情况只考虑了有两个选择的判断或分支,而针对多重判断,判定 / 分支覆盖准则将所有判断的每个可能结果都至少执行一次,以及将程序或子程序的每个入口点都至少执行一次。
下图中,两个涵盖了路径ace和abd,或涵盖了路径acd和abe的测试用例就可以满足判定覆盖的要求。
判定覆盖是一种比语句覆盖更强的准则
比判定覆盖更强一些的准则是条件覆盖。 条件覆盖要求编写足够的测试用例以确保将一个判断中的每个条件的所有可能的结果至少执行一次。
条件覆盖可能(但并不总是这样)会使判断中的各个条件都取到两个结果(真和假),而判定覆盖却做不到这一点。
例如,在相同的分支语句 DO K=0 to 50 WHILE (J+K<QUEST)中,存在一个两重分支(执行循环体或跳过循环体)。
判定覆盖,将循环从K=0执行到K=51即可
条件覆盖,需要设计一个测试用例为J+K<QUEST产生一个为假的结果
如果测试判断条件IF(A&B),条件覆盖准则将要求编写两个测试用例:A为真,B为假;A为假,B为真
判定 / 条件覆盖要求将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能的结果至少执行一次,将每个入口点都至少调用一次。
多重条件覆盖是将每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。
满足多重条件覆盖的测试用例集,同样满足判定覆盖、条件覆盖以及判定 /条件覆盖。
总的来说,对于包含每个判断只存在一种条件的程序,最简单的测试准则就是设计出足够数量的测试用例,实现:(1)将每个判断的所有结果都至少执行一次(2)将所有的程序入口都至少调用一次,以确保全部的语句都至少执行一次。
对于包含多重条件判断的程序,最简单的测试准则是设计出足够数量的测试用例,将每个判断的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。
黑盒测试
1、等价划分
特性:
1. 严格控制测试用例的增加,减少为达到“合理测试”的某些既定目标而必须设计的其他测试用例的数量
2. 它覆盖了大部分其他可能的测试用例。也就是说,它会告诉我们,使用或不使用这个特定的输入集合,哪些错误会被发现,哪些会被遗漏。
第一个特性意味着,每个测试用例都必须体现尽可能多的不同的输入情况,以使最大限度地减少测试所需的全部用例的数量
第二个特性意味着,应该尽量将程序输入范围进行划分,将其划分为有限数量的等价类,这样可以合理的假设(但是,显然不能绝对肯定)测试每个等价类的代表性数据等同于测试该类的其他任何数据。
第二个思想可以用来设计一个“令人感兴趣”的输入条件集合以供测试,而第一个思想可以随后用来设计涵盖这些状态的一个最小测试用例集。使用等价划分方法设计测试用例主要有两个步骤:
- 确定等价类
- 生成测试用例
确定等价类
确定等价类是选取每一个输入条件并将其划分为两个或更多的组。可以将其划分为有效等价类和无效等价类。
有效等价类代表对程序的有效输入,无效等价类代表其他任何可能的输入条件(即不正确的输入值)。
生成测试用例
使用等价类来生成测试用例,过程如下:
- 为每个等价类设置一个不同的编号
- 编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖(包含进去)
- 编写新的测试用例,覆盖一个且仅一个尚未被涵盖的无效等价类,直到所有的无效等价类都被测试用例所覆盖
用单个测试用例覆盖无效等价类,是因为某些特定的输入错误检查可能会屏蔽或取代其他输入错误检查
2、边界值分析
经验证明,考虑了边界条件的测试用例与其他没有考虑边界条件的测试用例相比,具有更高的测试回报率
边界条件是指输入和输出等价类中那些恰好处于边界、或超过边界、或在边界以下的状态。
边界值分析与等价划分存在两方面的不同:
- 与从等价类中挑选出任意一个元素作为代表不同,边界值分析需要选择一个或多个元素,以便等价类的每个边界都经过一次测试
- 与仅仅关注输入条件(输入空间)不同,还需要考虑从结果空间(输出等价类)设计测试用例
边界值分析和等价划分之间的重要区别是,边界值分析考察处于等价划分边界或在边界附近的状态
。。。未完