白盒测试练习及答案
软件测试-白盒测试用例练习题

白盒测试用例练习一、为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
void DoWork (int x,int y,int z) {int k=0,j=0; if ( (x>3)&&(z<10) ) { k=x*y-1;j=sqrt(k); //语句块1} if ( (x==4)||(y>5) ) {j=x*y+10;} //语句块2 j=j%3; //语句块3 } a Y cN b eYx>3 and x=4 ork=x*y-1 k=0Nd由这个流程图可以看出,该程序模块有4条不同的路径: P1:(a-c-e) P2:(a-c-d) P3:(a-b-e) P4:(a-b-d) 将里面的判定条件和过程记录如下: 判定条件M ={x>3 and z<10} 判定条件N={x=4 or y>5} 1、 语句覆盖测试用例输入输出判定M 的取值判定N 的取值覆盖路径x=4,z=5,y=8 k=31,j=0 TTP1(a-c-e) 2、判定覆盖p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。
测试用例输入 输出 判定M 的取值判定N 的取值覆盖路径x=4,z=5,y=8k=31,j=0TTP1(a-c-e) x=2,z=11,y =5k=0,j=0FFP4(a-b-d)也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下: 测试用例输输出判定M 的取判定N 的取覆盖路径j=j%3j=x*y+1入值值x=5,z=5,y= 4 k=19,j=sqrt(19)%3T F P2(a-c-d)x=4,z=11,y=6k=0,j=1 F T P3(a-b-e)3、条件覆盖对于M:x>3取真时T1,取假时F1;z<10取真时T2,取假时F2;对于N:x=4取真时T3,取假时F3;y>5取真时T4,取假时F4。
(完整版)白盒测试练习及答案

1、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。
为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。
若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用例组是( E )或( F )。
供选择的答案A:① 语句覆盖② 条件覆盖③ 判定覆盖④ 路径覆盖B~F:① Ⅰ和Ⅱ组② Ⅱ和Ⅲ组③ Ⅲ和Ⅳ组④ Ⅰ和Ⅳ组⑤ Ⅰ、Ⅱ、Ⅲ组⑥ Ⅱ、Ⅲ、Ⅳ组⑦ Ⅰ、Ⅲ、Ⅳ组⑧ Ⅰ、Ⅱ、Ⅳ组解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧2. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到条件覆盖。
( B )int func(int a,b,c){ int k=1;if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,9,-2)、(-4,8,3)3. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定覆盖。
(D )int func(int a,b,c){ int k=1;if ( (a>0) &&(b<0) && (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,-9,-2)、(-4,8,3)4. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定条件覆盖。
软件工程白盒测试练习及解答

白盒测试练习1、什么是白盒测试?白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
2、什么是测试用例?一组由前提条件、输入、执行条件、预期结果等组成,以完成对某个特定需求或者目标测试的数据,体现测试方案、方法、技术和策略的文档3、写出以上程序的所有路径;L1(1->2->3)L2(1->4->5->3)L3(1->2->6->7)L4(1->4->5->6->7)4、尝试用表格的形式描述满足以下情况的测试用例:a)写出满足语句覆盖需要的测试用例;解:语句覆盖就是程序中每一个语句至少能被执行一次运行结果b)写出满足判定覆盖(分支覆盖)需要的测试用例;解:判定覆盖就是程序中每个判定至少有一次为真值,有一次为假值,使得程序中每个分支至少执行一次运行结果c) 写出满足条件覆盖需要的测试用例;解:条件覆盖是程序各判定中的每个条件获得各种可能的取值至少满足一次运行结果d) 写出满足判定/条件覆盖需要的测试用例;解:判定/条件覆盖是程序中每个判定至少有一次为真值,有一次为假值,使得程序中每个分支至少执行一次,且使得各判定中的每个条件获得各种可能的取值至少满足一次。
运行结果e) 写出满足条件组合覆盖需要的测试用例。
解:条件组合覆盖是判定中条件的各种组合都至少被执行一次运行结果更改逻辑运算符以条件组合覆盖测试用例进行测试运行结果。
白盒测试试题答案

