实验1 逻辑覆盖法(含答案)
- 格式:doc
- 大小:53.00 KB
- 文档页数:3
工程学院计算机学院软件测试技术实验报告册适用专业:学期: 专业: 班级: 学号: 姓名: 指导教师:2014年9月目录实验一 (1)实验二 (5)实验三 (10)实验四 (13)实验五 (16)实验六 (19)附录 (22)实验一、黑盒测试一、实验目的1、熟练掌握黑盒测试方法的相关知识和方法;2、熟练等价类划分方法、边界值分析法、判定表方法和因果图法;3、掌握基本的测试用例的设计。
二、实验容1.题目一:问题某城市由三部分组成。
它们的名称和容分别是:(1)地区码:空白或三位数字;(2)前缀:非'0'或'1'的三位数字;(3)后缀:4位数字。
假定被测程序能接受一切符合上述规定的,拒绝所有不符合规定的。
根据该程序的规格说明,作等价类的划分,并设计测试方案。
2.题目二:三角形问题根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。
“一个程序读入三个整数。
把此三个数值看成是一个三角形的三个边。
这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。
”3.题目三:日期问题用决策表测试法测试以下程序:该程序有三个输入变量month、day、year(month 、 day和year均为整数值,并且满足:1≤month≤12和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。
例如,输入为2004 年11月29日,则该程序的输出为2004年12月1日。
(1) 分析各种输入情况,列出为输入变量 month 、 day 、 year 划分的有效等价类。
(2) 分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。
(3) 根据 (1) 和 (2) ,画出简化后的决策表。
4.题目四:找零钱最佳组合假设商店货品价格(R)皆不大于100元(且为整数),若顾客付款在100元 (P) ,求找给顾客最少货币个()数?(货币面值50元10 元,5 元,1元四种)三、实验要求(1)根据题目要求编写测试用例(参照表1进行用例设计);(2)实验结果要求给出两套测试用例集测试效果比较;(3)撰写实验报告四、实验容清单实验二、白盒测试一、实验目的1、熟练掌握白盒测试方法的相关知识和方法;2、熟练语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖和基本路径测试法;3、掌握基本的测试用例的设计。
逻辑覆盖测试方法
逻辑覆盖测试方法是一种基于程序的全面测试方法,是一种评估程序正确性的有效方法。
它的原理是,将程序的每一条指令都“逻辑覆盖”(即正确地执行运行一遍),以查找程序出错的地方或者有可能出错的地方,从而实现对程序正确性的测试。
逻辑覆盖测试的一般步骤如下:
1. 对程序划分基本块:基本块是程序的一个语句或一组相关的
语句,可以是一个简单语句、一组语句或多行语句。
2. 分析程序控制流:分析程序的控制流有助于确定哪些语句被
执行,哪些语句不被执行。
3. 设计测试组合:根据分析结果,设计执行程序的测试组合,
以保证每一个基本块都被执行一次。
4. 执行测试:按照设计的测试组合,执行程序。
5. 做总结:对程序的测试结果进行总结,看看是否有错误,如
果有就进行修改。
逻辑覆盖测试是一种常用的程序测试方法,它可以全面测试程序,可以有效地发现程序中出现的错误。
但是,它的测试效果可能受到程序结构的影响,如果程序中存在复杂的跳转和循环结构,可能无法实现全面的覆盖。
逻辑覆盖测试小结
逻辑覆盖测试是一种测试方法,目的是测试程序中各种逻辑路径是否都被覆盖,即是否所有可能的组合都已被测试。
该方法可以有效地发现程序中的逻辑错误和缺陷,提高测试的覆盖率和质量。
在逻辑覆盖测试中,测试人员需要根据程序的逻辑结构,设计测试用例,以覆盖所有可能的逻辑路径。
测试用例的设计需要考虑各种情况,如输入数据的范围、数据类型、边界条件等,以确保测试用例的完整性和准确性。
在实施逻辑覆盖测试时,需要注意以下几点:
1. 确定被测程序的逻辑结构,包括条件语句、循环语句、函数调用等。
2. 根据逻辑结构设计测试用例,确保覆盖所有可能的逻辑路径。
3. 进行测试用例的执行,记录测试结果和缺陷。
4. 对测试结果进行分析和评估,确定测试覆盖率和缺陷率,制定改进措施。
通过逻辑覆盖测试,可以提高测试的覆盖率和质量,发现程序中的逻辑错误和缺陷,从而改进程序的质量和可靠性。
- 1 -。
SHANGHAI UNIVERSITY<软件工程>实验总结学院计算机工程与科学学院学号10122050姓名王杰指导老师陈圣波日期2014.03实验一软件工程标准化文档一、实验目的1.了解国家标准GB/T8567-20062.熟悉软件产品开发文件的基本内容二、实验内容1.搜索和下载国家标准GB/T8567-2006。
2.通过阅读国家标准GB/T8567-2006,将以下文字填写完整:3.通过阅读国家标准GB/T8567-2006,填写以下表格:实验2 数据流分析【说明】某直达列车车票预售系统接受顾客的订票和取票业务。
1.顾客为了提前订票,可向系统提供个人信息及其预订购的车次和日期,系统根据个人信息是否齐全和车次是否正确来判断订票单是否合格。
对于合格的订票单,系统通过查找座位表审核相应的车次是否有剩余票。
如果有剩余票,则记录顾客个人信息以及订票信息,并向顾客提供取票单。
2.到了可以取票的时间,顾客向系统提供取票单,在检查单据合格的情况下,系统想顾客提供火车票。
3.售票员可以利用系统查询各车次车票的已订购、已售出和剩余情况。
【问题1】画出系统的顶层数据流图。
【问题2】对问题1的结果进行分解,画出0层和1层数据流图。
(1) 系统的顶层数据流图直达列车车票预售系统顾客不合格订票单取票单(2)0层数据流图1订票2取票订票信息表旅客信息表列车时刻表订票单取票通知无票通知火车票取票单3.查询工作人员各车次车票的已订购、已售出和剩余情况车次车票信息1层数据流图实验三下面为模块“产生毕业典礼学生表”的功能描述,请画出该模块的程序流程图和PAD 图。
记录StudentRecord 给出即将大学毕业的学生的姓名和平均分(GPA )。
我们的目的是建立一个参加毕业典礼的学生表。
候选毕业的学生表从文件”StudRecs”读入。
因为学校规定:GPA 低于minGPA 的学生不能毕业,因此那些平均分低于minGPA 的学生不参加毕业典礼。
逻辑覆盖例题逻辑覆盖是指在测试中,用例能够覆盖代码中所有的可能执行路径。
这是一项非常重要的测试技术,因为它可以帮助测试人员确定测试用例的有效性,从而提高软件质量和可靠性。
下面是一个逻辑覆盖的例题。
假设一个数学函数用于计算从1到n之间所有偶数的和。
以下是一个可能的实现:```int sum_even_numbers(int n) {int i = 0;int sum = 0;while (i <= n) {if (i % 2 == 0) {sum += i;}i++;}return sum;}```为了实现逻辑覆盖,我们需要编写测试用例,以便覆盖以下所有可能的执行路径:1. 输入为负数,函数应该返回0;2. 输入为0,函数应该返回0;3. 输入为奇数,函数应该返回1到n之间所有偶数的和;4. 输入为偶数,函数应该返回1到n之间所有偶数的和。
下面是一个测试用例的实现,可以覆盖上述所有可能的执行路径: ```void test_sum_even_numbers() {int n = -5;assert(sum_even_numbers(n) == 0);n = 0;assert(sum_even_numbers(n) == 0);n = 3;assert(sum_even_numbers(n) == 2);n = 4;assert(sum_even_numbers(n) == 6);}```通过这些测试用例,我们可以确保代码中的所有可能执行路径都被覆盖,从而提高了软件的可靠性和质量。
逻辑覆盖法是一种软件测试方法,旨在确保对软件系统的所有可能输入都进行了测试。
它将所有可能的输入组合成测试用例,以便覆盖所有可能的情况。
以下是一个简单的
例子:
假设我们有一个计算器程序,可以执行加、减、乘和除四种基本运算。
程序需要两个
输入值和一个操作符。
使用逻辑覆盖法,我们可以根据以下步骤生成测试用例:
1. 确认所有可能的操作符:+、-、*、/
2. 确认所有可能的输入值:整数、小数、负数等。
3. 列出所有可能的输入组合:
* 整数+整数
* 整数+小数
* 整数+负数
* 小数+整数
* 小数+小数
* 小数+负数
* 负数+整数
* 负数+小数
* 负数+负数
4. 对于每种运算符,至少需要测试一次。
通过这种方式,我们可以保证所有可能的输入组合都得到了测试,确保软件系统的稳
定性和可靠性。
白盒测试六种覆盖方式例题在软件开发过程中,白盒测试是一种非常重要的测试方法,通过分析代码的内部结构来评估系统的可靠性和健壮性。
为了充分覆盖测试用例,可以采用不同的覆盖方式,以确保软件系统的质量。
以下是白盒测试中常用的六种覆盖方式,每种方式附带一个例题进行说明:1. 语句覆盖(Statement Coverage)语句覆盖要求执行每个代码语句至少一次。
例如,有以下代码片段:public int getMax(int a, int b) {if (a > b) {return a;} else {return b;}}针对这段代码,语句覆盖要求必须覆盖到每一行代码,即至少执行一次if和else两个语句。
2. 判定覆盖(Decision Coverage)判定覆盖要求覆盖到每个判定的取值,确保能够执行每个判定的两个结果,即覆盖真假两种情况。
例如,在上面的代码中,判定覆盖要求要同时覆盖到a > b和a <= b两种情况。
3. 条件覆盖(Condition Coverage)条件覆盖要求覆盖每个条件的每种可能取值。
以上述代码为例,条件覆盖要求执行四次测试用例,分别为a > b,a <= b,a < b,a >= b。
4. 路径覆盖(Path Coverage)路径覆盖要求覆盖到每个可能的执行路径。
例如,对于下面这段代码:```java public int divide(int dividend, int divisor) { if (divisor == 0) { throw new IllegalArgumentException(。
白盒测试逻辑覆盖练习题一、语句覆盖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。
软件测试实验报告题目:逻辑覆盖的测试学号:姓名:教师:东南大学成贤学院电子与计算机工程学院2017年 10月 13 日实验题目1、实验内容为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。
2、实验目的与要求为流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。
3、实验环境操作系统:win10测试工具:VS2010测试语言:C++4、设计思路分析(包括需求分析、整体设计思路、概要设计)语句覆盖的公式:语句覆盖率=被评价到的语句数量/可执行的语句总数 x 100%的缺点:对程序执行逻辑的覆盖很低。
判定覆盖(分支覆盖)的公式:判定覆盖率=被评价到的判定分支个数/判定分支的总数X100%判定率(DDP)=被评价到的判定路径数量/判定路径的总数X100%的缺点:判定覆盖虽然把程序所有分支均覆盖到了,但其主要对整个最终取值进行度量,忽略了表达式内部取值。
条件覆盖CC(Condition Coverage),设计足够多的,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
率的公式:条件覆盖率=被评价到的条件取值的数量/条件取值的总数X100%的缺点:只考虑到每个判定语句中的每个,没有考虑到各个条件分支(或者涉及不到全部分支),即不能够满足判定覆盖判定条件覆盖判定条件覆盖率的公式:条件率=被评价到的条件取值和判定分支的数量/(条件取值总数+判定分支总数)的缺点:没有考虑单个判定对整体结果的影响,无法发现逻辑错误。
补充:修正判定条件覆盖修正单元的入口与出口必须至少被调用一次,程序中判断的每一个分支必须至少被执行一次。
对于程序中通过逻辑运算(AND,OR等)组成判断的基本布尔条件,每个条件必须取遍所有可能的值且每一个条件对判断的结果具有独立的作用。
条件组合覆盖,也称多MCC (Multiple Condition Coverage),设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。
一、三角形问题逻辑覆盖法1Scanner input=new Scanner(System.in);2double a=input.nextDouble();3double b=input.nextDouble();4double c=input.nextDouble();5boolean isTriangle=true;6if(a<1||a>200||b<1||b>200||c<1||c>200){7System.out.println("输入数据非法\n");}8else if((a+b)<=c||(a+c)<=b||(c+b)<=a){9System.out.println("非三角形\n");}10else if(a==b&&b==c&==c){11System.out.println("等边三角形\n");}12else if(a==b||b==c||a==c){13if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ 14System.out.println("等腰直角三角形\n");15}else{System.out.println("等腰三角形\n");}}16else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ 17System.out.println("直角三角形\n");}18else System.out.println("一般三角形\n");程序结构图语句:1、2、3、4、5、7、9、11、14、15、17、18路径:共七条路径(1)1-2-3-4-5-6-7(2)1-2-3-4-5-6-8-9(3)1-2-3-4-5-6-8-10-11(4)1-2-3-4-5-6-8-10-12-13-14(5)1-2-3-4-5-6-8-10-12-13-15(6)1-2-3-4-5-6-8-10-12-16-17(7)1-2-3-4-5-6-8-10-12-16-18判定:(1)a<1||a>200||b<1||b>200||c<1||c>200 (节点6)(2)(a+b)<=c||(a+c)<=b||(c+b)<=a (节点8)(3)a==b&&b==c (节点10)(4)a==b||b==c||a==c (节点12)(5)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (节点13)(6)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (节点16)条件:(1)a<1||a>200||b<1||b>200||c<1||c>200 (1.1-1.6)(2)(a+b)<=c||(a+c)<=b||(c+b)<=a (2.1-2.3)(3)a==b&&b==c (3.1,3.2)(4)a==b||b==c||a==c (4.1,4.2,4.3)(5)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (5.1,5.2,5.3) (6)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (6.1,6.2,6.3)1、语句覆盖/路径覆盖2、判定覆盖3、条件覆盖/判定条件覆盖二、NextDate问题基路径方法1.Scanner input=new Scanner(System.in);2.int year=input.nextInt(),input.nextInt(),day=input.nextInt();3.int tomorrowday=day,tomorrowmonth=month,tomorrowyear=year;4.if(year<1900||year>2100||month<1||month>12||day<1||day>31) {5.System.out.printf("输入日期非法");System.exit(-1);}6.else if((month==4||month==6||month==9||month==11)&&(day==31)){7.System.out.printf("输入日期不存在\n");System.exit(-1);}8.else if((year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>29){9.System.out.printf("输入日期不存在\n");System.exit(-1);}10.elseif((!(year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>28)){11.System.out.printf("输入日期不存在\n");System.exit(-1);}12.else if((month==4||month==6||month==9||month==11)&&day==30)13.{ tomorrowmonth++;14.tomorrowday=1; }15.elseif((month==1||month==3||month==5||month==7||month==8||month==10)&&day==31)16.{ tomorrowmonth++;17.tomorrowday=1;}18.else if(month==12&&day==31)19.{ tomorrowyear++;20.tomorrowmonth=1;21.tomorrowday=1;}22.else if(month==2&&(year%400==0||(year%100!=0&&year%4==0))&&day==29)23.{ tomorrowmonth++;24.tomorrowday=1;}25.elseif(month==2&&(!(year%400==0||(year%100!=0&&year%4==0)))&&day==28)26.{ tomorrowmonth++;27.tomorrowday=1;}28.else{ tomorrowday++;}29.System.out.println("nextdayis\n"+tomorrowyear+"/"+tomorrowmonth+"/"+tomorrowday);程序结构图基路径数量:分支节点:4、6、8、10、12、15、18、22、25基路径数量9+1=10基路径:(1)最长的路径:Start-1-2-3-4-6-8-10-12-15-18-22-25-26-27-29-End (2)节点4翻转:Start-1-2-3-4-5-29-End(3)节点6翻转:Start-1-2-3-4-6-7-29-End(4)节点8翻转:Start-1-2-3-4-6-8-9-29-End(5)节点10翻转:Start-1-2-3-4-6-8-10-11-29-End(6)节点12翻转:Start-1-2-3-4-6-8-10-12-13-14-29-End(7)节点15翻转:Start-1-2-3-4-6-8-10-12-15-16-17-29-End(8)节点18翻转:Start-1-2-3-4-6-8-10-12-15-18-19-20-21-29-End (9)节点22翻转:Start-1-2-3-4-6-8-10-12-15-18-22-23-24-29-End (10)节点25翻转:Start-1-2-3-4-6-8-10-12-15-18-22-25-28-29-End三、佣金问题数据流测试方法1.double lockprice=45,stockprice=30,barrelprice=25;2.double totallocks=0,totalstocks=0,totalbarrels=0;3.double commission;4.Scanner input=new Scanner(System.in);5.System.out.print("Input the locks,stocks and barrels:\n");6.int locks=input.nextInt(),stocks=input.nextInt(),barrels=input.nextInt();7.if(1>locks||locks>70||1>=stocks||locks>=80||1>=barrels||barrels>=90){8.System.out.println("输入错误");System.exit(-1);}9.totallocks=totallocks+locks;10.totalstocks=totalstocks+stocks;11.totalbarrels=totalbarrels+barrels;12. doublelocksales=lockprice*totallocks,stocksales=stockprice*totalstocks,barrelsales=barrelprice*totalbarrels,sales=locksales+stocksales+barrelsales;13.if(sales>1800){mission=0.10*1000;mission=commission+0.15*800;mission=commission+0.20*(sales-1800);}17.else if(sales>1000){mission=0.10*1000;mission=commission+0.15*(sales-1000);}20.else commission=0.10*sales;21.System.out.print("commission is$:"+commission);程序流程图定义—使用路径:locks:(1)6-7 是定义—清除路径(2)2-3-4-5-6-7-9 是定义—清除路径stocks:(1)6-7 是定义—清除路径(2)6-7-9-10 是定义—清除路径barrels:(1)6-7 是定义—清除路径(2)6-7-9-10-11 是定义—清除路径sales:(1)12-13 是定义—清除路径(2)12-13-14-15-16 是定义—清除路径(3)12-13-17 是定义—清除路径(4)12-13-17-18-19 是定义—清除路径(5)12-13-17-20 是定义—清除路径commission:(1)14-15-16-21 不是定义—清除路径(2)15-16-21 不是定义—清除路径(3)16-21 是定义—清除路径(4)18-19-21 不是定义—清除路径(5)19-21 是定义—清除路径(6)20-21 是定义—清除路径分析:locks、stocks、barrels与sales没有非定义清除路径,commission却有3条非定义—清除路径,所以该变量在使用之前可能被定义两次或多次,可将14-15-16三条语句合并成一条一句,18-19两条语句合并成一条语句,减少缺陷。
白盒测试覆盖例题白盒测试是软件测试中的一种重要手段,通过对代码内部结构的检查来评估软件的质量。
在白盒测试中,覆盖率是一个重要的指标,它用来衡量测试用例是否充分覆盖了被测代码的各个部分。
在本文中,我们将通过一个例题来探讨白盒测试覆盖问题。
例题描述假设有一个简单的计算器程序,能够实现加、减、乘、除等基本运算。
以下是程序的伪代码:def calculator(operator, num1, num2):if operator =='+':result = num1 + num2elif operator =='-':result = num1 - num2elif operator =='*':result = num1 * num2elif operator =='/':if num2 !=0:result = num1 / num2else:result ='Error: divide by zero'else:result ='Error: invalid operator'return result问题提出针对上述计算器程序,我们将提出以下几个问题,用以讨论在白盒测试中如何进行有效的覆盖:1.设计测试用例,确保覆盖所有的运算符(+、-、*、/)。
2.设计测试用例,验证除法运算中除数为0的情况。
3.设计测试用例,覆盖所有的条件分支路径。
4.如何进行语句覆盖测试?5.如何进行路径覆盖测试?解题思路1.设计测试用例覆盖所有的运算符:–测试用例1:operator=’+’,num1=3,num2=5–测试用例2:operator=’-’,num1=10,num2=2–测试用例3:operator=’*’,num1=4,num2=6–测试用例4:operator=’/’,num1=8,num2=22.验证除法运算中除数为0的情况:–测试用例5:operator=’/’,num1=6,num2=03.覆盖所有的条件分支路径:–测试用例6:operator=’%’(错误的运算符)–测试用例7:operator=’/’,num1=8,num2=04.语句覆盖测试:–通过设计测试用例,使得每个语句至少被执行一次。
实验二白盒测试基本逻辑覆盖——测试方法1、实验目的(1)理解等价类划分方法的内涵;(2)掌握等价类测试健壮性概念;(3)能够使用等价类划分法设计测试用例。
2、实验预习等价类划分测试方法的主要目的是能够对软件进行完备的测试,同时避免冗余测试用例的存在。
等价类的划分关键是确定类的等价关系,根据单/多缺陷假设和健壮性,等价类划分测试方法可以分为弱一般等价类测试、强一般等价类测试、弱健壮等价类测试和强健壮等价类测试四类方法。
3、实验内容及要求现在有一个应用于旅馆住宿管理系统的程序,其包含了用户登录、用户注册和用户结算等功能,需要对该程序进行测试,具体测试任务主要有:(1)旅馆住宿系统用户名字段测试用例设计;(必做)(2)旅馆住宿系统用户注册测试用例设计;(必做)(3)旅馆住宿系统结算功能测试用例设计。
(选做)在任务1中,用户名限制为6~10位自然数,要求使用等价类划分方法设计测试用例。
在任务2中,用户信息主要有登录帐号(6~10位自然数)、真实姓名(大小写的英文字符)、登录密码和确认密码、出生日期(其中有效年份1900~2010)。
任务3中,旅馆房费结算有一定的规则,当游客入住后可根据房间价格、入住天数、入住人是否有会员卡等情况给予折扣结算,房费计算公式为,房费=房间单价×折扣率×入住天数。
折扣率根据住宿人住宿天数(最多30天)、是否有会员卡、入住次数(3次及以下、3次以上)和物品寄存个数的不同有所不同,体现在不同条件下对应的积分不同,10分及10分以上折扣率为7折,10分以下折扣率为9折,具体规则:要求给出所有这些任务的实验步骤以及强健壮等价类测试用例,并给出实际测试结果。
4、实验总结(1) 请确定任务1和任务2的输入和输出变量。
(2) 对于任务1和任务2,在做健壮性测试用例时,给出输入变量的无效区间。
(3) 请结合实验谈一下等价类划分测试方法的优劣。
习题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、掌握白盒测试的基础知识,了解白盒测试又叫结构性测试,是基于被测程序的源代码的测试方法;2、掌握白盒测试的主要检查内容、测试目的及实施步骤;3、掌握白盒测试的3种基本测试方法:逻辑覆盖、路径测试和数据流测试;实验要求1、复习教材的有关内容,掌握白盒测试的3种基本测试方法;2、掌握一门编程语言,能编写代码并执行程序;3、对具体程序的源代码,能分别使用3种测试方法设计测试用例,并实施测试、分析测试结果;实验设备与器材a)硬件:P4以上计算机,512M内存以上,2G以上空闲硬盘空间b)软件:Windows操作系统、java程序设计软件、office系列软件实验原理1、白盒测试的目的和检查内容;2、白盒测试的基本方法;3、根据白盒测试方法设计测试用例及实施测试。
实验内容1、使用例子---三角形问题来进行路径测试。
以下是问题陈述:三角形问题接受三个整数a、b、c作为输入,用做三角形的边。
整数a、b、c 必须满足以下条件:C1: 1≤a≤200 C4: a<b+cC2: 1≤b≤200 C5: b<a+cC3: 1≤c≤200 C6: c<a+b程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形或非三角形。
如果输入值没有满足这些条件中的任何一个,则程序会通过输出信息来进行通知,例如,“b的取值不在允许取值的范围内。
”如果a、b和c取值满足c1、c2和c3,则给出以下四种相互排斥输出中的一个:1、如果三角形等边,则程序的输出是等边三角形。
JUnit2、如果恰好有两条边相等,则程序的输出是等腰三角形。
3、如果没有两条边相等,则程序输出的是不等边三角形。
4、如果c4、c5和c6中有一个条件不满足,则程序输出的是非三角形。
对上述问题进行以下测试工作:1)对上面的问题陈述,使用自己熟悉的编程语言(java)写出程序;public class test{public static void main (String arg[]){Scanner input=new Scanner(System.int);System.out.print("请输入3条边(中间空格隔开)");double a=input.nextDouble();double b=input.nextDouble();double c=input.nextDouble();int s1=0,s2=0;if(a>0&&b>0&&c>0&&a<200&&b<200&&c<200){if(a+b>c&&b+c>a&&c+a>b){if(a==b&&b==c)System.out.print("组成一个等边三角形"); else if(a==b||b==c||a==c)System.out.print("组成一个等腰三角形") }}}}2)根据编写的程序画出程序图;3)按照基路径测试方法,找出所有独立路径;4)根据独立路径设计测试用例;5)实施测试并分析测试结果。
一、实验目的掌握逻辑覆盖法设计测试用例、下载并安装功能测试工具且熟悉脚本的录制二、实验内容1. 下载Loa d Runn e r 工具,下载安装,录制邮箱登陆的脚本,并回放。
如需了解打开登录页面到登录成功的时间,要怎样修改脚本? 2. 用逻辑覆盖法设计下面问题的测试用例。
resul t =∑=||0N k k ,且resul t<max ,max 为一个常量值。
三、实验环境Windo w s XP 、LoadR u nner 四、实验步骤1、LoadR u nner 工具录制测试 一、截取代码如下:vuser _init () { web_u r l("aHR0c D ovL21haWw u MTI2L mNvb S 8=","URL=http://api.pc120.com/check u rl/aHR0c D ovL21haWw u MTI2L mNvb S 8=/?type=1&key=983333520", "Resou r ce=0", "RecCo n tent T ype=text/html", "Refer e r=", "Snaps h ot=t20.inf", "Mode=HTML",LAST);web_a d d_co o kie("logTy p e=df; DOMAI N =");web_a d d_co o kie("nts_m a il_u s er=zvlvj v :-1:1; DOMAI N ="); web_a d d_co o kie("NETEA S E_SS N =zvlvj v ; DOMAI N =");web_a d d_co o kie("P_INF O =zvlvj v @|1630361621|0|mail163|11&17|1;DOMAI N ="); web_a d d_co o kie("MAIL163_SS N =zvlvj v ; DOMAI N =");web_a d d_co o kie("logTy p e=df; DOMAI N =");web_ad d_coo kie("nts_ma il_us er=zvlvjv:-1:1; DOMAIN=");web_ad d_coo kie("NETEAS E_SSN=zvlvjv; DOMAIN=");web_ad d_coo kie("P_INFO=zvlvjv@|1630361621|0|mail163|11&17|1;DOMAIN=");web_ad d_coo kie("MAIL163_SSN=zvlvjv; DOMAIN=");web_ur l("","URL=/","Resour ce=0","RecCon tentT ype=text/html","Refere r=","Snapsh ot=t21.inf","Mode=HTML",EXTRAR ES,"Url=/index/2009/img/bgimg2.jpg", ENDITE M,"Url=/index/2009/img/2010co untdo wn.jpg", ENDITE M,"Url=/ggimg/163/img/091109_inde xbg_m enghu an.jpg", ENDITE M,"Url=/p/dm3sty le/js/0906031436/engine1.js", ENDITE M, LAST);lr_thi nk_ti me(20); /web_ur l("cmVzOi8vZTo lNWN0aGV3b3J-MSU1Y3RoZXd vcmxk LmV4Z S9OQV ZJRVJ SLkhU TSMtM jE0Nj Y5NzI wOCNo dHRwc zovL3JlZy4xNjMu Y29tL2xvZ2lucy5qc3A-dHlwZT0xJnB yb2R1Y3Q9b WFpbDEyNiZ1cmw9aHR0c DovL2VudHJ5Lm1h aWwuM TI2Lm NvbS9jZ2kv bnRlc2Rvb3I-aGlkJT NEMTA wMTAx MDIlM jZsaW dodHd laWdo dCUzR DElMj Z2","URL=http://api.pc120.com/checku rl/cmVzOi8vZTo lNWN0aGV3b3J-MSU1Y3RoZXd vcmxk LmV4Z S9OQV ZJRVJ SLkhU TSMtM jE0Nj Y5NzI wOCNo dHRwc zovL3JlZy4xNjMu Y29tL2xvZ2lucy5qc3A-dHlwZT0xJnB yb2R1Y3Q9b WFpbD EyNiZ1cmw9aHR0c DovL2VudHJ5Lm1h aWwuM TI2Lm NvbS9jZ2kv bn Rlc2Rvb3I-aGlkJT NEMTA wMTAx MDIlM jZsaW dodHd laWdo dCUzR DElMj Z2ZXJ pZnlj b29ra WUlM0QxJTI2bGFu Z3VhZ2UlM0QwJTI2c3R5bGUlM0QtMQ==/?type=1&key=983333520","Resour ce=0","RecCon tentT ype=text/html","Refere r=","Snapsh ot=t22.inf","Mode=HTML",EXTRAR ES,"Url=http://c.thewor /ErrorC onfig/sina.json?t=3814", "Refere r=", ENDITE M,"Url=http://c.thewor /img/ia_1.gif", "Refere r=", ENDITE M,LAST);web_ad d_coo kie("USERTR ACK=222.76.5.196.1259676376299376;DOMAIN=");web_ad d_coo kie("_ntes_nnid=62309a4e7ec f8d784d31c fc369e43fd8,0;DOMAIN=");web_ad d_coo kie("_ntes_nuid=62309a4e7ec f8d784d31c fc369e43fd8;DOMAIN=");web_ad d_coo kie("Provin ce=0590; DOMAIN=");web_ad d_coo kie("City=0591; DOMAIN=");web_ad d_coo kie("P_INFO=zvlvjv@|1630361621|0|mail163|11&17|1;DOMAIN=");web_ad d_coo kie("vjuids=-2cefe9a48.1256d53573d.0.fd6deb9a5a3e1;DOMAIN=");web_ad d_coo kie("vjlast=1630259596.1630259596.30; DOMAIN=");web_ad d_coo kie("ntes_u cc=; DOMAIN=");web_ad d_coo kie("NTES_U FC=2010000000000001100000000000000000000000000000000000000000000000; DOMAIN=");web_ad d_coo kie("isGd=0; DOMAIN=");web_ad d_coo kie("isFs=0; DOMAIN=");web_ad d_coo kie("MUSIC_BOX_S TATE=-1,,; DOMAIN=");web_ur l("logins.jsp","URL=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1","Resour ce=0","RecCon tentT ype=text/html","Refere r=","Snapsh ot=t23.inf","Mode=HTML",EXTRAR ES,"Url=/img/newind ex/b_bg.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,"Url=/img/newind ex/btn.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,"Url=/img/newind ex/top_ti ti.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,"Url=/img/imgRig ht-2.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,"Url=/img/newind ex/t3.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,"Url=/img/newind ex/logo_b g2.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,"Url=/img/newind ex/t2.gif","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://entry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie%3D1% 26lang uage%3D0%26styl e%3D-1", ENDITE M,LAST);lr_thi nk_ti me(17);web_su bmit_data("logins.jsp_2","Action=https:///logins.jsp","Method=POST","RecCon tentT ype=text/html","Refere r=https:///logins.jsp?type=1&produc t=mail163&url=http://e ntry/cgi/ntesdo or?hid%3D10010102%26ligh tweig ht%3D1%26veri fycoo kie% 3D1%26lang uage%3D0%26styl e%3D-1","Snapsh ot=t24.inf","Mode=HTML",ITEMDA TA,"Name=url","Value=http://entry/cgi/ntesdo or?hid=10010102&lightw eight=1&verify cooki e=1&langua ge=0&style=-1", ENDITE M,"Name=type", "Value=1", ENDITE M,"Name=produc t", "Value=mail163", ENDITE M,"Name=savelo gin", "Value=", ENDITE M,"Name=outfox er", "Value=", ENDITE M,"Name=domain s", "Value=", ENDITE M,"Name=sysche ckcod e", "Value=ed7cac d7d7c9c92b769ed4cce84771c67d6415dd", ENDITE M,"Name=userna me", "Value=zvlvjv@", ENDITE M,"Name=passwo rd", "Value=1232320", ENDITE M,"Name=Submit", "Value=", ENDITE M,LAST);}2、逻辑覆盖法设计一、根据所给的条件画出数据注流程图,如下所示:简化路径(1)语句覆盖要实现语句覆盖,覆盖程序中的所有可执行语句。