單元測試的基本方法
??? 單元測試的對象是軟件設(shè)計的最小單位——模塊。單元測試的依據(jù)是詳細(xì)設(shè)描述,單元測試應(yīng)對模塊內(nèi)所有重要的控制路徑設(shè)計測試用例,以便發(fā)現(xiàn)模塊內(nèi)部的錯誤。單元測試多采用白盒測試技術(shù),系統(tǒng)內(nèi)多個模塊可以并行地進(jìn)行測試。單元測試任務(wù)包括
??? 1 模塊接口測試 ;
??? 2 模塊局部數(shù)據(jù)結(jié)構(gòu)測試 ;
??? 3 模塊邊界條件測試 ;
??? 4 模塊中所有獨立執(zhí)行通路測試 ;
??? 5 模塊的各條錯誤處理通路測試 。
模塊接口測試是單元測試的基礎(chǔ)。只有在數(shù)據(jù)能正確流入、流出模塊的前提下,其他測試才有意義。測試接口正確與否應(yīng)該考慮下列因素:
1 輸入的實際參數(shù)與形式參數(shù)的個數(shù)是否相同;
2 輸入的實際參數(shù)與形式參數(shù)的屬性是否匹配;
3 輸入的實際參數(shù)與形式參數(shù)的量綱是否一致;
4 調(diào)用其他模塊時所給實際參數(shù)的個數(shù)是否與被調(diào)模塊的形參個數(shù)相同;
5 調(diào)用其他模塊時所給實際參數(shù)的屬性是否與被調(diào)模塊的形參屬性匹配;
6 調(diào)用其他模塊時所給實際參數(shù)的量綱是否與被調(diào)模塊的形參量綱一致;
7 調(diào)用預(yù)定義函數(shù)時所用參數(shù)的個數(shù)、屬性和次序是否正確;
8 是否存在與當(dāng)前入口點無關(guān)的參數(shù)引用;
9 是否修改了只讀型參數(shù);
10? 對全程變量的定義各模塊是否一致;
11 是否把某些約束作為參數(shù)傳遞。
如果模塊內(nèi)包括外部輸入輸出,還應(yīng)該考慮下列因素:
1 文件屬性是否正確;
2 OPEN/CLOSE 語句是否正確;
3 格式說明與輸入輸出語句是否匹配;
4 緩沖區(qū)大小與記錄長度是否匹配;
5 文件使用前是否已經(jīng)打開;
6 是否處理了文件尾;
7 是否處理了輸入 / 輸出錯誤;
8 輸出信息中是否有文字性錯誤;
檢查局部數(shù)據(jù)結(jié)構(gòu)是為了保證臨時存儲在模塊內(nèi)的數(shù)據(jù)在程序執(zhí)行過程中完整、正確。局部數(shù)據(jù)結(jié)構(gòu)往往是錯誤的根源,應(yīng)仔細(xì)設(shè)計測試用例,力求發(fā)現(xiàn)下面幾類錯誤:
1 不合適或不相容的類型說明;
2 變量無初值;
3 變量初始化或省缺值有錯;
4 不正確的變量名(拼錯或不正確地截斷);
5 出現(xiàn)上溢、下溢和地址異常。
除了局部數(shù)據(jù)結(jié)構(gòu)外,如果可能,單元測試時還應(yīng)該查清全局?jǐn)?shù)據(jù)(例如 FORTRAN 的公用區(qū))對模塊的影響。
在模塊中應(yīng)對每一條獨立執(zhí)行路徑進(jìn)行測試,單元測試的基本任務(wù)是保證模塊中每條語句至少執(zhí)行一次。此時設(shè)計測試用例是為了發(fā)現(xiàn)因錯誤計算、不正確的比較和不適當(dāng)?shù)目刂屏髟斐傻腻e誤。此時基本路徑測試和循環(huán)測試是最常用且最有效的測試技術(shù)。計算中常見的錯誤包括:
1 誤解或用錯了算符優(yōu)先級;
2 混合類型運(yùn)算;
3 變量初值錯;
4 精度不夠;
5 表達(dá)式符號錯。
比較判斷與控制流常常緊密相關(guān),測試用例還應(yīng)致力于發(fā)現(xiàn)下列錯誤:
1 不同數(shù)據(jù)類型的對象之間進(jìn)行比較;
2 錯誤地使用邏輯運(yùn)算符或優(yōu)先級;
3 因計算機(jī)表示的局限性,期望理論上相等而實際上不相等的兩個量相等;
4 比較運(yùn)算或變量出錯;
5 循環(huán)終止條件或不可能出現(xiàn);
6 迭代發(fā)散時不能退出;
7 錯誤地修改了循環(huán)變量。
一個好的設(shè)計應(yīng)能預(yù)見各種出錯條件,并預(yù)設(shè)各種出錯處理通路,出錯處理通路同樣需要認(rèn)真測試,測試應(yīng)著重檢查下列問題:
1 輸出的出錯信息難以理解;
2 記錄的錯誤與實際遇到的錯誤不相符;
3 在程序自定義的出錯處理段運(yùn)行之前,系統(tǒng)已介入;
4 異常處理不當(dāng);
5 錯誤陳述中未能提供足夠的定位出錯信息。
邊界條件測試是單元測試中最后,也是最重要的一項任務(wù)。眾的周知,軟件經(jīng)常在邊界上失效,采用邊界值分析技術(shù),針對邊界值及其左、右設(shè)計測試用例,很有可能發(fā)現(xiàn)新的錯誤。
一般認(rèn)為單元測試應(yīng)緊接在編碼之后,當(dāng)源程序編制完成并通過復(fù)審和編譯檢查,便可開始單元測試。測試用例的設(shè)計應(yīng)與復(fù)審工作相結(jié)合,根據(jù)設(shè)計信息選取測試數(shù)據(jù),將增大發(fā)現(xiàn)上述各類錯誤的可能性。在確定測試用例的同時,應(yīng)給出期望結(jié)果。
應(yīng)為測試模塊開發(fā)一個驅(qū)動模塊( driver )和(或)若干個樁模塊( stub ) , 下圖顯示了一般單元測試的環(huán)境。驅(qū)動模塊在大多數(shù)場合稱為“主程序”,它接收測試數(shù)據(jù)并將這些數(shù)據(jù)傳遞到被測試模塊,被測試模塊被調(diào)用后,“主程序”打印“進(jìn)入 - 退出”消息。
驅(qū)動模塊和樁模塊是測試使用的軟件,而不是軟件產(chǎn)品的組成部分,但它需要一定的開發(fā)費用。若驅(qū)動和樁模塊比較簡單,實際開銷相對低些。遺憾的是,僅用簡單的驅(qū)動模塊和樁模塊不能完成某些模塊的測試任務(wù),這些模塊的單元測試只能采用下面討論的綜合測試方法。
提高模塊的內(nèi)聚度可簡化單元測試,如果每個模塊只能完成一個,所需測試用例數(shù)目將顯著減少,模塊中的錯誤也更容易發(fā)現(xiàn)。
posted on 2006-06-07 17:31 戀戀冬季 閱讀(343) 評論(0) 編輯 收藏 所屬分類: 測試資料