單元測試
單元測試(unit testing),是指對軟件中的最小可測試單元進(jìn)行檢查和驗(yàn)證。對于單元測試中單元的含義,一般來說,要根據(jù)實(shí)際情況去判定其具體含義,如C語言中單元指一個函數(shù),Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等??偟膩碚f,單元就是人為規(guī)定的最小的被測功能模塊。單元測試是在軟件開發(fā)過程中要進(jìn)行的最低級別的測試活動,軟件的獨(dú)立單元將在與程序的其他部分相隔離的情況下進(jìn)行測試。
在一種傳統(tǒng)的結(jié)構(gòu)化編程語言中,比如C,要進(jìn)行測試的單元一般是函數(shù)或子過程。在像C++這樣的面向?qū)ο蟮恼Z言中, 要進(jìn)行測試的基本單元是類。對Ada語言來說,開發(fā)人員可以選擇是在獨(dú)立的過程和函數(shù),還是在Ada包的級別上進(jìn)行單元測試。單元測試的原則同樣被擴(kuò)展到第四代語言(4GL)的開發(fā)中,在這里基本單元被典型地劃分為一個菜單或顯示界面。
經(jīng)常與單元測試聯(lián)系起來的另外一些開發(fā)活動包括代碼走讀(Code review),靜態(tài)分析(Static analysis)和動態(tài)分析(Dynamic analysis)。靜態(tài)分析就是對軟件的源代碼進(jìn)行研讀,查找錯誤或收集一些度量數(shù)據(jù),并不需要對代碼進(jìn)行編譯和執(zhí)行。動態(tài)分析就是通過觀察軟件運(yùn)行時(shí)的動作,來提供執(zhí)行跟蹤,時(shí)間分析,以及測試覆蓋度方面的信息。
單元測試實(shí)施要點(diǎn)
1. 模塊接口
模塊的接口保證了測試模塊的數(shù)據(jù)流可以正確地流人、流出。在測試中應(yīng)檢查以下要點(diǎn):
1) 測試模塊的輸入參數(shù)和形式參數(shù)在個數(shù)、屬性、單位上是否一致。
2) 調(diào)用其他模塊時(shí)所給出的實(shí)際參數(shù)和被調(diào)用模塊的形式參數(shù)在個數(shù)、屬性、單位上是否一致。
3) 調(diào)用標(biāo)準(zhǔn)函數(shù)時(shí)所用的參數(shù)在屬性、數(shù)目和順序上是否正確。
4) 全局變量在各模塊中的定義和用法是否一致。
5) 輸入是否僅改變了形式參數(shù)。
6) 開/關(guān)的語句是否正確。
7) 規(guī)定的I/O格式是否與輸入輸出語句一致。
8) 在使用文件之前是否已經(jīng)打開文件或是使用文件之后是否已經(jīng)關(guān)閉文件。
2. 局部數(shù)據(jù)結(jié)構(gòu)。
在單元測試中,局部數(shù)據(jù)結(jié)構(gòu)出錯是比較常見的錯誤,在測試剛應(yīng)重點(diǎn)考慮以下因素:
1) 變量的說明是否合適。
2) 是否使用了尚未賦值或尚未初始化的變量。 3) 變量的初始值或默認(rèn)值是否正確。 4) 變量名是否有錯(例如拼寫錯)。
3. 重要的執(zhí)行路徑。
在單元測試中,對路徑的測試是最基本的任務(wù)。由于不能進(jìn)行窮舉測試,需要精心設(shè)計(jì)測試用例來發(fā)現(xiàn)是否有計(jì)算、比較或控制流等方面的錯誤。
1) 計(jì)算方面的錯誤:算術(shù)運(yùn)算的優(yōu)先次序不正確或理解錯誤;精度不夠;運(yùn)算對象的
類型不匹配;算法錯;表達(dá)式的符號表示不正確等。
2) 比較和控制流的錯誤:本應(yīng)相等的量由于精度造成不相等;不同類型進(jìn)行比較邏輯
運(yùn)算符不正確或優(yōu)先次序錯誤;循環(huán)終止不正確(如多循環(huán)一次或少循環(huán)一次)、死循環(huán);不恰當(dāng)?shù)匦薷难h(huán)變量;當(dāng)遇到分支循環(huán)時(shí),出口錯誤等。
4. 出錯處理。
好的設(shè)計(jì)應(yīng)該能預(yù)測到出錯的條件并且有出錯處理的途徑。雖然計(jì)算機(jī)機(jī)可以顯示出錯信息的內(nèi)容,但仍需要程序員對出錯進(jìn)行處理,保證其邏輯的正確性以便于用戶維護(hù)。
5. 邊界條件
邊界條件的測試是單元測試的最后工作,也是非常重要的工作。毫件容易在邊界出現(xiàn)錯誤。塊進(jìn)行測試時(shí),需要開發(fā)兩種模塊:
6. 驅(qū)動模塊
相當(dāng)于一個主程序,接收測試用例的數(shù)據(jù),將這些數(shù)據(jù)送到測試槨,輸出測試結(jié)果。
7. 樁模塊
也稱為存根模塊。樁模塊用來代替測試模塊中所調(diào)用的子模塊,其進(jìn)行少量的數(shù)據(jù)處理,目的是為了檢驗(yàn)人口,輸出調(diào)用和返回的信息。 提高模塊的內(nèi)聚度可以簡化單元測試。如果每個模塊只完成一種功能,對于具一塊來講,所需的測試方案數(shù)據(jù)就會顯著減少,而且更容易發(fā)現(xiàn)和預(yù)測模塊中的錯誤。
評論