白盒测试-基本路径测试习题

合集下载

白盒测试的基本路径测试法

白盒测试的基本路径测试法

白盒测试的基本路径测试法一、白盒测试的主要测试方法1、代码检查法2、静态结构分析法3、静态质量度量法4、逻辑覆盖法5、基本路径测试法(应用最广泛)6、域测试7、符号测试8、Z路径覆盖9、程序变异二、基本路径测试法1、定义:基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。

设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。

2、基本路径测试法的基本步骤1) 程序的控制流图:描述程序控制流的一种图示方法。

2)程序圈复杂度:McCabe复杂性度量。

从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。

3) 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果.4) 准备测试用例:确保基本路径集中的每一条路径的执行.3、基本路径测试法的工具方法1)图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。

三、程序的控制流图控制流程图是描述程序控制流的一种图示方法。

圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句流图只有二种图形符号:图中的每一个圆称为流图的结点,代表一条或多条语句。

流图中的箭头称为边或连接,代表控制流。

任何过程设计都要被翻译成控制流图。

1、根据程序流程图化成控制流图在将程序流程图简化成控制流图时,应注意:1)在选择或多分支结构中,分支的汇聚处应有一个汇聚结点.2)边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。

如下页图所示:如果判断中的条件表达式是由一个或多个逻辑运算符(OR,AND, NAND,NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。

例如:1 if a or b2 x3 else4 y对应的逻辑为:独立路径:至少沿一条新的边移动的路径2、实例说明基本路径测试法的步骤:第一步:画出控制流图流程图用来描述程序控制结构。

软通动力软件测试面试题[试题]

软通动力软件测试面试题[试题]

软通动力软件测试面试题一、软通动力面试笔答1.白箱测试和黑箱测试是什么?什么是回归测试?2.单元测试、集成测试、系统测试的侧重点是什么?单元测试的重点是系统的模块,包括子程序的正确性验证等。

集成测试的重点是模块间的衔接以及参数的传递等。

系统测试的重点是整个系统的运行以及与其他软件的兼容性。

3.设计用例的方法、依据有那些?白盒测试用例设计有如下方法:基本路径测试\等价类划分\边界值分析\覆盖测试\循环测试\数据流测试\程序插桩测试\变异测试.这时候依据就是详细设计说明书及其代码结构吧;黑盒测试用例设计方法:基于用户需求的测试\功能图分析方法\等价类划分方法\边界值分析方法\错误推测方法\因果图方法\判定表驱动分析方法\正交实验设计方法.依据是用户需求规格说明书,详细设计说明书4.一个测试工程师应具备那些素质和技能?掌握基本的测试基础理论本着找出软件存在的问题的态度进行测试,即客观吧,不要以挑刺形象出现可熟练阅读需求规格说明书等文档以用户的观点看待问题有着强烈的质量意识细心和责任心良好的有效的沟通方式(与开发人员及客户)具有以往的测试经验能够及时准确地判断出高危险区在何处.5.集成测试通常都有那些策略?大爆炸集成;自顶向下集成;自底向上集成;三明治集成;分层集成;基干集成;基于功能的集成;基于消息的集成;基于风险的集成;基于进度的集成.6.你用过的测试工具的主要功能、性能及其他?7.一个缺陷测试报告的组成?缺陷跟踪报告:编号,如:ut-dt00016标题,如:文字排版功能.字间距.MarchCalculator计算错误版本号,如:V1.3执行状态,如:空白/草稿/提交/审批/分发/正在修改/修改完毕/正在确认/关闭…修改记录,如:2003年7月2日;肖睿编制/修改;原因测试环境和版本号码、程序编写人员错误严重程度和优先级别错误详细描述重现步骤和方式、对应的测试记录编码附件建议修改方式修改内容、结果及修改人员签字/日期8.基于WEB信息管理系统测试时应考虑的因素有哪些?1)功能测试① 链接测试② 表单测试③ Cookies测试④ 设计语言测试⑤数据库测试2)性能测试① 连接速度测试② 负载测试③ 压力测试3)可用性测试① 导航测试② 图形测试③ 内容测试④ 整体界面测试4)客户端兼容性测试① 平台测试②浏览器测试5)安全性测试9.软件本地化测试比功能测试都有哪些方面需要注意?10.软件测试项目从什么时候开始,?为什么?软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.11.需求测试注意事项有哪些?一个良好的需求应当具有以下特点:● 完整性:每一项需求都必须将所要实现的功能描述清楚,以使开发人员获得设计和实现这些功能所需的所有必要信息。

