一、实验目的
1、掌握因果图的概念。
2、掌握因果图测试用例设计法。
二、实验任务
1、某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息N;如果第二列字符不是数字,则给出信息M。用因果图法测试该程序,并撰写实验报告。(注:可以用输出“Modify file”模拟程序中要求的修改文件)
实验步骤:
1)分析原因与结果
原因:
1. 第一列字符是A
2. 第一列字符是B
3. 第二列字符是数字
结果:
1. 进行文件修改
2. 给出信息N
3. 给出信息M
2)画出因果图
3)转化为决策表
序号 | 1. | 2. | 3. | 4. | 5. | 6. | 7. | 8. | |
条件 | (1) | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
(2) | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | |
(3) | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
中间结果 | (11) | 1 | 1 | 1 | 1 | 0 | 0 | ||
结果 | (21) | 0 | 0 | 0 | 0 | 1 | 1 | ||
(22) | 1 | 1 | 0 | 0 | 0 | 0 | |||
(23) | 0 | 0 | 1 | 1 | 0 | 0 |
4)根据决策表设计测试用例,得到测试用例表
测试 用例ID | 第一列字符 | 第二列字符 | 预期结果 |
1 | A | 1 | Modify file |
2 | B | 9 | Modify file |
3 | A | & | M |
4 | % | 8 | N |
5 | # | @ | NM |
测试过程:
这里只选用了一组测试用例进行测试,有需要的可以根据下面提供的代码自行测试
5)执行测试,填写软件缺陷报告(软件缺陷报告格式同实验2)
测试模块: | 三角形 | 开 发 者: | |
测 试 员: | 测试日期: | 2024.4.24 | |
软件缺陷列表 | |||
缺陷ID | 缺陷详细信息 | ||
BUG1 | 无 | ||
BUG2 | 无 | ||
BUG3 | 无 |
测试代码:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string s1, s2;
bool b1 = true, b2 = true;
cin >> s1 >> s2;
if ( s1 != "A" && s1 != "B" ) {
cout << "N";
b1 = false;
}
for ( int i = 0; i < s2.size(); i++ ) {
if ( isdigit( s2[ i ] ) == false ) {
cout << "M";
b2 = false;
break;
}
}
if ( b1 && b2 )
cout << "Modify file";
cout << endl;
return 0;
}
2、对三角问题运用因果图法设计测试用例,并执行测试,撰写实验报告。
实验步骤:
1)分析原因与结果
原因:
1. 1 <= a,b,c <= 200
2. a + b > c
3. a = b != c
4. a = b = c
结果:
1. 不构成三角形
2. 普通三角形
3. 等腰三角形
4. 等边三角形
2)画出因果图
3)转化为决策表
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
条件 | (1) | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
(2) | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | |
(3) | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | |
(4) | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
中间结果 | (11) | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | ||||||
结果 | (21) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
(22) | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |||||||
(23) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||||||
(24) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4)根据决策表设计测试用例,得到测试用例表
测试 用例ID | a | b | c | 预期输出 |
1 | -1 | 199 | 2 | 不构成三角形 |
2 | 15 | 201 | 15 | 不构成三角形 |
3 | 22 | 22 | 22 | 等边三角形 |
4 | 31 | 40 | 19 | 普通三角形 |
5 | 99 | 121 | 200 | 普通三角形 |
6 | 88 | 88 | 88 | 等边三角形 |
7 | 200 | 200 | 1 | 等腰三角形 |
测试过程:
这里只选用了两组测试用例进行测试,有需要的可以根据下面提供的代码自行测试
5)执行测试,填写软件缺陷报告(软件缺陷报告格式同实验2)
测试模块: | 三角形 | 开 发 者: | |
测 试 员: | 测试日期: | 2024.4.24 | |
软件缺陷列表 | |||
缺陷ID | 缺陷详细信息 | ||
BUG1 | 当输入200,200,1时预期结果应为等腰三角形,但实际结果为普通三角形 | ||
BUG2 | 无 | ||
BUG3 | 无 | ||
BUG4 | 无 |
测试代码:
#include <stdio.h>
void triangle( int a, int b, int c ); // 函数声明 --- 作用域
int main(void)
{
int x,y,z;
printf("please input (length):\n");
printf("a:");
scanf("%d",&x);
printf("b:");
scanf("%d",&y);
printf("c:");
scanf("%d",&z);
triangle( x,y,z );//判断三角形类型
}
void triangle( int a, int b, int c )
{
int temp;
if( a > b )
{//如果a比较b大,就相互转换
temp = a;
a = b;
b = temp;
}
if( a > c )
{//如果a比较c大,就相互调换
temp = a;
a = c;
c = temp;
}
if( b > c )
{//如果b比较c大,就相互调换
temp = b;
b = c;
c = temp;
}
if( a<0||b<0||c<0||a>200||b>200||c>200 )
{
printf("不构成三角形\n");
return ;
}
else
{
if( a+b <= c )
{
printf("不构成三角形!!\n");
return ;
}
else
{
if( a == b )
{
if( a != c )
printf("等腰三角\n");
else
printf("等边三角\n");
}
else
{
printf("普通三角形\n");
}
}
}
}