测试基础-动态白盒测试

1.动态白盒测试

定义:也称结构化测试。利用查看代码功能(作什么)和实现方式(怎么做)得到的信息来确定哪些需要测试、哪些不需要测试、如何开展测试。
动态白盒测试包括以下4个部分:

  • 直接测试底层函数、过程、子程序和库。
  • 以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试用例。
  • 从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行。
  • 估算执行测试时“命中”的代码量和具体代码,然后调整测试,去掉多余的测试用例,补充遗漏的用例。

2.动态白盒测试和调试的区别

动态白盒测试:寻找软件缺陷;
调试:修复缺陷。

3.分段测试

从测试的角度看,产生高额费用有如下两个原因:

  • 难以有时甚至不可能找出导致问题的原因;
  • 某些软件缺陷掩盖了其它软件缺陷。

3.1 单元测试和集成测试

在底层进行测试称为单元测试或模块测试;单元经过测试,底层软件缺陷被找出并修复之后,就集成在一起进行集成测试。
这种递增测试有两条途径:自底向上和自顶向下。
自底向上:编写测试驱动模块发送测试用例数据,接受返回结果,验证是否正确。如图所示:
测试基础-动态白盒测试
自顶向下:测试一个温度显示模块,编写一小段称为的代码充当接口模块,把温度值直接提供给显示模块。如下图所示:测试完温度显示模块后,再去测试温度计接口模块。
测试基础-动态白盒测试

3.2 单元测试示例

4.数据覆盖

4.1 数据流覆盖

数据流覆盖主要指在软件中完全跟踪一批数据。在单元测试级,数据仅仅通过了一个模块或者函数。同样的跟踪方式可以用于多个集成模块,甚至整个软件产品。
如果在底层测试函数,就会使用调试器观察变量在程序运行时的数据,可以检查变量的中间值。

4.2 次边界

次边界先前的内容讨论过,如果进行白盒测试,就需要仔细检查代码,找到次边界条件,并建立能测试它们的测试用例。

4.3 公式和等式

查看公式使用的变量,在程序正常输入和输出之外,为其建立测试用例和等价划分。

4.4 错误强制

如果执行在调试器中测试的程序,不仅能够观察到变量的值,还可以强制改变变量的值。于是软件不得不处理一些非常规数值或者报告处理不了。

5.代码覆盖

与黑盒测试一样,测试数据只是一半工作。为了全面地覆盖,还必须测试程序的状态以及程序流程。必须设法进入和退出每一个模块,执行每一行代码,进入软件的每一条逻辑和决策分支。这种类型的测试叫做代码覆盖
专业工具:代码覆盖率分析器,可以获得指示软件哪些部分被执行,哪些部分未被执行的统计结果。

5.1 程序语句覆盖(代码行覆盖)

目标是保证程序中每一条语句最少运行一次。

5.2 分支覆盖

试图覆盖软件中所有的执行路径的方法。

5.3 条件覆盖

将分支语句的条件考虑在内,设计满足不同条件的测试用例。