【实验环境】
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
- 消息输出问题
当输入第一个字符是‘#’ 或者是‘*’,第二个输入字符是数字时,文档将被修改;如果第一个字符不是‘#’ 或 ‘*’ ,则输出消息N,如果第二个输入字符不是数字,则输出消息M。
【算法描述】
程序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. 初始化变量:
- 声明一个字符串变量 `message` 用于存储输入。
2. 读取输入:
- 从标准输入读取一个字符串,并将其存储在变量 `message` 中。
3. 检查第一个字符:
- 从 `message` 中提取第一个字符,并将其存储在变量 `firstChar` 中。
- 检查 `firstChar` 是否等于 '#' 或 '*'。
4. 嵌套条件:
- 如果 `firstChar` 是 '#' 或 '*':
- 从 `message` 中提取第二个字符,并将其存储在变量 `secondChar` 中。
- 使用 `isdigit` 检查 `secondChar` 是否是数字。
- 如果 `secondChar` 是数字,则输出 "文档修改"。
- 如果 `secondChar` 不是数字,则输出 "M"。
5. 否则条件:
- 如果 `firstChar` 不是 '#' 或 '*':
- 输出 "N"(表示第一个字符不是 '#' 或 '*')。
【测试用例】
-
三角形问题
因果分析:
C1:1<=a<=100
C2:1<=b<=100
C3:1<=c<=100
C4:a<b+c
C5:b<a+c
C6:c<a+b
C7: a=b
C8: a=c
C9: b=c
E1: 输入不满足条件
E2: 输出“非三角形”
E3: 输出“不等边三角形”
E4: 输出“等腰三角形”
E5: 输出“等边三角形”
因果图:
C10:边范围正确
C11:可构成三角形
C12:存在两边相等
C13:三边两两相等
因果图测试用例
测试编号 | 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 | 不等边三角形 | 不等边三角形 |
-
消息输出问题
因果分析:
C1:第一个字符是’#‘
C2:第一个字符是’*‘
C3:第二个字符是数字
E1:文档将被修改
E2:输出消息N
E3:输出消息M
因果图:
C4:第一个字符是’#’或’*’
因果图测试用例
测试编号 | 字符一 | 字符二 | 预期结果 | 输出结果 |
1 | # | 3 | 文档修改 | 文档修改 |
2 | * | 5 | 文档修改 | 文档修改 |
3 | 2 | 3 | N | N |
4 | # | e | M | M |
5 | * | # | M | M |
【实验总结】
1.在具体进行测试时,边界性测试和健壮性测试都有不同的作用,随着测试复杂程度的提升,程序出错的可能性也就越小。
2.在设计数据范围时,要结合现实条件设计,比如第二个实验中没有考虑月份中的大小月以及闰年,在实际使用中就可能出现问题
【附-程序源码】
- 三角形问题
#include <iostream>
using namespace std;
int main() {
int a, b, c;
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;
}
- 消息输出问题
#include <iostream>
#include <cctype>
using namespace std;
int main(){
string message;
while (cin >> message){
char firstChar = message[0];
if (firstChar == '#' || firstChar == '*'){
char secondChar = message[1];
if (isdigit(secondChar)){
cout << "文档修改" << endl;
}
else{
cout << "M" << endl;
}
}
else{
cout << "N" << endl;
}
}
return 0;
}