在模塊中應(yīng)對每一條獨(dú)立執(zhí)行路徑進(jìn)行測試,單元測試的基本任務(wù)是保證模塊中每條語句至少執(zhí)行一次。此時(shí)設(shè)計(jì)測試用例是為了發(fā)現(xiàn)因錯(cuò)誤計(jì)算、不正確的比較和不適當(dāng)?shù)目刂屏髟斐傻腻e(cuò)誤。此時(shí)基本路徑測試和循環(huán)測試是最常用且最有效的測試技術(shù)。計(jì)算中常見的錯(cuò)誤包括:
1.誤解或用錯(cuò)了算符優(yōu)先級;
2.混合類型運(yùn)算;
3.變量初值錯(cuò);
4.精度不夠;
5.表達(dá)式符號錯(cuò)。
比較判斷與控制流常常緊密相關(guān),測試用例還應(yīng)致力于發(fā)現(xiàn)下列錯(cuò)誤:
1.不同數(shù)據(jù)類型的對象之間進(jìn)行比較;
2.錯(cuò)誤地使用邏輯運(yùn)算符或優(yōu)先級;
3.因計(jì)算機(jī)表示的局限性,期望理論上相等而實(shí)際上不相等的兩個(gè)量相等;
4.比較運(yùn)算或變量出錯(cuò);
5.循環(huán)終止條件或不可能出現(xiàn);
6.迭代發(fā)散時(shí)不能退出;
7.錯(cuò)誤地修改了循環(huán)變量。
一個(gè)好的設(shè)計(jì)應(yīng)能預(yù)見各種出錯(cuò)條件,并預(yù)設(shè)各種出錯(cuò)處理通路,出錯(cuò)處理通路同樣需要認(rèn)真測試,測試應(yīng)著重檢查下列問題:
1.輸出的出錯(cuò)信息難以理解;
2.記錄的錯(cuò)誤與實(shí)際遇到的錯(cuò)誤不相符;
3.在程序自定義的出錯(cuò)處理段運(yùn)行之前,系統(tǒng)已介入;
4.異常處理不當(dāng);
5.錯(cuò)誤陳述中未能提供足夠的定位出錯(cuò)信息。
邊界條件測試是單元測試中最后,也是最重要的一項(xiàng)任務(wù)。眾的周知,軟件經(jīng)常在邊界上失效,采用邊界值分析技術(shù),針對邊界值及其左、右設(shè)計(jì)測試用例,很有可能發(fā)現(xiàn)新的錯(cuò)誤。
單元測試過程
一般認(rèn)為單元測試應(yīng)緊接在編碼之后,當(dāng)源程序編制完成并通過復(fù)審和編譯檢查,便可開始單元測試。測試用例的設(shè)計(jì)應(yīng)與復(fù)審工作相結(jié)合,根據(jù)設(shè)計(jì)信息選取測試數(shù)據(jù),將增大發(fā)現(xiàn)上述各類錯(cuò)誤的可能性。在確定測試用例的同時(shí),應(yīng)給出期望結(jié)果。
應(yīng)為測試模塊開發(fā)一個(gè)驅(qū)動(dòng)模塊(driver)和(或)若干個(gè)樁模塊(stub),下圖顯示了一般單元測試的環(huán)境。驅(qū)動(dòng)模塊在大多數(shù)場合稱為“主程序”,它接收測試數(shù)據(jù)并將這些數(shù)據(jù)傳遞到被測試模塊,被測試模塊被調(diào)用后,“主程序”打印“進(jìn)入-退出”消息。
驅(qū)動(dòng)模塊和樁模塊是測試使用的軟件,而不是軟件產(chǎn)品的組成部分,但它需要一定的開發(fā)費(fèi)用。若驅(qū)動(dòng)和樁模塊比較簡單,實(shí)際開銷相對低些。遺憾的是,僅用簡單的驅(qū)動(dòng)模塊和樁模塊不能完成某些模塊的測試任務(wù),這些模塊的單元測試只能采用下面討論的綜合測試方法。
提高模塊的內(nèi)聚度可簡化單元測試,如果每個(gè)模塊只能完成一個(gè),所需測試用例數(shù)目將顯著減少,模塊中的錯(cuò)誤也更容易發(fā)現(xiàn)。
相關(guān)推薦:計(jì)算機(jī)軟件評測師備考:軟件測試的基本方法