题目所给出的代码为
1 /******************************************************* 2 * Finds and prints n prime integers 3 * Jeff Offutt, Spring 2003 4 ******************************************************/ 5 public static void printPrimes (int n) 6 { 7 int curPrime; // Value currently considered for primeness 8 int numPrimes; // Number of primes found so far. 9 boolean isPrime; // Is curPrime prime? 10 int [] primes = new int [MAXPRIMES]; // The list of prime numbers. 11 12 // Initialize 2 into the list of primes. 13 primes [0] = 2; 14 numPrimes = 1; 15 curPrime = 2; 16 while (numPrimes < n) 17 { 18 curPrime++; // next number to consider ... 19 isPrime = true; 20 for (int i = 0; i <= numPrimes-1; i++) 21 { // for each previous prime. 22 if (isDivisible(primes[i], curPrime)) 23 { // Found a divisor, curPrime is not prime. 24 isPrime = false; 25 break; // out of loop through primes. 26 } 27 } 28 if (isPrime) 29 { // save it! 30 primes[numPrimes] = curPrime; 31 numPrimes++; 32 } 33 } // End while 34 35 // Print all the primes out. 36 for (int i = 0; i <= numPrimes-1; i++) 37 { 38 System.out.println ("Prime: " + primes[i]); 39 } 40 } // end printPrimes
(a):控制流图如下
(b):将MAXPRIMES设为4,这样t2=(n=5)就会出现数组越界的错误,但t1=(n=3)无影响。
(c):n=1的时候不满足numPrimes < n,故不经过while循环
(d):点覆盖:{1,2,3,4,5,6,7,8,9,10,11,12,13,14}
边覆盖:{(1,2),(2,3),(2,12),(3,4),(4,5),(5,6),(6,7),(6,8),(7,5),(8,9), (5,9),(9,10),(9,11),(10,11),(11,2),(12,13),(13,14),(14,15),(15,13), (13,16)}
主路径覆盖:{(1,2,3,4,5,6,7),(1,2,3,4,5,6,8,9,10,11),(1,2,3,4,5,6,8,9,11),(1,2,3,4,5,9,10,11),(1,2,3,4,5,9,11),(1,2,12,13,14,15),(1,2,12,16),(3,4,5,6,8,9,10,11,2,12,13,14,15),
(3,4,5,6,8,9,11,2,12,13,14,15),(3,4,5,6,8,9,10,11,2,12,13,16),(3,4,5,6,8,9,11,2,12,13,16),(3,4,5,9,10,11,2,12,13,14,15),(3,4,5,9,11,2,12,13,14,15),(3,4,5,9,10,11,2,12,13,16),
(3,4,5,9,11,2,12,13,16),(6,7,5,9,10,11,2,12,13,14,15),(6,7,5,9,11,2,12,13,14,15),(6,7,5,9,10,11,2,12,13,16),(6,7,5,9,11,2,12,13,16),(14,15,13,16),(13,14,15,13),(5,6,7,5),
(2,3,4,5,6,8,9,10,11,2),(2,3,4,5,6,8,9,11,2),(2,3,4,5,9,10,11,2),(2,3,4,5,9,11,2)}
设计主路径覆盖的测试用例
以上次实验的判断三角形为例
1 package cn.tju.st; 2 public class Calculate { 3 public String triangle (int a, int b,int c) 4 { 5 String str; 6 int d=a-b; 7 int e=b-c; 8 int f=a-c; 9 if( d*e*f==0){ 10 str="等腰"; 11 if( (a==b) && (b==c) ) 12 str="等边"; 13 } 14 else 15 str="其他"; 16 return str; 17 18 } 19 }
package cn.tju.st; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class CalculateTest { private String type; private int a; private int b; private int c; public CalculateTest(String type, int a, int b, int c){ this.type = type; this.a = a; this.b = b; this.c = c; } @Before public void setUp() throws Exception { //System.out.println("This is before test"); } @After public void tearDown() throws Exception { System.out.println("This is after test"); } @Parameters public static Collection prepareData(){ Object[][] object = { {"等边",1,1,1}, {"等腰",2,2,3}, {"等腰",2,3,3}, {"其他",2,3,4}}; return Arrays.asList(object); } @Test public void TestTypeOfTriangle() { Calculate calc = new Calculate (); assertEquals (type, calc.triangle(a,b,c)); } }
测试结果如下,已完成主路径覆盖