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