测试用例执行计划
题目描述
某个产品当前迭代周期内有N个特性(F1, F2, ..., FN
)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其ID作为下标进行标识。
设计了M个测试用例(T1, T2,...,TM
),每个用例对应了一个覆盖特性的集合,测试用例使用其ID作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先级之和。
在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大的用例先执行,如果存在优先级相同的用例,用例ID小的先执行。
输入描述
第一行输入为N和M,N表示特性的数量,M表示测试用例的数量。
之后N行表示特性ID=1到特性ID=N的优先级。
再接下来M行表示测试用例ID=1到测试用例ID=M关联的特性的ID的列表。
输出描述
按照执行顺序(优先级从大到小)输出测试用例的ID,每行一个ID。
示例1
输入
5 4
1
1
2
3
5
1 2 3
1 4
3 4 5
2 3 4
输出
3
4
1
2
示例2
输入
3 3
3
1
5
1 2 3
1 2 3
1 2 3
输出
1
2
3
题解
这是一个简单的模拟题,要求按照测试用例的优先级和ID进行排序,优先级高的用例先执行,如果优先级相同则按照ID升序排列。
解题思路:
- 首先读取输入,包括特性数量n、测试用例数量m,以及每个特性的优先级和每个测试用例所覆盖的特性。
- 将特性优先级存储在一个映射(Map)中,以特性ID作为键,优先级作为值。
- 计算每个测试用例的优先级,即将测试用例覆盖的特性的优先级求和。
- 将测试用例的优先级和ID存储在一个二维数组或者二元组中,并按照优先级降序、ID升序的顺序进行排序。
- 输出排序后的测试用例ID。
C++
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main() {
// 读取输入的 n 和 m
int n, m;
cin >> n >> m;
// 特性优先级 {特性id: 特性优先级}
map<int, int> futurePriority;
for (int id = 1; id <= n; id++) {
cin >> futurePriority[id];
}
// 测试用例: (测试用例优先级, 测试用例id)
vector<pair<int, int>> testCases;
for (int id = 1; id <= m; id++) {
int testCasePriority = 0;
int feature;
while(cin >> feature) {
testCasePriority += futurePriority[feature];
if(cin.peek() != ' ') break;
}
testCases.push_back({-testCasePriority, id});
}
// 按照测试用例优先级和id排序
sort(testCases.begin(), testCases.end());
// 输出结果
for (const auto& testCase : testCases) {
cout << testCase.second << endl;
}
return 0;
}
#面经##春招##秋招##华为##校招#整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏
C++笔试真题题解 文章被收录于专栏
笔试真题题解