單元測試一直都是考試的熱點(diǎn),近幾年在上午題中出現(xiàn)的頻率很高。在進(jìn)行單元測試時,測試人員需要依據(jù)詳細(xì)設(shè)計說明書和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測試的測試用例,再加上黑盒測試的測試用例,使之對任何合理的輸入和不合理的輸入,都能鑒別和響應(yīng)??荚囍饕獜膯卧獪y試的概念、階段和內(nèi)容開展,為此總結(jié)了如下知識點(diǎn)供大家學(xué)習(xí)。


概念:單元測試又稱模塊測試,是針對軟件設(shè)計的最小單位——程序模塊, 進(jìn)行正確性檢驗(yàn)的測試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。單元測試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例。多個模塊可以平行地獨(dú)立進(jìn)行單元測試。


階段:單元測試按照軟件測試在開發(fā)階段的劃分,排在第一個階段,后面是集成測試。


單元測試的內(nèi)容:在單元測試中進(jìn)行的測試工作需要在以下五個方面對所測模塊進(jìn)行檢查。

①模塊接口測試:在單元測試的開始,應(yīng)對通過所測模塊的數(shù)據(jù)流進(jìn)行測試。如果數(shù)據(jù)不能正確地輸入和輸出,就談不上進(jìn)行其他測試。為此,對模塊接口可能需要如下的測試項(xiàng)目:

(1)調(diào)用所測模塊時的輸入?yún)?shù)與模塊的形式參數(shù)在個數(shù)、屬性、順序上是否匹配;

(2)所測模塊調(diào)用子模塊時,它輸入給子模塊的參數(shù)與子模塊中的形式參數(shù)在個數(shù)、屬性、順序上是否匹配;

(3)是否修改了只作輸入用的形式參數(shù);

(4)輸出給標(biāo)準(zhǔn)函數(shù)的參數(shù)在個數(shù)、屬性、順序上是否正確;

(5)全局量的定義在各模塊中是否一致;

(6)限制是否通過形式參數(shù)來傳送。

當(dāng)模塊通過外部設(shè)備進(jìn)行輸入/輸出操作時,必須附加如下的測試項(xiàng)目:

(1)文件屬性是否正確;

(2)OPEN語句與CLOSE語句是否正確;

(3)規(guī)定的I/O格式說明與I/O語句是否匹配;

(4)緩沖區(qū)容量與記錄長度是否匹配;

(5)在進(jìn)行讀寫操作之前是否打開了文件;

(6)在結(jié)束文件處理時是否關(guān)閉了文件;

(7)正文書寫/輸入錯誤,以及I/O錯誤是否檢查并做了處理。


②局部數(shù)據(jù)結(jié)構(gòu)測試:模塊的局部數(shù)據(jù)結(jié)構(gòu)是最常見的錯誤來源,應(yīng)設(shè)計測試用例以檢查以下各種錯誤:

(1)不正確或不一致的數(shù)據(jù)類型說明;

(2)使用尚未賦值或尚未初始化的變量;

(3)錯誤的初始值或錯誤的缺省值;

(4)變量名拼寫錯或書寫錯誤;

(5)不一致的數(shù)據(jù)類型。

可能的話,除局部數(shù)據(jù)之外的全局?jǐn)?shù)據(jù)對模塊的影響也需要查清。


③路徑測試:由于通常不可能做到窮舉測試,所以在單元測試期間要選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進(jìn)行測試。應(yīng)當(dāng)設(shè)計測試用例查找由于錯誤的計算、不正確的比較或不正常的控制流而導(dǎo)致的錯誤。對基本執(zhí)行路徑和循環(huán)進(jìn)行測試,可以發(fā)現(xiàn)大量的路徑錯誤。

常見的不正確計算有:

(1)運(yùn)算的優(yōu)先次序不正確或誤解了運(yùn)算的優(yōu)先次序;

(2)運(yùn)算的方式錯,即運(yùn)算的對象彼此在類型上不相容;

(3)算法錯;

(4)初始化不正確;

(5)運(yùn)算精度不夠;

(6)表達(dá)式的符號表示不正確。

常見的比較和控制流錯誤有:

(1)不同數(shù)據(jù)類型的相互比較;

(2)不正確的邏輯運(yùn)算符或優(yōu)先次序;

(3)因浮點(diǎn)數(shù)運(yùn)算精度問題而造成的兩值比較不等;

(4)關(guān)系表達(dá)式中不正確的變量和比較符;

(5) "差1”錯,即不正確地多循環(huán)一次或少循環(huán)一次;

(6)錯誤的或不可能的循環(huán)中止條件;

(7)當(dāng)遇到發(fā)散的迭代時不能中止的循環(huán);

(8)不適當(dāng)?shù)匦薷牧搜h(huán)變量等。


④錯誤處理測試:比較完善的模塊設(shè)計要求能預(yù)見出錯的條件,并設(shè)置適當(dāng)?shù)某鲥e處理,以便在一旦程序出錯時,能對出錯程序重做安排,保證其邏輯上的正確性。這種出錯處理也應(yīng)當(dāng)是模塊功能的一部分。若出現(xiàn)下列情況之一, 則表明模塊的錯誤處理功能包含有錯誤或缺陷:

(1)出錯的描述難以理解;

(2)出錯的描述不足以對錯誤定位,不足以確定出錯的原因;

(3)顯示的錯誤與實(shí)際的錯誤不符;

(4)對錯誤條件的處理不正確;

(5)在對錯誤進(jìn)行處理之前,錯誤條件已經(jīng)引起系統(tǒng)的干預(yù)等。


⑤邊界測試:在邊界上出現(xiàn)錯誤是常見的,例如在一段程序內(nèi)有一個n次循環(huán),當(dāng)?shù)竭_(dá)第n次,重復(fù)時就可能會出錯。另外,在取最大值或最小值時也容易出錯。因此,要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細(xì)地選擇測試用例,認(rèn)真加以測試。