单元测试与软件质量第二章白盒测试

单元测试与软件质量第二章白盒测试


白盒测试的定义

白盒测试把测试对象看做一个透明的盒子,所以又称玻璃盒测试,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。

白盒测试关注的对象

源代码:直接查看源代码,查看代码的规范性,并对照函数功能查找代码的逻辑缺陷、内存管理缺陷、数据定义和使用缺陷等

程序结构:通过函数调用图、算法流程图等反映程序设计的相关图表,找到程序设计的缺陷,或评价程序的执行效率,以利于程序的结构优化

**优势:**针对性强,测试效率高,通过不同的白盒覆盖指标有助于衡量对被测对象的测试覆盖程度
在函数级别开始测试工作,缺陷修复的成本低

**局限性:**对测试人员的技术要求高,没有一定编程经验的人是无法做白盒测试的

当被测对象为功能时:白盒测试不再对源代码进行检查,此时更多的是借鉴白盒测试方法的思想,完成对业务流程的覆盖测试对应的是集成测试甚至系统测试阶段,主要由测试人员来完成测试工作

静态白盒测试

静态结构分析

基本原理

通过引入多种形式的图表(如函数调用关系图、模块控制流图等),帮助人们快速了解程序设计和结构,更好地理解源代码,以及找到程序设计缺陷和代码优化的方向

函数调用关系图

测试重点:

函数之间的调用关系是否符合要求
是否存在递归调用
函数调用层次是否太深
是否存在孤立的函数

一般原则:

优先测试根节点
优先测试叶子节点
接口数量多的节点是需要优先测试

函数控制流图

测试重点
是否存在多出口情况
是否存在孤立的语句
环复杂度是否太大
是否存在非结构化的设计

静态白盒测试是白盒测试的重要组成部分,它不需要执行程序,而是通过对比标准和规范,检查程序逻辑,直接定位缺陷
基于缺陷预防的思想,通过检查程序的各种图表定位那些具有高风险的程序代码,并承担部分代码质量度量的工作
可以更好地确保所提交的软件系统的质量

动态白盒测试

对判定的测试

语句覆盖

定义:选取足够多的测试数据,使被测试程序中每个语句至少执行一次。

为使每个语句都执行一次,
程序的执行路径应是sacbed:

测试数据:

输入 a=2, b=1, c=6

输出 a=2,b=1,c=5

判定覆盖

定义:选取足够多的测试数据,使被测试程序中不仅每个语句至少执行一次,而且每个判定的每种可能的结果都至少执行一次。

能够分别覆盖路径sacbed和sabd或
sacbd和sabed的两组测试数据,都满
足判定覆盖标准:

测试数据:

(1)a=2, b=1, c=6 (sabed)
输出a=2,b=1,c=5
(2)a=-2, b=1, c=-6( sabd)
输出a=-2,b=1,c=-5

条件覆盖

定义:选取足够多的测试数据,使被测试程序中不仅每个语句至少执行一次,而且每个判定表达式中的每个条件都取到各种可能的结果。

测试数据:

在a点:A>0, A<=0, B>0, B <= 0;
在b点:A>1, A<= 1, c>1, c<=1。
(1)a=2, B=-1, c=-2 (sabed)
输出 a=2,b=-1,c=-2
(2)a=-1, B=2, c=3 (sabed)
输出a=-1,b=2,c=6

判定/条件覆盖

定义:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的结果,而且每个判定表达式也都取到各种可能的结果。

测试数据:

(1)a=2, b=1, c=6 (sacbed)
输出 a=2,b=1,c=5
(2)a=-1, b=-2, c=-3(sabd)
输出 a=-1,b=-2,c=-5

条件组合覆盖

条件组合覆盖:选取足够多的测试数据,使得判定表达式中条件的各种可能组合都至少出现一次。
有八种可能的条件组合:

(1)a>0, b>0; (2)a>0, b <=0;
(3)a <=0, b>0; (4) a <=0, b <= 0;
(5)a>1, c>1; (6)a>1, c <=1;
(7) a <= 1, c>1;(8) a <= 1, c <=1。

测试数据:
(1)a=2, b=1, c=6 (1,5)
输出 a=2,b=1,c=5
(2)a=2, b=-1, c=-2 (2,6)
输出 a=2,b=-1,c=-2
(3)a=-1, b=2, c=3 (3,7)
输出a=-1,b=2,c=6
(4)a=-1, b=-2, c=-3 (4,8)
输出 a=-1,b=-2,c=-5

路径覆盖

定义:选取足够多的测试数据,使得程序的每条可能路径都至少执行一次(若程序图中有环,则每个环至少经过一次)。

(1)a>0, b>0; (2)a>0, b <=0;
(3)a <=0, b>0; (4) a <=0, b <= 0;
(5)a>1, c>1; (6)a>1, c <=1;
(7) a <= 1, c>1;(8) a <= 1, c <=1。

测试数据:
(1)a=2, b=1, c=6 (1,5)
输出 a=2,b=1,c=5
(2)a=2, b=-1, c=-2 ( 2,6)
输出 a=2,b=-1,c=-2
(3)a=-1, b=2, c=3 (3,7)
输出a=-1,b=2,c=6
(4)a=-1, b=-2, c=-3 ( 4,8)
输出 a=-1,b=-2,c=-5
(5)a=1,b=1,c=-3 (1,8)
输出 a=1,b=1,c=-2

循环测试

简单循环测试方法(假设有n次循环):

  • 整个跳过循环
  • 只有一次通过循环
  • 两次通过循环
  • 某个m次通过循环,m<n
  • n-1,n,n+1次通过循环

嵌套循环的测试集:

  • 把外循环设置为最小值并运行内循环所有可能情况;
  • 把外循环设置为最大值并运行内循环所有可能情况;
  • 把内循环设置为最小值并运行外循环所有可能情况;
  • 把内循环设置为最大值并运行外循环所有可能情况;
  • 把所有循环变量都设置为最小值运行
  • 把所有循环变量都设置为最大值运行

基本路径测试方法

概念:如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次就成为基本路径测试。它是在程序流程图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。

测试用例导出步骤

  1. 以设计或代码为基础,画出相应的流图。
  2. 计算结果流图的环形复杂度
  3. 确定独立路径的一个基本集。
  4. 准备测试用例,强制执行基本集中的每条路径

计算流图G的环路复杂度V(G)

V(G)= 区域个数=4

V(G)=边的条数-节点个数+2=4

V(G)=判定节点个数+1=4

发布了81 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43309286/article/details/104437018
今日推荐