【实验环境】
Windows 10 操作系统, C,C++,C#、Java或Python语言开发环境(IDE)。
【实验类型】
设计型
【实验目的】
- 熟悉掌握白盒测试的原理
- 掌握白盒测试过程,了解独立路径白盒测试方法并能根据问题设计测试样例。
【实验内容】
- 独立路径测试用例设计和执行
编写对有序表进行折半查找的算法,计算圈复杂度,设计测试用例并执行独立路径测试。
【算法描述】
输入: 要查找的目标值 `target`
输出:目标值在有序表中的索引
1. 输入要查找的目标值 `target`,调用二分查找函数
2. 初始化左边界 `left` 为0,右边界 `right` 为有序表的最后一个元素的索引。
3. 进入循环,条件为左边界小于等于右边界。
4. 在循环中,计算中间元素的索引 `mid`,通过 `(left + right) / 2` 或 `left + (right - left) / 2`。
5. 如果中间元素等于目标值,返回中间索引 `mid`。
6. 如果中间元素大于目标值,说明目标值在左半部分,缩小右边界为 `mid - 1`。
7. 如果中间元素小于目标值,说明目标值在右半部分,缩小左边界为 `mid + 1`。
8. 重复步骤2-6,直到左边界大于右边界,表示查找范围为空,返回-1表示未找到目标值。
9.若找到目标值则输出目标值在有序表中的索引,否则输出“不在表中”。
10. 结束函数。
【测试分析】
流程图
流图:
圈复杂度=e-n+2=12-10+2=4
独立路径
1,2-->3-->4-->5-->7-->9-->3-->10
1,2-->3-->4-->5-->7-->8-->3-->10
1,2-->3-->4-->5-->6-->3-->10
1,2-->3-->10
【测试用例】
有序表为= { 10, 20, 30, 40, 50, 60, 70, 80, 90}
测试编号 | 用例描述 | Target | 预期结果 | 实际结果 |
1 | 目标值小于中间值 | 20 | 1 | 1 |
2 | 目标值大于中间值 | 90 | 8 | 8 |
3 | 目标值等于中间值 | 50 | 4 | 4 |
4 | 目标值不在有序表 | 100 | No that number | No that number |
【实验总结】
- 通过独立路径测试可以评估软件的功能覆盖率。通过设计测试用例,覆盖程序的各个路径,确保每个语句和分支都被执行。通过分析测试结果,我们可以发现潜在的缺陷和错误,提高软件质量。
- 独立路径测试可以有效地检测程序路径上的问题,其在发现潜在错误和提高软件可靠性方面的有效性。此方法为软件测试提供了一种有力的手段,增强了程序的稳定性。
【附-程序源码】
#include <iostream>
#include <vector>
using namespace std;
// 二分查找函数
int binarySearch(const vector<int>& arr, int target) {
int left = 0;
int right = arr.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
// 如果目标值在中间,返回中间索引
if (arr[mid] == target) {
return mid;
}
// 如果目标值在左半部分,缩小右边界
else if (arr[mid] > target) {
right = mid - 1;
}
// 如果目标值在右半部分,缩小左边界
else {
left = mid + 1;
}
}
// 如果未找到目标值,返回-1表示未找到
return -1;
}
int main() {
// 示例有序表
vector<int> sortedArray = { 10, 20, 30, 40, 50, 60, 70, 80, 90};
// 要查找的目标值
int target = 0;
while (cin >> target)
{
// 调用二分查找函数
int result = binarySearch(sortedArray, target);
// 输出结果
if (result != -1) {
cout << result << endl;
} else {
cout << "no that number" << endl;
}
}
return 0;
}