軟體測試實驗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 |