一、学习目的与要求
本章主要介绍了白盒测试技术的概念和常见的白盒测试用例设计技术,通过本
章的学习,应理解白盒测试的概念,了解白盒测试和调试的异同,掌握各种白盒测试技术方法及其特点和适应情况。
二、考核知识点与考核目标
(一)白盒测试概述(次重点)
- 理解:白盒测试的含义
- 定义:一种用于检查代码是否按照预期工作的验证技术,又称结构测试、逻辑驱动测试、基于程序的测试。
- 特点:针对被测程序的源代码,不需要考虑功能。
- 理解:白盒测试的分类
- 单元测试:对一组相关组件或单元的独立测试,大约有65%的缺陷在此发现。
- 集成测试:对集成到一起的软件组件和硬件组件进行的测试,用于评估这些组件间能否进行正确的交互。
- 回归测试:是一种具有选择性的对系统或组件的重复测试,用来验证软件的修改没有带来不良影响,系统或组件仍符合特定需求。
- 理解:白盒测试与调试的异同
- 承担任务不同:白盒测试是发现所开发的项目中的缺陷,调试是纠正软件缺陷。
- 结果不同:白盒测试有预知结果,调试的结果是消除错误。
- 执行过程不同:测试有发现错误迹象,无错误定位,不需要错误原因,调试是确定错误位置和修改错误。
- 准备工作不同:测试有已知条件,调试没有。
- 执行计划不同:测试有计划,调试无计划。
- 执行人员不同:测试由测试人员,调试必须由程序员。
- 工具不同:调试由调试器支持,测试由工具支持。
- 目的相同:让被测应用可以安全的运行,保证软件质量。
(二)白盒测试用例设计技术(重点)
- 应用:逻辑覆盖测试(语句覆盖、判定覆盖、条件覆盖、路径覆盖)
1. 语句覆盖:使程序中的每个可执行语句至少执行一次,是较弱的覆盖原则。
2. 判定覆盖:使程序中每个判断的取真分支和取假分支的情况至少经历一次,又称分支覆盖,无法确定判断内部条件错误。
3. 条件覆盖:使每个判断中的每个条件可能取值至少满足一次。
4. 判定-条件覆盖:使判断中每个条件的所有可能至少出现一次,且每个判断本身的判定结果也至少出现一次。
5. 路径覆盖:覆盖程序中所有可能的路径。
- 应用:边界值分析是设计白盒测试用例的策略
- 应用:基本路径测试
- 环形复杂度:为程序逻辑复杂性提供定量测度的软件度量
a. 环形复杂性=控制流图区域的数量;
b. 环形复杂度=控制流图边数-控制流图节点数+2,V(G)=E-N+2;
c. 环形复杂度=控制流图判定节点数+1,V(G)=P+1。
- 应用:循环语句测试
- 简单循环:n是允许通过循环的最大次数。
- 嵌套循环:从最内侧循环开始,逐步外推。
- 串接循环:第一个循环是第二个循环的初始值,且不独立。
- 无结构循环:无法测试。
三、习题
- 以下关于白盒测试的叙述中,不正确的是( )。
A. 白盒测试仅与程序的内部结构有关,完全可以不考虑程序的功能要求
B. 逻辑覆盖法是一种常用的白盒测试方法
C. 程序中存在很多判定和条件,不可能实现100%的条件覆盖
D. 测试基于代码,无法确定设计正确与否 - 对于逻辑表达式((a&b)||c),需要()个测试用例才能完成条件组合覆盖。A.2
B.3
C.4
D.5 - 逻辑覆盖法不包括______。
A. 分支覆盖
B. 语句覆盖
C. 需求覆盖
D. 修正条件判定覆盖 - 如果某测试用例集实现了某软件的路径覆盖,那么它一定同时实现了该软件的( )
A. 判定覆盖
B. 条件覆盖
C. 判定/条件覆盖
D. 组合覆盖 - 使用白盒测试方法时,确定测试数据的依据是指定的覆盖标准和()。
A.程序的注释
B.程序的内部逻辑
C.用户使用说明书
D.程序的需求说明 - 简述白盒测试用例的设计方法,并进行分析总结。
白盒测试用例设计方法主要有逻辑覆盖和独立路径测试。
从覆盖源程序语句的详尽程度分析,逻辑覆盖主要有以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。实际项目中,由于程序内部的逻辑存在不确定性和无穷性,尤其对于大规模复杂软件,不必采用所有的覆盖指标,而应根据实际情况选择合适的覆盖指标。
独立路径测试是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出可执行的独立路径集合,从而设计出相应的测试用例。设计出的测试用例要保证被测程序的每条可执行的独立路径至少被执行一次。独立路径测试给出了满足路径覆盖指标所需测试用例的下限,同时给出了语句覆盖的上限,它可以确保对所有相互独立的决策结果进行测试。
- 分析归纳逻辑覆盖的各种策略,并比较每种覆盖的特点,分析在怎样的情况下采用何种覆盖方式。
- 语句覆盖是选择足够多的测试数据,使被测程序中每个语句至少执行一次。语句覆盖是最弱的逻辑覆盖标准。
- 判定覆盖又叫分支覆盖,它不仅每个语句必须至少执行一次,而且每个判定表达式的每种可能的结果都应该至少执行一次。判定条件覆盖比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高。
- 条件覆盖的含义是,使判定表达式中的每个条件都取到各种可能的结果。条件覆盖通常比判定覆盖强,但是也可能有相反的情况:虽然每个条件都取到了两个不同的结果,判定表达式却始终只取一个值。
- 判定/条件覆盖的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。但有时判定/条件覆盖也并不比条件覆盖更强。
- 请下述语句按照各种覆盖方法设计测试用例。
if (a>2 && b<3 && (c>4 || d<5)){ statement; }else{ statement; }
- 针对test函数按照基本路径测试方法设计测试用例。
{
int i_temp = 0;
while (i_count>0){
if (0 == i_flag){
i_temp = i_count + 100;
break;
}else if (1 == i_f lag){
i_temp = i_temp + 10;
}else{
i_temp = i_temp + 20;
}
}
i_count--;
}
return i_temp;
}
基本路径集
path1 1-2-3-6-7-8-11-2-12
Path2 1-2-12
Path31-2-3-4-5-12
Path41-2-3-6-7-9-10-11-2-12
设计测试用例:
- 白盒测试是根据程序的内部逻辑来设计测试用例。
- 简述测试用例在软件测试中的作用。
(1)指导测试的实施;
(2)规划测试数据的准备;
(3)评估测试结果的度量基准;
(4)分析缺陷的标准;
(5)编写测试脚本的“设计规格说明书”。
- 试论述测试用例的重要性。
(1)有效性:测试用例是测试人员测试过程中的重要参考依据。不同的测试人员根据相同的测试用例所得到的输出应该是一致的,对于准确的测试用例的计划、执行和跟踪是测试的有效性的有力证明。
(2)可复用性:良好的测试用例具有重复使用的功能,使得测试过程事半功倍。测试是不可能进行穷举测试的,因此,设计良好的测试用例将大大节约时间,提高测试效率。
(3)易组织性:即使是很小的项目,也可能会有几千甚至更多的测试用例,测试用例可能在数月甚至几年的测试过程中被创建和使用,正确的测试计划会很好地组织这些测试用例并提供给测试人员或者其他项目的人参考和有效地使用。
(4)可评估性:从测试的项目管理角度来说,测试用例的通过率是检验代码质量的保证。经常说代码的质量不高或者代码的质量很好,量化的标准应该是测试用例的通过率和软件错误(bug)的数目。
(5)可管理性:测试用例也可以作为检验测试人员进度、工作量以及跟踪/管理测试人员的工作效率的因素,尤其是比较适用于对于新的测试人员的检验,从而更加合理作出测试安排和计划。
- 下列属于静态测试工具的是
A. Logiscope
B. TeamTest
C. Robot
D. WebLoad - 静态测试包括
A代码审查
B桌面检查
C调试
D走查
E跟踪漏洞 - 下列属于静态分析的有
A语法分析器
B符号执行器
C软件检视
D走读
E路径测试 - 条件覆盖的目的是()
A使每个判定的所有可能的条件取值组合至少执行一次
B使程序中的每个判定至少都获得一次"真"值和"假"值
C使程序中的每个判定中每个条件的可能值至少满足一次
D使程序中的每个可执行语句至少执行一次 - 如果某测试用例集实现了某软件的路径覆盖,那么它一定同时实现了该软件的()
A判定覆盖
B语句覆盖
C条件覆盖
D组合覆盖 - 下列不属于正式审查的方式是()
A同事审查
B公开陈述
C检验
D编码标准和规范 - 代码检查是以 _组 为单位阅读代码,它是一系列规程和错误检查技术的集合。
- 简述阶段评审与同行评审的区别
同行评审目的∶发现小规模工作产品的错误,只要是找错误;
阶段评审目的∶评审模块 阶段作品的正确性 可行性 及完整性
同行评审人数:3-7人人员必须经过同行评审会议的培训,由SQA指导
阶段评审人数:5人左右评审人必须是专家具有系统评审资格
同行评审内容∶内容小一般文档<40页,代码<500行
阶段评审内容∶内容多,主要看重点
同行评审时间∶一小部分工作产品完成
阶段评审时间:通常是设置在关键路径的时间点上。