请通过黑盒测试的边界值分析法和等价类划分法来进行问题的解析并编写用例。
• 某公司生产机器人及部件,机器人包含3大部件:主控模块、通信模块及执行模块。该公司的代理商负责销售机器人整机和部件;公司要求每个代理商每月最少销售一整套机器人(即三类部件至少各销售一个);受限于公司产能,公司每个月最多给每个代理商提供80个主控模块、90个通信模块以及100个执行模块。每个主控模块售价90元、每个通信模块售价60元、每个执行模块售价50元。到6月末的时候,公司会根据代理商的销售情况计算佣金。
• 佣金计算方法如下:
• 销售额在1000元以下(含)的部分,佣金为10%;
• 超过1000元但不超过2400元(含)的部分,佣金为15%;
• 超过2400的部分,佣金为20%。
从输入域的角度设计测试用例。本题中,输入条件主要是3个:主控模块、通信模块和执行模块的销售量。而每个输入条件都只有2个边界点:最低销售量和最高提供量。
模块 | 输入域 | 边界值选取 |
---|---|---|
主控模块 | 1≤主控≤80 | {0,1,2,40,79,80,81} |
通信模块 | 1≤通信≤90 | {0,1,2,45,89,90,91} |
执行模块 | 1≤执行≤100 | {0,1,2,50,99,100,101} |
测试用例 | 主控 | 通信 | 执行 | 总销售额 | 预期输出 |
---|---|---|---|---|---|
Test1 | 0 | 45 | 50 | 5200 | 主控输入非法 |
Test2 | 1 | 45 | 50 | 5290 | 佣金:888 |
Test3 | 2 | 45 | 50 | 5380 | 佣金:906 |
Test4 | 79 | 45 | 50 | 12310 | 佣金:2292 |
Test5 | 80 | 45 | 50 | 12400 | 佣金:2310 |
Test6 | 81 | 45 | 50 | 12490 | 主控输入非法 |
Test7 | 40 | 0 | 50 | 6100 | 通信输入非法 |
Test8 | 40 | 1 | 50 | 6160 | 佣金:1062 |
Test9 | 40 | 2 | 50 | 6220 | 佣金:1074 |
Test10 | 40 | 89 | 50 | 11440 | 佣金:2118 |
Test11 | 40 | 90 | 50 | 11500 | 佣金:2130 |
Test12 | 40 | 91 | 50 | 11560 | 通信输入非法 |
Test13 | 40 | 45 | 0 | 6300 | 执行输入非法 |
Test14 | 40 | 45 | 1 | 6350 | 佣金:1100 |
Test15 | 40 | 45 | 2 | 6400 | 佣金:1110 |
Test16 | 40 | 45 | 99 | 11250 | 佣金:2080 |
Test17 | 40 | 45 | 100 | 11300 | 佣金:2090 |
Test18 | 40 | 45 | 101 | 11350 | 执行输入非法 |
Test19 | 40 | 45 | 50 | 8800 | 佣金:1590 |
package com.pdsu.test;
import java.util.Scanner;
public class test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//判断主控模块
System.out.println("输入主控模块的销售量:");
double zhu = sc.nextInt();
if (zhu < 1 || zhu > 80) {
System.out.println("主控模块输入错误");
System.exit(0);
}
//判断通信模块
System.out.println("输入通信模块的销售量:");
double tong = sc.nextInt();
if (tong < 1 || tong > 90) {
System.out.println("通信模块输入错误");
System.exit(0);
}
//判断执行模块
System.out.println("输入执行模块的销售量:");
double zhi = sc.nextInt();
if (zhi < 1 || zhi > 100) {
System.out.println("执行模块输入错误");
System.exit(0);
}
double sum = zhu * 90 + tong * 60 + zhi * 50;
System.out.println("总销售额为:" + sum);
double x = sum,m = 0;
if (x <= 1000) {
m = x * 0.1;
} else if (x <= 2400) {
m = (x - 1000) * 0.15 + 100;
} else {
m = (x - 2400) * 0.2 + 310;
}
System.out.println("佣金:" + m);
}
}
在输出域的选择上,取销售额作为中间输出域进行边界值测试。因为代理商每月最低售出主控模块1块、通信模块1块、执行模块1块.其销售额为200,佣金为20元.最多售出主控模块80块、通信模块90块、执行模块100块,其销售额为17600元,佣金为3350元.
测试用例 | 主控 | 通信 | 执行 | 总销售额 | 预期输出 |
---|---|---|---|---|---|
Test1 | 1 | 1 | 0 | 150 | 执行输入非法 |
Test2 | 1 | 1 | 1 | 200 | 佣金:20最小值 |
Test3 | 1 | 1 | 2 | 250 | 佣金:25 |
Test4 | 1 | 1 | 36 | 1950 | 佣金:242.5 |
Test5 | 1 | 1 | 37 | 2000 | 佣金:250 |
Test6 | 1 | 1 | 38 | 2050 | 佣金:257.5 |
Test7 | 39 | 39 | 2 | 5950 | 佣金:1020 |
Test8 | 39 | 39 | 3 | 6000 | 佣金:1030 |
Test9 | 39 | 39 | 4 | 6050 | 佣金:1040 |
Test10 | 80 | 90 | 99 | 17550 | 佣金:3340 |
Test11 | 80 | 90 | 100 | 17600 | 佣金:3350 |
Test12 | 80 | 90 | 101 | 17650 | 执行输入非法 |