a) 为 printPrimes() 方法画控制流图
b) 考虑测试用例 t1=(n=3) 和 t2=(n=5)。设计一个简单的错误,使得 t2 比 t1 更容易发现。
将代码中的判断函数 isDivisible(primes[i], curPrime) 改成 isDivisible(primes[0], curPrime)
这样对于 t1 用例,程序输出无问题;但是对于 t2 用例,程序输出为 [2, 3, 5, 7, 9],与正确答案 [2, 3, 5, 7, 11] 不符合
c) 找到一个测试用例,使得相应的测试路径访问连接 while 语句开始到 for 语句的边,而不用通过 while 循环体。
n = 1, 测试路径:1-2-10-11-12-10-13,未通过 while 循环体
d) 列举每个节点覆盖,边覆盖和主路径覆盖的测试需求
节点覆盖 (NC) :
TR:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
path(p1) = [1, 2, 3, 4, 5, 7, 4, 5, 6, 8, 9, 2, 10, 11, 12, 13, 11, 14]
边覆盖 (EC) :
TR:{(1, 2), {2, 3}, {3, 4}, {4, 5}, {5, 7}, {7, 4}, {4, 8}, {5, 6}, {6, 8}, {8, 9}, {8, 2}, {9, 2}, {2, 10}, {10, 11}, {11, 12}, {12, 13}, {13, 11}, {11, 14}}
path(p1) = [1, 2, 3, 4, 5, 7, 4, 8, 2, 10, 11, 12, 13, 11, 14]
path(p2) = [1, 2, 3, 4, 5, 6, 8, 9, 2, 10, 11, 13]
主路径覆盖 (PPC) :
TR{
[1, 2, 3, 4, 8, 9],
[1, 2, 3, 4, 5, 6, 8, 9],
[1, 2, 3, 4, 5, 7],
[1, 2, 10, 11, 14],
[1, 2, 10, 11, 12, 13],
[3, 4, 8, 2, 3],
[3, 4, 8, 2, 10, 11, 14],
[3, 4, 8, 2, 10, 11, 12, 13],
[3, 4, 8, 9, 2, 3],
[3, 4, 8, 9, 2, 10, 11, 14],
[3, 4, 8, 9, 2, 10, 11, 12, 13],
[3, 4, 5, 6, 8, 2, 3],
[3, 4, 5, 6, 8, 2, 10, 11, 14],
[3, 4, 5, 6, 8, 2, 10, 11, 12, 13],
[3, 4, 5, 6, 8, 9, 2, 3],
[3, 4, 5, 6, 8, 9, 2, 10, 11, 14],
[3, 4, 5, 6, 8, 9, 2, 10, 11, 12, 13],
[4, 5, 7, 4],
[4, 8, 2, 3, 4],
[4, 8, 9, 2, 3, 4],
[5, 6, 8, 2, 3, 4, 5],
[5, 6, 8, 9, 2, 3, 4, 5],
[5, 7, 4, 5],
[5, 7, 4, 8, 2, 3],
[5, 7, 4, 8, 9, 2, 3],
[5, 7, 4, 8, 2, 10, 11, 14],
[5, 7, 4, 8, 9, 2, 10, 11, 14],
[5, 7, 4, 8, 2, 10, 11, 12, 13],
[5, 7, 4, 8, 9, 2, 10, 11, 12, 13],
[6, 8, 2, 3, 4, 5, 6],
[6, 8, 9, 2, 3, 4, 5, 6],
[6, 8, 2, 3, 4, 5, 7],
[6, 8, 9, 2, 3, 4, 5, 7],
[7, 4, 5, 7],
[7, 4, 5, 6, 8, 2, 10, 11, 14],
[7, 4, 5, 6, 8, 2, 10, 11, 12, 13],
[7, 4, 5, 6, 8, 9, 2, 10, 11, 14],
[7, 4, 5, 6, 8, 9, 2, 10, 11, 12, 13],
[7, 4, 8, 2, 3],
[7, 4, 8, 9, 2, 3],
[8, 2, 3, 4, 8],
[8, 2, 3, 4, 5, 6, 8],
[8, 9, 2, 3, 4, 8],
[8, 9, 2, 3, 4, 5, 6, 8],
[8, 2, 3, 4, 5, 7],
[8, 9, 2, 3, 4, 5, 7],
[9, 2, 3, 4, 8, 9],
[9, 2, 3, 4, 5, 6, 8, 9],
[9, 2, 3, 4, 5, 7],
[11, 12, 13, 11],
[12, 13, 11, 12],
[12, 13, 11, 14],
[13, 11, 12, 13],
}
- 基于 Junit 以及 Eclemma (Jacoco) 实现一个主路径覆盖的测试
1 package code; 2 3 import org.junit.Test; 4 5 import static org.junit.Assert.*; 6 7 public class DroneTest { 8 9 @Test 10 public void printPrimes() { 11 Drone one = new Drone(); 12 13 int[] two = new int[]{2, 3}; 14 assertArrayEquals( two, one.printPrimes(2)); 15 16 two = new int[]{2, 3, 5}; 17 assertArrayEquals( two, one.printPrimes(3)); 18 19 two = new int[]{2, 3, 5, 7, 11}; 20 assertArrayEquals( two, one.printPrimes(5)); 21 22 } 23 }
测试结果: