测试基础:带上X光眼睛测试软件
动态白盒测试
动态白盒测试是指利用查看代码功能和实现方式得到的信息来确定哪些需要测试、哪些不要测试、如何开展测试。动态白盒测试的另一个常用名称是结构化测试,因为软件测试员可以查看并使用代码的内部结构从而设计和执行测试。
动态白盒测试不仅仅是查看代码的运行情况,还包括直接测试和控制软件。动态白盒测试包括以下4个部分:
1.直接测试底层函数、过程、子程序和库。在Microsoft Windows中这称为应用程序编程接口(API)。
2.以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试用例。
3.从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行。
4.估算执行测试时“命中”的代码量和具体代码,然后调整测试,去掉多余地测试用例,补充遗漏的用例。
动态白盒测试和调试
一定不要把动态白盒测试和调试弄混了。做过编程的人可能会花费大量时间调试自己编写的代码。这两项技术表面上很相似,因为它们都包含处理软件缺陷和查看代价的过程,但是它们的目标大不相同。
动态白盒测试和测试
动态白盒测试的目标是寻找软件缺陷,调试的目标是修复缺陷。然而,它们在隔离软件缺陷的位置和原因上确实存在交叉现象。
软件测试员应该把问题缩减为能够演示软件缺陷的最简化测试用例。如果是白盒测试,甚至还要包括那些值得怀疑的代码行信息。
分段测试
单元测试和集成测试
在底层进行的测试称为单元测试或者模块测试。单元经过测试,底层软件缺陷被找出并修复之后,就集成在一起,对模块的组合进行集成测试。这个不断增加的测试过程继续进行,进行越来越多的软件片段,直至整个产品——至少是产品的主要部分——在称为系统测试的过程中一起测试。
采取这种策略很容易隔离软件缺陷。在单元级发现问题时,问题肯定就在那个单元中。如果在多个单元集成时发现软件缺陷,那么它一定与模块之间的交互有关。当然也有例外,但是总的说来,测试和调试比一起测试所有内容要有效得多。
这种递增测试有两条途径:自底向上和自顶向下。
在自底向上测试中,要编写称为测试驱动的模块调用正在测试的模块。测试驱动模块以和将来真正模块同样的方式挂接,向处于测试的模块发送测试用例数据,接受返回结果,验证结果是否正确。采取这种方式,可以对整个软件进行非常全面的测试,为它提供全部类型和数量的数据,甚至高层难以发送的数据。
自顶向下测试有点像小规模的大爆炸测试。毕竟,如果更高层软件已经完成,测试其下层的模块就一定太晚了,其实并不完全正确。在下图中,底层接口模块用于从电子温度计采集温度数据。显示模块正好在此接口模块的上面,从该接口读取数据,向用户显示结果。为了测试高层显示模块,就需要借助火把、水、冰和深度的冰冻来改变传感器的温度,并将数据传递到导线上。
数据覆盖
数据包括所有的变量、常量、数组、数据结构、键盘和鼠标输入、文件、文件、屏幕输入/输出,以及调制解调器、网络等其他设备的输入输出。
数据流
数据流覆盖主要是指在软件中完全跟踪一批数据。
次边界
公式和等式
错误强制
代码覆盖
与黑盒测试一样,测试数据只是一半工作。为了全面地覆盖,还必须测试程序的状态以及程序流程,必须设法进入和退出每一个模块,执行每一行代码,进入软件每一天逻辑和决策分支。这种类型的测试叫做代码覆盖测试。
代码覆盖测试是一种动态白盒测试,因为它要求通过完全访问代码以查看运行测试用例时经过了哪些部分。
代码覆盖测试最简单的形式是利用编译环境的调试器通过单步执行程序查看代码。
对于小程序或者单独模块,使用调试器一般就足够了。然而,对大多数程序进行代码覆盖测试要用到称为代码覆盖率分析器的专用工具。