测试】实验1 功能性测试方法实验报告"/>
【软件测试】实验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.实验步骤
第一步:根据实验内容使用java编写程序。
第二步:根据实验内容设计测试用例,要求分别是用等价类测试和边界值分析方法生成测试用例。
第三步:执行测试用例,并记录测试结果。
第四步:编写实验报告,实验报告的内容包括测试用例的测试结果、程序中存在的bug、以及这两种测试用例生成方法对于揭露程序的错误有什么异同点。
4.实验代码
package rjcs1;
import java.io.*;
import java.text.*;
import java.util.*;public class Bill {public static void main(String[] args){BufferedReader br = new BufferedReader(new InputStreamReader(System.in));try {System.out.println("请输入通话开始时间,例:20210404193600:");String time1 = br.readLine();System.out.println("请输入通话结束时间,例:20210404193600:");String time2 = br.readLine(); try {SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMddHHmmss");Date date1 = format1.parse(time1);Date date2 = format1.parse(time2);Calendar cal1 = Calendar.getInstance();cal1.setTime(date1);Calendar cal2 = Calendar.getInstance();cal2.setTime(date2);long phonetime = cal2.getTime().getTime() - cal1.getTime().getTime();long minute;if(phonetime>=0 && phonetime/1000<60 || phonetime%60000>0) //不到一分钟按一分钟计算minute = phonetime/1000/60+1;elseminute = phonetime/1000/60;if(cal1.get(Calendar.MONTH) == Calendar.OCTOBER && cal1.get(Calendar.DATE) >= 25 && cal1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {//开始时间在十月最后一个周日if(cal1.get(Calendar.HOUR_OF_DAY)==2 && cal2.get(Calendar.HOUR_OF_DAY)==2 && cal2.get(Calendar.HOUR_OF_DAY)<3 && cal2.get(Calendar.MINUTE)<=cal1.get(Calendar.MINUTE)) {//因为转换而出现通话时间为负的情况minute+=60;System.out.println("通话时长:"+minute);System.out.println("通话账单:"+Money(minute));}else if(cal1.get(Calendar.HOUR_OF_DAY)<2 && cal2.get(Calendar.HOUR_OF_DAY)>=2) {//开始时间是两点前,结束时间是两点后(经历第二次转换System.out.println("通话时长:"+minute+"或"+(minute+60));System.out.println("通话账单:"+Money(minute)+"或"+Money(minute+60));}else {System.out.println("通话时长:"+minute);System.out.println("通话账单:"+Money(minute));} }else{if(cal2.get(Calendar.MONTH) == Calendar.OCTOBER && cal2.get(Calendar.DATE) >= 25 && cal2.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {if(cal2.get(Calendar.HOUR_OF_DAY)>=2)minute +=60;}else {if((cal1.get(Calendar.MONTH) == Calendar.MARCH && cal1.get(Calendar.DATE) >= 25 && cal1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)){//开始时间在三月最后一个周日 if(cal1.get(Calendar.HOUR_OF_DAY)<2 && cal2.get(Calendar.HOUR_OF_DAY)>=3)//开始时间在两点前,结束时间在三点后(经过了第一次转换minute -=60; }else{//开始时间不在三月最后一个周日if((cal2.get(Calendar.MONTH) == Calendar.MARCH && cal2.get(Calendar.DATE) >= 25 && cal2.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)){//但是结束时间在(从前一天打到这一天 if(cal2.get(Calendar.HOUR_OF_DAY)>=3 ) minute -= 60; }} } System.out.println("通话时长:"+minute);System.out.println("通话账单:"+Money(minute));}SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");String starttime = format2.format(date1);System.out.println("通话开始时间:"+starttime);String endtime = format2.format(date2);System.out.println("通话结束时间:"+endtime);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static double Money(long minute) {double money = 0;if(minute>1200 || minute <=0){ System.out.println("通话时间输入错误,请重新输入。"); }else{ if(minute<=20)money = minute*0.05;elsemoney = 1+(minute-20)*0.1;}return money;}
}
5.测试结果
等价类测试:
(此通话时长为现实中通话时长,非结束时间-开始时间)
T1={通话时长≤0分钟}
T2={0分钟<通话时长<1分钟}
T3={1分钟≤通话时长≤20分钟}
T4={20分钟<通话时长≤1200分钟}
T5={通话时长>1200分钟}
S1={无时制转换}
S2={春时制与夏时制转换}
S3={夏时制与秋时制转换}
用例ID | 输入数据 | 预期输出 | 实际输出 | 是否通过 | 备注 |
---|---|---|---|---|---|
1 | 20210410150000 20210409000000 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 对应等价类T1与S1 |
2 | 20210328031050 20210328013030 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 对应等价类T1与S2 |
3 | 20211031025830 20211031014059 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 对应等价类T1与S3 |
4 | 20210404191700 20210404191730 | 0.05 | 0.05 | 通过 | 对应等价类T2与S1 |
5 | 20210328015959 20210328030030 | 0.05 | 0.05 | 通过 | 对应等价类T2与S2 |
6 | 20211031025959 20211031020030 | 0.05 | 0.05 | 通过 | 对应等价类T2与S3 |
7 | 20211031015959 20211031020030 | 0.05或5.1 | 0.05或5.1 | 通过 | 对应等价类T2与S3 |
8 | 20210404191700 20210404192730 | 0.55 | 0.55 | 通过 | 对应等价类T3与S1 |
9 | 20210328015559 20210328031530 | 1.0 | 1.0 | 通过 | 对应等价类T3与S2 |
10 | 20211031025959 20211031021030 | 0.55 | 0.55 | 通过 | 对应等价类T3与S3 |
11 | 20211031015959 20211031021030 | 0.55或6.1 | 0.55或6.1 | 通过 | 对应等价类T3与S3 |
12 | 20200505050505 20200505151515 | 60.1 | 60.1 | 通过 | 对应等价类T4与S1 |
13 | 20200329000000 20200329050000 | 23.0 | 23.0 | 通过 | 对应等价类T4与S2 |
14 | 20200328222222 20200329040404 | 27.2 | 27.2 | 通过 | 对应等价类T4与S2 |
15 | 20201025013005 20201025115555 | 61.6或67.6 | 61.6或67.6 | 通过 | 对应等价类T4与S3 |
16 | 20201024232323 20201025030303 | 27.0 | 27.0 | 通过 | 对应等价类T4与S3 |
17 | 20200202020202 20200202220203 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 对应等价类T5与S1 |
18 | 20200329000000 20200330000000 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 对应等价类T5与S2 |
19 | 20201025013005 20201025222222 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 对应等价类T5与S3 |
边界值分析方法:
(此通话时长为现实中通话时长,非结束时间-开始时间)
通话时长:{-1s,0min,1s,59s,1min,1min1s, 19min59s,20min,20min1s,1199min59s,1200min,1200min1s}
通话日期:{无时制转换时间,春时制与夏时制转换,夏时制与秋时制转换}
用例ID | 输入数据 | 预期输出 | 实际输出 | 是否通过 | 备注 |
---|---|---|---|---|---|
1 | 20210410150000 20210410145959 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | -1s,无转换 |
2 | 20210328030000 20210328015959 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | -1s,春夏转换 |
3 | 20211031020000 20211031015959 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | -1s,夏秋转换 |
4 | 20210410150000 20210410150000 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 0min,无转换 |
5 | 20210328020000 20210328020000 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 0min,春夏转换 |
6 | 20211031030000 20211031030000 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 0min,夏秋转换 |
7 | 20210410145959 20210410150000 | 0.05 | 0.05 | 通过 | 1s,无转换 |
8 | 20210328015959 20210328030000 | 0.05 | 0.05 | 通过 | 1s,春夏转换 |
9 | 20211031025959 20211031020000 | 0.05 | 0.05 | 通过 | 1s,夏秋转换 |
10 | 20210410140000 20210410140059 | 0.05 | 0.05 | 通过 | 59s,无转换 |
11 | 20210328015959 20210328030058 | 0.05 | 0.05 | 通过 | 59s,春夏转换 |
12 | 20211031025959 20211031020058 | 0.05 | 0.05 | 通过 | 59s,夏秋转换 |
13 | 20200505050505 20200505050605 | 0.05 | 0.05 | 通过 | 1min,无转换 |
14 | 20200329015930 20200329030030 | 0.05 | 0.05 | 通过 | 1min,春夏转换 |
15 | 20201025025930 20201025020030 | 0.05 | 0.05 | 通过 | 1min,夏秋转换 |
16 | 20200505050505 20200505050606 | 0.1 | 0.1 | 通过 | 1min1s,无转换 |
17 | 20200329015930 20200329030031 | 0.1 | 0.1 | 通过 | 1min1s,春夏转换 |
18 | 20201025025930 20201025020031 | 0.1 | 0.1 | 通过 | 1min1s,夏秋转换 |
19 | 20200505050505 20200505052504 | 1.0 | 1.0 | 通过 | 19min59s,无转换 |
20 | 20200329015930 20200329031929 | 1.0 | 1.0 | 通过 | 19min59s,春夏转换 |
21 | 20201025025930 20201025021929 | 1.0 | 1.0 | 通过 | 19min59s,夏秋转换 |
22 | 20200505050505 20200505052505 | 1.0 | 1.0 | 通过 | 20min,无转换 |
23 | 20200329015930 20200329031930 | 1.0 | 1.0 | 通过 | 20min,春夏转换 |
24 | 20201025025930 20201025021930 | 1.0 | 1.0 | 通过 | 20min,夏秋转换 |
25 | 20200505050505 20200505052506 | 1.1 | 1.1 | 通过 | 20min1s,无转换 |
26 | 20200329015930 20200329031931 | 1.1 | 1.1 | 通过 | 20min1s,春夏转换 |
27 | 20201025025930 20201025021931 | 1.1 | 1.1 | 通过 | 20min1s,夏秋转换 |
28 | 20200505010505 20200505210504 | 119.0 | 119.0 | 通过 | 1199min59s,无转换 |
29 | 20200329015930 20200329225929 | 119.0 | 119.0 | 通过 | 1199min59s,春夏转换 |
30 | 20201025025930 20201025225929 | 119.0 | 119.0 | 通过 | 1199min59s,夏秋转换 |
31 | 20200505010505 20200505210505 | 119.0 | 119.0 | 通过 | 1200min,无转换 |
32 | 20200329015930 20200329225930 | 119.0 | 119.0 | 通过 | 1200min,春夏转换 |
33 | 20201025025930 20201025225930 | 119.0 | 119.0 | 通过 | 1200min,夏秋转换 |
34 | 20200505010505 20200505210506 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 1200min1s,无转换 |
35 | 20200329015930 20200329225931 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 1200min1s,春夏转换 |
36 | 20201025025930 20201025225931 | 通话时间输入错误,请重新输入。 | 通话时间输入错误,请重新输入。 | 通过 | 1200min1s,夏秋转换 |
6.实验总结
代码测试过程中出现的bug主要集中在:1.对时制转换的具体情况没能做到完备的分类;2.对因为时制转换导致的通话时间为负的情况没有进行处理;3.对不足一分钟记为一分钟的要求处理有误。
测试用例生成方法共同点:均可捕捉到边界值这类较容易发生的错误。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
测试用例生成方法区别:等价类测试考虑数据依赖关系,标识等价类时需要更多的判断和技巧,等价类标识出以后的处理也是机械的,但是所有的输入可能都被考虑进去,不仅仅考虑到边界值的出错;边界值分析方法基于定义域, 对输入的边界值进行测试,不识别数据或逻辑关系。因为程序大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的bug。
更多推荐
【软件测试】实验1 功能性测试方法实验报告
发布评论