软件工程一元二次方程白盒测试
- 格式:docx
- 大小:99.62 KB
- 文档页数:5
软件测试实验报告白盒测试本页仅作为文档页封面,使用时可以删除
This document is for reference only-rar21year.March
软件测试与质量课程实验报告
实验3:白盒测试
掌握静态白盒测试方法及一般要求
掌握白盒测试用例的设计方法
掌握白盒测试基本测试方法:逻辑覆盖、路径测试。
语句覆盖输入数据路径预期输出1A=2,B=5,C=3,1239不能构成三角形2A=15,B=15,C=1512459等边三角形3A=15,B=15,C=13124679等腰三角形4A=23,B=24,C=25124689一般三角形
判定覆盖输入数据路径预期输出1A=2,B=3,C=5,1239不能构成三角形
语句覆
盖
编号输入数据覆盖语句
1array[8,9,10,11] key 101,2,3,8
2array[8,9,10,11] key 251,2,3,9
3array[8,9,10,11] key 81,2,3,6,7
4array[8,9,10,11] key 91,2,3,4,5
判定覆
盖
编号输入数据路径
1array[8,9,10,11] key 10-
2array[8,9,10,11] key 25--10-11-4-12
3array[8,9,10,11] key 8-9-4-5-6-7
果
果
果
7
-1
5
缺席:扣10分实验报告雷同:扣10分实验结果填写不完整:扣1 – 10
分
其他情况:扣分<=5分总扣分不能大于10分
11。
软件测试中的白盒测试技术与方法软件测试是保证软件质量的重要环节,而其中的白盒测试技术与方法更是不可或缺的一部分。
白盒测试旨在验证和评估软件内部结构、逻辑和算法等方面是否正确,以确保软件系统的稳定性和可靠性。
在本文中,将介绍几种常见的白盒测试技术与方法,以及它们在软件测试中的应用。
一、代码覆盖率测试代码覆盖率测试是一种常见的白盒测试技术,它测试了测试集对软件代码的覆盖率,以评估测试的完整性。
常见的代码覆盖率测试方法包括语句覆盖、判定覆盖、条件覆盖和路径覆盖等。
1. 语句覆盖:该方法要求执行测试用例时,所有的代码语句都要被执行到。
这种方法比较简单,但无法检测出代码中隐藏的逻辑错误。
2. 判定覆盖:该方法要求每个判定语句的两个分支都至少执行一次。
通过判定覆盖可以检测出判定语句导致的逻辑错误。
3. 条件覆盖:该方法要求每个判定语句的所有条件取值至少执行一次,包括真值和假值。
通过条件覆盖可以检测出条件语句的错误。
4. 路径覆盖:该方法要求执行测试用例时,覆盖软件代码所有可能的路径。
路径覆盖可以检测出程序中所有可能的执行错误。
二、静态代码分析静态代码分析是通过对代码进行分析,检测其中的潜在问题和错误。
静态代码分析的常见方法包括代码审查、代码检查工具和代码度量等。
1. 代码审查:通过人工对代码进行审查,检测出潜在的问题和错误。
代码审查可以发现一些常见的编程错误和不规范的代码风格。
2. 代码检查工具:利用专门的工具对代码进行分析,自动检测出代码中的问题和错误。
常见的代码检查工具包括lint、FindBugs和PMD 等。
3. 代码度量:通过对代码进行度量分析,评估代码的复杂性和可维护性。
代码度量可以帮助开发人员找出代码中存在的问题,进而改进代码质量。
三、数据流测试数据流测试是一种基于程序的数据流分析技术,用于检测程序中的潜在问题和错误。
数据流测试的关键是确定程序中的数据流关系,并针对这些关系设计测试用例。
1. 数据流分析:通过对程序中的数据流进行分析,确定数据流之间的依赖关系和变化情况。
白盒测试有哪些方法
白盒测试(White-box testing)主要是针对软件的内部结构和代码进行测试。
下面是一些常见的白盒测试方法:
1. 语句覆盖(Statement coverage):确保每个语句都至少被执行一次。
2. 判定覆盖(Decision coverage):确保每个决策点(如if语句)的所有可能结果都被覆盖到。
3. 条件覆盖(Condition coverage):针对每个决策点,测试每个条件的真假两种情况。
4. 路径覆盖(Path coverage):覆盖所有可能的执行路径,包括顺序和条件语句。
5. 循环覆盖(Loop coverage):测试循环结构,包括循环内部可能的执行次数和循环退出条件。
6. 数据流覆盖(Data flow coverage):测试对变量的定义和使用,包括局部变量的赋值、使用和更新。
7. 边界值分析(Boundary value analysis):测试输入的极端情况和边界条件。
8. 等价类划分(Equivalence partitioning):将输入划分为等价的类别,从每个类别中选择一个测试用例进行测试。
9. 控制流分析(Control flow analysis):分析程序的控制流程,构建控制流图并进行测试。
10. 代码复审(Code review):通过对代码进行审查,发现潜在的问题和错误。
这些方法可以根据具体的测试目标和系统特点进行选择和组合使用,以全面覆盖软件的内部结构和代码的各个方面。
软件测试第5章动态测试技术-白盒测试方法第5章动态测试技术(2)-白盒测试方法教学内容:1.掌握白盒测试的基本概念2.掌握逻辑覆盖、基本路径覆盖白盒测试方法3.理解其他白盒测试方法(循环测试、数据流测试、变异测试、域测试、Z路径覆盖)的内容及其对逻辑覆盖测试的补充4.了解白盒测试方法的选择策略课型:新授课教时:8课时教学重点:1.白盒测试基本概念2.逻辑覆盖测试3.基本路径测试4.开源白盒测试工具的使用方法1.白盒测试概述1.定义:根据程序内部的逻辑结构及相关信息设计测试用例2.主要的黑盒测试方法有2.1逻辑覆盖测试2.2基本路径覆盖测试2.3循环测试2.4程序插装2.5程序变异测试2.6其他白盒测试数据流测试域测试Z路径覆盖符号测试2.逻辑覆盖测试1.概述:1.1考察使用测试数据运行被测程序时对程序逻辑的覆盖程度1.2希望选择最少的测试用例来满足所需的覆盖标准1.3常用的覆盖标准语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖路径覆盖2.实例2.1题目要求:对下列子程序进行测试procedure example(y,z:real;var x:real);beginif (y>1) and (z=0) then x:=x/y;if (y=2) or (x>1) then x:=x+1;end;该子程序接受x、y、z的值,并将计算结果x的值返回给调用程序。
与该子程序对应的流程图如下:该子程序有两个判定:a: (y>1) and (z=0)c: (y=2) or (x>1)判定a中有两个条件:y>1、z=0判定c中有两个条件:y=2 、x>12.2根据程序的执行流程可知:●当判定a为“假”时,判定C中的x就是输入的x值,此时,相对于输入的x而言,判定C中的“x>1”就是“x>1”●当判定a为“真”时,判定C中的x是经过x=x/y计算后的值,此时,相对于输入的x而言,判定C中的“x>1”实际是“x/y>1”,即“x>y”2.3该子程序有四条可执行路径:路径1 sabcde ,其执行条件(L1)是a为“t”且c为“t”L1= {(y>1) and (z=0)} and{(y=2) or (x/y>1)}= (y>1) and (z=0) and (y=2) or(y>1) and (z=0) and (x> y )= (y=2) and (z=0) or(y>1) and (z=0) and (x> y )路径2 sace ,其执行条件(L2)是a为“f”且c为“f”L2 = not{(y>1) and (z=0)} andnot{(y=2) or (x>1)}= { not (y>1) or not (z=0) } and{ not (y=2) and not (x>1) }= not (y>1) and not (y=2) and not (x>1)ornot (z=0) and not (y=2) and not (x>1)=(y≤1) and (x ≤ 1)or(z ≠ 0) and (y ≠ 2) and (x ≤ 1)路径3 sacde ,其执行条件(L3)是 a 为“f”且c 为“t”L3 = not {(y>1) and (z=0)} and {(y=2) or (x>1)}= { not (y>1) or not (z=0)} and {(y=2) or (x>1)} = not (y>1) and (y=2) ornot (y>1) and (x>1) or not (z=0) and (y=2) or not (z=0) and (x>1) = (y ≤ 1) and (x>1) or(z ≠ 0) and (y=2) or (z ≠ 0) and (x>1)路径4 sabce ,其执行条件(L4)是 a 为“t”且c 为“f”L4 = {(y>1) and (z=0)} andnot {(y=2) or (x/y>1)}= (y>1) and (z=0) and not (y=2) and not (x> y) =(y>1) and (z=0) and (y ≠ 2) and (x ≤ y)3. 语句覆盖:3.1 语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次3.2 执行条件L1(t,t )(y=2) and (z=0) or4. 判定覆盖4.1 判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次) 4.2 执行条件L3(f,t )和L4 (t,f )或者执行条件L1(t,t )和L2(f,f )● 选择执行条件L3(f,t )和L4 (t,f )● L3 =(y ≤ 1) and (x>1) or (z ≠ 0) and (y=2) or (z ≠0) and (x>1)5.条件覆盖5.1条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次6.判定/条件覆盖6.1判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次6.27.条件组合覆盖7.1条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次7.2判定a中条件结果的所有可能组合:①y>1,z=0 ② y>1,z ≠ 0③y ≤ 1 ,z=0 ④ y ≤ 1 ,z ≠ 07.3判定c中条件结果的所有可能组合:⑤ y=2,x>1 ⑥ y=2,x ≤ 1 ;8.路径覆盖8.1路径覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能则要求每条环路至少经过一次)9.逻辑覆盖测试需注意的问题9.1在逻辑覆盖测试时,我们强调“运行这些测试用例时”覆盖了被测程序的哪些判定、条件或路径9.2这表明在使用这些测试用例运行被测程序时,能执行到相应的判定、条件或路径9.3当运行测试数据y = 12时,其执行路径是sacg,覆盖了判定a为真的情况(即覆盖y >10)。
4.完成软件白盒测试技术中的逻辑覆盖测试应用设计实验。
(理论考试重点内容实践)
一元二次方程白盒测试要求
1) 自备C语言程序(可从C语言程序设计的教科书上摘录若干典型程序,其他C++、C#、Java
程序均可);
#include
#include
using namespace std;
int main()
{
float a,b,c,mid,x1,x2,real,image;
cout << "请输入三个实数:";
cin >>a>>b>>c;
cout <<"\n方程";
if(fabs(a)<= 0)
cout << "不是二次方程,解为:"<< -c/b<
mid= b*b-4*a*c;
if(fabs(mid)<= 0)
cout <<"有两个相等的实数根:"<<-b/(2*a)<
{
x1=(-b+sqrt(mid))/(2*a);
x2=(-b-sqrt(mid))/(2*a);
cout << "有两个不相等的实数根:"<
else
{
x1 = -b/(2*a);
x2 = sqrt(-mid)/(2*a);
cout <<"有两个复数根:"<
}
}
2) 根据该程序绘制对应的程序流程图;
3) 分别根据程序流程图给出符合语句覆盖、判定覆盖、条件覆盖、路径覆盖以及判定/条
件覆盖和条件组合覆盖的的测试用例以及预期的运行结果;
语句覆盖
测试用例 期望结果 路径 测试结果
A=0 b=任意c=任意 不是二次方程
1-2
A=1 b=6 c=4 求两个不等实根 1-2-3-4-5-9 X1=-0.38 x2=-2.618
A=1 b=4 c=4 两个相等的实数根 1-2-3-4-6-7-9 X1=x2=2
A=6 b=6 c=2 求两个复数根 1-2-3-4-6-8-9 X1=-0.5+0.866i
x2=-0.5-0.866i
判定覆盖、条件覆盖、路径覆盖以及判定/条件覆盖和条件组合覆盖
测试用例 期望结果 路径 测试结果
A=0 b=任意c=任意 不是二次方程
1-2
A=1 b=6 c=4 求两个不等实根 1-2-3-4-5-9 X1=-0.38 x2=-2.618
A=1 b=4 c=4 两个相等的实数根 1-2-3-4-6-7-9 X1=x2=2
A=6 b=6 c=2 求两个复数根 1-2-3-4-6-8-9 X1=-0.5+0.866i
x2=-0.5-0.866i
4) 根据程序流程图画出流图,并确定线性独立路径的基本集合,然后给出符合各集合的测
试用例;
路径1:1-2-12
路径2:1-2-3-4-5-10-11
路径3:1-2-3-4-6-7-9-10-11
路径4:1-2-3-4-6-8-9-10-11
5) 根据上述测试用例执行程序,对比实际运行结果和预期运行结果,结果比对最好采用表格
的形式。
预期运行结果 实际运行结果
不是二次方程
求两个不等实根
X1=-0.38 x2=-2.618
两个相等的实数根
X1=x2=2
求两个复数根
X1=-0.5+0.866i x2=-0.5-0.866i
6) 对以上实验结果进行适当地分析与总结。
本次实验主要是运用白盒测试的方法,设计测试用例。白盒测试主要包括语句覆盖、判
定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。白盒测试试图穷举路径测试,
一般来说,穷举路径测试是不可能的,即使每条路径都测试了,也还是有可能出错。通过本
次实验,还了解了各种覆盖的区别与联系。