白盒测试:NextDate的基本路径覆盖法以及测试用例设计
程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31、1900≤ year ≤2050。),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。例如,输入为11月29日,则该程序的输出为11月30日。
一:测试用例设计。
被测代码:
/**Created by IntelliJ IDEA.User: StarfallDate: /11/16Time: 18:10*/public class GetNextDay {public static String getNextDay(int year, int month, int day){//闰年、平年每月的天数int[][] days={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};int index;if(1900 <= year && 2050>= year ) {if(year%4==0 && year%100!=0 || year%400==0)index = 1;//index=0:平年,index=1:闰年elseindex = 0;}else return "输入日期不正确";//判断输入日期是否正确if( month<1 || month>12 || day>days[index][month-1]|| day<1)return "输入日期不正确";//小于当前月份的天数if(day < days[index][month-1])day++;else{if(month==12){year++;month=1;}else{month++;}day=1;}return year + "-" + month + "-" + day;}}
1、画出当前程序流程图:
2、根据程序流程图画出控制流图:
3、计算环路复杂度:
1)根据区域计算:V(G)=12
2)根据边数和节点数计算:V(G)=E-N+2=29-19+2=12
3)根据判断节点数计算:V(G)=P+1=11+1=12
4、确定独立路径集合:
独立路径条数为V(G),即为12条:
路径1:1-2-3-7-19
路径2:1-2-7-19
路径3:1-2-3-4-5-8-10-7-19
路径4:1-2-3-4-6-8-10-7-19
路径5:1-2-3-4-6-9-10-7-19
路径6:1-2-3-4-5-6-8-10-7-19
路径7:1-2-3-4-6-8-10-11-7-19
路径8:1-2-3-4-6-8-10-11-12-7-19
路径9:1-2-3-4-6-8-10-11-12-13-7-19
路径10:1-2-3-4-6-8-10-11-12-13-14-15-19
路径11:1-2-3-4-6-8-10-11-12-13-14-16-17-19
路径12:1-2-3-4-6-8-10-11-12-13-14-16-18-19
二:用设计的测试用例测试程序。
1、根据基本路径,准备测试用例:
2、编写测试程序:
GetNextDayTest代码:
import org.junit.Assert;import org.junit.Test;/**Created by IntelliJ IDEA.User: StarfallDate: /11/16Time: 18:16*/public class GetNextDayTest {@Testpublic void GetNextDaytest01() {String GetNextDate = GetNextDay.getNextDay(2051,1,1);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest01:"+GetNextDate);}@Testpublic void GetNextDaytest02() {String GetNextDate = GetNextDay.getNextDay(1800,10,10);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest02:"+GetNextDate);}@Testpublic void GetNextDaytest03() {String GetNextDate = GetNextDay.getNextDay(,11,31);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest3:"+GetNextDate);}@Testpublic void GetNextDaytest04() {String GetNextDate = GetNextDay.getNextDay(2000,11,31);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest04:"+GetNextDate);}@Testpublic void GetNextDaytest05() {String GetNextDate = GetNextDay.getNextDay(1900,2,29);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest05:"+GetNextDate);}@Testpublic void GetNextDaytest06() {String GetNextDate = GetNextDay.getNextDay(,2,30);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest06:"+GetNextDate);}@Testpublic void GetNextDaytest07() {String GetNextDate = GetNextDay.getNextDay(,0,0);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest07:"+GetNextDate);}@Testpublic void GetNextDaytest08() {String GetNextDate = GetNextDay.getNextDay(,13,11);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest08:"+GetNextDate);}@Testpublic void GetNextDaytest09() {String GetNextDate = GetNextDay.getNextDay(,11,0);Assert.assertEquals("输入日期不正确", GetNextDate);System.out.println("GetNextDaytest09:"+GetNextDate);}@Testpublic void GetNextDaytest10() {String GetNextDate = GetNextDay.getNextDay(,11,10);Assert.assertEquals("-11-11", GetNextDate);System.out.println("GetNextDaytest10:"+GetNextDate);}@Testpublic void GetNextDaytest11() {String GetNextDate = GetNextDay.getNextDay(,12,31);Assert.assertEquals("-1-1", GetNextDate);System.out.println("GetNextDaytest11:"+GetNextDate);}@Testpublic void GetNextDaytest12() {String GetNextDate = GetNextDay.getNextDay(,10,31);Assert.assertEquals("-11-1", GetNextDate);System.out.println("GetNextDaytest12:"+GetNextDate);}}