黑盒測試用例設計(c語言)
一.實驗內容:
- 三角形問題的等價類測試和邊界值分析測試
- NextDate()函式決策表法測試
二.實驗要求:給出測試用例和測試結果
三.實驗步驟及結果:
3.1(三角形)實驗程式碼(c)
#include<stdio.h> #include<stdlib.h> int a=0,b=0,c=0; void shuru(); void panduan(int a1,int b1,int c1); int main() { char se; shuru(); panduan(a,b,c); while(1) { printf("是否要繼續y or n :"); scanf("%c",&se); if(se=='\n') scanf("%c",&se); switch(se) { case 'y': shuru(); panduan(a,b,c); break; case 'n': return 0; } } return 0; } void shuru() { printf("Please enter 三角形三邊 (a,b,c)\n"); scanf("%d,%d,%d",&a,&b,&c); while((a<1||a>100)||(b<1||b>100)||(c<1||c>100)) { if(a==0||b==0||c==0) printf("邊長不能為0\n"); else if(a<0||b<0||c<0) printf("邊長不能為負\n"); else printf("Please enter 1-100之間的整數\n"); scanf("%d,%d,%d",&a,&b,&c); } } void panduan(int a1,int b1,int c1) { int m1=a1+b1; int m2=a1+c1; int m3=b1+c1; if(a1>=m3||b1>=m2||c1>=m1) printf("非三角形\n"); else if(a1!=b1&&a1!=c1&&b1!=c1) printf("一般三角形\n"); else if((a1==b1&&b1!=c1)||(a1==c1&&a1!=b1)||(c1==b1&&a1!=c1)) printf("等腰三角形\n"); else if(a1==b1&&b1==c1) printf("等邊三角形\n"); }
3.2測試用例和結果(反映在圖中)
測試用例 輸入a,b,c 輸出
1 7,8,9 一般三角形
2 1,1,6 非三角形
3 5,5,9 等腰三角形
4 4,4,4 等邊三角形
5 0,1,0 邊長不能為0
6 4,-1,6 邊長不能為負
7 101,101,101 請輸入1-100之間的整數
測試圖形結果:
3.3(NextDate())實驗程式碼(c)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int year;
int month,day;
int leap;//標誌是閏年還是平年,為1時是閏年,為2時是平年
time_t t;//本來以下是用來判斷格式輸入是否正確的,但是結果不理想
struct tm stm;//A
while(1){//迴圈測試
printf("請輸入年(yyyy)/月(mm)/日(dd)\n");
scanf("%d/%d/%d",&stm.tm_year,&stm.tm_mon,&stm.tm_mday);//B
year=stm.tm_year;month=stm.tm_mon;day=stm.tm_mday;//C
t=mktime(&stm);//D
printf("*****輸出結果*****\n");
if(t!=-1)//E有問題,不管輸入格式是什麼,t永遠是-1
{
printf("輸入的日期時間格式出錯!\n");
continue;
}
if(year%4==0)//年份判斷
{
if(year%100==0)
{
if(year%400==0)
{
leap=1;
printf("%ld年%d月%d日是閏年\n",year,month,day);
}
else
{
leap=2;
printf("%ld年%d月%d日是平年\n",year,month,day);
}
}
else
{
leap=1;
printf("%ld年%d月%d日是閏年\n",year,month,day);
}
}
else
{
leap=2;
printf("%ld年%d月%d日是平年\n",year,month,day);
}
if(month==2)
{
if(leap==1)
{
printf("該月有29天\n");
if(day>29)
{
printf("對不起!您輸入的日期超出該月範圍\n");
continue;
}
else if(day==29)
{
month=month+1;
day=1;
}
else day=day+1;
}
if(leap==2)
{
printf("該月有28天\n");
if(day>28)
{
printf("對不起!您輸入的日期超出該月範圍\n");
continue;
}
else if(day==28)
{
month=month+1;
day=1;
}
else day=day+1;
}
}
else if(month==4||month==6||month==9||month==11)
{
printf("該月有30天\n");
if(day>30)
{
printf("對不起!您輸入的日期超出該月範圍\n");
continue;
}
else if(day==30)
{
month=month+1;
day=1;
}
else day=day+1;
}
else
{
printf("該月有31天\n");
if(day>31)
{
printf("對不起!超出該月範圍\n");
continue;
}
else if(day==31)
{
if(month==12&&day==31)
{
year=year+1;
month=1;
day=1;
}
else
{
month=month+1;
day=1;
}
}
else day=day+1;
}
printf("NEXT日期:%ld年%d月%d日\n",year,month,day);
}
return 0;
}
3.4測試用例和結果(反映在圖中)
決策表測試用例 month day year 預期輸出
Test1~3 8 20 2000 2001/8/21
Test4 8 31 2000 2001/9/1
Test5 8 32 2001 對不起!超出該月範圍
Test6~9 1 16 2001 2001/1/17
Test10 1 31 2013 2013/2/1
Test 11~14 12 31 2010 2011/1/1
Test15 12 31 2002 2003/1/1
Test16 2 29 2004 2004/3/1
Test17 2 28 2001 2001/3/1
Test18 2 30 2002 對不起!超出該月範圍
測試介面效果:
請輸入年(yyyy)/月(mm)/日(dd)
2000/8/20
*****輸出結果*****
2000年8月20日是閏年
該月有31天
NEXT日期:2000年8月21日
請輸入年(yyyy)/月(mm)/日(dd)
2000/8/31
*****輸出結果*****
2000年8月31日是閏年
該月有31天
NEXT日期:2000年9月1日
請輸入年(yyyy)/月(mm)/日(dd)
2000/8/32
*****輸出結果*****
2000年8月32日是閏年
該月有31天
對不起!超出該月範圍
請輸入年(yyyy)/月(mm)/日(dd)
2001/8/32
*****輸出結果*****
2001年8月32日是平年
該月有31天
對不起!超出該月範圍
請輸入年(yyyy)/月(mm)/日(dd)
2001/1/16
*****輸出結果*****
2001年1月16日是平年
該月有31天
NEXT日期:2001年1月17日
請輸入年(yyyy)/月(mm)/日(dd)
2013/1/31
*****輸出結果*****
2013年1月31日是平年
該月有31天
NEXT日期:2013年2月1日
請輸入年(yyyy)/月(mm)/日(dd)
2012/12/31
*****輸出結果*****
2012年12月31日是閏年
該月有31天
NEXT日期:2013年1月1日
請輸入年(yyyy)/月(mm)/日(dd)
2010/12/31
*****輸出結果*****
2010年12月31日是平年
該月有31天
NEXT日期:2011年1月1日
請輸入年(yyyy)/月(mm)/日(dd)
2002/12/31
*****輸出結果*****
2002年12月31日是平年
該月有31天
NEXT日期:2003年1月1日
請輸入年(yyyy)/月(mm)/日(dd)
2004/2/29
*****輸出結果*****
2004年2月29日是閏年
該月有29天
NEXT日期:2004年3月1日
請輸入年(yyyy)/月(mm)/日(dd)
2001/2/28
*****輸出結果*****
2001年2月28日是平年
該月有28天
NEXT日期:2001年3月1日
請輸入年(yyyy)/月(mm)/日(dd)
2000/2/30
*****輸出結果*****
2000年2月30日是閏年
該月有29天
對不起!您輸入的日期超出該月範圍
請輸入年(yyyy)/月(mm)/日(dd)