單元測試針對程序模塊,進行正確性檢驗的測試。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。單元測試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例。多個模塊可以平行地獨立進行單元測試。
①單元測試的內(nèi)容
模塊接口測試:對通過被測模塊的數(shù)據(jù)流進行測試。為此,對模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查。
局部數(shù)據(jù)結(jié)構(gòu)測試:設(shè)計測試用例檢查數(shù)據(jù)類型說明、初始化、缺省值等方面的問題,還要查清全程數(shù)據(jù)對模塊的影響。
路徑測試:選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進行測試。對基本執(zhí)行路徑和循環(huán)進行測試可以發(fā)現(xiàn)大量路徑錯誤。
錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等。
邊界測試:要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。
此外,如果對模塊運行時間有要求的話,還要專門進行關(guān)鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。這類信息對進行性能評價是十分有用的。
②單元測試的步驟
通常單元測試在編碼階段進行。在源程序代碼編制完成,經(jīng)過評審和驗證,確認沒有語法錯誤之后,就開始進行單元測試的測試用例設(shè)計。利用設(shè)計文檔,設(shè)計可以驗證程序功能、找出程序錯誤的多個測試用例。對于每一組輸入,應(yīng)有預(yù)期的正確結(jié)果。
模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測模塊相聯(lián)系的其它模塊。這些輔助模塊分為兩種:
驅(qū)動模塊:相當(dāng)于被測模塊的主程序。它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測模塊,最后輸出實測結(jié)果。
樁模塊:用以代替被測模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進來,但不允許什么事情也不做。
被測模塊、與它相關(guān)的驅(qū)動模塊及樁模塊共同構(gòu)成了一個“測試環(huán)境”,見圖1。

圖1單元測試的測試環(huán)境
如果一個模塊要完成多種功能,且以程序包或?qū)ο箢惖男问匠霈F(xiàn),例如Ada中的包,Modula中的模塊,C++中的類。這時可以將這個模塊看成由幾個小程序組成。對其中的每個小程序先進行單元測試要做的工作,對關(guān)鍵模塊還要做性能測試。對支持某些標(biāo)準(zhǔn)規(guī)程的程序,更要著手進行互聯(lián)測試。有人把這種情況特別稱為模塊測試,以區(qū)別單元測試。
①單元測試的內(nèi)容
模塊接口測試:對通過被測模塊的數(shù)據(jù)流進行測試。為此,對模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查。
局部數(shù)據(jù)結(jié)構(gòu)測試:設(shè)計測試用例檢查數(shù)據(jù)類型說明、初始化、缺省值等方面的問題,還要查清全程數(shù)據(jù)對模塊的影響。
路徑測試:選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進行測試。對基本執(zhí)行路徑和循環(huán)進行測試可以發(fā)現(xiàn)大量路徑錯誤。
錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等。
邊界測試:要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。
此外,如果對模塊運行時間有要求的話,還要專門進行關(guān)鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。這類信息對進行性能評價是十分有用的。
②單元測試的步驟
通常單元測試在編碼階段進行。在源程序代碼編制完成,經(jīng)過評審和驗證,確認沒有語法錯誤之后,就開始進行單元測試的測試用例設(shè)計。利用設(shè)計文檔,設(shè)計可以驗證程序功能、找出程序錯誤的多個測試用例。對于每一組輸入,應(yīng)有預(yù)期的正確結(jié)果。
模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測模塊相聯(lián)系的其它模塊。這些輔助模塊分為兩種:
驅(qū)動模塊:相當(dāng)于被測模塊的主程序。它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測模塊,最后輸出實測結(jié)果。
樁模塊:用以代替被測模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進來,但不允許什么事情也不做。
被測模塊、與它相關(guān)的驅(qū)動模塊及樁模塊共同構(gòu)成了一個“測試環(huán)境”,見圖1。

圖1單元測試的測試環(huán)境
如果一個模塊要完成多種功能,且以程序包或?qū)ο箢惖男问匠霈F(xiàn),例如Ada中的包,Modula中的模塊,C++中的類。這時可以將這個模塊看成由幾個小程序組成。對其中的每個小程序先進行單元測試要做的工作,對關(guān)鍵模塊還要做性能測試。對支持某些標(biāo)準(zhǔn)規(guī)程的程序,更要著手進行互聯(lián)測試。有人把這種情況特別稱為模塊測試,以區(qū)別單元測試。

