單元測試(又稱為子產品測試)是針對程式子產品(軟體設計的最小機關)來進行正确性檢驗的測試工作。程式單元是應用的最小可測試部件。在過程化程式設計中,一個單元就是單個程式、函數、過程等;對于面向對象程式設計,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。
1 子產品接口測試(子產品接口測試是單元測試的基礎,隻有在資料能夠正确流入和流出子產品的情況下,其他測試才有意義);
2 子產品局部資料結構測試(是為了保證臨時存儲在子產品内的資料在程式執行過程中完整、正确,在很多情況下局部資料結構是錯誤的根源);
3 子產品邊界條件測試;
4 子產品中所有獨立執行通路測試;
5 子產品的各條錯誤處理通路測試。
接口測試
1 輸入的實際參數與形式參數的個數是否相同;
2 輸入的實際參數與形式參數的屬性是否比對;
3 輸入的實際參數與形式參數的量綱是否一緻;
4 調用其他子產品時所給實際參數的個數是否與被調子產品的形參個數相同;
5 調用其他子產品時所給實際參數的屬性是否與被調子產品的形參屬性比對;
6 調用其他子產品時所給實際參數的量綱是否與被調子產品的形參量綱一緻;
7 調用預定義函數時所用參數的個數、屬性和次序是否正确;
8 是否存在與目前入口點無關的參數引用;
9 是否修改了隻讀型參數;
10 對全程變量的定義各子產品是否一緻;
11是否把某些限制作為參數傳遞。
若子產品内包括外部輸入輸出,還應該考慮下列因素:
1 檔案屬性是否正确;
2 open/close語句是否正确;
3 格式說明與輸入輸出語句是否比對;
4緩沖區大小與記錄長度是否比對;
5檔案使用前是否已經打開;
6是否處理了檔案尾;
7是否處理了輸入/輸出錯誤;
8輸出資訊中是否有文字性錯誤;
局部資料結構測試
1 不合适或不相容的類型說明;
2 變量無初值;
3 變量初始化或省缺值有錯;
4 不正确的變量名(拼錯或不正确地截斷);
5 出現上溢、下溢和位址異常。
注意:除了局部資料結構外,如果可能,單元測試時還應該檢查全局資料對子產品的影響。
獨立執行通路測試
在子產品中應對每一條獨立執行路徑進行測試,單元測試的基本任務是保證子產品中每條語句至少執行一次。此時設計測試用例是為了發現因錯誤計算、不正确的比較和不适當的控制流造成的錯誤。此時基本路徑測試和循環測試是最常用且最有效的測試技術。
計算中常見的錯誤:
1 誤解或用錯了算符優先級;
2混合類型運算;
3變量初值錯;
4精度不夠;
5表達式符号錯。
6不同資料類型的對象之間進行比較;
7錯誤地使用邏輯運算符或優先級;
8因計算機表示的局限性,期望理論上相等而實際上不相等的兩個量相等;
9比較運算或變量出錯;
10循環終止條件或不可能出現;
11疊代發散時不能退出;
12錯誤地修改了循環變量。
各條錯誤處理通路測試
1輸出的出錯資訊難以了解;
2記錄的錯誤與實際遇到的錯誤不相符;
3在程式自定義的出錯處理段運作之前,系統已介入;
4異常處理不當;
5錯誤陳述中未能提供足夠的定位出錯資訊。
邊界條件測試
邊界條件測試是單元測試中最後,最重要的一項任務。軟體經常在邊界上失效,采用邊界值分析技術,針對邊界值及其左、右設計測試用例,很有可能發現新的錯誤。
一般認為單元測試應緊接在編碼之後,當源程式編制完成并通過複審和編譯檢查,便可開始單元測試。測試用例的設計應與複審工作相結合,根據設計資訊選取測試資料,将增大發現上述各類錯誤的可能性。在确定測試用例的同時,應給出期望結果。
應為測試子產品開發一個驅動子產品(driver)和(或)若幹個樁子產品(stub),下圖顯示了一般單元測試的環境。驅動子產品在大多數場合稱為“主程式”,它接收測試資料并将這些資料傳遞到被測試子產品,被測試子產品被調用後,“主程式”列印“進入-退出”消息。
驅動子產品和樁子產品是測試使用的軟體,而不是軟體産品的組成部分,但它需要一定的開發費用。若驅動和樁子產品比較簡單,實際開銷相對低些。但是僅用簡單的驅動子產品和樁子產品不能完成某些子產品的測試任務,這些子產品的單元測試隻能采用下面讨論的綜合測試方法。
提高子產品的内聚度可簡化單元測試,如果每個子產品隻能完成一個,所需測試用例數目将顯著減少,子產品中的錯誤就很容易被發現了。