單元測試是以程序設(shè)計說明書為指導(dǎo)寞蚌,測試模塊范圍內(nèi)的重要控制路徑,以揭露錯誤力细。
測試的相對復(fù)雜性和所發(fā)現(xiàn)的錯誤受到單元測試所限定的范圍的限制睬澡。它在執(zhí)行的過程中緊密的依照程序框架對模塊進行測試,測試包含入口和出口的參數(shù)眠蚂,輸入和輸出信息煞聪,錯誤處理信息,部分邊界數(shù)值測試逝慧。需要在6個方面對所測模塊進行檢查昔脯。
1.模塊接口測試
模塊接口測試是單元測試的基礎(chǔ),當模塊通過外部設(shè)備進行輸入/輸出操作時笛臣,只有在數(shù)據(jù)能正確流入云稚、流出模塊的前提下,模塊才能完成他的功能沈堡。
模塊接口測試應(yīng)考慮下列因素:
★ 調(diào)用其他模塊時所給的輸入?yún)?shù)與模塊的形式參數(shù)在個數(shù)静陈、屬性、順序上是否匹配诞丽;
★ 調(diào)用其他模塊時所給實際參數(shù)的個數(shù)是否與被調(diào)模塊的形參個數(shù)相同鲸拥;
★ 調(diào)用其他模塊時所給實際參數(shù)的屬性是否與被調(diào)模塊的形參屬性匹配;
★ 調(diào)用預(yù)定義函數(shù)時所用參數(shù)的個數(shù)僧免、屬性和次序是否正確刑赶;
★ 輸入的實際參數(shù)與形式參數(shù)的個數(shù)是否相同;
★ 輸入的實際參數(shù)與形式參數(shù)的屬性是否匹配懂衩;
★ 輸入的實際參數(shù)與形式參數(shù)的量綱是否一致撞叨;
★ 是否修改了只做輸入用的形式參數(shù)金踪;
★ 是否存在與當前入口點無關(guān)的參數(shù)引用;
★ 是否修改了只讀型參數(shù)牵敷;
★ 對全程變量的定義各模塊是否一致胡岔;
★ 是否把某些約束作為參數(shù)傳遞。
★ 輸出給標準函數(shù)的參數(shù)在個數(shù)劣领、屬性姐军、順序上是否正確;
★ 限制是否通過形式參數(shù)來傳送尖淘;
★ 文件屬性是否正確;
★ OPEN/CLOSE語句是否正確著觉;
★ 格式說明與輸入輸出語句是否匹配村生;
★ 緩沖區(qū)大小與記錄長度是否匹配;
★ 文件使用前是否已經(jīng)打開饼丘;
★ 是否處理了輸入/輸出錯誤趁桃;
★ 輸出信息中是否有文字性錯誤;
★ 在結(jié)束文件處理時是否關(guān)閉了文件肄鸽。
2.局部數(shù)據(jù)結(jié)構(gòu)測試
局部數(shù)據(jù)結(jié)構(gòu)是為了保證臨時存儲在模塊內(nèi)的數(shù)據(jù)在程序執(zhí)行過程中完整卫病、正確的基礎(chǔ)。模塊的局部數(shù)據(jù)結(jié)構(gòu)往往是錯誤的根源典徘,力求發(fā)現(xiàn)最常見的幾類錯誤:
★ 不合適或不相容的類型說明蟀苛;
★ 變量無初值;
★ 變量初始化或省缺值有錯逮诲;
★ 不正確的變量名(拼錯或不正確地截斷)帜平;
★ 出現(xiàn)上溢、下溢和地址異常梅鹦。
3.路徑測試
應(yīng)對模塊中重要的執(zhí)行路徑進行測試裆甩。由于錯誤的計算、不正確的比較或不正常的控制流而導(dǎo)致執(zhí)行路徑的錯誤齐唆。路徑錯誤應(yīng)考慮下列因素:
★ 運算的優(yōu)先次序不正確或誤解了運算的優(yōu)先次序嗤栓;
★ 運算的方式錯,即運算的對象彼此在類型上不相容箍邮;
★ 算法錯茉帅;
★ 初始化不正確;
★ 浮點數(shù)運算精度問題而造成的兩值比較不等媒殉;
★ 關(guān)系表達式中不正確的變量和比較符號表示不正確担敌;
★ 不正確地多循環(huán)一次或少循環(huán)一次;
★ 錯誤的或不可能的循環(huán)終止條件廷蓉;
★ 當遇到發(fā)散的迭代時不能終止的循環(huán)全封;
★ 不適當?shù)匦薷牧搜h(huán)變量等马昙。
4. 邊界條件測試
邊界條件測試是單元測試中最重要的一項任務(wù)。軟件經(jīng)常在邊界上失效刹悴,邊界條件測試是一項基礎(chǔ)測試行楞,也是后面系統(tǒng)測試中的功能測試的重點,邊界測試執(zhí)行的較好土匀,可以大大提高程序健壯性子房。邊界條件測試應(yīng)考慮下列因素:
★ 程序內(nèi)有一個n次循環(huán),n次循環(huán)應(yīng)是1~n, 出錯0~n;
★ 小于就轧、小于等于证杭、等于、大于妒御、大于等于解愤、不等于確定的比較值出錯;
★ 出現(xiàn)上溢乎莉、下溢和地址異常送讲。
5.錯誤處理測試
比較完善的模塊設(shè)計要求能預(yù)見出錯的條件,并設(shè)置適當?shù)某鲥e處理惋啃,以便在一旦程序出錯時哼鬓,能對出錯程序重做安排,保證其邏輯上的正確性边灭。這種出錯處理也應(yīng)當是模塊功能的一部分异希。錯誤處理測試應(yīng)考慮下列因素:
★ 出錯的描述難以理解;
★ 出錯的描述不足以對錯誤定位存筏,不足以確定出錯的原因宠互;
★ 顯示的錯誤與實際的錯誤不符;
★ 對錯誤條件的處理不正確椭坚;
★ 異常處理不當予跌。
6.代碼書寫規(guī)范
代碼書寫規(guī)范應(yīng)考慮下列因素:
★ 模塊設(shè)計程序框架流程圖;
★ 代碼書寫規(guī)范善茎,對齊方式券册;
★ 代碼的注釋;
★ 參數(shù)類型垂涯,數(shù)據(jù)長度,指針烁焙,數(shù)組長度大小耕赘;
★ 輸入輸出參數(shù)和結(jié)果骄蝇。
單元測試是對每個程序的單體調(diào)試。主要有以下幾步:
(1) 程序語法檢查操骡;
(2) 程序邏輯檢查九火。
在程序的邏輯檢查之前赚窃,首先需要制作測試數(shù)據(jù);即假設(shè)一些輸入數(shù)據(jù)和文件數(shù)據(jù)岔激。測試數(shù)據(jù)直接影響了程序的調(diào)試工作勒极,所以制作的數(shù)據(jù)應(yīng)該滿足以下幾個條件:
(1) 數(shù)據(jù)應(yīng)能滿足設(shè)計上要求的上下限及循環(huán)次數(shù);
(2) 數(shù)據(jù)應(yīng)滿足程序中的各種檢驗要求的錯誤數(shù)據(jù)虑鼎;
(3) 數(shù)據(jù)應(yīng)能適宜于人工對程序的檢查工作辱匿。
測試數(shù)據(jù)的內(nèi)容包含4個方面:
(1) 正常的數(shù)據(jù)
(2) 不同的數(shù)據(jù)
(3) 錯誤的數(shù)據(jù)
(4) 大量的數(shù)據(jù)
通過以上不同角度的數(shù)據(jù)檢驗,證明程序邏輯是對的炫彩,程序的調(diào)試也就結(jié)束了匾七。
在程序測試期,評價模塊的五個主要特性是:
★ 模塊接口江兢;
★ 局部數(shù)據(jù)結(jié)構(gòu)乐尊;
★ “重要”的執(zhí)行路徑;
★ 錯誤處理路徑划址;
★ 影響上述幾點的界限條件。
在其它任何測試開始之前限府,需要測試橫穿模塊接口的數(shù)據(jù)流夺颤。如果數(shù)據(jù)不是正確地進入和退出,其它的測試就談不上胁勺。
在程序測試中接口測試的清單如下:
⑴ 輸入?yún)?shù)的數(shù)目是否等于變元的數(shù)目
⑵ 參數(shù)與變元的屬性是否匹配
⑶ 參數(shù)與變元的單位是否匹配
⑷ 傳送給被調(diào)用模塊的變元數(shù)是否等于參數(shù)的項目
⑸ 傳送給被調(diào)用模塊的變元屬性是否同參數(shù)屬性一致
⑹ 傳送給被調(diào)用模塊的變元單位是否同參數(shù)的單位一致
⑺ 屬于內(nèi)部的函數(shù)屬性數(shù)目及變元次序是否正確
⑻ 對參數(shù)的任何訪問是否與當前的入口點無關(guān)
⑼ 輸入是否改動變元
⑽ 跨模塊的全程量定義是否相容
⑾ 限制是否作為變元來傳送
⑿ 參數(shù)是否被重復(fù)定義