3.3.1 白盒测试
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和修改条件判断覆盖 。六种覆盖标准发现错误的能力呈由弱到强的变化:
1)语句覆盖每条语句至少执行一次。
2)判定覆盖每个判定的每个分支至少执行一次。
3)条件覆盖每个判定的每个条件应取到各种可能的值。
4)判定/条件覆盖同时满足判定覆盖条件覆盖。
5)条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
6)修改条件判断覆盖每一个判断的所有可能结果都出现过、每一个判断中所有条件的所有可能结果都出现过、每一个进入点及结束点都执行过、判断中每一个条件都可以独立的影响判断的结果
白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
白盒测试的原则:
1)一个模块中的所有独立路径至少被测试一次。
2)所有逻辑值均需测试true和false两种情况。
3)检查程序的内部数据结构,保证其结构的有效性。
4)在取值的上、下边界及可操作范围内运行所有循环。
白盒测试的优点:
1)迫使测试人员去仔细的思考软件的实现。
2)可以检测代码中的每条分支和路径。
3)揭示隐藏在代码中的错误。
4)对代码的测试比较彻底。
5)最优化。
白盒测试的缺点:
1)昂贵。
2)无法检测代码中遗漏的路径和数据敏感性错误。
3)不验证规格的正确性。
最常见的白盒测试是单元测试。
3.3.2 黑盒测试
黑盒测试,又叫功能测试。它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。
黑盒测试的目的:
1)是否有功能错误,是否有功能遗漏。
2)是否能够正确地接收输入数据并产生正确的输出结果。
3)是否有数据结构错误或外部信息访问错误。
4)是否有程序初始化和终止方面的错误。
黑盒测试的优点:
1)对于更大的代码单元来说比白盒测试效率要高。
2)测试人员不需要了解实现的细节,包括特定的编程语言。
3)测试人员和编码人员彼此独立的。
4)从用户的视角进行测试。很容易被大家理解和接受。
5)有助于暴露任何规格不一致或有歧义的问题。
6)测试用例可以在规格完成之后马上进行。
黑盒测试的缺点:
1)只有一小部分可能的输入被测试到,要测试每个可能的输入流几乎是不可能的。
2)没有清晰的和简明的规格,测试用例是很难设计的。
3)如果测试人员不被告知开发人员已经执行过的用例,在测试数据上会存在不必要的重复。
4)会有很多程序路径没有被测到。
5)不能直接针对特定的程序段,这些程序可能非常复杂
最常见的黑盒测试是系统测试。
3.3.3 白盒测试和黑盒测试的比较
白盒测试只考虑测试软件产码,它不保证完整的需求规格是否被满足。
黑盒测试只考虑测试需求规格,它不保证实现的所有部分是否被测试到。黑盒测试会发现遗漏的缺陷,指出规格的部分没有被完成。
白盒测试会发现代码方面缺陷,指出实现的部分是错误的。
白盒测试比黑盒测试的成本要高很多。它需要在测试可以被计划前产生源代码,并且旨在确定合适的数据和决定软件是否正确方面需要花费更多的工作量。建议是尽可能使用可获得的规格从黑盒测试的方法开始测试计划。白盒测试的计划应当在黑盒测试计划已经成功通过之后开始,使用已经产生的流程图和路径的判定。路径应当根据黑盒测试计划进行检测并且决定使用额外需要的测试。
一个白盒测试的失败会导致因此修改。这需要所有的黑盒测试被重复执行并且重新决定白盒测试路径。成本更低的手段是把测试过程考虑成是一个质量保证的过程而不是一个质量控制过程。早期工作产品的质量直接决定了后期测试的工作量。早期工作质量越好,那么后期测试能发现的错误越少。相应的测试和修改工作量就会减少。反正则增加。
3.3.3 灰盒测试
白盒和黑盒这两类测试是从完全不同的出发点。并且是两个完全对立点。反映了事物的两个极端。两种方法各有侧重。不能替代。但是在现代测试理念中。这两种测试往往不是决然分开的,一般在白盒测试中交叉使用黑盒测试的方法。在黑盒测试中交叉使用白盒测试的方法。灰盒测试就是这类界于白盒测试和黑盒测试之间的测试。最常见的灰盒测试是集成测试。