先看以下代码:/** 白盒测试逻辑覆盖测试范例*/int logicExample(int x, int y){int magic=0;if(x>0 && y>0){magic = x+y+10; // 语句块1}else{magic = x+y-10; // 语句块2}if(magic < 0){magic = 0; // 语句块3}return magic; // 语句块4}解答:一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:做好了上面的准备工作,接下来就开始讲解六个逻辑覆盖标准:一、语句覆盖1、概念:设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
在本例中,可执行语句是指语句块1到语句块4中的语句。
2、测试用例:{x=3, y=3}可以执行到语句块1和语句块4,所走的路径:a-b-e-f{x=-3, y=0}可以执行到语句块2、语句块3和语句块4,所走的路径:a-c-d-f这样,通过两个测试用例即达到了语句覆盖的标准,当然,测试用例(测试用例组)并不是唯一的。
3、测试的充分性:假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句覆盖无法发现上述的逻辑错误。
在六种逻辑覆盖标准中,语句覆盖标准是最弱的。
二、判断覆盖(分支覆盖)1、概念:设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
在本例中共有两个判断if(x>0 && y>0)(记为P1)和if(magic < 0)(记为P2)。
2、测试用例:两个判断的取真、假分支都已经被执行过,所以满足了判断覆盖的标准。
实验2-1-答案

白盒测试用例练习
1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图.
void DoWork (int x,int y,int z)
{
int k=0,j=0;
if ( (x〉3)&&(z<10))
{ k=x*y-1;
j=sqrt(k);//语句块1
}
if ((x==4)||(y>5))
{
j=x*y+10;
}//语句块2
j=j%3; //语句块3
}
由这个流程图可以看出,该程序模块有4条不同的路径:
P1:(a-c—e)P2:(a-c-d)
P3:(a—b-e)P4:(a—b—d)
将里面的判定条件和过程记录如下:
判定条件M={x〉3 and z<10}
判定条件N={x=4 or y〉5}
1、语句覆盖
2、判定覆盖
也可以让测试用例测试路径P2和P3.相应的两组输入数据如下:
3、条件覆盖
对于M:x>3取真时T1,取假时F1;
z〈10取真时T2,取假时F2;
对于N:x=4取真时T3,取假时F3;
y>5取真时T4,取假时F4。
条件:x〉3,z〈10,x=4,y>5
条件:x〈=3,z>=10,x!=4,y〈=5
5、组合覆盖
条件组合
1)x>3,z〈10 2)x>3,z〉=10
3) x〈=3,z<10 4)x〈=3,z〉=10
5)x=4,y〉5 6)x=4,y<=5
6。
白盒测试及例题

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

