標籤:
題目所給出的代碼為
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 else15 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)); }}
測試結果如下,已完成主路徑覆蓋
軟體測試作業(四)