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


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


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


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

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

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

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

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

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

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

(6)限制是否通過(guò)形式參數(shù)來(lái)傳送。

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

常見的不正確計(jì)算有:

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

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

(3)算法錯(cuò);

(4)初始化不正確;

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

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

常見的比較和控制流錯(cuò)誤有:

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

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

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

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

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

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

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

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


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

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

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

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

(4)對(duì)錯(cuò)誤條件的處理不正確;

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


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