测试数据:


设计佣金问题的程序

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、总结
   设计测试用例时要全面考虑用例对需求的覆盖和程序的分支覆盖,同时采用相应的测试方法并结合需求来设计测试用例。

 

posted on 2017-03-22 19:53  VioletGlass  阅读(686)  评论(1编辑  收藏  举报