【实验环境】
Windows 10 操作系统, C,C++,C#、Java或Python语言开发环境(IDE)。
【实验类型】
设计型
【实验目的】
- 熟悉掌握白盒测试的原理
- 掌握白盒测试过程,了解逻辑覆盖白盒测试方法并能根据问题设计测试样例。
【实验内容】
- 逻辑覆盖
根据下述题目,给出语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、条件组合覆盖和路径覆盖的测试用例并执行测试。
void DoWork(int x, int y, int z)
{
1 int k=0,j=0;
2 if ((x>3)&&(z<10))
3 {
4 k=x* y-1;
5 j= abs(k); //abs 绝对值运算函数,也可以是平方根sqrt函数
6 }
7 if ((x==4)‖(y>5))
8 {
9 j=x*y+10;
10 j=j%3;
11 }
12 }
- N-S流程图测试用例设计和执行
编写一元二次方程( ax2+bx+c=0)算法,设计路径测试用例并执行测试。
【算法描述】
程序1算法描述:
输入: 三个整数 x、y 和 z
输出: j
1. 初始化两个整数变量 k 和 j 为 0。
2. 检查条件:如果 (x > 3) 且 (z < 10),则执行以下步骤:
a. 计算 k = x * y - 1。
b. 计算 j = k 的绝对值(使用 abs 函数)。
3. 检查条件:如果 (x == 4) 或 (y > 5),则执行以下步骤:
a. 计算 j = x * y + 10。
b. 计算 j 对 3 取模。
4. 输出j。
5.结束函数。
程序2算法描述:
输入: 三个实数 a, b, 和 c,表示一元二次方程的系数
输出: 包含两个实数的列表,表示方程的解
1. 计算判别式 delta = b^2 - 4ac。
2. 如果 delta 大于等于 0,则执行以下步骤:
a. 计算第一个解 root1 = (-b + sqrt(delta)) / (2a)。
b. 计算第二个解 root2 = (-b - sqrt(delta)) / (2a)。
c. 返回包含 root1 和 root2 的列表。
3. 如果 delta 小于 0,则方程无实数解,返回空列表。
4. 结束算法。
【测试案例】
-
Dowork函数
流程图
测试用例
测试编号 | 用例描述 | x | y | z | 预期结果(j) | 实际结果 |
1 | 语句覆盖测试 | 4 | 6 | 9 | 1 | 1 |
2 | 判定覆盖测试 | 4 | 6 | 9 | 1 | 1 |
3 | 2 | 8 | 5 | 2 | 2 | |
4 | 4 | 6 | 11 | 1 | 1 | |
5 | 2 | 6 | 9 | 1 | 1 | |
6 | 条件覆盖测试 | 4 | 6 | 9 | 1 | 1 |
7 | 2 | 8 | 5 | 2 | 2 | |
8 | 1 | 7 | 12 | 2 | 2 | |
9 | 4 | 6 | 11 | 1 | 1 | |
10 | 2 | 6 | 9 | 1 | 1 | |
11 | 5 | 3 | 5 | 14 | 14 | |
12 | 判定/条件覆盖测试 | 4 | 6 | 9 | 1 | 1 |
13 | 2 | 8 | 5 | 2 | 2 | |
14 | 条件组合覆盖测试 | 4 | 6 | 9 | 1 | 1 |
15 | 2 | 8 | 5 | 2 | 2 | |
16 | 4 | 6 | 11 | 1 | 1 | |
17 | 2 | 6 | 9 | 1 | 1 | |
18 | 路径覆盖测试 | 4 | 6 | 9 | 1 | 1 |
19 | 2 | 8 | 5 | 2 | 2 | |
20 | 4 | 6 | 11 | 1 | 1 | |
21 | 2 | 6 | 9 | 1 | 1 |
-
一元二次方程
流程图
N/S图
测试用例
测试路径 | 测试用例描述 | a | b | c | 预期结果 | 实际结果 |
路径1 | Δ>0,有两个实数解 | 2 | 5 | -3 | 0.5 -3 | 0.5 -3 |
路径2 | Δ=0,有一个实数解 | 1 | -4 | 4 | 2 | 2 2 |
路径3 | Δ<0,有两个虚数解 | 3 | 1 | 4 | 无实根 | No real roots. |
路径4 | a=0,非一元二次方程 | 0 | 5 | -3 | 非一元二次方程 | Nan -inf |
【实验总结】
1.在具体进行测试时,边界性测试和健壮性测试都有不同的作用,随着测试复杂程度的提升,程序出错的可能性也就越小。
2.在设计数据范围时,要结合现实条件设计,比如第二个实验中没有考虑月份中的大小月以及闰年,在实际使用中就可能出现问题
【附-程序源码】
- Dowork函数
#include <iostream>
#include <cstdlib> // 包含 abs 函数的头文件
using namespace std;
void DoWork(int x, int y, int z)
{
int k = 0, j = 0;
if ((x > 3) && (z < 10))
{
k = x * y - 1;
j = abs(k);
}
if ((x == 4) || (y > 5))
{
j = x * y + 10;
j = j % 3;
}
// 输出变量的值
cout << j << endl;
}
int main()
{
int x, y, z;
while (cin >> x>>y>>z)
{
DoWork(x, y, z);
}
return 0;
}
2.一元二次方程
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
void Equation(double a, double b, double c) {
// 计算判别式 delta
double delta = b * b - 4 * a * c;
// 初始化解向量
vector<double> roots;
// 判断 delta 大于等于 0 的情况
if (delta >= 0) {
// 计算两个解
double root1 = (-b + sqrt(delta)) / (2 * a);
double root2 = (-b - sqrt(delta)) / (2 * a);
// 添加解到列表
roots.push_back(root1);
roots.push_back(root2);
}
// 输出方程的解
if (roots.empty()) {
cout << "No real roots." << endl;
} else {
for (double root : roots) {
cout << root << " ";
}
cout << endl;
}
}
int main() {
double a, b, c;
while (cin >> a >> b >> c) {
Equation(a, b, c);
}
return 0;
}