第3讲 白盒测试 1
白盒测试PPT课件

软件技术专业国家教学资源库——《软件测试》课程
3
本项目各任务的教学过程
➢ 项目概述 ➢任务一 ➢任务二 ➢任务三
软件技术专业国家教学资源库——《软件测试》课程
4
项目概述
引例
如何清理面包机?
不管内部,拿水从入口往下灌着冲洗 将面包机拆开一点点的查看有无锈迹污迹,逐个清理
白盒测试
测试者针对可见代码进行的一种测试
1
if((a+b<=c) || (a+c<=b) || (b+c<=a)){
2
printf("不能构成三角形");
3
}else{
4
if((a==b) ||(b==c)||(a==c)){
5
if((a==b)&&(b==c)){
6
printf("等边三角形");
7
}else{
8
printf("等腰三角形");
➢ 任务简介 ➢ 任务分析 ➢ 相关知识点 ➢ 任务实施 ➢ 任务小结 ➢ 拓展训练
软件技术专业国家教学资源库——《软件测试》课程
7
项目概述
待测程序说明
图形识别系统
根据输入的信息确定最终图形的种类
主要测试的程序片段---三角形问题
接受输入三个整数a、b、c,分别作为三角形的三条边,通 过程序判断这三条边是否能构成三角形?如果能构成三角形, 则判断三角形的类型(等边三角形、等腰三角形、一般三角 形)。要求输入三个整数a、b、c,必须满足以下条件: 1≤a≤200;1≤b≤200;1≤c≤200。
9
}
10
}else{
白盒测试ppt课件

控制流图: 为了更加突出控 制流的结构,需 要对程序流程图 做些简化,这种 简化了的流程图 称为控制流图。
11
控制流图
控制流图中的符号: ①节点:以标有编号的圆圈 表示,代表程序流程图中矩 形框所表示的处理、菱形表 示的分支及多选择结构点。 ②控制流线:以带箭头的直 线或弧表示,与程序流程图 中的数据流线是一致的,表 明了控制的顺序。控制流线 通常标有名字,如图中所标 的a、b、c等。
测试完成?
是
6
关闭测试任务
1,2 3,4 5 6
18
问题?
n 如果判断中的条件表达式是由一个或多个逻辑 运算符 (OR, AND, NAND, NOR) 连接的复合条件 表达式,则需要改为一系列只有单条件的嵌套的 判断。 例如:
1 if a or b 2x 3 else 4y 对应的逻辑为:
数据流分析
15
如何画控制流图
1. n 在选择或多分支结构中,分支的汇聚处应有 一个汇聚结点。
13 14
21
17
23
2. 选择的行号的代码都是出现了选择分支,循 环操作,判断等, 顺序执行的语句可以合并 。 这也是画控制流图的一般规则。
17
1
编写、修改测试用例
2
进入测试任务
3
执行测试用例
4
输入测试结果
否
5
23
控制流测试基本概念
一、基本概念 有向图 路径 完整路径 简单路径 基本路径 子路径 回路 无回路路径 连接 覆盖
24
有向图:有向图G=(V,E),V是顶点的集合,E是 有向边的集合。e=(T(e),H(e))∈E是一对有 序的邻接节点,T(e)是尾,H(e)是头。如果H(e) =T(e’),则e和e’是临界边。H(e)是T(e)的后继 节点,T(e)是H(e)的前驱节点,indegree(n)和 outdegree(n)分别是节点n的入度和出度。
《软件测试》第三章 白盒测试方法

《软件测试》第三章白盒测试方法一、填空题1、语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句。
2、判定覆盖的作用是使真假分支军被执行。
3、条件覆盖是指判定语句中的每个条件都要取真、假值各一次。
4、对于判定语句IF (a>1 AND c1、c1 AND c判断覆盖方法。
5、判定条件覆盖要求判定语句中所有条件取值的可能组合都至少出现一次。
6、在程序插桩法中,插入到程序中的代码称为探针。
二、判断题1、语句覆盖无法考虑分支组合情况。
(X )。
2、目标代码插桩需要重新编译、链接程序。
(√)。
3、语句覆盖可以测试程序中的逻辑错误。
(√)。
4、判定-条件覆盖没有考虑判定语句与条件判断的组合情况。
(X )。
5、对于源代码插桩,探针具有较好的通用性。
(√)。
三、单选题1、下列选项中,哪一项不属于逻辑覆盖?( D )。
A.语句覆盖B.条件覆盖C.判定覆盖D.判定-语句覆盖。
2、关于逻辑覆盖,下列说法中错误的是( C )。
A.语句覆盖的语句不包括空行、注释等。
B.相比于语句覆盖,判定覆盖考虑到了每个判定语句的取值情况。
C.条件覆盖考虑到了每个逻辑条件取值的所有组合情况。
— 1/2 —— 1/2 —D.在逻辑覆盖中,条件组合覆盖是覆盖率最大的测试方法。
3、关于程序插桩法,下列说法中错误的是( D )。
A.程序插桩法就是往被测程序中插入测试代码以达到测试目的的方法。
B. 程序插桩法可分为目标代码插桩法和源代码插桩。
C. 源代码插桩的程序需要重新编译、链接过程,单测试代码不参与编译、链接过程。
D. 目标代码插桩是往二进制程序中插入测试代码四、简答题1、请简述逻辑覆盖的几种方法及他们之间的区别。
答:6种。
语句覆盖(SC):设计足够多的测试用例,抄确保每条语句都被执行过。
判定覆盖(DC):设计足够多的测试用例,确保每个判定都分别取真值与假值。
条件覆盖(CC):设计足够多的测试用例,确保每个条件都分别取真值与假值。
什么是白盒测试技术,白盒测试技术主要有哪些

什么是白盒测试技术
白盒测试技术是软件测试中的一种重要方法,也称为结构化测试或透明盒测试。
与黑盒测试相对,白盒测试是在了解软件内部结构的基础上进行测试,主要关注于程序的内部逻辑、数据流和控制结构等方面,以验证软件系统内部逻辑和数据流的正确性。
白盒测试技术主要有哪些
1. 语句覆盖
语句覆盖是最基本的白盒测试技术之一,它要求执行测试案例时覆盖所有源代
码中的语句。
通过这种方式可以验证代码是否被完全执行,以及是否存在未被覆盖到的程序路径。
2. 判定覆盖
判定覆盖是一种更严格的测试技术,要求测试用例覆盖程序的所有判定条件,
包括真值和假值。
这样可以确保程序在各种条件下都有正确的响应。
3. 条件覆盖
条件覆盖要求每个判定中的所有条件都取到真值和假值,以确保程序对所有可
能的条件组合都进行了测试。
这种技术可以帮助发现与条件相关的逻辑错误。
4. 判定/条件覆盖
判定/条件覆盖结合了判定覆盖和条件覆盖的要求,要求每个判定都至少被执
行一次,并覆盖每个条件的真值和假值。
这种技术能够有效地揭示程序中的潜在问题。
5. 路径覆盖
路径覆盖是一种最为严谨的白盒测试技术,要求测试用例覆盖程序的所有可能
执行路径。
通过这种方式可以发现隐藏在程序内部的逻辑错误和潜在的缺陷。
总的来说,白盒测试技术主要包括语句覆盖、判定覆盖、条件覆盖、判定/条
件覆盖和路径覆盖等几种常见的方法。
在实际的软件测试工作中,根据具体的需求和项目情况选择合适的白盒测试技术进行测试,能够有效地提高软件质量和可靠性。
第3章白盒测试技术

函数调用关系图
• 通过应用程序各函数之间的调用关系展示 了系统的结构。列出所有函数,用连线表 示调用关系。 • 通过函数调用关系图:
– 可以检查函数的调用关系是否正确 – 是否存在孤立的函数而没有被调用 – 明确函数被调用的频繁度,对调用频繁的函数 可以重点检查
模块控制流图
• 模块控制流图是与程序流程图类似的有许 多节点和连接节点的边组成的一种图形, 其中一个节点代表一条语句或数条语句, 边表示节点间的控制流向,它显示了一个 函数的内部逻辑结构 • 模块控制流图可以直观的反映出一个函数 的内部逻辑结构,通过检查这些模块的控 制流图,能够很快发现软件的错误与缺陷。
逻辑覆盖法
• 逻辑覆盖是通过对程序逻辑结构的遍历实现程序 的覆盖。它是一系列测试过程的总称,这组测试 过程逐渐进行越来越完整的通路测试。 • 从覆盖源程序语句的详尽程度分析,逻辑覆盖标 准包括:
– – – – – – 语句覆盖 判定覆盖 条件覆盖 条件判定组合覆盖 多条件覆盖 修正条件判定覆盖
示例程序
3.3 动态测试技术
• 白盒测试的动态测试应该根据程序的控制结构设计测试用例,原则是:
– – – – 保证模块中每一独立的路径至少执行一次; 保证所有判断的每一分枝至少执行一次; 保证每一循环都在边界条件和一般条件下至少各执行一次; 验证所有内部数据结构的有效性。
• 对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数 字.而且即使精确地实现了白盒测试,也不能断言测试过的程序完全正 确. • 比如包括了一个执行达20次的循环的程序,它所包含的不同执行路径 数高达520条,假使有这么一个测试程序,对每一条路径进行测试需要 1ms,假设一天工作 24小时,一年工作365天,若要对它进行穷举测试,也 需要3024年的时间. • 为了节省时间和资源,就必须精心设计测试用例,从数量巨大的可用 测试用例中挑选少量的、优秀的测试数据,使用这些测试数据能够达 到最佳的测试效果 • 其中,逻辑覆盖法和基本路径测试法是常用的两种白盒测试用例测试 方法。
第三部分白盒测试-Read

§3
路经分析
例:求最小值
k = i; for ( j = i+1; j <= n; j++ ) if ( A[j] < A[k] ) then k = j;
a j<=n b c
e k=j j++
测试用例选择
循环 0 1 2 i n A[i] 1 1 1 2 1 2 1 3 1 2 3 3 A[i+1] 2 1 2 3 2 1 A[i+2] k i i i+1 i i+2 i+2 i+1 路 径 ac abefc abdfc abefefc abefdfc abdfdfc abdfefc
§3
路经分析
着眼于路径分析的测试为路径测试; 完成路经测试的理想情况时做到路径覆盖; 一、路径表达式和路径数 可用弧序列或节点序列表示某一条具体路 径。给出路径通式时用弧序列表示。 1、路径表达式 路径表达式有两个运算符:相乘和相加
§3
路经分析
(1)弧a和弧b相乘,表示为ab,它表明 路径是实现经历弧a接着再经历弧b,弧a和 弧b是先后相继的。 (2)弧a和弧b相加,表示为a+b,它表明 弧a和弧b是并立的(或的关系),即两条 路径是并行关系。 举例:pg53
§3
路经分析
可如下设计一组测试用例数据,如5个数,分别 是:12,21,158,160,-999 期望结果是: 平均值:-999 总和:0 有效值个数:0 输入I个值,I大于2, 通用的测试用例表示: 小于100。最后一 任何Value(k)都为无效输入,k<I 个值value(I)为 Value(i)=-999,2<=I<=100 999,I个值中没有
第3章__白盒测试概要
语句覆盖准则 分支覆盖准则 谓词测试
原子谓词覆盖准则(条件覆盖)
分支-谓词覆盖准则(分支—条件覆盖) 复合谓词覆盖准则(组合条件覆盖)
路径覆盖准则
3.1 控制流覆盖准则
1 语句覆盖准侧
语句覆盖是指设计若干个测试用例,程序运行时每个可执行语句 至少被执行一次。在保证完成要求的情况下,测试用例的数目越少越好。 在控制流图中,要求所有的语句都被运行的充分必要条件是覆盖 图中的所有节点。 语句测试的充分标准(语句覆盖标准)可以定义为:
|| NODE(L r ) || || N G ||
例3.2 求解一元二次方程程序的测试问题
main() 开始 { float a,b,c,x1,x2,mid; scanf(“%f,%f,%f”,&a,&b,&c); if(a!=0) 输入a,b,c { mid=b*b-4*a*c; no if(mid>0) a!=0 { x1=(-b+sqrt(mid))/(2*a); yes x2=(-b+sqrt(mid))/(2*a); mid=b*b-4*a*c printf(“两不等实根:”); no yes } mid>0 else no yes 计算并输出两不等实根 { if(mid==0) Mid==0 { x1=-/(2*a); x2=x1; 计算并输出两复根 计算并输出两等实根 printf(“两等实根:”); } else {x1=-b/(2*a); x2=sqrt(-mid)/(2*a); 输出具体数值 printf(“两复根:”); } 结束 } printf(“x1=%f,x2=%f\n”,x1,x2); }
开始 输入x,y
x>0 && y>0
《白盒测试法》课件
优点
代码覆盖率高
白盒测试法能够深入到代码的 逻辑结构中,对代码进行详细 的覆盖,从而确保测试的全面
性。
测试质量高
由于白盒测试法能够深入了解 代码逻辑,因此能够发现更深 层次的代码错误和缺陷,提高 测试质量。
可针对需求定制
白盒测试法可以根据具体的软 件需求和设计进行定制化的测 试,从而更好地满足测试需求 。
04
白盒测试法的工具
JUnit
JUnit是一个Java语言的单元测试框架,用于编写和执行测试用例,验证代码的正确 性和可靠性。
JUnit提供了一系列的注解和断言方法,方便开发者编写测试代码,并且支持测试套 件和测试运行器的概念,可以方便地组织和管理多个测试用例。
JUnit还支持参数化测试和测试模板,提高了测试的灵活性和可维护性。
02
白盒测试法通常在软件开发过程 中,特别是在编码阶段进行,以 便在早期发现和修复潜在的错误 和缺陷。
白盒测试法的目的
01
02
03
验证代码的正确性
白盒测试法通过检查代码 的逻辑和结构,验证代码 是否符合设计要求,是否 能够正确实现功能。
提高代码质量
通过白盒测试,可以发现 代码中的缺陷和错误,并 及时修复,从而提高代码 的质量和稳定性。
《白盒测试法》ppt课件
目 录
• 白盒测试法简介 • 白盒测试法的主要技术 • 白盒测试法的实施步骤 • 白盒测试法的工具 • 白盒测试法的优缺点 • 白盒测试法的案例分析
01
白盒测试法简介
白盒测试法的定义
01
白盒测试法是一种软件测试方法 ,它要求测试人员对被测软件的 内部结构和工作原理有深入的了 解。
测试到。
循环覆盖
白盒测试及测试案例设计已经看.pptx
第23页/共60页
条件覆盖(续)
• 说明:虽然前面的一组测试用例同时达到了条件覆盖和
判定覆盖,但是,并不是说满足条件覆盖就一定能满足
判定覆盖。如果设计了下表中的这组测试用例,则虽然
满足了条件覆盖,但只是覆盖了程序中第一个判定的取
假分支c 和第二个判定的取真分支d,不满足判定覆盖
的要求。
测试用例
执行路径 覆盖条件 覆盖分支
4.2.1 控制流图 4.2.2 环形复杂度 4.2.3 图矩阵
Return
第5页/共60页
4.2.1 控制流图
• 控制流图(可简称流图)是对程序流程图进行简化后得 到的,它可以更加突出的表示程序控制流的结构。
• 控制流图中包括两种图形符号:节点和控制流线。
➢节点由带标号的圆圈表示,可代表一个或多个语句、一 个处理框序列和一个条件判定框(假设不包含复合条 件)。
Return
第12页/共60页
4.3.1 测试覆盖率
• 测试覆盖率:用于确定测试所执行到的覆盖项的百分比。 其中的覆盖项是指作为测试基础的一个入口或属性,比 如语句、分支、条件等。
• 测试覆盖率可以表示出测试的充分性,在测试分析报告 中可以作为量化指标的依据,测试覆盖率越高效果越好。 但覆盖率不是目标,只是一种手段。
➢控制流线由带箭头的弧或线表示,可称为边。它代表程
序中的控制流。
常见结构的控制流图
• 对于复合条件,则可将其分解为多个单个条件,并映射 成控制流图。
第6页/共60页
4.2.2 环形复杂度
• 环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂 度提供定量尺度的软件度量。
• 环形复杂度的应用——可以将环形复杂度用于基本路 径方法,它可以提供:程序基本集的独立路径数量;确 保所有语句至少执行一次的测试数量的上界。
第3章 白盒测试、黑盒测试
1.3 设计测试用例的着眼点
根据产品规格,测试基本功能; 考虑设计一般用户(非专业人员)的使用方案; 考虑设计稀有或特殊的使用方案; 与系统其他组成部分的配合(如FAX和上网可能要用到 MODEM,测试中考虑对设备的共享); 考虑特殊情况(如内存和硬件的冲突等); 设计极端情况(如内存泄漏、破坏性测试等); 好的测试用例集能花费最小的代价(人力、物力、财力、 时间)做最好的测试。
3
1.2 设计测试用例的基本准则
测试用例的代表性
能够代表并覆盖各种合理的和不合理的、合法的和非法 的、边界的和越界的以及极限的输入数据、操作和环境 设置等。 测试结果的可判定性 即测试执行结果的正确性是可判定的,每一个测试用例 都应有相应的期望结果。 测试结果的可再现性 即对同样的测试用例,系统的执行结果应当是相同的。
软件测试方法和技术
- Ch.3测试基本方法—白盒测试与黑盒测试
杨晓花
计算机工程系
1
第三章 软件测试的基本方法
1 测试用例设计概述 2 白盒测试 3 黑盒测试
2
1.1 测试用例的定义和特征
测试用例的定义: (1)测试用例是为特定的目的而设计的一组测试输 入、 执行条件和预期的结果。
(2)测试用例是执行的最小实体。 测试用例的特征: (1)最有可能抓住错误的; (2)不是重复的、多余的; (3)一组相似测试用例中最有效的; (4)既不是太简单,也不是太复杂。
F
结果 路 测试用例 径 (A,B,C) 1 A=3,B=4,C=5 A=3,B=4,C=5 2 A=5,B=8,C=2 不能构成三角形
T ② 输出ABC ④
③ 不能构成三角形