白盒测试-基本路径法

白盒测试-基本路径法

⽩盒测试-基本路径法⼀、定义基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执⾏路径集合,从⽽设计测试⽤例的⽅法。

⼆、基本路径测试的步骤1)画出程序控制流图(前提是已经有了程序流程图)2)计算环路复杂度3)导出独⽴路径(可执⾏路径)4)设计测试⽤例三、认识控制流图1、描述程序控制流的⼀种图⽰⽅法,控制流图中只有2种图形符号:结点:标有编号的圆圈表⽰控制流线或边或连接:以箭头表⽰2、各种语句结构的控制流图3、认识什么是区域区域:边和结点圈定的区域叫做区域。

封闭区域+开放区域4、如果判断中的条件表达式是由⼀个或多个逻辑运算符(OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为⼀系列只有单条件的嵌套的判断。

If(a>1 and b<2){…}If(a>1){If(b<2){…}}(a)流程图四、环形复杂度的计算有以下三种⽅法计算环形复杂度:a)流图中封闭区域的数量+1个开放区域=总的区域数=环形复杂度b)给定流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;c)给定流图G的环形复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。

五、举例1)画出程序控制流图2)计算环形复杂度a)流图中封闭区域的数量+1个开放区域=总的区域数=环形复杂度3个封闭区域+1个开放区域=4b)给定流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;V(G)=E-N+2=11-9+2=4c)给定流图G的环形复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。

V(G)=P+1=3+1=43)导出独⽴路径注:因为环形复杂度为4,所以有四条独⽴路径PATH1:1-11PATH2:1-2-3-4-5-10-1-11PATH3:1-2-3-6-7-9-10-1-11PATH4:1-2-3-6-8-9-10-1-114)设计测试⽤例(略)。

白盒测试及例题

白盒测试及例题

基本路径测试
• 前提条件 测试进入的前提条件是在测试人员 已经对被测试对象有了一定的了解,基 本上明确了被测试软件的逻辑结构。 • 测试过程 过程是通过针对程序逻辑结构设计 和加载测试用例,驱动程序执行,以对 程序路径进行测试。测试结果是分析实 际的测试结果与预期的结果是否一致。
基本路径测试
• 在程序控制流图的基础上,通过分析控制构造的环 路复杂性,导出基本可执行路径集合,从而设计测 试用例。包括以下4个步骤和一个工具方法: 1. 程序的控制流图:描述程序控制流的一种图示 方法。 2. 程序圈复杂度:McCabe复杂性度量。从程序的 环路复杂性可导出程序基本路径集合中的独立 路径条数,这是确定程序中每个可执行语句至 少执行一次所必须的测试用例数目的上界。 3. 导出测试用例:根据圈复杂度和程序结构设计 用例数据输入和预期结果。 4. 准备测试用例:确保基本路径集中的每一条路
条件组合覆盖
• 针对上述问题又提出了另一种标准——―条 件组合覆盖”。它的含义是:执行足够的 例子,使得每个判定中条件的各种可能组 合都至少出现一次。显然,满足“条件组 合覆盖”的测试用例是一定满足“分支覆 盖”、“条件覆盖”和“分支/条件覆盖” 的。
条件组合覆盖
再看例1的程序,我们需要选择适当 的例子,使得下面 8种条件组合都能 够出现:
基本路径测试
工具方法: 图形矩阵:是在基本路径测试中起辅 助作用的软件工具,利用它可以实现自 动地确定一个基本路径集。
控制流图的符号
• 在介绍基本路径方法之前,必须先介绍一种简单的 控制流表示方法,即流图。流图是对待测试程序过 程处理的一种表示。流图使用下面的符号描述逻辑 控制流,每一种结构化构成元素有一个相应的流图 符号。
• • • • 白盒测试概念 测试覆盖标准 逻辑驱动测试 基本路径测试

白盒测试基本路径法实训报告三角形

白盒测试基本路径法实训报告三角形

白盒测试基本路径法实训报告三角形本次实训我选择了使用白盒测试基本路径法对三角形程序进行测试。

