(1)三角形问题:输入三个正整数a、b、c(1-200),分别作为三角形的三条边,通过程序判断三条边是否能构成三角形?如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形、一般三角形)。 请用黑盒测试的方法设计测试用例。
(2)NextDate问题:输入三个变量month、day和year,输出:输入日期后一天的日期,比如:输入为2000年6月9日,则该函数的输出应为2000年6月10日。年份区间为1-2050年。请用黑盒测试的方法设计测试用例。程序界面如下:
(3)实现一个登陆模块,用户名要求由字母和数字组成且第一个必须是字母,长度为6-10,密码由六位数字组成,请根据黑盒测试的方法设计测试用例。
- 三角形问题测试设计:
测试用例
三角形(等价类划分)
输入条件 | 有效等价类 | 无效等价类 |
是否三角形的三条边 | (A>0) (1) | (A<=0) (7) |
(B>0) (2) | (B<=0) (8) | |
(C>0) (3) | (C<=0) (9) | |
(A+B>C) (4) | (A+B<=C) (10) | |
(A+C>B) (5) | (A+C<=B) (11) | |
(B+C>A) (6) | (B+C<=A) (12) | |
是否等腰三角形 | (A=B) (13) | (A!=B)and(A!=C)and(B!=C) (16) |
(B=C) (14) | ||
(A=C) (15) | ||
是否等边三角形 | (A=B)and(A=C)and(B=C) (17) | (A!=B) (18) |
(B!=C) (19) | ||
(A!=C) (20) |
三角形测试用例,输入顺序是【A,B,C】
用例编号 | 【A,B,C】 | 覆盖等价类 | 输出 |
1 | 【3,4,5】 | (1)~(6) | 一般三角形 |
2 | 【0,1,2】 | (7) | 不是三角形 |
3 | 【1,0,2】 | (8) | 不是三角形 |
4 | 【1,2,0】 | (9) | 不是三角形 |
5 | 【1,2,3】 | (10) | 不是三角形 |
6 | 【1,3,2】 | (11) | 不是三角形 |
7 | 【3,1,2】 | (12) | 不是三角形 |
8 | 【3,3,4】 | (1)~(6),(13) | 等腰三角形 |
9 | 【3,3,3】 | (1)~(6),(17) | 等边三角形 |
- NextDate问题测试设计:
测试用例
输入条件 | 有效等价类 | 无效等价类 |
年 | 1到2050年的闰年(1) | 年份小于1(3) |
1到2050年的平年(2) | 年份大于2050(4) | |
月 | 1到12月(5) | 月份小于1(6) |
月数大于12(7) | ||
日 | 1~28天(8) | 天数小于1(12) |
29天(9) | 2月闰年天数<30(13) | |
30天(10) | 2月平年天数<29(14) | |
31天(11) | 1,3,5,7,8,10,12月,天数<32(15) <32(15) | |
月份为4,6,9,11,天数<31(16) | ||
天数>31(17) |
测试用例:
(1)、有效等价类设计测试用例
序号 | 测试数据 | 期望结果 | 覆盖范围 |
1 | 2016 2 29 | 2016年3月1日 | (1)(5)(7) |
2 | 2017 1 28 | 2017年1月29日 | (2)(3)(6) |
3 | 2017 1 31 | 2017年2月1日 | (2)(3)(9) |
4 | 2017 4 30 | 2017年5月1日 | (2)(4)(8) |
5 | 2017 12 31 | 2018年1月1日 | (2)(3)(9) |
(2)、无效等设
序号 | 输入数据 | 期望结果 | 覆盖范围 |
6 | 0 3 1 | 输入的年份无效! | (10) |
7 | 2051 3 1 | 输入的年份无效! | (11) |
8 | 205% 3 1 | 输入数只能为整数入! | (12) |
9 | 1901 -1 1 | 输入的月份无效! | (13) |
10 | 1901 13 1 | 输入的月份无效! | (14) |
11 | 1901 1% 1 | 输入数只能为整数 | (15) |
12 | 1901 1 -1 | 输入的日子无效! | (16) |
13 | 2016 2 30 | 输入的日子无效! | (17) |
14 | 2017 2 29 | 输入的日子无效! | (18) |
15 | 2017 3 32 | 输入的日子无效! | (19) |
16 | 2017 4 31 | 输入的日子无效! | (20) |
17 | 2017 4 32 | 输入的日子无效! | (21) |
18 | 2017 4 3% | 输入数只能为整数 | (22) |
- 登录问题:
测试用例:
登录(等价类划分)
输入条件 | 有效等价类 | 无效等价类 |
Username | 首字符为字母(1) | 首字符不为字母(3) |
其余5~9字符为字母和数字组合(2) | 其余输入少于5字符(4) | |
其余输入大于9字符(5) | ||
其余5~9字符不为字母数字(6) | ||
password | 输入为六位数字(7) | 输入不为6位字符(8) |
输入不为数字(9) |
登录问题测试用例:输入顺序【username,password】
用例编号 | 测试数据 | 期望结果 | 覆盖范围 |
1 | A12345,123456 | 用户名符合规则! 密码符合规则! | (1)(2)(7) |
2 | A123456,a12345 | 用户名符合规则! 密码必须为6位数字! | (1)(2)(9) |
3 | A123456,12345 | 用户名符合规则! 密码必须为6位! | (1)(2)(8) |
4 | 123456,123456 | 用户名首字符必须为字母,其余为字母和数字! 密码符合规则! | (2)(3)(7) |
5 | A123,abcdef | 用户名长度必须为6~10位! 密码必须为6位数字! | (1)(4)(8)(9) |
6 | 1234,a123456 | 用户名长度必须为6~10位! 密码必须为6位! | (3)(4)(8)(9) |
代码如下:
三角形问题:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Judge {
public int a;
public int b;
public int c;
public int type;
Judge(int a,int b,int c){
this.a = a;
this.b = b;
this.c = c;
}
public boolean JudgeTriangle(){
boolean flag = false;
if(a>1&&b>1&&c>1&&a<200&&b<200&&c<200){
if(a+b>c&&b+c>a&&a+c>b){
flag = true;
}
}
return flag;
}
public void JudgeTriangleType(){
if(JudgeTriangle()){
System.out.println("是一般三角形");
if(a==b||a==c||b==c){
System.out.println("是等腰三角形");
if(a==b&&b==c){
System.out.println("是等边三角形");
}
}
}
}
public static void main(String[] args) {
// 定义输入正确判断,不正确则一直输入;
while (true) {
try {
System.out.println("请输入三个整数,为三角形三边:");
int[] a = new int[3];
for(int i=0;i<3;i++){
a[i] = new Scanner(System.in).nextInt();
}
Judge judge = new Judge(a[0],a[1],a[2]);
if(judge.JudgeTriangle()){
System.out.println("是三角形");
judge.JudgeTriangleType();
}
else {
System.out.println("不是三角形,请重新输入!");
}
} catch (InputMismatchException e) {
System.out.println("输入的数只能为整数,请重新输入!");
}
}
}
}
NextData问题:
import java.util.InputMismatchException;
import java.util.Scanner;
public class NextData {
int day;
int month;
int year;
int[] commonYear = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] leapYear = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int typeOfYear;
public NextData(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
public void judgeYearClass() {
// 判断闰年平年
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
typeOfYear = 1;
} else {typeOfYear = 2;}
}
public void NextDataCul(){
if(judge()){
int Day = day + 1;
int[] Year;
if(typeOfYear == 1){Year = leapYear;}
else {Year = commonYear;}
if (Day > Year[month-1]) {
day = 1;
month = month + 1;
if (month > 12) {
month = 1;
year = year + 1;
}
System.out.println(year + "年" + month + "月" + day + "日");
} else {
day = day + 1;
System.out.println(year + "年" + month + "月" + day + "日");
}
}
}
public boolean judge(){ // 判断输入是否有效的
Boolean boolJudge = true;
judgeYearClass();
if(month>12||month<1){boolJudge = false;System.out.println("输入的月份无效!");} // 判断月份
else if(day>leapYear[month-1] && typeOfYear == 1 || day<1){// 判断日子
boolJudge = false;
System.out.println("输入的日子无效!");
} else if (day>commonYear[month-1] && typeOfYear == 2 || day<1) {
boolJudge = false;
System.out.println("输入的日子无效!");}
else if(year<1||year>2050){boolJudge = false;System.out.println("输入的年份无效!");} // 判断年份
return boolJudge;
}
public static void main(String[] args) {
while (true) {
try {
System.out.println("请输入三个整数,按年,月,日输入:");
int[] a = new int[3];
for (int i = 0; i < 3; i++) {
a[i] = new Scanner(System.in).nextInt();
}
NextData nextData = new NextData(a[2], a[1], a[0]);
nextData.NextDataCul();
} catch (InputMismatchException e) {
System.out.println("输入的数只能为整数,请重新输入!");
}
}
}
}
登录问题:
import java.util.Scanner;
public class login {
private String username;
private String password;
public login(String username, String password) {
this.username = username;
this.password = password;
}
public Boolean CheckOutUesrnameLength(String username){ // 检验用户名长度
if(username.length()>=6 && username.length()<=10){
return true;
}
else {return false;}
}
public Boolean CheckOutPasswordLength(String password){
if(password.length() == 6){
return true;
}
else {return false;}
}
public void CheckOutUsername(){
if(CheckOutUesrnameLength(username)){
String regix = "[A-Z_a-z]{1}\\w{5,9}";
boolean flag = username.matches(regix);
if(flag){System.out.println("用户名符合规则!");}
else {System.out.println("用户名首字符必须为字母,其余为为字母和数字!");}
}else {System.out.println("用户名长度必须为6~10位!");}
}
public void CheckOutPassword(){
if(CheckOutPasswordLength(password)){
String regix = "\\d{6}";
if(password.matches(regix)){System.out.println("密码符合规则!");}
else {System.out.println("密码必须为6位数字!");}
}
else {System.out.println("密码必须为6位!");}
}
public static void main(String[] args) {
while (true){
String username,password;
System.out.println("请输入用户名:");
username = new Scanner(System.in).next();
System.out.println("请输入密码:");
password = new Scanner(System.in).next();
login login = new login(username,password);
login.CheckOutUsername();
login.CheckOutPassword();
}
}
}