【实验环境】
Windows 10 操作系统, C,C++,C#、Java或Python语言开发环境(IDE)。
【实验类型】
设计型
【实验目的】
- 认识黑盒测试方法中边界值分析测试法原理
- 掌握黑盒测试方法中边界值分析测试法过程
【实验内容】
- 三角形问题
问题描述:三角形问题接受三个整数,a、b和c作为输入,用作三角形的边。程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形或非三角形。
作为输入:三角形的三条边必须满足如下条件:
C1:1<=a<=100
C2:1<=b<=100
C3:1<=c<=100
C4:a<b+c
C5:b<a+c
C6:c<a+b
- NextDate函数
问题描述:NextDate是一个由三个变量(月份、日期和年份)的函数。函数返回输入日期后边的那个日期。
作为输入:变量月份、日期和年都具有整数值,满足以下条件。
C1:1<=月份<=12
C2:1<=日期<=31
C3:1912<=年<=2050
【算法描述】
程序1算法描述:
1. 输入三个整数a、b和c,代表三角形的三条边。
2. 首先,检查输入的a、b和c是否在范围1到100内(满足条件C1到C3)。
3. 接下来,检查是否满足三角形的边长条件(满足条件C4到C6):
- 检查是否a + b > c
- 检查是否a + c > b
- 检查是否b + c > a
4. 如果满足上述条件,进一步判断三角形的类型:
- 如果a、b和c都相等,输出"等边三角形"。
- 否则,如果至少两个边相等,输出"等腰三角形"。
- 否则,输出"不等边三角形"。
5. 如果不满足条件4,输出"非三角形"。
程序2算法描述:
1. 输入三个整数,分别表示月份(month)、日期(day)和年份(year)。
2. 首先,检查输入日期是否符合以下条件(条件C1到C3):
- 1 <= month <= 12
- 1 <= day <= 31
- 1912 <= year <= 2050
3. 如果输入日期不符合条件,输出 "输入日期不符合条件",并结束算法。
4. 否则,进入下一个日期计算部分。
5. 增加日期(day)的值 by 1。
6. 检查日期是否超过了一个月的天数:
- 如果 day > 31,表示下一个月的第一天,day 被设置为 1,然后 month 的值增加 by 1。
- 如果 day > 30,而当前月份是4、6、9或11,同样 day 被设置为 1,month 的值增加 by 1。
- 如果 day > 29,当前月份为2,且 year 为闰年,同样 day 被设置为 1,month 的值增加 by 1。
- 如果 day > 28,当前月份为2,但 year 不是闰年,同样 day 被设置为 1,month 的值增加 by 1。
7. 继续检查月份,如果 month 超过 12,表示下一年的第一月,month 被设置为 1,year 的值增加 by 1。
8. 输出下一个日期的月份、日期和年份。
【测试案例】
-
三角形问题
- 边界值测试(4N+1)
测试编号 | a | b | c | 预期结果 | 输出结果 |
1 | 1 | 50 | 50 | 等腰三角形 | 等腰三角形 |
2 | 2 | 50 | 50 | 等腰三角形 | 等腰三角形 |
3 | 50 | 50 | 50 | 等边三角形 | 等边三角形 |
4 | 99 | 50 | 50 | 等腰三角形 | 等腰三角形 |
5 | 100 | 50 | 50 | 等边三角形 | 等边三角形 |
6 | 50 | 1 | 50 | 等腰三角形 | 等腰三角形 |
7 | 50 | 2 | 50 | 等腰三角形 | 等腰三角形 |
8 | 50 | 99 | 50 | 等腰三角形 | 等腰三角形 |
9 | 50 | 100 | 50 | 非三角形 | 非三角形 |
10 | 1 | 50 | 50 | 等腰三角形 | 等腰三角形 |
11 | 2 | 50 | 50 | 等腰三角形 | 等腰三角形 |
12 | 99 | 50 | 50 | 等腰三角形 | 等腰三角形 |
13 | 100 | 50 | 50 | 非三角形 | 非三角形 |
-
- 健壮性测试(6N+1)
测试编号 | a | b | c | 预期结果 | 输出结果 |
1 | 50 | 50 | 1 | 等腰三角形 | 等腰三角形 |
2 | 50 | 50 | 2 | 等腰三角形 | 等腰三角形 |
3 | 50 | 50 | 99 | 等腰三角形 | 等腰三角形 |
4 | 50 | 50 | 100 | 非三角形 | 非三角形 |
5 | 50 | 50 | 0 | 输入不合法 | 输入不合法 |
6 | 50 | 50 | 150 | 非三角形 | 非三角形 |
7 | 50 | 1 | 50 | 等腰三角形 | 等腰三角形 |
8 | 50 | 2 | 50 | 等腰三角形 | 等腰三角形 |
9 | 50 | 99 | 50 | 等腰三角形 | 等腰三角形 |
10 | 51 | 50 | 100 | 不等边三角形 | 不等边三角形 |
11 | 1 | 50 | 50 | 等腰三角形 | 等腰三角形 |
12 | 2 | 50 | 50 | 等腰三角形 | 等腰三角形 |
13 | 99 | 50 | 50 | 等腰三角形 | 等腰三角形 |
14 | 100 | 50 | 50 | 非三角形 | 非三角形 |
15 | 50 | 0 | 50 | 输入不合法 | 输入不合法 |
16 | 50 | 101 | 50 | 输入不合法 | 输入不合法 |
17 | 0 | 50 | 50 | 输入不合法 | 输入不合法 |
18 | 101 | 50 | 50 | 输入不合法 | 输入不合法 |
19 | 50 | 50 | 50 | 等边三角形 | 等边三角形 |
-
- 最坏情况测试(N^5)
测试编号 | a | b | c | 预期结果 | 输出结果 |
1 | 50 | 50 | 1 | 等腰三角形 | 等腰三角形 |
2 | 50 | 50 | 2 | 等腰三角形 | 等腰三角形 |
3 | 50 | 50 | 99 | 等腰三角形 | 等腰三角形 |
4 | 50 | 50 | 100 | 非三角形 | 非三角形 |
5 | 50 | 50 | 0 | 输入不合法 | 输入不合法 |
6 | 50 | 50 | 101 | 非三角形 | 非三角形 |
7 | 50 | 1 | 50 | 等腰三角形 | 等腰三角形 |
8 | 50 | 2 | 50 | 等腰三角形 | 等腰三角形 |
9 | 50 | 99 | 50 | 等腰三角形 | 等腰三角形 |
10 | 50 | 50 | 100 | 不是三角形 | 不是三角形 |
11 | 1 | 50 | 50 | 等腰三角形 | 等腰三角形 |
12 | 2 | 50 | 50 | 等腰三角形 | 等腰三角形 |
13 | 99 | 50 | 50 | 等腰三角形 | 等腰三角形 |
14 | 100 | 50 | 50 | 非三角形 | 非三角形 |
15 | 50 | 0 | 50 | 输入不合法 | 输入不合法 |
16 | 50 | 101 | 50 | 输入不合法 | 输入不合法 |
17 | 0 | 50 | 50 | 输入不合法 | 输入不合法 |
18 | 101 | 50 | 50 | 输入不合法 | 输入不合法 |
19 | 50 | 50 | 50 | 等边三角形 | 等边三角形 |
20 | 1 | 1 | 100 | 非三角形 | 非三角形 |
21 | 1 | 4 | 79 | 非三角形 | 非三角形 |
22 | 50 | 3 | 100 | 非三角形 | 非三角形 |
23 | 6 | 99 | 99 | 等腰三角形 | 等腰三角形 |
24 | 47 | 100 | 99 | 不等边三角形 | 不等边三角形 |
…… | …… | …… | …… | …… | …… |
50 | 15 | 16 | 99 | 非三角形 | 非三角形 |
-
- 健壮最坏情况测试(N^7)
测试编号 | a | b | c | 预期结果 | 输出结果 |
1 | 50 | 50 | 1 | 等腰三角形 | 等腰三角形 |
2 | 50 | 50 | 2 | 等腰三角形 | 等腰三角形 |
3 | 50 | 50 | 99 | 等腰三角形 | 等腰三角形 |
4 | 50 | 50 | 100 | 非三角形 | 非三角形 |
5 | 50 | 50 | 0 | 输入不合法 | 输入不合法 |
6 | 50 | 50 | 101 | 非三角形 | 非三角形 |
7 | 50 | 1 | 50 | 等腰三角形 | 等腰三角形 |
8 | 50 | 2 | 50 | 等腰三角形 | 等腰三角形 |
9 | 50 | 99 | 50 | 等腰三角形 | 等腰三角形 |
10 | 50 | 50 | 100 | 不是三角形 | 不是三角形 |
11 | 1 | 50 | 50 | 等腰三角形 | 等腰三角形 |
12 | 2 | 50 | 50 | 等腰三角形 | 等腰三角形 |
13 | 99 | 50 | 50 | 等腰三角形 | 等腰三角形 |
14 | 100 | 50 | 50 | 非三角形 | 非三角形 |
15 | 50 | 0 | 50 | 输入不合法 | 输入不合法 |
16 | 50 | 101 | 50 | 输入不合法 | 输入不合法 |
17 | 0 | 50 | 50 | 输入不合法 | 输入不合法 |
18 | 101 | 50 | 50 | 输入不合法 | 输入不合法 |
19 | 50 | 50 | 50 | 等边三角形 | 等边三角形 |
20 | 1 | 1 | 100 | 非三角形 | 非三角形 |
21 | 1 | 4 | 79 | 非三角形 | 非三角形 |
22 | 50 | 3 | 100 | 非三角形 | 非三角形 |
23 | 6 | 99 | 99 | 等腰三角形 | 等腰三角形 |
24 | 47 | 100 | 99 | 不等边三角形 | 不等边三角形 |
25 | 0 | 101 | 101 | 输入不合法 | 输入不合法 |
26 | 99 | 99 | 99 | 等边三角形 | 等边三角形 |
…… | …… | …… | …… | …… | …… |
50 | 15 | 16 | 99 | 非三角形 | 非三角形 |
-
Nextdate函数
- 边界值测试(4N+1)
测试用例 | month | day | Year | 预期输出 | 实际输出 |
1 | 7 | 10 | 1910 | 输入日期不符合条件 | 输入日期不符合条件 |
2 | 7 | 10 | 1911 | 输入日期不符合条件 | 输入日期不符合条件 |
3 | 1 | 1 | 1912 | 1/1/1912 | 1/1/1912 |
4 | 7 | 10 | 2049 | 7/11/2049 | 7/11/2049 |
5 | 7 | 10 | 2050 | 7/11/2050 | 7/11/2050 |
6 | 7 | 10 | 2051 | 输入日期不符合条件 | 输入日期不符合条件 |
7 | 0 | 10 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
8 | 1 | 10 | 2021 | 1/11/2021 | 1/11/2021 |
9 | 2 | 10 | 2021 | 2/11/2021 | 2/11/2021 |
10 | 11 | 10 | 2021 | 11/11/2021 | 11/11/2021 |
11 | 12 | 10 | 2021 | 12/11/2021 | 12/11/2021 |
12 | 13 | 10 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
13 | 2 | 27 | 2021 | 2/28/2021 | 2/28/2021 |
-
- 健壮性测试(6N+1)
测试用例 | month | day | Year | 预期输出 | 实际输出 |
1 | 7 | 10 | 1910 | 输入日期不符合条件 | 输入日期不符合条件 |
2 | 7 | 10 | 1911 | 输入日期不符合条件 | 输入日期不符合条件 |
3 | 7 | 10 | 1912 | 1/1/1912 | 1/1/1912 |
4 | 7 | 10 | 2049 | 7/11/2049 | 7/11/2049 |
5 | 7 | 10 | 2050 | 7/11/2050 | 7/11/2050 |
6 | 7 | 10 | 2051 | 输入日期不符合条件 | 输入日期不符合条件 |
7 | 0 | 10 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
8 | 1 | 10 | 2021 | 1/11/2021 | 1/11/2021 |
9 | 2 | 10 | 2021 | 2/11/2021 | 2/11/2021 |
10 | 11 | 10 | 2021 | 11/11/2021 | 11/11/2021 |
11 | 12 | 10 | 2021 | 12/11/2021 | 12/11/2021 |
12 | 13 | 10 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
13 | 2 | 27 | 2021 | 2/28/2021 | 2/28/2021 |
14 | 2 | 28 | 2021 | 3/1/2021 | 3/1/2021 |
15 | 2 | 29 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
16 | 2 | 28 | 2020 | 2/29/2020 | 2/29/2020 |
17 | 2 | 29 | 2020 | 3/1/2020 | 3/1/2020 |
18 | 2 | 30 | 2020 | 输入日期不符合条件 | 输入日期不符合条件 |
19 | 1 | 30 | 2021 | 1/31/2021 | 1/31/2021 |
-
- 最坏情况测试(N^5)
测试用例 | month | day | Year | 预期输出 | 实际输出 |
1 | 7 | 10 | 1910 | 输入日期不符合条件 | 输入日期不符合条件 |
2 | 7 | 10 | 1911 | 输入日期不符合条件 | 输入日期不符合条件 |
3 | 7 | 10 | 1912 | 1/1/1912 | 1/1/1912 |
4 | 7 | 10 | 2049 | 7/11/2049 | 7/11/2049 |
5 | 7 | 10 | 2050 | 7/11/2050 | 7/11/2050 |
6 | 7 | 10 | 2051 | 输入日期不符合条件 | 输入日期不符合条件 |
7 | 0 | 10 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
8 | 1 | 10 | 2021 | 1/11/2021 | 1/11/2021 |
9 | 2 | 10 | 2021 | 2/11/2021 | 2/11/2021 |
10 | 11 | 10 | 2021 | 11/11/2021 | 11/11/2021 |
11 | 12 | 10 | 2021 | 12/11/2021 | 12/11/2021 |
12 | 13 | 10 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
13 | 2 | 27 | 2021 | 2/28/2021 | 2/28/2021 |
14 | 2 | 28 | 2021 | 3/1/2021 | 3/1/2021 |
15 | 2 | 29 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
16 | 2 | 28 | 2020 | 2/29/2020 | 2/29/2020 |
17 | 2 | 29 | 2020 | 3/1/2020 | 3/1/2020 |
18 | 2 | 30 | 2020 | 输入日期不符合条件 | 输入日期不符合条件 |
19 | 1 | 30 | 2021 | 1/31/2021 | 1/31/2021 |
20 | 1 | 31 | 2021 | 2/1/2021 | 2/1/2021 |
21 | 1 | 32 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
22 | 4 | 30 | 2021 | 5/1/2021 | 5/1/2021 |
23 | 4 | 31 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
24 | 4 | 32 | 2021 | 输入日期不符合条件 | 输入日期不符合条件 |
…… | …… | …… | …… | …… | …… |
50 | 5 | 31 | 2023 | 6/1/2023 | 6/1/2023 |
-
- 健壮最坏情况测试(N^7)
测试用例 | month | day | Year | 预期输出 | 实际输出 |
1 | 7 | 10 | 1910 | 日期不合法 | 日期不合法 |
2 | 7 | 10 | 1911 | 日期不合法 | 日期不合法 |
3 | 7 | 10 | 1912 | 1912/7/11 | 1912/7/11 |
4 | 7 | 10 | 2049 | 2049/7/11 | 2049/7/11 |
5 | 7 | 10 | 2050 | 2050/7/11 | 2050/7/11 |
6 | 7 | 10 | 2051 | 日期不合法 | 日期不合法 |
7 | 0 | 10 | 2021 | 日期不合法 | 日期不合法 |
8 | 1 | 10 | 2021 | 2021/1/11 | 2021/1/11 |
9 | 2 | 10 | 2021 | 2021/2/11 | 2021/2/11 |
10 | 11 | 10 | 2021 | 2021/11/11 | 2021/11/11 |
11 | 12 | 10 | 2021 | 2021/12/11 | 2021/12/11 |
12 | 13 | 10 | 2021 | 日期不合法 | 日期不合法 |
13 | 2 | 27 | 2021 | 2021/2/28 | 2021/2/28 |
14 | 2 | 28 | 2021 | 2021/3/1 | 2021/2/29 |
15 | 2 | 29 | 2021 | 日期不合法 | 日期不合法 |
16 | 2 | 28 | 2020 | 2020/2/29 | 2020/2/29 |
17 | 2 | 29 | 2020 | 2020/3/1 | 2020/2/30 |
18 | 2 | 30 | 2020 | 日期不合法 | 日期不合法 |
19 | 1 | 30 | 2021 | 2021/1/31 | 2021/1/31 |
20 | 1 | 31 | 2021 | 2021/2/1 | 2021/2/1 |
21 | 1 | 32 | 2021 | 日期不合法 | 日期不合法 |
22 | 4 | 30 | 2021 | 2021/5/1 | 2021/5/1 |
23 | 4 | 31 | 2021 | 日期不合法 | 日期不合法 |
24 | 4 | 32 | 2021 | 日期不合法 | 日期不合法 |
…… | …… | …… | …… | …… | |
50 | 5 | 31 | 2023 | 2023/6/1 | 2023/6/1 |
51 | 6 | 1 | 2023 | 2023/6/2 | 2023/6/2 |
【实验总结】
1.在具体进行测试时,边界性测试和健壮性测试都有不同的作用,随着测试复杂程度的提升,程序出错的可能性也就越小。
2.在设计数据范围时,要结合现实条件设计,比如第二个实验中没有考虑月份中的大小月以及闰年,在实际使用中就可能出现问题
【附-程序源码】
- 三角形问题
#include <iostream>
using namespace std;
int main() {
int a, b, c;
while (
cin >> a >> b >> c) {
if (a >= 1 && b >= 1 && c >= 1 && a <= 100 && b <= 100 && c <= 100) {
if (a + b > c && a + c > b && b + c > a) {
if (a == b && b == c) {
cout << "等边三角形" << endl;
} else if (a == b || b == c || a == c) {
cout << "等腰三角形" << endl;
} else {
cout << "不等边三角形" << endl;
}
} else {
cout << "非三角形" << endl;
}
} else {
cout << "输入不合法" << endl;
}
}
return 0;
}
- NextDate函数
#include <iostream>
using namespace std;
bool IsLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return true;
} else {
return false;
}
}
bool IsValidDate(int month, int day, int year) {
if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1912 || year > 2050) {
return false;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
return (day <= 30);
} else if (month == 2) {
if (IsLeapYear(year)) {
return (day <= 29);
} else {
return (day <= 28);
}
} else {
return true;
}
}
void NextDate(int &month, int &day, int &year) {
day++;
if (day > 31 || (day > 30 && (month == 4 || month == 6 || month == 9 || month == 11)) ||
(day > 29 && month == 2 && IsLeapYear(year)) || (day > 28 && month == 2)) {
day = 1;
month++;
}
if (month > 12) {
month = 1;
year++;
}
}
int main() {
int month, day, year;
while(cin >> month >> day >> year){ // 以空格分隔输入
if (!IsValidDate(month, day, year)) {
cout << "输入日期不符合条件" << endl;
continue;
}
NextDate(month, day, year);
cout << month << "/" << day << "/" << year << endl;
}
return 0;
}