软件测试实验1
1、设计函数实现输入日期显示星期几,并用等价类及边界值法测试
实验步骤:
① 设计程序
② 划分等价类,得到等价类表。等价类表格式如下:
③ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:
④ 运用边界值法设计测试用例。
- 程序、
import java.util.*;
public class rili {
public static void main(String[] args) {
Scanner n=new Scanner(System.in);
int r=0,i,p=0,year,k,z=0,month,day,t,monthsum=0;
//r为闰年数,i为余数。p为平年数。k为起始年数。z为总天数。monthsum为各个月天数
System.out.println("输入1900年1月1号之后的年份:");
year=n.nextInt();
for(k=1900;k<year;k++)//计算输入年数到1900年之间的平年有几个,跟闰年有几个。
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
r++;
}
else
p++;
}
z=z+r*366;
z=z+p*365;//计算年的总天数。
System.out.println("输入月数:");
month=n.nextInt();
for(t=1;t<month;t++)//计算输入月,之前的月份的总天数。
{
switch(t)
{
case 1:monthsum=monthsum+31;
break;
case 2:
if((year%4==0 && year%100!=0)||(year%400==0))
monthsum=monthsum+29;
else
monthsum=monthsum+28;
break;
case 3:monthsum=monthsum+31;
break;
case 4:monthsum=monthsum+30;
break;
case 5:monthsum=monthsum+31;
break;
case 6:monthsum=monthsum+30;
break;
case 7:monthsum=monthsum+31;
break;
case 8:monthsum=monthsum+31;
break;
case 9:monthsum=monthsum+30;
break;
case 10:monthsum=monthsum+31;
break;
case 11:monthsum=monthsum+30;
break;
case 12:monthsum=monthsum+31;
break;
}
}
System.out.println("输入天:");
day=n.nextInt();
monthsum=monthsum+day;
z=monthsum+(z+1);
i=z%7;
if(i==0) {
System.out.println("星期一");
}
if(i==1) {
System.out.println("星期二");
}
if(i==2) {
System.out.println("星期三");
}
if(i==3) {
System.out.println("星期四");
}
if(i==4) {
System.out.println("星期五");
}
if(i==5) {
System.out.println("星期六");
}
if(i==6) {
System.out.println("星期七");
}
}
}
等价类表
输入条件 |
有效等价类 |
唯一标识 |
无效等价类 |
唯一标识 |
年 |
1900<=y<=2500的闰年 |
1 |
Y<1900 |
10 |
|
1900<=y<=2500的平年 |
2 |
y>2500 |
11 |
月 |
m=1,3,5,7,8,10,12 |
3 |
m<1 |
12 |
|
m=4,6,9,11 |
4 |
m>12 |
13 |
|
m=2 |
5 |
|
|
日 |
1<=d<=28 |
6 |
d<1 |
14 |
|
d=29 |
7 |
d>31 |
15 |
|
d=30 |
8 |
|
|
|
d=31 |
9 |
|
|
测试用例表
序号 |
输入数据 |
覆盖等价类 |
输出 |
1 |
2012.3.31 |
1-3.6-9 |
星期二 |
2 |
2022.5.31 |
1-3.6-9 |
日期不存在 |
3 |
2022.4.29 |
1.2.4.7 |
星期五 |
4 |
2022.4.30 |
1.2.4.8 |
星期六 |
5 |
2022.4.31 |
1.2.4.9 |
日期不存在 |
6 |
2022.2.28 |
1.2.5.6 |
星期一 |
7 |
2012.2.29 |
1.5.7 |
星期三 |
8 |
2022.2.29 |
2.5.7 |
日期不存在 |
9 |
2055.3.12 |
10.11 |
年份错误 |
10 |
2012.13.1 |
12.13 |
月份错误 |
11 |
2012.1.33 |
14.15 |
日期错误 |
2、找零钱最佳组合
假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。
请结合等价类划分法和边界值分析法为上述程序设计 出相应的测试用例。
实验步骤:
程序
import java.util.Scanner;
public class main {
/**
* 主函数
* @param args
*/
public static void main (String[] args) {
// TODO Auto-generated method stub
int pay = 0;//付款金额
int cost = 0;//商品花费
int change = 0;//找钱
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("请输入顾客付款金额:");
//对输入的内容进行检测,是否符合规则
try
{
pay = scanner.nextInt();
if (pay > 100 || pay < 0)
{
System.out.println("请输入正确的金额");
return;
}
}catch (Exception e)
{
System.out.println("请输入合法数字");
return;
}
System.out.println("请输入商店货品价格:");
//对输入的内容进行检测,是否符合规则
try
{
cost = scanner.nextInt();
if (cost > 100 || cost < 0)
{
System.out.println("请输入正确的金额");
return;
}
else if (cost > pay)
{
System.out.println("您的消费金额超出支付金额");
return;
}
}catch (Exception e)
{
System.out.println("请输入合法数字");
return;
}
change = pay-cost;
//输出此时的付款金额,商品价格,应找金额
System.out.println("付款金额" + pay +" 货品价格" + cost + " 应找总金额:" + change);
//获得结果,进行输出
String end = giveChange(change);
System.out.println("此次消费应找金额 " + change + " 元,其中应找 " + end);
}
/**
* 以找钱规则找钱
* @param change
* @return String//返回最终的找钱结果
*/
public static String giveChange(int change)
{
String str="";
int qianshu;//应该找钱的张数
int leftmoney = change;//还剩下多少钱,初始值为change
if (leftmoney / 50 != 0)
{
qianshu = leftmoney / 50;
str = str + qianshu + "张50元 ";
leftmoney = leftmoney - qianshu * 50;
}
if (leftmoney / 10 != 0)
{
qianshu = leftmoney / 10;
str = str + qianshu + "张10元 ";
leftmoney = leftmoney - qianshu * 10;
}
if (leftmoney / 5 != 0)
{
qianshu = leftmoney / 5;
str = str + qianshu + "张5元 ";
leftmoney = leftmoney - qianshu * 5;
}
if (leftmoney / 1 != 0)
{
qianshu = leftmoney / 1;
str = str + qianshu + "张1元 ";
leftmoney = leftmoney - qianshu * 1;
}
//检验是否完全找完
System.out.println("剩余没有找完的钱数为:"+leftmoney);
return str;
}
}
等价类表
输入条件 |
有效等价类 |
唯一标识 |
无效等价类 |
唯一标识 |
商品价钱 |
0<=R<=100且是整数 |
1 |
R>100 |
3 |
|
|
|
R<0 |
4 |
|
|
|
R不为整数 |
5 |
付款 |
P>R,P<=100 |
2 |
P<R |
6 |
|
|
|
P>100 |
7 |
测试用例
序号 |
输入数据 |
覆盖等价类 |
输出 |
1 |
R=132 |
3 |
请输入正确的金额
|
2 |
R=-5 |
4 |
请输入正确的金额
|
3 |
R=50,P=150 |
1,7 |
请输入正确的金额
|
4 |
R=50,P=20 |
1,6 |
请输入正确的金额
|
5 |
R=50.5 |
5 |
请输入合法数字
|
6 |
R=50,P=100 |
1,2 |
1张50 |