第二次作业_105032014078
1.测试帖链接:http://www.cnblogs.com/mtLin/p/6573264.html
2.测试人员提出的问题、发现的缺陷
(1)计算佣金时,手机膜的计算方式错误;
(2)对输入的字符串的检查不够严格。当输入纯数字的字符串且大小大于int类型的最大值时程序崩溃;
(3)在计算佣金时,超出1000且小于1800的那部分按照0.15计算佣金,而不是全部佣金都按照0.15计算,销售金额超出1800时,超出1000小于1800的那部分按照0.15计算,超出1800的那部分按照0.2计算。而不是全部销售金额按照0.2计算佣金。
3.修正后的代码清单
(1)计算佣金时,手机膜的计算方式修改。
//计算销售额(这里出现错误,将计算手机膜的钱数算成了耳机的钱数,已修改) double salesAmount = headphonePrice*Integer.valueOf(headphone).intValue() +shellPrice*Integer.valueOf(shell).intValue() +protctorPrice*Integer.valueOf(protctor).intValue();
(2)加强对输入字符串的检查,控制输入为纯数字且不为负数。
//输入数量并检查输入是否符合要求(控制输入的只能为纯数字,且不能为负数,已修改) public String Input(String string) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine().trim(); if (s.matches("[0-9]+")&&s.length()<=8) { int num = Integer.valueOf(s).intValue(); if (num<0) { System.out.println("输入的数量不满足要求,请重新输入!"); num = Integer.valueOf(scanner.nextLine().trim()).intValue(); } return s; }else{ System.out.println("输入的数量不满足要求,请重新输入!"); s = scanner.nextLine().trim(); } return s; }
(3)在计算佣金时,修改了计算方法
//判断销售额(计算方法不正确,已修改) if (salesAmount<1000&&salesAmount>=0) { commission=salesAmount*0.1; }else if (salesAmount>=1000&&salesAmount<1800) { commission = (salesAmount-1000)*0.15+100; }else if (salesAmount>=1800) { commission = (salesAmount-1800)*0.2+220; } return commission; }
4.修正后心得体会
(1)代码的变更:
修改了手机膜计算方法,原本只控制了输入数量不能为负数,修改后新增了对小数点、字母等其他字符输入打的控制,最后修改了计算佣金的方法。
(2)分析出现缺陷的原因:
第一个缺陷出现的原因是粗心,在复制前面计算耳机方法的代码的时候忘记修改括号里面的;
第二个缺陷出现的原因是没有考虑周全,只控制输入不能为负数,没考虑到只能输入纯数字以及数字的长度;
第三个缺陷出现的原因是对题目的需求理解不够充分,导致佣金计算方法错误。
(3)对这部分教材内容的学习心得
最深的体会是需要细心,对题目的理解要深入,根据需求来设计,以测试的角度来寻找自己的缺陷。
附修改后完整代码:
package Practiseone; 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(); if (s.matches("[0-9]+")&&s.length()<=8) { int num = Integer.valueOf(s).intValue(); if (num<0) { System.out.println("输入的数量不满足要求,请重新输入!"); num = Integer.valueOf(scanner.nextLine().trim()).intValue(); } return s; }else{ System.out.println("输入的数量不满足要求,请重新输入!"); s = scanner.nextLine().trim(); } 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).intValue() +protctorPrice*Integer.valueOf(protctor).intValue(); //判断销售额(计算方法不正确,已修改) if (salesAmount<1000&&salesAmount>=0) { commission=salesAmount*0.1; }else if (salesAmount>=1000&&salesAmount<1800) { commission = (salesAmount-1000)*0.15+100; }else if (salesAmount>=1800) { commission = (salesAmount-1800)*0.2+220; } return commission; } }