一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码:
public class CodeModification {
private static Scanner scanner;
/*
* 耳机80元,手机壳10元,手机贴膜8元
*/
public static float commission(int headphoneNum,int mpShellNum,int csProtectorNum){
int total = headphoneNum*80+mpShellNum*10+csProtectorNum*8;
float commission = 0;
if(total<1000){
commission = (float) (total*0.1);
}else if(total>=1000 && total<=1800){
commission = (float) (1000*0.1+(total-1000)*0.15);
}else if(total>1800){
commission = (float) (1000*0.1+800*0.15+(total-1800)*0.2);
}
return commission;
}
public static int inputHandle(Scanner sc, int index){
int data = 0;
String[] prompt = {"请输入耳机销量:","请输入手机壳销量:","请输入手机贴膜销量:"};
while(true){
System.out.println(prompt[index]);
String dataString = sc.nextLine();
try{
data = Integer.parseInt(dataString);
if (data<0) {
System.out.println("输入数量不满足要求");
continue;
}
return data;
}catch(Exception e){
System.out.println("输入数量不满足要求");
}
}
}
public static void main(String[] args) {
while(true){
System.out.println("请分别输入三种手机配件的销售情况:");
scanner = new Scanner(System.in);
int headphoneNum = inputHandle(scanner, 0);
int mpShell = inputHandle(scanner, 1);
int csProtectorNum = inputHandle(scanner, 2);
float tax = commission(headphoneNum,mpShell,csProtectorNum);
System.out.println("佣金额为:"+tax+"元");
}
}
}
2)依据覆盖技术,测试用例列表:
DD路径图:
程序图:
DD:
1 | A |
2 | B |
3 | C |
4 | D |
5 | E |
6 | F |
7 | G |
8 | H |
9 | I |
10 | J |
11 | K |
12 | P |
所有的条件:
A/1、开始
B/2、输入耳机销量
C/3、字符串里面是不是纯数字
D/4、判断数字是否大于0
E/5、输入手机销量
F/6、输入手机贴膜销量
G/7、计算销售额
H/8、销售额<1000
I/9、销售额 > 1000
J/10、销售额 < 1800
K/11、销售额 > 1800
P/12、结束
测试用例:
语句覆盖、路径覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖:
测试编号 | 耳机数量 | 手机数量 | 手机膜数量 | 预计结果 | 实际结果 | 执行路径 | 是否通过 |
1 | 100 | 100 | 100 | 1820.0元 | 1820.0元 | A-B-C-D-E-C-D-F-C-D-F-G-H-I-J-K-P | 是 |
2 | -12 | 3 | 3 | 输入不满足要求 | 输入不满足要求 | A-B-C-D-B | 是 |
3 | 12 | -12 | 32 | 输入不满足要求 | 输入不满足要求 | A-B-C-D-E-C-D-E | 是 |
4 | 12 | 12 | -32 | 输入不满足要求 | 输入不满足要求 | A-B-C-D-E-C-D-F-C-D-F | 是 |
5 | 10 | 10 | 10 | 182.0元 | 182.0元 | A-B-C-D-E-C-D-F-C-D-J-H-P | 是 |
6 | 100 | 10 | 10 | 1496.0元 | 1496.0元 | A-B-C-D-E-C-D-F-C-D-J-H-I-J-P | 是 |
条件覆盖、判定/条件覆盖、组合覆盖:
测试编号 | 耳机数量 | 手机数量 | 手机膜数量 | 预计结果 | 实际结果 | 执行路径 | 是否通过 |
10 | 133 | 134 | 233 | 2628.8元 | 2628.8元 | A-B-C-D-E-C-D-F-C-D-F-G-H-I-J-K-P | 是 |
11 | a | c | d | 输入不满足要求 | 输入不满足要求 | A-B-C-D-E-C-D-F-C-D-J-H-P | 是 |
12 | 200 | a | 100 | 输入不满足要求 | 输入不满足要求 | A-B-C-D-E-C-D-F-C-D-J-H-I-J-P | 是 |
测试代码:
import static org.junit.Assert.*;
import java.util.Scanner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class CodeModificationTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@SuppressWarnings("deprecation")
@Test
public void testCommission() {
String data1 = CodeModification.commission(10, 10, 10)+"";
assertEquals("98.0",data1);
}
@SuppressWarnings("deprecation")
@Test
public void testCommission1() {
String data2 = CodeModification.commission(10, 20, 30)+"";
assertEquals("136.0",data2);
}
@SuppressWarnings("deprecation")
@Test
public void testCommission2() {
String data3 = CodeModification.commission(20, 20, 20)+"";
assertEquals("252.0",data3);
}
}
测试结果:
测试总结:
未找到缺陷。
又进一步学习了测试代码的方法和技巧。