实验三: 黑盒测试——决策表分析法
如果 day > 28,当前月份为2,但 year 不是闰年,同样 day 被设置为 1,month 的值增加 by 1。- 如果 day > 29,当前月份为2,且 year 为闰年,同样 day 被设置为 1,month 的值增加 by 1。7. 继续检查月份,如果 month 超过 12,表示下一年的第一月,month 被设置为 1,year 的值增加 by 1。- 如果 day > 30,
【实验环境】
Windows 10 操作系统, C,C++,C#、Java或Python语言开发环境(IDE)。
【实验类型】
设计型
【实验目的】
- 认识黑盒测试方法中决策表分析测试法原理
- 掌握黑盒测试方法中决策表分析测试法过程
【实验内容】
1.三角形问题
问题描述:三角形问题接受三个整数,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
2.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. 输出下一个日期的月份、日期和年份。
【测试案例】
1.三角形问题
* 条件桩:6
C1:a<b+c
C2:b<a+c
C3:c<a=B
C4:a=b
C5:a=c
C6:b=c
* 条件条目:2^6(Y or N)
* 行动桩:5
A1:非三角形
A2:不等边三角形
A3:等腰三角形
A4:等边三角形
A5:不可能
* 行动条目:5
1-32 | 33-48 | 49-56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | |
C1:a<b+c? | F | T | T | T | T | T | T | T | T | T | T |
C2:b<a+c? | - | F | T | T | T | T | T | T | T | T | T |
C3:C<a+b? | - | - | F | T | T | T | T | T | T | T | T |
C4:a=b? | - | - | - | T | T | T | T | F | F | F | F |
C5:a=c2 | - | - | - | T | T | F | F | T | T | F | F |
C6:b=c? | - | - | - | T | F | T | F | T | T | T | F |
A1:非三角形 | √ | √ | √ | ||||||||
A2:不等边三角形 | √ | ||||||||||
A3:等腰三角形 | √ | √ | √ | ||||||||
A4等边三角形 | √ | ||||||||||
A5:不可能 | √ | √ | √ |
测试编号 | a | b | c | 预期结果 | 输出结果 |
1 | 8 | 3 | 4 | 非三角形 | 非三角形 |
2 | 2 | 5 | 2 | 非三角形 | 非三角形 |
3 | 2 | 3 | 9 | 非三角形 | 非三角形 |
4 | 5 | 5 | 5 | 等边三角形 | 等边三角形 |
5 | 5 | 5 | 6 | 等腰三角形 | 等腰三角形 |
6 | 5 | 6 | 5 | 等腰三角形 | 等腰三角形 |
7 | 6 | 5 | 5 | 等腰三角形 | 等腰三角形 |
8 | 3 | 4 | 5 | 不等边三角形 | 不等边三角形 |
2.NextDate函数
等价类:
M1=(月份 每月有30天}
M2=(月份 每月有31天,12月除外}
M3=(月份 此月是2月}
M4={月份 此月是12月}
D1={日期:1<=日期<=27)
D2={日期:日期=28)
D3={日期:日期=29)
D4={日期:日期=30}
D5={日期:日期=31}
Y1=(年-年是闰年)
Y2=(年-年是平年}
* 条件桩:
C1:month in {M1,M2,M3,M4}
C2:day in {D1,D2,D3,D4,D5}
C3:year in {Y1,Y2}
* 条件条目:4*5*2
* 行动桩:
A1:不可能
A2:日期增1
A3:日期复位(置1)
A4:月份增1
A5:月份复位(置1)
A6:年增1
条件 | 1-3 | 4 | 5 | 6-9 | 10 | 11-14 | 15 | 16 | 17 | 18 | 19 | 20 | 21-22 |
C1:月份在 | M1 | M1 | M1 | M2 | M2 | M3 | M3 | M4 | M4 | M44 | M4 | M4 | M4 |
C2:日在 | D1,D2, D3 | D4 | D5 | D1,D2, D3,D4 | D5 | D1,D2, D3,D4 | D5 | D1 | D2 | D2 | D3 | D3 | D4,D5 |
C3:年在 | - | - | - | - | - | - | - | - | Y1 | Y2 | Y1 | Y2 | - |
A1:不可能 | √ | √ | √ | ||||||||||
A2:日增1 | √ | √ | √ | √ | √ | ||||||||
A3:日复位 | √ | √ | √ | √ | √ | ||||||||
A4:月增1 | √ | √ | √ | √ | |||||||||
A5:月复位 | √ | ||||||||||||
A6:年增1 | √ |
用例ID | 月 | 日 | 年 | 预期输出 | 输出结果 |
1-3 | 4 | 12 | 2001 | 4/13/2001 | 4/13/2001 |
4 | 4 | 30 | 2001 | 5/1/2001 | 5/1/2001 |
5 | 4 | 31 | 2001 | 不可能 | 输入日期不符合条件 |
6-9 | 1 | 15 | 2001 | 1/16/2001 | 1/16/2001 |
10 | 1 | 31 | 2001 | 2/1/2001 | 2/1/2001 |
11-14 | 12 | 15 | 2001 | 12/16/2001 | 12/16/2001 |
15 | 12 | 31 | 2001 | 1/1/2002 | 1/1/2002 |
16 | 2 | 15 | 2001 | 2/16/2001 | 2/16/2001 |
17 | 2 | 28 | 2004 | 2/29/2004 | 3/1/2004 |
18 | 2 | 28 | 2001 | 3/1/2001 | 3/1/2001 |
19 | 2 | 29 | 2004 | 3/1/2004 | 3/1/2004 |
20 | 2 | 29 | 2001 | 不可能 | 输入日期不符合条件 |
21,22 | 2 | 30 | 2001 | 不可能 | 输入日期不符合条件 |
【实验总结】
1.测试覆盖性: 决策表测试方法能够帮助设计出全面而紧凑的测试用例,覆盖了系统的各个方面,确保了测试的全面性。
2.问题发现: 在测试过程中,可能会发现系统中的一些潜在问题和错误,及时发现并修复这些问题,提高了软件的质量。
3.效率提升: 决策表测试方法相对于随机测试或者猜测性测试,能够更高效地进行测试,减少测试工作的时间和成本。
4.可重复性: 通过决策表测试,测试用例的设计是可重复的,可以在不同的测试周期中进行重复使用,提高了测试的可维护性。
5.改进机会: 如果在测试过程中发现了系统设计中的一些不足之处,可以提供反馈并推动系统的改进。
总体而言,决策表测试是一种强大的测试方法,有助于提高测试效率、全面性和准确性。通过实验总结,可以不断优化测试过程,确保软件系统的质量得到有效地保障。
【附-程序源码】
- 三角形问题
#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; }
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)