实验 1 功能性测试方法 软件测试

实验 1 功能性测试方法

1.实验目的
掌握功能性测试方法
2.实验内容
对电话账单来说,春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题。春季,这种转换发生在(3月末,4月初的)星期日凌晨 2:00时,这时时钟要设置为凌晨 3:00时。对称的转换通常发生在10月最后一个星期日,时钟要从2:59:59调回到 2:00:00。
请为采用以下费率计算用户的每月通话费:
(1)通话时间<=20分钟时,每分钟收费 0.05美元,通话时间不到1分钟时按1分钟计算。
(2)通话时间>20 分钟时,收费 1.00 美元,外加每分钟 0.10 美元,超过 20 分钟的部分,不到1分钟时按1分钟计算。
假设: (1)通话计费时间从被叫方应答开始计算,到呼叫方挂机时结束。 (2)通话时间的秒数四舍五入到分钟。 (3)没有超过 20个小时的通话。
3.实验步骤
第一步:根据实验内容编写程序。
第二步:根据实验内容设计测试用例,要求分别是用等价类测试和边界值分析方法生成测试用例。
第三步:执行测试用例,并记录测试结果。
第四步:编写实验报告,实验报告的内容包括测试用例的测试结果、程序中存在的 bug、以及这两种测试用例生成方法对于揭露程序的错误有什么异同点。
4.测试结果
4.1等价类方法
等价类划分如下:

测试结果如下;

程序执行结果展示:

4.2 边界值方法
边界值选取如下:
通话时间的边界值:

通话时期的边界值:

测试结果如下:

代码测试部分结果:

5.实验结果分析
(1)对于等价类方法的测试样例全部通过,对于边界值方法有四个样例未通过,原因是:在秋季转换当天两点是转换之前的两点还是转换之后的两点,可能需要输入更多的信息来约束。
(2)对于边界值方法,因为此题较为特殊,对于通话时间的不同对应两个不同的执行函数,所以将通话时间分为[0,20],(20,1200]两个时间段,分别对其去min-, min, min+, normal, max-, max, max+。

6.实验总结
(1)通过这次实验,使用了等价类方法和边界值方法从两个方面完成对代码的黑盒测试。等价类方法通过将变量值划分为有效等价类和无效等价类,通过弱健壮性测试方法完成测试用例的测试。边界值方法通过对变量的取得七个特殊的值,在测试用例中,一个取normal,一个取另外七个值,完成对所有测试的分析。
(2)基姆拉尔森计算公式:W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1) mod 7,在公式中d表示日期中的日数,m表示月份数,y表示年数。即可快速得到当天的日期,对于代码的完成帮助比较大,通过判定是否是三月或十月的最后一个周日完成判断是否通话时间跨越两个季节。
(3)对于秋季转换当日2点左右的时间对应有两个,可能还需要进一步的条件约束,还需要做进一步完善。
7.附录代码
#include
using namespace std;

