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"}});标签:Java,实现,System,int,length,Pairwise,str,println,out From: https://www.cnblogs.com/wi-Tim-n/p/18208761