测试覆盖标准
– 条件组合覆盖:执行足够的例子,使得 每个判定中条件的各种可能组合都至少 出现一次。
这是一种相当强的覆盖准则,可以 有效地检查各种可能的条件取值的组合 是否正确。它不但可覆盖所有条件的可 能取值的组合,还可覆盖所有判断的可 取分支,但可能有的路径会遗漏掉。测 试还不完全。
白盒测试的主要方法:
– 判定覆盖(也称为分支覆盖):执行足够的 测试用例,使得程序中的每一个分支至少都 通过一次。 判定覆盖只比语句覆盖稍强一些,但实 际效果表明,只是判定覆盖,还不能保证一 定能查出在判断的条件中存在的错误。因此, 还需要更强的逻辑覆盖准则去检验判断内部 条件。
– 条件覆盖:执行足够的测试用例,使程序中 每个判断的每个条件的每个可能取值至少执 行一次; 条件覆盖深入到判定中的每个条件,但 可能不能满足判定覆盖的要求。
① A=3,B=0,X=1 (沿路径acd执行); ② A=2,B=1,X=3(沿路径abe执行)
分支覆盖
A=3,B=0,X=1 (沿路径
判定覆盖
分支覆盖
程序中含有判定的语句包括IF-THENELSE、DO-WHILE、REPEAT-UNTIL等,除了 双值的判定语句外,还有多值的判定语句,如 PASCAL中的CASE语句、FORTRAN中带有三 个分支的IF语句等。所以“分支覆盖”更一般的 含义是:使得每一个分支获得每一种可能的结 果。
测试覆盖标准
– 判定/条件覆盖:执行足够的测试用例,使得判 定中每个条件取到各种可能的值,并使每个判定 取到各种可能的结果。
判定/条件覆盖有缺陷。从表面上来看,它测 试了所有条件的取值。但是事实并非如此。往往 某些条件掩盖了另一些条件。会遗漏某些条件取 值错误的情况。为彻底地检查所有条件的取值, 需要将判定语句中给出的复合条件表达式进行分 解,形成由多个基本判定嵌套的流程图。这样就 可以有效地检查所有的条件是否正确了。
白盒测试逻辑覆盖练习题

白盒测试逻辑覆盖练习题一、语句覆盖if (a > 0 && b > 0) {c = a + b;} else {c = 0;}def check_age(age):if age < 18:return "未成年"elif age >= 18 and age < 60:return "成年人"else:return "老年人"二、分支覆盖if (x > 0) {if (y > 0) {printf("第一象限");} else {printf("第四象限");}} else {if (y > 0) {printf("第二象限");} else {printf("第三象限");}}function calculateGrade(score) {if (score >= 90) {return 'A';} else if (score >= 80) {return 'B';} else if (score >= 70) {return 'C';} else {return 'D';}}三、路径覆盖public int calculate(int a, int b) { if (a > 0) {if (b > 0) {return a + b;} else {return a b;}} else {if (b > 0) {return b a;} else {return 0;}}}public int Max(int a, int b, int c) { if (a > b) {if (a > c) {return a;} else {return c;}} else {if (b > c) {return b;} else {return c;}}}四、条件覆盖def check_password(password):if len(password) >= 8 and any(char.isdigit() for char in password):return "密码强度高"else:return "密码强度低"function validateForm(username, password) {if (username.length > 0 && password.length > 0) { return true;} else {return false;}}五、判定条件覆盖public boolean isEligible(int age, boolean hasLicense) {if (age >= 18 && hasLicense) {return true;} else {return false;}}int isPrime(int num) {if (num <= 1) {return 0;}for (int i = 2; i < num; i++) {if (num % i == 0) {return 0;}}return 1;}六、多条件覆盖public string GetGrade(int score, bool isFinalExam) { if (score >= 90 || (isFinalExam && score >= 80)) { return "A";} else if (score >= 80 || (isFinalExam && score >= 70)) {return "B";} else if (score >= 70 || (isFinalExam && score >= 60)) {return "C";} else {return "D";}}return "Eligible";} else {return "Not Eligible";}}七、条件组合覆盖def check_login(username, password, is_admin):if (username == "admin" or username == "user") and password == "56" and not is_admin:return "User logged in";elif (username == "admin" and is_admin) and password == "admin123":return "Admin logged in";else:return "Invalid credentials";public String authenticate(String username, String password, boolean hasTwoFactor) {if (username.equals("admin") &&password.equals("admin123") && hasTwoFactor) {return "Admin access granted";} else if (username.equals("user") &&password.equals("user123") && !hasTwoFactor) {return "User access granted";} else {return "Access denied";}}八、路径条件覆盖void processOrder(int quantity, float discount) {if (quantity > 10) {if (discount < 0.1) {printf("Order processed with standard discount");} else {printf("Order processed with special discount");}} else {printf("Order processed without discount");}}function calculateTotal(price, isMember, hasCoupon) { let total = price;if (isMember) {total = 0.9; // 10% discount for members}if (hasCoupon) {total = 0.95; // Additional 5% discount for coupon}return total;}九、修改条件/判定覆盖def upgrade_account(user_type, points):if user_type == "basic" and points >= 100:return "Upgrade to premium"elif user_type == "premium" and points >= 200:return "Upgrade to elite"else:return "No upgrade available"public String checkSubscription(String type, int duration) {if (type.equals("monthly") && duration >= 6) {return "Eligible for annual plan";} else if (type.equals("annual") && duration >= 12) {return "Eligible for lifetime plan";} else {return "Continue current plan";}}答案一、语句覆盖1. 测试用例:a=1, b=1;a=1, b=12. 测试用例:age=15;age=25;age=65二、分支覆盖1. 测试用例:x=1, y=1;x=1, y=1;x=1, y=1;x=1, y=12. 测试用例:score=95;score=85;score=75;score=65三、路径覆盖1. 测试用例:a=1, b=1;a=1, b=1;a=1, b=1;a=1, b=12. 测试用例:a=10, b=5, c=3;a=5, b=10, c=8;a=5, b=5, c=10;a=3, b=3, c=3四、条件覆盖1. 测试用例:password="567";password=""2. 测试用例:username="test", password="pass";username="", password=""五、判定条件覆盖1. 测试用例:age=20, hasLicense=True;age=17, hasLicense=False2. 测试用例:num=2;num=1;num=0;num=1六、多条件覆盖1. 测试用例:score=95, isFinalExam=False;score=85, isFinalExam=True;score=75, isFinalExam=False;score=65, isFinalExam=True七、条件组合覆盖1. 测试用例:username="admin", password="admin123",is_admin=False;username="user", password="56",is_admin=False;username="admin", password="admin123",is_admin=True2. 测试用例:username="admin", password="admin123", hasTwoFactor=True;username="user", password="user123", hasTwoFactor=False;username="admin", password="wrong", hasTwoFactor=True八、路径条件覆盖1. 测试用例:quantity=15, discount=0.05;quantity=8, discount=0.05;quantity=15, discount=0.22. 测试用例:price=100, isMember=True, hasCoupon=True;price=100, isMember=False, hasCoupon=False;price=100, isMember=True, hasCoupon=False九、修改条件/判定覆盖1. 测试用例:user_type="basic", points=50;user_type="basic", points=150;user_type="premium",points=150;user_type="premium", points=2502. 测试用例:type="monthly", duration=3;type="monthly", duration=9;type="annual", duration=9;type="annual", duration=15。
白盒测试用例练习

白盒测试用例练习1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
void DoWork (int x,int y,int z){int k=0,j=0;if ( (x>3)&&(z<10) ){ k=x*y-1;j=sqrt(k); //语句块1}if ( (x==4)||(y>5) ){j=x*y+10;} //语句块2j=j%3; //语句块3}由这个流程图可以看出,该程序模块有4条不同的路径:P1:(a-c-e) P2:(a-c-d)P3:(a-b-e) P4:(a-b-d)将里面的判定条件和过程记录如下:判定条件M={x>3 and z<10}判定条件N={x=4 or y>5}1、语句覆盖2、判定覆盖也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下:3、条件覆盖对于M:x>3取真时T1,取假时F1;z<10取真时T2,取假时F2;对于N:x=4取真时T3,取假时F3;y>5取真时T4,取假时F4。
条件:x>3,z<10,x=4,y>5条件:x<=3,z>=10,x!=4,y<=55、组合覆盖条件组合1)x>3,z<10 2)x>3,z>=103) x<=3,z<10 4)x<=3,z>=105)x=4,y>5 6)x=4,y<=56题目二:三角形问题在三角形计算中,要求输入三角型的三个边长:A、B 和C。
当三边不可能构成三角形时提示错误,可构成三角形时计算三角形周长。
若是等腰三角形打印“等腰三角形”,若是等边三角形,则提示“等边三角形”。
画出程序流程图、控制流程图、计算圈复杂度V(g),找出基本测试路径。
一、核心程序代码/** 判断三角形的类*/public class TriangleTestMethod {/** 判断三角形的种类。
白盒测试笔试题

一选择题1.下面不属于白盒测试能保证的是(D)。
A.模块中所有独立途径至少测试一次B.测试所有逻辑决策真和假两个方面C.在所有循环的边界内部和边界上执行循环体D.不正确或漏掉的功能2.因果图方法是根据(a)之间的因果关系来设计测试用例的。
A.输入与输出B.设计与实现C.条件与结果D.主程序与子程序3.使用白盒测试方法时,确定测试数据应根据(a)和指定的覆盖标准。
A.程序的内部逻辑B.程序的复杂程度C.使用说明书D.程序的功能4.软件测试中常用的静态分析方法是(a)和接口分析。
A.引用分析B.算法分析C.可靠性分析D.效率分析5.白盒方法中常用的方法是(a)方法。
A.路径测试B.等价类C.因果图D.归纳测试6.在进行单元测试时,常用的方法是(a)。
A.采用白盒测试,辅之以黑盒测试B.采用黑盒测试,辅之以白盒测试C.只适用白盒测试D.只适用黑盒测试7.在软件工程中,白盒测试法可以用于测试程序的内部结构。
此方法将程序看做是(a)。
A.路径的集合B.循环的集合C.目标的集合D.地址的集合8. 对下面个人所得税程序中满足语句覆盖测试用例的是(D )If(income < 800) taxrate=0;Else if(income <=1500) taxrate=0.05;Else if(income <2000) taxrate=0.08;Exle taxrate=0.1;A income = (800,1500,2000,2001)B income = (800,801,1999,2000)C income = (799,1499,2000,2001)D income = (799,1500,1999,2000)二简答题1.白盒测试有几种方法?答:白盒测试方法分为两大类:静态测试方法和动态测试方法。
静态测试方法:检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
白盒测试作业题目-附答案

1.说出静态白盒测试的几个好处
答:进行静态白盒测试的首要原因是尽早发现软件缺陷,以找出动态黑盒测试难以发现或隔离的软件缺陷。
另一个好处是给黑盒测试人员提供思路。
2.判断是非:静态白盒测试可以找出需求遗漏之处和相关问题。
答:错误,因为静态白盒测试保证程序中所有关键路径的测试,防止由于没有执行的路径在实际投入运行后执行到发生意外的情况,但无法找出需求遗漏之处和相关问题。
3.正式审查由哪些关键要素组成?
答:确定问题、遵守规则、准备、编写报告
4.为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判
定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖
语句覆盖:
判定覆盖
条件覆盖
将X>8 真为T1,假为F1 将Y>5 真为T2,假为F2 将X>0 真为T3,假为F3 将Y>0 真为T4,假为F4 将X>16 真为T5,假为F5 将Y>10 真为T6,假为F6
判定/条件覆盖
条件组合覆盖
组合1:T1,T2 组合5:T3,T4 组合9:T5,T6 组合2:T1,F2 组合6:T3,F4 组合10:T5,F6 组合3:F1,T2 组合7:F3,T4 组合11:F5,T6 组合4:F1,F2 组合8:F3,F4 组合12:F5,F6
路径覆盖:
所有路径:a b c d e f g h k m n p
6. 按照基本路径测试方法设计测试用例
●画流图、计算环形复杂度
●导出独立路径
流图如下:。
周立群白盒测试试题

第五章白盒测试一、判断分析题1.语句覆盖是最弱的逻辑覆盖。
(√)2.语句覆盖是最强的逻辑覆盖。
(X)3.判定覆盖不一定包含条件覆盖。
(X)4.条件覆盖不一定包含判定覆盖。
(√)5.判定/条件覆盖能同时满足判定、条件两种覆盖标准。
(√)6.判定/条件覆盖指满足判定覆盖标准或条件覆盖标准。
(X)7.DD-路径图是一种压缩图。
(X)8.详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。
(X )9.尽量用公共过程或子程序去代替重复的代码段。
(X)10.对于连锁型分支结构,若有n个判定语句,则有2n条路径。
(√)11.尽量采用复合的条件测试,以避免嵌套的分支结构。
(√)12.GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
(√)二、简答题1.请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
答:黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。
它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。
从这一层意义上讲,组件是指多个单元的集成聚合。
在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。
方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。
最后,将构成进程的所有模块一起测试。
系统测试是将经过测试的子系统装配成一个完整系统来测试。
它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。
软件测试之白盒测试题及答案

#include <iostream.h> //白盒测试测验题目白盒测试测验题目//程序功能:输入年、月,输出该月份的最大天数 void main() 1{2 int year, int month;3 int maxday = 0;4 cin>>year>>month;5 if ( month >= 1 && month <= 12 )6 {7 if ( month == 2 )8 {9 if ( year % 4 == 0 ) 10 { 11 if ( year % 100 == 0 ) 12 {13 if ( year % 400 == 0 ) 14 maxday = 29; 15 else16maxday = 28;17 } 18 else19 maxday = 29; 20 } 21else22 maxday = 28; 23 } 24 else 25 {26 if ( month == 4 || month == 6 || month == 9 || month == 11 ) 27 maxday = 30; 28 else29 maxday = 31; 30 } 31 }32cout<<"The MaxDay is:"<<maxday<<endl;33}要求:要求: 1. 画出该程序的程序流程图画出该程序的程序流程图1 2345 7 F1T168 10 F 2 T2912 11 27 F3 T 31331 33 F6 T632 28 14 29 23 F4 T4 1535 24 341630 25 36 18 F5 T51737 2026 2138 2219 39400:开始:开始 1 2 3456798 101112 13 14 1516 17 18 19 2021 22 23242526 27 28 29 30 31 323334:结束结束2. 画出该程序的DD 路径图路径图转换后的(D-D 图):A :{1-5};B :{6-7};C:{8-9}; D :{24-26};E :{10-11}; F :{21-23}; G :{12-13}; H :{18-20}; I :{14};J :{15-17};K :{27}; L :{28-31}; M :{32-33}; F1T1F2 T2T3F6 T6 F3 F4 T4F5T50:开始开始ABD C FEH GJ KL M 34:结束:结束 I3. 试用路径覆盖法中的语句覆盖、判定覆盖、条件覆盖、判定条件覆盖以及路径覆盖五种方法对上述问题设计测试用例述问题设计测试用例 1.语句覆盖:语句覆盖: 测试用例编号输入数据输入数据预期输出结果预期输出结果 覆盖语句覆盖语句yearmonthTC-00120002The MaxDay is:290,1,2,3,4,5,6,7,8,9,10,11,12,13,14,32,33,34TC-002 1700 2 The MaxDay is:280,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,32,33,34 TC-003 1604 2 The MaxDay is:290,1,2,3,4,5,6,7,8,9,10,11,18,19,20,32,33,34TC-004 1605 2 The MaxDay is:28 0,1,2,3,4,5,6,7,8,9,21,22,23,32,33,34TC-005 1914 6 The MaxDay is:30 0,1,2,3,4,5,6,7,24,25,26,27,32,33,34TC-006 1914 7 The MaxDay is:310,1,2,3,4,5,6,7,24,25,26,28,29,30,31,32,33,342.判定覆盖:判定覆盖:解释:我在各判断分支的真假分支都编有相应的真假符号,在判定覆盖中用判定分支的真假序号表示; 测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖判定覆盖判定yearmonthTC-001 2000 2 The MaxDay is:29 T1,T2,T3,T4,T5 TC-002 1700 2 The MaxDay is:28 T1,T2,T3,T4,F5TC-003 1604 2 The MaxDay is:29 T1,T2,T3,F4TC-004 1605 2 The MaxDay is:28 T1,T2,F3TC-005 1914 6 The MaxDay is:30 T1,F2,T6TC-006 1914 7 The MaxDay is:31 T1,F2,F6TC-007 1914 14 The MaxDay is:0 F13.条件覆盖:条件覆盖:(1)在判定语句5中有以下条件:中有以下条件:1.month >= 1 ;2.month <= 12 ;(2)在判定语句7中有以下条件:中有以下条件:3.month == 2;(3)在判定语句9中有以下条件:中有以下条件:4.year % 4 == 0;(4)在判定语句11中有以下条件:中有以下条件:5.year % 100 == 0;(5)在判定语句13中有以下条件:中有以下条件:6. year % 400 == 0;(6)在判定语句26中有以下条件:7. month == 4 ;8.month == 6 ;9.month == 9 ;10.month == 11;测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖的条件覆盖的条件yearmonthTC-001 2000 0 The MaxDay is:0 F1TC-002 1700 15 The MaxDay is:0 T1,F2TC-003 2000 2 The MaxDay is:29 T1,T2,T3,T4,T5,T6 TC-004 1605 4 The MaxDay is:30 T1,T2,F3,T7TC-005 1900 2 The MaxDay is:28 T1,T2,T3,T4,T5,F6TC-006 1604 2 The MaxDay is:29 T1,T2,T3,T4,F5TC-007 2013 2 The MaxDay is:28 T1,T2,T3,F4TC-008 1700 5 The MaxDay is:31 T1,T2,F3,F7,F8,F9,F10TC-009 1604 11 The MaxDay is:30 T1,T2,F3,F7,F8,F9,T10TC-0010 1605 9 The MaxDay is:30 T1,T2,F3,F7,F8,T9TC-0011 1914 6 The MaxDay is:30 T1,T2,F3,F7,T84.判定条件覆盖:(1)在判定语句5中有以下条件:中有以下条件:1.month >= 1 ;2.month <= 12 ;(2)在判定语句7中有以下条件:中有以下条件:3.month == 2;(3)在判定语句9中有以下条件:中有以下条件:4.year % 4 == 0;(6)在判定语句11中有以下条件:中有以下条件:5.year % 100 == 0;(7)在判定语句13中有以下条件:中有以下条件:6. year % 400 == 0;(6)在判定语句26中有以下条件:7. month == 4 ;8.month == 6 ;9.month == 9 ;10.month == 11;(覆盖的判定语句在程序流程图中有标识)(覆盖的判定语句在程序流程图中有标识)测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖的条件覆盖的条件 覆盖的判定覆盖的判定yearmonthTC-001 2000 0 The MaxDay is:0 F1 F1 TC-002 1700 15 The MaxDay is:0 T1,F2 F1TC-003 2000 2 TheMaxDay is:29 T1,T2,T3,T4,T5,T6 T1,T2,T3,T4,T5TC-004 1605 4 TheMaxDay is:30 T1,T2,F3,T7 T1,F2,T6TC-005 1900 2 TheMaxDayis: 28 T1,T2,T3,T4,T5,F6 T1,T2,T3,T4,F5TC-006 1604 2 The MaxDay is:29 T1,T2,T3,T4,F5 T1,T2,T3,F4 TC-007 2013 2 The MaxDay is:28 T1,T2,T3,F4 T1,T2,F3TC-008 1700 5 The MaxDay is:31 T1,T2,F3,F7,F8,F9,F10T1,F2,F6TC-009 1604 11 The MaxDay is:30 T1,T2,F3,F7,F8,F9,T10T1,F2,T6TC-0010 1605 9 The MaxDay is:30 T1,T2,F3,F7,F8,T9T1,F2,T6TC-0011 1914 6 The MaxDay is:30 T1,T2,F3,F7,T8 T1,F2,T65.路径覆盖:路径覆盖:解释:我在控制流程图的各条边上都编了序号,在路径覆盖中覆盖的路径用分支边上的序号表示;测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖的路径覆盖的路径year monthTC-001 2000 2 The MaxDay is:29 1-2-3-4-5-6-8-9-11-13-14-15-16-17-19-39-40 TC-00217002The MaxDay is:281-2-3-4-5-6-8-9-11-13-14-15-16-18-20-21-22-39-40TC-003 1604 2 The MaxDay is:29 1-2-3-4-5-6-8-9-11-13-14-23-24-25-26-39-40 TC-004 1605 2 The MaxDay is:28 1-2-3-4-5-6-8-9-11-27-28-29-30-39-40TC-005 1914 6 The MaxDay is:30 1-2-3-4-5-6-8-10-12-31-32-34-39-40TC-006 1914 7 The MaxDay is:31 1-2-3-4-5-6-8-10-12-31-33-35-36-37-38-39-40 TC-007 191414The MaxDay is:01-2-3-4-5-7-39-404. 用三种方法求出上述问题的圈复杂度(基路径数量V (G ))方法一:判定()结点个数计算法:V(G)=p+1;在此D-D 图中,判定结点个数为P=6;V(G)=6+1=7;方法二:.圈数计算法:V(G)= 圈数+1;该D-D 图中,圈数为6;V(G)=6+1=7;方法三:根据连通图公式计算:V(G)=E-N+2p ;E 是D-D 图中边的个数,图中边的个数, N 是D-D 图中结点的个数,p 是连通图的个数,p 一般等于1;在该图中E=40,N=35,p=1; V(G)=E-N+2p=40-35+2=7; 5. 写出上述问题的基路径测试方法所采用的基路径,写明过程写出上述问题的基路径测试方法所采用的基路径,写明过程过程:过程: 首先我根据D-D 路径来寻找基路径,找到一条最长的路径为路径1,再根据路径1中的中的 第一个分一个分支结点A 寻找其他没走过的路,这条路为路径2, 此时遍历完了分支结点A ,再在路径1中找第2个分支结点为B ,根据分支结点B 找到路径3,同理我们在路径1中还有分支结点C ,E ,G ,它们可以找到路径4,路径5和路径6,此时我们会发现已经查找完了5个分支结点,只剩下分支结点D 未被遍历,我们根据分支结点D 可以找到路径7,此时所有的基路径就已经全部找到的。
白盒测试习题

习题010401 逻辑路径覆盖法是白盒测试用例的重要设计方法,其中语旬覆盖法是较为常用的方法,针对下面的语句段,采用语句覆盖法完成测试用例设计,测试用例见下表,对表中的空缺项(True或者False),正确的选择是( )。
语句段:if(A&&(B||C)) x=1;else x=0;用例表:A. ①TRUE ②FALSE ③TRUEB. ①TRUE ②FALSE ③FALSEC. ①FALSE ②FALSE ③TRUED. ①TRUE ②TRUE ③FALSE0402 针对以下程序段,对于(A,B,C)的取值,以下( )测试用例能够满足语句覆盖的要求。
IF((A+10)=2 OR (B-20)<3) THEN C=0IF((A+30)>10 AND (C-30)<0) THEN B=30A. (2,30,1)B.(-20,0,30)C. (-30,20,30)D. (2,20,3)0403 为以下程序段,设计足够的测试用例满足语句覆盖。
if (x>8&&y>5) {if(x>16||y>10) s1;}else {if (x>0||y>0) s2;else s3;0404 针对下列程序段,需要()个测试用例才可以满足语句覆盖的要求。
switch ( value ){case 0: other = 30; break;case 1: other = 50; break;case 2: other = 300;case 3: other = other / value; break;default: other = other * value;}0405 对下面的个人所得税程序中,满足语句覆盖测试用例的是( ) 。
if (income < 800) tarrate = 0else if (income <= 1500) tarrate = 0.05else if (income < 2000) tarrate = 0.08else tarrate = 0.1A.income = (800, 1500, 2000, 2001)B.income = (800, 801, 1999, 2000)C.income = (799, 1499, 2000, 2001)0406 阅读下列流程图:当用判定覆盖法进行测试时,至少需要设计( ) 个测试用例。
白盒测试面试题

白盒测试面试题在白盒测试面试中,面试官往往会提出一些与白盒测试相关的问题,来考察应聘者对该领域的理解和经验。
以下是一些常见的白盒测试面试题:一、请解释什么是白盒测试?白盒测试是一种软件测试方法,旨在检查软件内部的结构和工作原理,以验证其正确性和完整性。
测试人员需要了解软件的内部逻辑和代码实现,对各个组件进行深入的测试,以发现可能存在的错误和缺陷。
二、白盒测试与黑盒测试有何区别?白盒测试和黑盒测试是两种常见的测试方法,其区别主要在于测试人员对被测试软件的了解程度不同。
白盒测试侧重于检查软件内部逻辑和代码的实现,需要对软件的结构和代码有较深入的了解;而黑盒测试更关注软件的功能和用户需求,只需通过界面和输入输出来验证软件是否按照预期工作。
三、请列举几个常用的白盒测试技术。
在白盒测试中,常用的技术包括:1. 语句覆盖(Statement Coverage):测试用例需要覆盖被测试软件中的每一个语句。
2. 判定覆盖(Decision Coverage):测试用例需要覆盖被测试软件中的每一个判定点,以验证各个分支的正确性。
3. 条件覆盖(Condition Coverage):测试用例需要覆盖被测试软件中的每一个条件,以验证各个条件的取值和判定结果。
4. 路径覆盖(Path Coverage):测试用例需要覆盖被测试软件中的每一条路径,以检查软件的各个执行路径。
四、请解释一下代码复杂度与白盒测试的关系。
代码复杂度是衡量代码难度和结构复杂程度的指标,与白盒测试有着密切的关系。
代码复杂度高的软件通常存在着更多的错误和缺陷,因此需要进行更加严格和全面的白盒测试。
通过对代码复杂度的分析,测试人员可以确定测试的重点和范围,提高测试的效果和效率。
五、请解释一下单元测试和集成测试在白盒测试中的作用。
单元测试是白盒测试中的一种重要形式,用于测试软件的最小可测试单位(如函数、方法等)是否正确实现。
单元测试主要关注代码内部逻辑和各个组件之间的交互,通过对每一个单元的测试来确保软件的正确性和稳定性。
白盒测试练习题目

选择题1.在下面说列举的逻辑测试覆盖中,测试覆盖最强的是。
A.条件覆盖 B.条件组合覆盖 C.语句覆盖 D.判定/条件覆盖答案:B2.在下面说列举的逻辑测试覆盖中,测试覆盖最弱的是。
A.条件覆盖 B.条件组合覆盖 C.语句覆盖 D.判定/条件覆盖答案:C3.对下面的个人所得税程序中,满足判定覆盖测试用例的是。
if (income < 800) tarrate = 0 ;else if (income <= 1500) tarrate = 0.05 ;else if (income < 2000) tarrate = 0.08 ;else tarrate = 0.1 ;A.income = (799, 1500, 1999, 2001) B.income = (799, 1501, 2000, 2001)C.income = (800, 1500, 2000, 2001) D.income = (800, 1499, 2000, 2001)4.对下面的个人所得税程序中,满足语句覆盖测试用例的是。
if (income < 800) tarrate = 0 ;else if (income <= 1500) tarrate = 0.05 ;else if (income < 2000) tarrate = 0.08 ;else tarrate = 0.1 ;A.income = (800, 1500, 2000, 2001) B.income = (800, 801, 1999, 2000)C.income = (799, 1499, 2000, 2001) D.income = (799, 1500, 1999, 2000)5. 阅读下面流程图当使用判定覆盖法进行测试时,至少需要设计个测试用例。
A.2 B. 4 C. 6 D. 86. 以下图2所示控制流程图(程序图)的环复杂度V(G)等于。
白盒测试复习题

白盒测试复习题一、名词解释:1、白盒测试(也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。
它根据程序的控制结构设计测试用例,主要用于软件或程序验证。
白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。
但即使每条路径都测试过了,仍然可能存在错误。
因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。
穷举路径测试不可能查出程序因为遗漏路径而出错。
穷举路径测试发现不了一些与数据相关的错误。
2、语句覆盖(选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。
3、判定覆盖(通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。
4、条件覆盖(设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。
5、判定/条件覆盖(设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。
——满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。
6、组合覆盖(通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。
——满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。
)7、路径覆盖(设计足够多的测试用例,要求覆盖程序中所有可能的路径。
)二、简答题基本路径测试方法包括哪些步骤?路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程。
从广义的角度讲,任何有关路径分析的测试都可以被称为路径测试。
完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是不可能的。
在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。
为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。
若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用例组是( E )或( F )。
供选择的答案A:① 语句覆盖② 条件覆盖③ 判定覆盖④ 路径覆盖B~F:① Ⅰ和Ⅱ组② Ⅱ和Ⅲ组③ Ⅲ和Ⅳ组④ Ⅰ和Ⅳ组⑤ Ⅰ、Ⅱ、Ⅲ组⑥ Ⅱ、Ⅲ、Ⅳ组⑦ Ⅰ、Ⅲ、Ⅳ组⑧ Ⅰ、Ⅱ、Ⅳ组解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧2. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到条件覆盖。
( B )int func(int a,b,c){ int k=1;if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,9,-2)、(-4,8,3)3. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定覆盖。
(D )int func(int a,b,c){ int k=1;if ( (a>0) &&(b<0) && (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,-9,-2)、(-4,8,3)4. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定条件覆盖。
(B )int func(int a,b,c){ int k=1;if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,-5,8)、(-4,9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,9,-2)、(-4,8,3)5、下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。
int GetMax(int n, int datalist[ ]){int k=0;for ( int j=1; j<n; j++ )if ( datalist[j] > datalist[k] ) k=j;return k;}(1)画出该程序的控制流图,并计算其McCabe环路复杂性。
(2)用基本路径覆盖法给出测试路径。
(3)为各测试路径设计测试用例。
答:1 int k = 0;2 int j = 1;3 while ( j < n )4 {5 if ( datalist[j] > datalist[k] )6 k = j;7 j++;8 }9 return k;控制流图如上,McCabe环路复杂性为3。
2. 测试路径:Path1:2→3 →9Path2:2→3→5→6→7 →8→3→9Path3:2→3→5→7 →8→3→93. 测试用例:Path1:取n=1,datalist[0] = 1,预期结果:k=0Path2:取n=2,datalist[0] = 1,datalist[1] = 0,预期结果:k=0Path3:取n=2,datalist[0] = 0,datalist[1] = 1,预期结果:k=16、下面是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。
算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素内容的操作Swap( ):void SelectSort ( datalist & list ) {//对表list.V[0]到list.V[n-1]进行排序, n是表当前长度。
for ( int i = 0; i < list.n-1; i++ ) {int k = i; //在list.V[i].key到list.V[n-1].key中找具有最小关键码的对象for ( int j = i+1; j < list.n; j++)if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) ) k = j;//当前具最小关键码的对象if ( k != i ) Swap ( list.V[i], list.V[k] );//交换}}(1) 试计算此程序段的McCabe复杂性;(2) 用基本路径覆盖法给出测试路径;(3) 为各测试路径设计测试用例。
解答:(1)1 int i = 0;2 while ( i < list.n-1 )3 { int k = i;4 int j = i+1;5 while ( j < list.n )6 { if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) )7 k = j;8 j++;9 }10 if ( k != i )11 Swap ( list.V[i], list.V[k] );12 i++;13 }141213McCabe环路复杂性 = 5(2) 独立路径有5条:Path1: 1→2→14Path2: 1→2→3→5→10→11→12→13→2→14Path3: 1→2→3→5→10→12→13→2→14Path4:1→2→3→5→6→7→8→9→5→10→11→12→13→2→14Path5: 1→2→3→5→6→8→9→5→10→11→12→13→2→14①③①②⑤⑧……①②⑤⑨……①②④⑥……①②④⑦……(3) 为各测试路径设计测试用例:Path1:取n = 1路径①②⑤⑧……:取n = 2,预期结果:路径⑤⑧③不可达路径①②⑤⑨……:取n = 2,预期结果:路径⑤⑨③不可达路径①②④⑥⑤⑧③:取n = 2, V[0] = 2, V[1] = 1, 预期结果:k = 1, V[0] = 1, V[1] = 2 路径①②④⑥⑤⑨③:取n = 2, V[0] = 2, V[1] = 1, 预期结果:k = 1, 路径⑨③不可达路径①②④⑦⑤⑧③:取n = 2, V[0] = 1, V[1] = 2, 预期结果:k = 0, 路径⑧③不可达路径①②④⑦⑤⑨③:取n = 2, V[0] = 1, V[1] = 2, 预期结果:k = 0, V[0] = 1, V[1] = 27、下面是快速排序算法中的一趟划分算法,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。
算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素内容的操作Swap( ):int Partition ( datalist &list, int low, int high ) {//在区间[ low, high ]以第一个对象为基准进行一次划分,k返回基准对象回放位置。
int k = low; Element pivot = list.V[low]; //基准对象for ( int i = low+1; i <= high; i++ ) //检测整个序列,进行划分if ( list.V[i].getKey ( ) < pivot.getKey( ) && ++ k != i )Swap ( list.V[k], list.V[i] );//小于基准的交换到左侧去Swap ( list.V[low], list.V[k] );//将基准对象就位return k; //返回基准对象位置}(1) 试画出它的程序流程图;(2) 试利用路径覆盖方法为它设计足够的测试用例(循环次数限定为0次,1次和2次)。
解答:(1)流程图如下。
(2) 测试用例设计8、下面是一段插入排序的程序,将R[k+1]插入到R[1…k]的适当位置。
R[0] = R[k+1];j = k;while (R[j] > R[0]){R[j+1] = R[j];j--;}R[j+1] = R[0];用路径覆盖方法为它设计足够的测试用例(while循环次数为0、1、2次)。
答:画出该程序的流程图:测试用例设计:循环次数输入数据覆盖路径k R[1]R[2]R[0]路径0112①③1 1 21①②③2 2 231①②②③。