2012-07-30 14 views
1

可以說我在java方法中有很多嵌套循環(3-4級),每個循環都可以有一些if-else塊。我如何檢查所有這些東西是否正常工作?我正在尋找一種合乎邏輯的方式來測試這種方法,而不是像替代非法值那樣使用暴力方法。初學者的代碼測試 - 怎麼辦?

編輯: 你也可以爲初學者推薦一些好的測試書嗎?例如

+0

什麼樣的測試?功能測試?覆蓋測試?白盒?黑盒子? – 2012-07-30 23:21:29

+0

這不是「蠻力」 - 這是一個正常的流程。你手動編寫了不同的有效輸入,不同的有效和無效的邊緣情況以及不同的無效輸入,並檢查你是否得到你所期望的結果。 – zerkms 2012-07-30 23:22:00

+0

@GregHewgill - 我是新開發人員,並不熟悉所有測試術語。我現在正在尋找一些「基本」的東西。順便說一句,你能建議我如何開始學習測試的基礎知識嗎? – 2012-07-30 23:31:06

回答

3

我一直教過基本測試的方式是儘可能地處理邊緣案例。例如,如果您正在檢查變量i介於0和10之間的條件,我自然會測試的是一些使測試條件成立的值,最好在邊緣附近,然後邊緣上的幾個那些是真假的組合,最後是超出界限的情況。有了上述的條件,我會測試1,5,9,0,10,-1,11,然後最後是一個非常大的整數,包括正數和負數。

這種做法違背了「不能代替非法價值」),但我覺得你必須這樣做才能確保你的條件不適當。

0

例如查找將通過具有某些值的每個循環的輸入。然後找到將通過if的每個分支的輸入。然後找到將經過具有大或小或非法值的循環的輸入。

0

設置一些輸入和輸出數據。自己做計算。 創建一個類來檢查輸出值是否與單獨計算的值相匹配。

例如:

input:Array(3,4,5,6);

輸出(奇數的總和):8

class TestClass{ 

    //test case 
    //here you keep changing the array (extreme values, null etc.. 
    public void test1(){ 
    int[] anArray=new int[4]; 
     anArray[0] = 3; 
     anArray[1] = 4; 
     anArray[2] = 5; 
     anArray[3] = 6; 
     int s=Calculator.oddSum(x); 
     if (s==8) 
      System.out.println("Passed"); 
     else 
      System.out.println("Failed"); 
    } 

    public static void main(){ 
     TestClass t=new TestClass(); 
     t.test1();  
    } 
} 
1

EMMA是一個代碼覆蓋工具。您可以在EMMA下運行您的單元測試,它會生成帶有彩色源代碼的HTML報告,顯示哪些行已到達,哪些不到。基於此,您可以添加測試以確保您正在測試所有各個分支。

每個if/then在你的代碼中都包含一個布爾子表達式,就像循環中用來決定是否進入/重新運行循環的子表達式一樣。謂詞覆蓋應該告訴你一個好主意你的測試有多徹底。

Wikipedia解釋謂覆蓋

條件覆蓋(或謂語覆蓋) - 都有每個布爾子表達式計算既真假?這並不一定意味着決策覆蓋面。