1. 程序代码下面是被测试的三角形程序的代码:```#include <stdio.h>#include <stdlib.h>int triangle(int a, int b, int c){if (a <= 0 || b <= 0 || c <= 0) {return 0;}if (a + b <= c || b + c <= a || c + a <= b) {return 0;}if (a == b && b == c) {return 1;}if (a == b || b == c || c == a) {return 2;}}int main(){int a, b, c;printf("Please input the length of three sides: ");scanf("%d %d %d", &a, &b, &c);int t = triangle(a, b, c);if (t == 0) {printf("Not a triangle.");} else if (t == 1) {printf("Equilateral triangle.");} else if (t == 2) {printf("Isosceles triangle.");} else {printf("Scalene triangle.");}}```2. 基本路径设计为了得到程序的所有可能执行路径,我们首先需要构建其控制流程图。

下面是三角形程序的控制流程图:![三角形程序控制流程图](https://i.imgurXXX/srVwOPI.png) 我们可以通过该图来得到程序的基本路径:1. 1-2-3-142. 1-2-4-5-6-8-9-10-11-12-13-143. 1-2-4-5-6-7-8-9-10-11-12-13-143. 测试用例设计根据基本路径,我们需要设计测试用例来覆盖所有的基本路径。

白盒测试技术(基本路径测试法)

白盒测试技术(基本路径测试法)
输入数据 预期结果
控制流图的组成: 1. 节点:以标有编号的圆圈表示。可代表一个或多个语句、一
个处理框序列和一个条件判定框(假设不包含复合条件)。包 含条件的节点被称为判断节点,分支的汇聚处应该有一个汇 点。, 2. 控制流线或弧:以箭头表示,又称为边。 3. 边和结点圈定的区域叫做区域,当对区域计数时,图形外的 区域也应记为一个区域。

1
▪ 1.白盒测试技术概念以及方

▪ 2.基本路径测试法
重点
▪ 步骤
▪ 实现
黑盒
X=2
?
y=4
白盒
X=2 y=2x
y=4
白盒测试以源代码为基本对象,是对软件的过 程性细节做细致的检查,允许测试人员利用程序内 部的逻辑结构及有关信息,设计或选择测试用例, 对程序所有逻辑路径进行测试,通过在不同点检查 程序状态,确定实际状态是否与预期的状态一致。
2.计算环路复杂度,又称为圈复杂度
❖ 案例分析
3.列出程序中形成的基本路径集合
路径1:4-14 路径2:4-6-7-14 路径3:4-6-8-10-13-414 路径4:4-6-8-11-13-414
❖ 案例分析
4.推导出可以确保集合中每条独立路径都被执行的 测试用例。
2
1
4
3
分析控制流图:
1. 节点数: 9 2. 判断节点数: 3 3. 边数: 11 4. 区域数: 4
程 序 流 程
控 制 流 图

程序的环路复杂性给出了程序基本路径集中的 独立路径条数,这是确保程序中每个可执行语句至 少执行一次所必需的测试用例数目的上界。
程序环路复杂性计算方法(三种):
(1)流图中区域的数量对应于环形复杂度; 4. (2)给定流图G的环形复杂度V(G),定义 为V(G)=E-N+2, E是流图中边的数量, N是流图中节点的数量。 V(G)=11-9+ 2. (3) V(G)=P+1, P是流图G中的判定节 点数。 V(G)=3+1

软件测试_白盒测试

软件测试_白盒测试

12
控制流图中节点合并
有的时候,我 们可以把几个 节点合并成一 个, 合并的原则: 若在一个节点 序列中没有分 支,则我们可 以把这个序列 的节点都合并 成一个节点。
4 5 6 9
10 12 13 21 15 17 19 20 22 23
22 23 20
7
8
4
9
11
10 12 13
11
14 16 18
Dim a,b As Integer Dim c As Double If (a>0 And b>0) Then c=c/a End if If (a>1 or c>1) Then c=c+1 End if c=b+c
a>0 and b>0 N a>1 or c>1 N c=b+c
Y
c=c/a
Y
c=c+1
21 15
14 16 17 19 18
13
逻辑覆盖法
覆盖测试,是利用程序的逻辑结构设计相应 的测试用例。测试人员要深入了解被测程序 的逻辑结构特点,完全掌握源代码的流程, 才能设计出恰当的用例。 白盒测试中的逻辑覆盖方法有以下6种:

语句覆盖 判定覆盖 条件覆盖 判定-条件覆盖 条件组合覆盖 路径覆盖
28
4.判定-条件覆盖
基本思想是:设计足够的测试用例,使得 判断条件中的所有条件可能至少执行一次 取值,同时,所有判断的可能结果至少执 行一次。
29
1
4.判定-条件覆盖……续1
按照判定-条件覆盖 的要求,我们设计的 测试用例要满足如下 条件: 1. 所有条件可能至少执 行一次取值; 2. 所有判断的可能结果 至少执行一次。

东北大学软件测试历年考题

东北大学软件测试历年考题

04级(李哲洙复习题)一、简答题复习题1、什么是黑盒测试与白盒测试?2、什么是静态测试与动态测试?3、软件测试人员应具备哪些素质?4、功能性测试的优缺点是什么?5、等价类测试的指导方针是什么?6、使用逻辑覆盖法的步骤是什么?7、什么是单元测试?它的主要测试内容是什么?8、什么是集成测试?它的主要测试内容是什么?9、创建软件测试计划的目的和目标是什么?10、软件测试计划一般都分为哪些主题?二、逻辑与基本路径覆盖法逻辑覆盖法:•语句覆盖:测试用例能使被测程序的每条执行语句至少执行一次•判断覆盖:测试用例能使被测程序中的每个判断至少取得一次“真”和一次“假”又称分支覆盖•条件覆盖:测试用例能使被测程序中每个判断的每个条件至少取得一次“真”和一次“假”。

如果判断中只有一个条件,则条件覆盖便满足判断覆盖,否则,不一定。

•判断/条件覆盖:测试用例既满足判断覆盖,又满足条件覆盖。

•条件组合覆盖:测试用例使每个判定中所有可能的条件取值组合至少执行一次。

1、导出程序图※基本路径测试法设计测试用例03改动后的程序流程图3 .对应程序图2、计算程序图的环形复杂性123456789 1121131141511 611 78191连接权-1=比较个数1=02=12=11=02=12=11=01=0W R 1 6 15 1912 1912年6月16日环形数=4+1=53、确定基本路径集由于环形数为5,故基本路径数有5条 path1: 1—2—4—5—6—7 path2: 1—2—3—4—5—6—7 path3: 1—2—3—8—4—5—6—7 path4: 1—2—3—8—4—5—9—7 path5:1—2—3—8—4—5—6—9—7 4、生成测试用例path1 输入:A=1B=0 X=1 预期结果:X=1path2 输入:A=3B=1 X=1 预期结果:X=1 path3 输入:A=3B=0 X=3 预期结果:X=1 path4 输入:A=2B=0 X=2 预期结果:X=2 path5 输入:A=3 B=0 X=6 预期结果:X=3三、功能性测试(见课件P14 “三角形等价类测试问题”)NextDate 是一个三变量函数,即月份、日期和年,这些变量的有效值区间 定义如下:M1={月份:1W 月份W 12} 口1={日期:1^日期^31} Y1={年:1812W 年W 2012} 无效等价类:M2={月份:月份<1} M3={月份:月份>12} 口2={日期:日期<1} 口3={日期:日期>31} Y2={年:年<1812} Y3={年:年>2012}由于有效类的数量等于独立变量的个数,因此只有弱一般等价类测试用例出 现,并且与强一般等价类测试用例相同:用例ID 月份 日期年预期输出WN1,SN1 61519121912年6月16日用例ID 月份 日期 年 预期输出W R 2-1 15 1912 月份不在有效值域1..12中 W R 313151912月份不在有效值域1..12中W R46-11912日期不在有效值域1..31中W R56321912日期不在有效值域1..31中W R66151811年不在有效值域1812..2012中W R76152013年不在有效值域1812..2012中05级(李鹤林复习题)判断题(10)1.好的测试员不懈追求完美。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i,max=0; int arr[]=new int[5];//设数组大小为5 System.out.println("请输入数组元素:"); for(i=0;i<=arr.length-1;i++) {
(1)void bubbleSort(int a[]){
(2)
for (int i = a.length; --i>=0; ) { //2.1 int i = a.length
(3)
boolean flipped = false; //2.2.1 –-i=0
(4)
for (int j = 0; j<i; j++) { //2.2.2 –-i>0
3.独立路径集 路径 1:2.1-2.2.1-2.2.2-15-16 路径 2:2.1-2.2.1-3-3.1-4.1-4.2-12-13-16 路径 3:2.1-2.2.1-2.2.2-3-3.1-4.1-4.2-5-10-4.3-4.2-12-13-16 路径 4:2.1-2.2.1-2.2.2-3-3.1-4.1-4.2-5-10-4.3-4.2-12-13-2.2.1-2.2.2-15-16 路径 5:2.1-2.2.1-2.2.2-3-3.1-4.1-4.2-5-6,7,8,9-10-4.3-4.2-12-13-2.2.1-2.2.2-15-16 路径 6:2.1-2.2.1-2.2.2-3-3.1-4.1-4.2-5-6,7,8,9-10-4.3-4.2-12-13-16
for (int j = 0; j<i; j++) { if (a[j] > a[j+1]) {
int T = a[j]; a[j] = a[j+1]; a[j+1] = T; flipped = true; } } if (!flipped) { return; } } }
public static void getArray1(int[] arr){ System.out.print("原数组大小排列为:"); for(int i = 0;i < arr.length; i++){ System.out.print(arr[i]+" , "); } System.out.println();
(5)
if (a[j] > a[j+1]) {
//4.1 int j = 0
(6)
int T = a[j];
//4.2 j<i
(7)
a[j] = a[j+1];
//4.3 j++
(8)
a[j+1] = T;
(9)
flipped = true;
(10)
}
(11)
}
(12)
if (!flipped) {
(13)
return;
(14)
}
(15)
}
(16) }
1.程序流程图:
2.1
2.2.1 (--i>0
2.2.2
4.1 4.2
5 6.7.8.9 10
15
3 3
3.1 12 13
4.3
16
流图:
2.1
2.2.1
3
2.2.2
3
4.1
3.1
4.2
12
13 5
4.3
6,7,8,9
10
15
16
2.计算环形复杂度: CC(G)= 6 个区域 CC(G)= 18 条边 – 14 个节点 + 2 = 6 CC(G)= 5 个判定节点 + 1 = 6
arr[i]= Integer.parseInt(br.readLine()); } getArray1(arr); bubbleSort(arr); getArray2(arr); }
public static void bubbleSort(int a[]){
for (int i = a.length; --i>=0; ) { boolean flipped = false;
4.测试用例 路径 1 测试用例:
输入条件:将数组设为 int[0],输入空值 期望结果:null 实际运行结果:
路径 2 测试用例: 输入条件:将数组设为 int[1],输入 5 期望结果:原数组大小排列为:5 冒泡排序后数组大小排列为:5 实际结果:
路径 3 测试用例: 输入条件:将数组设为 int[5],输入 1,3,5,7,9 期望结果:原数组大小排列为:1,3,5,7,9 冒泡排序后数组大小排列为:1,3,5,7,9 实际运行结果:
5.完整运行程序: import jajava.io.IOException; import java.io.InputStreamReader;
public class TestHomework {
public static void main(String[] args) throws NumberFormatException, IOException {
} }
6.总结 通过对冒泡程序进行基本路径测试,不仅巩固了 java 编程,而且熟悉了白盒测试中基
本路径测试法的步骤。通过自己动手去设计测试深深的体会到测试这门技术从理论上看来非 常简单,但是从实践的角度,确实有一定难度,不仅要求有较好的逻辑思维,而且考虑问题 需要面面俱到,有一点疏忽可能就会产生遗漏而造成不可估量的损失。
在作业过程中遇到许多问题,比如程序步骤标号问题、线性独立路径的确定以及在生成 用例时路径覆盖的问题,自己通过网上查询资料或请教老师和同学得到了很好的解决。
总体感觉这次作业收获挺大的,不仅仅是在知识上,更重要的是解决问题的能力得到了 加强。
路径 4 测试用例: 此路径无法覆盖,运行时会走路径 3.
路径 5 测试用例: 输入条件:将数组设为 int[5],输入 9,8,7,6,5 期望结果:原数组大小排列为:9,8,7,6,5 冒泡排序后数组大小排列为:5,6,7,8,9 实际运行结果:
路径 6 测试用例: 输入条件:将数组设为 int[5],输入 12,3,56,8,10 期望结果:原数组大小排列为:12,3,56,8,10 冒泡排序后数组大小排列为:3,8,10,12,56 实际运行结果:
}
public static void getArray2(int[] arr){ System.out.print("冒泡排序后数组大小排列为:"); for(int i = 0;i < arr.length; i++){ System.out.print(arr[i]+" , "); } System.out.println();
相关文档
最新文档