int CaculateWeekDay(int y, int m, int d)
{
if(m1||m2)
{
m+=12;
y–;
}
int Week=(d+2m+3(m+1)/5+y+y/4-y/100+y/400)%7;

return Week;

}
int GETmin (int hour1,int mint1,int sec1,int hour2,int mint2,int sec2)
{
int ih = hour2 - hour1;
int im = mint2 - mint1;
int is= sec2 - sec1;
if(is<0)
{
is=is+60;
im–;
}
if(im < 0)
{
im = 60 +im;
ih–;
}
if(is<=30 ) return ih60+im;
else return ih
60+im+1;

}
bool change1 (int hour1,int mint1,int sec1,int hour2,int mint2,int sec2)
{
if(hour1<2&&hour2>=3) return true;
return false;

}
bool change2 (int hour1,int mint1,int sec1,int hour2,int mint2,int sec2)
{
if(hour2>=3) return true;
return false;

}
bool change3 (int hour1,int mint1,int sec1,int hour2,int mint2,int sec2)
{
if(hour1<3&&hour2>=2) return true;
return false;

}
bool change4 (int hour1,int mint1,int sec1,int hour2,int mint2,int sec2)
{
if(hour2>=2) return true;
return false;

}
double GETMoney(int time)
{
if(time<=20) return time0.05;
else
{
return 20
0.05+(time-20)*0.1+1;
}
}
int main()
{
int year1,month1,day1,hour1,mint1,sec1;
int year2,month2,day2,hour2,mint2,sec2;
cout << " 请输入开始时间 " << endl;
cout << “格式为: 年 月 日 时 分 秒” << endl;
cin >> year1 >> month1 >> day1>>hour1>>mint1>>sec1 ;
//int week1=CaculateWeekDay(year1,month1,day1);
cout << " 请输入结束时间 " << endl;
cout << “格式为: 年 月 日 时 分 秒” << endl;
cin >> year2 >> month2 >> day2>>hour2>>mint2>>sec2 ;
//int week2=CaculateWeekDay(year2,month2,day2);
///总的判断时间会不会大于20小时
if(year1!=year2) return 0;
if(month1 != month2) return 0;
if(day1!=day2 &&day1+1!=day2) return 0;
///春转换
if(month13)
{
if(day1
31)
{
if(CaculateWeekDay(year1,month1,day1)6)
{
if(change1(hour1,mint1,sec1,hour2,mint2,sec2))
{
if(day1+1
day2) hour2=hour2+24;
int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2)-60;
if(time <0)
{
cout<<“时间小于0!”<<endl;
return 0;
}
if(time >1200)
{
cout<<“时间超过1200分钟!”<<endl;
return 0;
}
cout<<“通话时间为:”<<time<<" 分钟"<<endl;
cout<<“花费金额为:”<<GETMoney(time)<<“美元”<<endl;
return 0;
}
}
}
if(day130)
{
if(CaculateWeekDay(year1,month1,day1)5&&day1+1day2)
{
if(change2(hour1,mint1,sec1,hour2,mint2,sec2))
{
if(day1+1
day2) hour2=hour2+24;
int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2)-60;
if(time <0)
{
cout<<“时间小于0!”<<endl;
return 0;
}
if(time >1200)
{
cout<<“时间超过1200分钟!”<<endl;
return 0;
}
cout<<“通话时间为:”<<time<<" 分钟"<<endl;
cout<<“花费金额为:”<<GETMoney(time)<<“美元”<<endl;
return 0;
}
}
}
}
if(month14)
{
if(CaculateWeekDay(year1,month1,day1)6&&day1-7<0)
{
if(change1(hour1,mint1,sec1,hour2,mint2,sec2))
{
if(day1+1
day2) hour2=hour2+24;
int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2)-60;
if(time <0)
{
cout<<“时间小于0!”<<endl;
return 0;
}
if(time >1200)
{
cout<<“时间超过1200分钟!”<<endl;
return 0;
}
cout<<“通话时间为:”<<time<<" 分钟"<<endl;
cout<<“花费金额为:”<<GETMoney(time)<<“美元”<<endl;
return 0;
}
}
if(CaculateWeekDay(year1,month1,day1)5&&day1-7<0&&day1+1day2)
{
if(change2(hour1,mint1,sec1,hour2,mint2,sec2))
{
if(day1+1
day2) hour2=hour2+24;
int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2)-60;
if(time <0)
{
cout<<“时间小于0!”<<endl;
return 0;
}
if(time >1200)
{
cout<<“时间超过1200分钟!”<<endl;
return 0;
}
cout<<“通话时间为:”<<time<<" 分钟"<<endl;
cout<<“花费金额为:”<<GETMoney(time)<<“美元”<<endl;
return 0;
}
}

 }
 ///秋转换
 if(month1==10)
 {
     if(CaculateWeekDay(year1,month1,day1)==6&&day1+7>31)
     {
         if(change3(hour1,mint1,sec1,hour2,mint2,sec2))
         {
             if(day1+1==day2) hour2=hour2+24;
             int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2)+60;
              if(time <0)
             {
                 cout<<"时间小于0!"<<endl;
                 return 0;
             }
             if(time >1200)
             {
                 cout<<"时间超过1200分钟!"<<endl;
                 return 0;
             }
            cout<<"通话时间为:"<<time<<" 分钟"<<endl;
             cout<<"花费金额为:"<<GETMoney(time)<<"美元"<<endl;
             return 0;
         }
     }
     if(CaculateWeekDay(year1,month1,day1)==5&&day1+7>=31&&day1+1==day2)
     {
         if(change4(hour1,mint1,sec1,hour2,mint2,sec2))
         {
             if(day1+1==day2) hour2=hour2+24;
             int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2)+60;
             //cout<<time<<endl;
              if(time <0)
             {
                 cout<<"时间小于0!"<<endl;
                 return 0;
             }
             if(time >1200)
             {
                 cout<<"时间超过1200分钟!"<<endl;
                 return 0;
             }
            cout<<"通话时间为:"<<time<<" 分钟"<<endl;
             cout<<"花费金额为:"<<GETMoney(time)<<"美元"<<endl;
             return 0;
         }
     }
 }
 if(day1+1==day2) hour2=hour2+24;
 int time=GETmin(hour1,mint1,sec1,hour2,mint2,sec2);
 if(time <0)
{
    cout<<"时间小于0!"<<endl;
    return 0;
}
  if(time >1200)
{
    cout<<"时间超过1200分钟!"<<endl;
    return 0;
}
cout<<"通话时间为:"<<time<<" 分钟"<<endl;
 cout<<"花费金额为:"<<GETMoney(time)<<"美元"<<endl;


return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值