白盒测试
1. 白盒测试定义
测试软件的内部编码和基础设施,重点是根据预期和期望的输出检查预定义的输入。它基于应用程序的内部工作方式,并围绕内部结构测试。在这种类型的测试中,编程测试用例需要编程技巧。白盒测试的主要目标是通过软件关注输入和输出流,并加强软件的安全性。
2. 白盒测试的通用步骤
- 设计所有测试场景,测试用例并根据高优先级编号对其进行优先级排序。
- 此步骤涉及在运行时研究代码以检查资源利用率,而不是访问代码区域,各种方法和操作所花费的时间等。
- 在此步骤中,将对内部子例程进行测试。内部子例程(如非公共方法,接口)能够适当地处理所有类型的数据。
- 此步骤侧重于测试控制语句(如循环和条件语句),以检查不同数据输入的效率和准确性。
- 在最后一步中,白盒测试包括安全测试,通过查看代码如何处理安全性来检查所有可能的安全漏洞。
3. 白盒测试的原因
- 它识别内部安全漏洞。
- 检查代码中的输入方式。
- 检查条件循环的功能。
- 在单个级别测试函数,对象和语句。
4. 白盒测试的优点
- 白盒测试可以优化代码,从而可以识别隐藏的错误。
- 白盒测试的测试用例可以轻松实现自动化。
- 此测试比其他测试方法更全面,因为它涵盖了所有代码路径。
- 即使没有GUI,它也可以在SDLC阶段启动。
5. 白盒测试的缺点
- 在大规模编程应用程序中,白盒测试耗费太多时间。
- 白盒测试非常昂贵且复杂。
- 它可能导致生产错误,因为开发人员没有详细说明。
- 白盒测试需要具备编程语言和实现的详细知识和理解的专业程序员。
6. 白盒测试技术
1. 数据流测试
数据流测试用于分析程序中的数据流。它是收集有关变量如何在程序中流动数据的过程。它试图获得过程中每个特定点的特定信息。
数据流测试是一组测试策略,用于检查程序的控制流程,以便根据事件的顺序探索变量的顺序。它主要关注分配给变量的值和通过集中在两个点上使用这些值的点,可以测试数据流。
数据流测试使用控制流图来检测可能中断数据流的不合逻辑的事物。由于以下原因,在值和变量之间的关联时检测到数据流中的异常:
- 如果使用变量而没有初始化。
- 如果初始化变量至少未使用一次。
2. 控制流程测试
该技术的目的是通过控制结构确定语句或程序指令的执行顺序。程序的控制结构用于开发程序的测试用例。在该技术中,测试者选择大程序的特定部分来设置测试路径。它主要用于单元测试。测试用例由程序的控制图表示。
控制流图由节点,边缘,决策节点,结节点形成,以指定所有可能的执行路径。
用于控制流图的符号
- 节点
- 边缘
- 决策节点
- 连接节点
1.节点
控制流程图中的节点用于创建过程路径。它代表了接下来程序的程序顺序,测试人员可以确定程序的发生顺序。
我们在下面的示例中可以看到第一个节点表示启动过程,下一个过程是在赋值后分配n的值,如果是18或更大的值,则根据n的值确定过程的下一个节点的决策节点 如果小于18不符合条件的程序执行,那么它是合理的,程序将以其他方式执行。下一个节点是结节点,最后一个节点是停止节点以停止该过程。
2.边缘
控制流图中的边用于链接节点的方向。在下面的示例中可以看到,所有箭头都用于在适当的方向上链接节点。
3.决策节点
控制流程图中的决策节点用于根据值确定过程的下一个节点。可以在下面的示例中看到决策节点根据n的值确定过程的下一个节点,如果它是18或大于18,那么如果小于18,则合格的过程将执行,否则执行不合格的过程。
3. 分支覆盖测试
分支覆盖技术用于覆盖控制流图的所有分支。它至少涵盖决策点的每个条件的所有可能结果(真和假)。分支覆盖技术是一种白盒测试技术,可确保每个决策点的每个分支都必须执行。
然而,分支覆盖技术和决策覆盖技术非常相似,但两者之间存在关键差异。决策覆盖技术涵盖每个决策点的所有分支,而分支测试涵盖代码的每个决策点的所有分支。
换句话说,分支覆盖遵循决策点和分支覆盖边缘。许多不同的指标可用于查找分支覆盖范围和决策覆盖范围,但一些最基本的指标是:在程序执行期间查找程序的百分比和执行路径。
与决策覆盖一样,它也使用控制流图来计算分支数。
4. 语句覆盖测试
语句覆盖测试 :指的是制定足够多的软件测试用例 ,使得软件中的每一个代码语句至少都能被执行一次 的软件测试方法。这是一种效果较差的逻辑驱动覆盖测试方法。
以上述的代码块为例,当使用测试输入数据为 "a = 2,b = 0,x = 4" 作为测试用例时,程序中的所有语句恰好都可以被执行一次 ,软件的预期输出为 "x = 3" 。在流程图中,本次测试工作的程序执行路径如下图的红色线条所示:
可以看到,语句覆盖测试虽然可以覆盖软件中的所有代码语句,但是无法覆盖到所有的代码分支 ,图中蓝色线条 分支是未被测试到的。此时,如果软件代码中存在 "误将 AND 条件写为了 OR" 或 "误将 x > 1 写为了 x >= 1" 一类的分支语句错误的话,是无法被语句覆盖测试所发现 的。这也是认为 "语句覆盖测试是一种效果较差的测试方法" 的原因之一。
5. 条件组合覆盖测试
条件组合覆盖 :指的是制定足够多的软件测试用例,使得软件中的所有条件的各种组合都能被至少执行一次 的软件测试方法。这是效果最强 但仍不完美的逻辑驱动覆盖测试方法。
以上述的代码块为例,可以将程序中的每个判定条件都进行拆分,绘制为下方新的流程图:
软件测试工程师可以制定足够多的软件测试用例,使得软件中的所有条件的各种组合都能被至少执行一次(此处不再展示测试用例)。对比上述其他四种逻辑驱动覆盖测试方法的特点,可以发现:条件组合覆盖也是不完美的。但是,条件组合覆盖测试方法足以应对绝大多数的情况,没有必要再设计更加详细的逻辑驱动覆盖测试方法,到此为止即可。
示测试用例)。对比上述其他四种逻辑驱动覆盖测试方法的特点,可以发现:条件组合覆盖也是不完美的。但是,条件组合覆盖测试方法足以应对绝大多数的情况,没有必要再设计更加详细的逻辑驱动覆盖测试方法,到此为止即可。
在实际的软件测试工作中,通常不必直接使用条件组合覆盖测试方法 ,因为会大幅度的增加测试工程师的工作量。一般情况下,大多数的软件测试工作只需使用语句覆盖 与判定覆盖这两种逻辑驱动覆盖测试方法。