軟體測試(四)之 PrintPrimes

來源:互聯網
上載者:User

標籤:

HOMEWORK 3

題目所給代碼如下:

 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):控制流程圖如下(使用ProcessOn繪製)

 

 

(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,15,16}

 

 

邊覆蓋:{(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)}

 

設計主路徑覆蓋的測試案例

以測試上面的程式printPrimes為例,下面的測試程式用了一些課外自己學的東西~

代碼如下:

 1 import static org.junit.Assert.*; 2  3 import java.io.ByteArrayOutputStream; 4 import java.io.PrintStream; 5 import java.lang.reflect.Method; 6  7 import org.junit.After; 8 import org.junit.AfterClass; 9 import org.junit.Before;10 import org.junit.BeforeClass;11 12 13 public class Test {14     private PrintPrimes p;15 16     PrintStream console = null;          // 輸出資料流 (字元裝置) 17     ByteArrayOutputStream bytes = null;  // 用於緩衝console 重新導向過來的字元流18 19     @org.junit.Before20     public void setUp() throws Exception {21         p = new PrintPrimes();           //初始化22         bytes = new ByteArrayOutputStream();    // 分配空間23         console = System.out;                   // 擷取System.out 輸出資料流的控制代碼24         System.setOut(new PrintStream(bytes));  // 將原本輸出到控制台Console的字元流 重新導向 到 bytes25     }26     27     @org.junit.After28     public void tearDown() throws Exception {29         System.setOut(console);30     }31     32     @org.junit.Test33     public void testResult() throws Exception {34         String s = new String("Prime:2" + ‘\r‘+‘\n‘);    // 控制台的換行,這裡用 ‘\r‘ + ‘\n‘ 與println等價35         s += "Prime:3" + ‘\r‘+‘\n‘;36         s += "Prime:5" + ‘\r‘+‘\n‘;37         38         Class pp = p.getClass();39         //擷取方法40         Method method = pp.getDeclaredMethod("printPrimes", 41                 new Class[]{int.class});42         //將私人設定可訪問43         method.setAccessible(true);44         //傳值,返回結果對象45         method.invoke(p, 3);46      //對比結果47         assertEquals(s, bytes.toString());          // bytes.toString() 作用是將 bytes內容 轉換為字元流48 49     }50 }

測試結果如下:已完成主路徑覆蓋

 

軟體測試(四)之 PrintPrimes

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.