import java.util.HashMap;
/**
* PairWise(成对)测试方法
* author: likeqc
* date: 2021-4-4 11:06:59
*/
class PairWise {
/**
* @param str String[][],二维数组,一维数组 str[i] 中存放第 i 个因素的因子
*/
private static void solution(String[][] str) {
System.out.println());
if (str == null) {
return;
}
// // 传统方式测试用例数量
int sum = 1;
// // 符合要求的测试用例数量
int count = 0;
HashMap hashMap = new HashMap();
//遍历每一个因子
for (int i = 0; i < str.length; i++) {
//特殊情况:某个因子没法取值
if (str[i].length < 1) {
System.out.println("输出的数据错误!");
return;
}
//所有因子的能取值的个数相乘就是笛卡尔积,得到正交分析法的全排列
sum *= str[i].length;
}
//初始化一个和因子个数相同的维度数组
int[] one = new int[str.length];
//开始pairwise算法的核心,遍历正交分析法得到的组合用例个数相同的次数
for (int i = 0; i < sum; i++) {
// //创造一个新的测试用例(传统方法,暴力所有可能的测试用例)
int carry = 1;
//从后往前遍历因子
for (int j = str.length - 1; j >= 0; j--) {
if (i == 0) {
continue;
}
//X % Y时, 如果, X < Y 的话, 回传值就是 X
one[j] = (one[j] + carry) % str[j].length;
if (carry == 1 && one[j] == 0) {
carry = 1;
} else {
carry = 0;
}
}
// 测试该测试用例是否能够产生新的配对组
boolean flag = false;
for (int j = 0; j < str.length; j++) {
for (int k = j + 1; k < str.length; k++) {
String key = j + "_" + str[j][one[j]] + "," + k + "_" + str[k][one[k]];
System.out.println(key);
if (hashMap.get(key) == null) {
flag = true;
System.out.println("新的key:" + key);
hashMap.put(key, 1);
}
}
}
// 产生了新的配对组,说明该用例符合 PairWise 规则,输出
if (flag) {
count++;
System.out.print("测试用例" + count + ":" + str[0][one[0]]);
for (int j = 1; j < str.length; j++) {
System.out.print("," + str[j][one[j]]);
}
System.out.println();
}
}
System.out.println("PairWise方法测试用用例:" + count);
System.out.println("传统方法测试用用例:" + sum);
}
public static void main(String[] args) {
// A:"T"、"F"
// B:"1"、"2"、"3"
// C:"a"、"b"、"c"、"d"
solution(new String[][]{{"T", "F"}, {"1", "2", "3"}, {"a", "b", "c", "d"}});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理