黑盒测试日期问题。
应用等价类和边界值法设计测试用例进行程序测试:该程序有三个输入变量
month、day、year(month 、 day 和 year 均为整数值,并且满足:1≤month≤12 和 1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期 在日历上隔一天的日期。例如,输入为 2004 年 11 月 29 日,则该程序的输出为 2004 年 12 月 1 日。
(1)分析各种输入情况,列出为输入变量 month 、 day 、 year 划分的有效等价类。
(2)分析程序的需求说明,结合等价类划分和边界值分析方法,给出问题可
能采取的操作。
(3)根据 (1) 和 (2) ,导出测试用例。
源程序:
package test;
import java.util.Scanner;
public class Text {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入四位数的年份、月份、以及日:");
int y = sc.nextInt();
int m = sc.nextInt();
int d = sc.nextInt();
if (y < 1000 || y > 9999) {
System.out.println("您输入的年份不符合要求!请重新输入!");
} else {
if (m < 1 || m > 12) {
System.out.println("您输入的月份不符合要求!请重新输入!");
} else {
switch (m) {
case 1:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
m += 1;
d = 1;
} else if (d == 31) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 2:
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) {
if (d < 1 || d > 29) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 28) {
m += 1;
d = 1;
} else if (d == 29) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
} else {
if (d < 1 || d > 28) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 27) {
m += 1;
d = 1;
} else if (d == 28) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
}
break;
case 3:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
m += 1;
d = 1;
} else if (d == 31) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 4:
if (d < 1 || d > 30) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 29) {
m += 1;
d = 1;
} else if (d == 30) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 5:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
m += 1;
d = 1;
} else if (d == 31) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 6:
if (d < 1 || d > 30) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 29) {
m += 1;
d = 1;
} else if (d == 30) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 7:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
m += 1;
d = 1;
} else if (d == 31) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 8:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
m += 1;
d = 1;
} else if (d == 31) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 9:
if (d < 1 || d > 30) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else if (d == 29) {
m += 1;
d = 1;
} else if (d == 30) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
break;
case 10:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
m += 1;
d = 1;
} else if (d == 31) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 11:
if (d < 1 || d > 30) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 29) {
m += 1;
d = 1;
} else if (d == 30) {
m += 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
case 12:
if (d < 1 || d > 31) {
System.out.println("您输入的日不符合要求!请重新输入!");
} else {
if (d == 30) {
y += 1;
m = 1;
d = 1;
} else if (d == 31) {
y += 1;
m = 1;
d = 2;
} else {
d += 2;
}
System.out.println(y + "年" + m + "月" + d + "日");
}
break;
}
}
}
} catch (Exception e) {
System.out.println("输入的数中存在非整数!请重新输入!");
}
}
}