测试数据:
设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone)、手机壳(Mobile phone shell)、手机贴膜(Cellphone screen protector)三个部件,每个部件单价为:耳机80元,手机壳10元,手机贴膜8元,每月月末向制造商报告销量,制造商根据销量给销售商佣金。如果销售额不足1000元按10%提取佣金,1000-1800元部分按15%提取佣金,超过1800元部分按20%提取佣金。 程序要求: 1)先显示“请分别输入三种手机配件的销售情况:” 2)不满足条件,返回:“输入数量不满足要求”,返回重新输入; 3)条件均满足, 则返回佣金额。返回等待输入。 import java.util.Scanner; public class Commission_caculator { public static final int headphonePrice = 80; public static final int shellPrice = 10; public static final int protctorPrice = 8; public static void main(String[] args) { // TODO Auto-generated method stub Commission_caculator commission_caculator = new Commission_caculator(); System.out.println("请分别输入三种手机配件的销售情况"); System.out.println("耳机数量:"); String headphoneNum = commission_caculator.Input(null); System.out.println("手机壳数量:"); String shellNum = commission_caculator.Input(null); System.out.println("手机贴膜数量:"); String protctorNum = commission_caculator.Input(null); double commission = commission_caculator.Commission(headphoneNum, shellNum, protctorNum); String commission_String=Double.toString(commission); System.out.println("销售佣金为:"+commission); } //输入数量并检查输入是否符合要求 public String Input(String string) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine().trim(); int num = Integer.valueOf(s).intValue(); if (num<0) { System.out.println("销售量不能为负数,请重新输入!"); num = Integer.valueOf(scanner.nextLine().trim()).intValue(); }else{ return s; } return s; } //计算佣金 public double Commission(String headphone,String shell,String protctor) { //定义一个变量存储佣金 double commission = 0; //计算销售额 double salesAmount = headphonePrice*Integer.valueOf(headphone).intValue()+shellPrice*Integer.valueOf(shell) +protctorPrice*Integer.valueOf(headphone).intValue(); //判断销售额 if (salesAmount<1000&&salesAmount>=0) { commission=salesAmount*0.1; }else if (salesAmount>=1000&&salesAmount<1800) { commission = salesAmount*0.15; }else if (salesAmount>=1800) { commission = salesAmount*0.2; } return commission; } }
1、流程图
2、测试用例设计和测试结果:
测试编号 |
数据 |
预期结果 |
实际结果 |
是否通过 |
001 |
abc,123,123 |
提示输入错误,重新输入 |
程序崩溃,抛出异常 |
× |
002 |
123,abc,123 |
提示输入错误,重新输入 |
程序崩溃,抛出异常 |
× |
003 |
123,12,abc |
提示输入错误重新输入 |
程序崩溃,抛出异常 |
× |
004 |
+0,-0,0 |
输出佣金0 |
输出佣金0 |
✔ |
005 |
-1,0,0 |
提示输入错误重新输入 |
提示输入不能为负数,重新输入 |
✔ |
006 |
0,-1,0 |
提示输入错误重新输入 |
提示输入不能为负数,重新输入 |
✔ |
007 |
0,0,-1 |
提示输入错误重新输入 |
提示输入不能为负数,重新输入 |
✔ |
008 |
空 |
提示输入错误,重新输入 |
程序崩溃,抛出异常 |
× |
009 |
2147483648,0,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
010 |
0,2147483648,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
011 |
0,0,2147483648 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
012 |
12.3,0,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
013 |
0,13.56,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
014 |
0,0,16.9 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
015 |
3,3,9(销售额小于1000) |
输出佣金:34.2 |
输出销售佣金为:29.40 |
× |
016 |
5,20,50(销售额等于1000) |
输出佣金:100 |
输出销售佣金为64.0: |
× |
017 |
9,20,50(销售金额大于1000小于1800) |
输出佣金:148 |
输出销售佣金为:99.2 |
× |
018 |
10,20,100(销售金额等于1800) |
输出佣金:220 |
输出销售佣金为:162.0 |
× |
019 |
30,60,90 |
输出佣金:604 |
输出销售佣金为:648.0 |
× |
语句覆盖:001、002、003
判定覆盖:004—019
3、实验结果与讨论
不满足问题的条件,无法解决佣金问题。计算佣金时,手机膜的计算方式错误,对输入的字符串的检查不够严格。当输入纯数字的字符串且大小大于int类型的最大值时程序崩溃。在计算佣金时,超出1000且小于1800的那部分按照0.15计算佣金,而不是全部佣金都按照0.15计算,销售金额超出1800时,超出1000小于1800的那部分按照0.15计算,超出1800的那部分按照0.2计算。而不是全部销售金额按照0.2计算佣金。
4、总结
设计测试用例时要全面考虑用例对需求的覆盖和程序的分支覆盖,同时采用相应的测试方法并结合需求来设计测试用例。