掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
單元測試由一組獨立的測試構成,每個測試針對軟件中的一個單獨的程序單元。單元測試并非檢查程序單元之間是否能夠合作良好,而是檢查單個程序單元行為是否正確。

在單元測試時,測試人員根據(jù)詳細設計說明書和源程序清單,了解到該模塊的I/O條件和模塊的邏輯結構,主要采用白盒測試的測試用例,輔之以黑盒測試的測試用例,使之對任何合理和不合理的輸入都要能鑒別和響應。這就要求對程序所有的局部和全局的數(shù)據(jù)結構、外部接口和程序代碼的關鍵部分進行桌面檢查和代碼審查。
在單元測試中進行的測試工作主要在5個方面對被測模塊進行檢查:
1. 模塊接口測試
在單元測試開始時,應該對通過所有被測模塊的數(shù)據(jù)流進行測試。如果數(shù)據(jù)不能正常地輸入及輸出,那么其他的全部測試都說明不了問題。Myers在關于軟件測試的書中為接口測試提出了一個檢查表:
當模塊通過外部設備進行輸入/輸出操作時,必須擴展接口測試,附加如下的測試項目:
2. 局部數(shù)據(jù)結構測試
模塊的局部數(shù)據(jù)結構是最常見的錯誤來源,應設計測試用例以檢查以下各種錯誤:
3. 路徑測試
檢查由于計算錯誤、判定錯誤、控制流錯誤導致的程序錯誤。由于在測試時不可能做到窮舉測試,所以在單元測試時要根據(jù)“白盒”測試和“黑盒”測試用例設計方法設計測試用例,對模塊中重要的執(zhí)行路徑進行測試。重要的執(zhí)行路徑指那些處在完成單元功能的算法、控制、數(shù)據(jù)處理等重要位置的執(zhí)行路徑,也指由于控制較復雜而易錯的路徑,有選擇地對執(zhí)行路徑進行測試是一項重要的任務。應當設計測試用例查找由于錯誤的計算、不正確的比較或不正常的控制流而導致的錯誤,對基本執(zhí)行路徑和循環(huán)進行測試可發(fā)現(xiàn)大量的路徑錯誤。
在路徑測試中,要檢查的錯誤有:死代碼,錯誤的計算優(yōu)先級,算法錯誤,混用不同類的操作,初始化不正確,精度錯誤—— 比較運算錯誤、賦值錯誤,表達式的不正確符號—— >、>=;=、==、!=,循環(huán)變量的使用錯誤—— 錯誤賦值以及其他錯誤等。
比較操作和控制流向緊密相關,測試用例設計需要注意發(fā)現(xiàn)比較操作的錯誤:
4. 錯誤處理測試
錯誤處理路徑是可能引發(fā)錯誤處理的路徑及進行錯誤處理的路徑,錯誤出現(xiàn)時錯誤處理程序重新安排執(zhí)行路線,或通知用戶處理,或干脆停止執(zhí)行使程序進入一種安全等待狀態(tài)。測試人員應意識到,每一行程序代碼都可能執(zhí)行到,不能自己認為錯誤發(fā)生的概率很小而不去進行測試。一般軟件錯誤處理測試應考慮下面幾種可能的錯誤:
在進行錯誤處理測試時,要檢查如下內(nèi)容:
5. 邊界測試
邊界測試是單元測試中最后的任務。軟件常常在邊界上出錯,例如,在一個程序段中有一個n次循環(huán),當?shù)竭_第n次循環(huán)時就可能會出錯;或者在一個有n個元素的數(shù)組中,第n個元素時是很容易出錯的。因此,要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。
此外,如果對模塊性能有要求的話,還要專門進行關鍵路徑測試,以確定最壞情況下和平均意義下影響運行時間的因素。下面是邊界測試的具體要檢查的內(nèi)容:
為了使單元測試能充分細致地展開,應在實施單元測試中遵守下述要求:
1)語句覆蓋達到100%。
語句覆蓋指被測單元中每條可執(zhí)行語句都被測試用例所覆蓋。語句覆蓋是強度最低的覆蓋要求,要考慮語句覆蓋的意義,只要想象一下用一段從沒執(zhí)行過的程序控制龐大的飛行器升上天空,然后設法使它精確入軌,這種輕率簡直就是荒唐。實際測試中,不一定能做到每條語句都執(zhí)行到。第一,存在“死碼”,即由于程序設計錯誤在任何情況下都不可能執(zhí)行到的代碼。第二,不是“死碼”,但是由于要求的測試輸入及條件非常難達到或單元測試的條件所限,使得代碼沒有得到運行。因此,在可執(zhí)行語句未得到執(zhí)行時,要深入程序作詳細的分析。如果是屬于以上兩種情況,則可以認為完成了覆蓋,但是對于后者,如果可能一定要盡量測試到,如果以上兩者都不是,則是因為測試用例設計不充分,需要再設計測試用例。
2)分支覆蓋達到100%。
分支覆蓋指分支語句取真值和取假值各一次,分支語句是程序控制流的重要處理語句,在不同流向上測試可以驗證這些控制流向的正確性。分支覆蓋使這些分支產(chǎn)生的輸出都得到驗證,提高測試的充分性。
3)覆蓋錯誤處理路徑。
4)單元的軟件特性覆蓋。
軟件的特性包括功能、性能、屬性、設計約束、狀態(tài)數(shù)目、分支的行數(shù)等。
5)對試用額定數(shù)據(jù)值、奇異數(shù)據(jù)值和邊界值的計算進行檢驗,用假想的數(shù)據(jù)類型和數(shù)據(jù)值運行,測試排斥不規(guī)則輸入的能力。
單元測試通常是由編寫程序的人自己完成的,但是項目負責人應當關心測試的結果。所有的測試用例和測試結果都是模塊開發(fā)的重要資料,需妥善保存。
【編輯推薦】

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流