淺談單元測試方法和步驟
關于單元測試,本站曾經(jīng)介紹過很多相關的文章。比如:
在軟件開發(fā)過程中,單元測試和編碼共屬實現(xiàn)階段,編碼完成并編譯通過后才開始進行單元測試。進行動態(tài)的單元測試前要先對程序進行靜態(tài)分析和代碼審查。
這是因為:
***,使用動態(tài)測試技術要準備測試用例,進行結果記錄和分析,工作量大,發(fā)現(xiàn)錯誤太多會降低動態(tài)測試效率;
第二,目前的動態(tài)測試技術局限性比較大,有相當類型的錯誤靠動態(tài)測試是難以發(fā)現(xiàn)的。
因此,先使用靜態(tài)分析和代碼審查技術,能充分地發(fā)揮人的判斷和思維優(yōu)勢,檢查出對機器而言很難發(fā)現(xiàn)的錯誤。典型的包括代碼和設計規(guī)格的一致性,代碼邏輯表達式的正確性。這些檢查在動態(tài)測試階段將會是非常繁瑣而又非常困難的;
第三,有些錯誤在動態(tài)測試時是無法檢查的;
第四,使用代碼審查技術,一旦發(fā)現(xiàn)錯誤,就知道錯誤的性質和位置,調(diào)試代價較低;
第五,使用靜態(tài)分析方法一次就能揭示一批錯誤,并且隨后就可以立即糾正錯誤。
由于單元測試針對程序單元,而程序單元并不是一個獨立可運行的程序,因此,在考慮測試模塊時,同時要考慮到它和外界其他模塊的聯(lián)系,用一些輔助模塊去模擬與被測模塊關聯(lián)的其他模塊。這些模塊分為兩種:
1、驅動模塊。
相當于所測模塊的主程序。它接收測試數(shù)據(jù),把這些測試數(shù)據(jù)傳送給被測模塊,***再輸出實測結果。
2、樁模塊。
由被測模塊調(diào)用,用以代替由被測單元所調(diào)用的模塊的功能,返回適當?shù)臄?shù)據(jù)或進行適當?shù)牟僮魇贡粶y單元能繼續(xù)運行下去,同時還要進行一定的數(shù)據(jù)處理,如打印入口和返回等,以便檢驗被測模塊與其下級模塊的接口。
驅動模塊和樁模塊為程序單元的執(zhí)行構成了一個完整的環(huán)境。如圖下所示。驅動模塊用以模擬被測單元的上層模塊,測試執(zhí)行時由驅動模塊調(diào)用被測單元使其運行,樁模塊模擬被測單元執(zhí)行過程中所調(diào)用的模塊,測試執(zhí)行時樁模塊使被測單元能完整閉合地運行。
單元測試的測試環(huán)境
驅動模塊和樁模塊在軟件開發(fā)結束后就不使用了,但是為了單元測試,兩者都要進行開發(fā),但是不需要與最終產(chǎn)品以其交付用戶。因此驅動模塊和樁模塊的設計要盡量簡單,避免因其錯誤而干擾被測單元的運行及測試結果判斷。實際上許多程序單元不能用簡單的驅動模塊和樁模塊進行充分的單元測試,完全的測試可以放到組裝測試時再進行。
如果一個模塊要完成多種功能,可以將這個模塊看成由幾個小程序組成,必須對其中的每個小程序先進行單元測試要做的工作,對關鍵模塊還要做性能測試。
在單元測試中,測試用例的設計與測試集合的準備是至關重要的。首先要構造測試用例的運行環(huán)境,即確定用例運行的前提條件,明確被測模塊/單元所需的程序環(huán)境(全局變量賦值或初始化實體),啟動測試驅動,設置樁,調(diào)用被測模塊,設置預期輸出條件判斷,***恢復環(huán)境 (包括清除樁)。
然后,設計黑盒測試用例,即接口測試用例。
***步設計基本功能測試用例,證明被測單元至少在某種正常情況下能夠運行了;
第二步設計功能正面測試用例,找出被測單元對于設計要求的正確輸入可能做出的不正確處理;
第三步設計功能反面測試用例,找出被測單元對于設計要求的錯誤輸入可能做出的不正確處理;
***一步設計性能測試用例,找出單元對于設計要求的性能可能做不到的錯誤。
***,設計白盒測試用例,即覆蓋測試用例,找出單元內(nèi)部控制結構和數(shù)據(jù)使用可能存在的問題。
注意,在進行白盒測試期間,不要匆忙地刪除所發(fā)現(xiàn)的死代碼或者冗余代碼,因為這很可能導致錯誤的產(chǎn)生。因為在測試別人代碼的時候,很可能由于測試用例不夠,或者沒有對被測程序整體結構的把握,而出現(xiàn)錯誤理解。
希望對你有幫助。
【編輯推薦】