必須說(shuō)明的是,對這本《軟件測試方法和技術(shù)》,我個(gè)人的評價(jià)應該是不錯的,在體系結構和組織上都比較清晰,包含的內容也比較完整。缺點(diǎn)可能是過(guò)于中規中舉了(個(gè)人看法:)),和國內的其他教科書(shū)一樣,沒(méi)有多少引申和深入的描述。因此,本文僅用來(lái)闡述個(gè)人對單元測試的觀(guān)點(diǎn),不涉及任何對該書(shū)或是作者的評價(jià)。
《軟件測試方法和技術(shù)》中對單元測試的描述原文如下(P86):
“單元測試是對軟件基本組成單元的測試。單元測試的對象是軟件設計的最小單位——模塊。很多參考書(shū)中將單元測試的概念誤導為一個(gè)具體函數或一個(gè)類(lèi)的方法。一個(gè)最小的單元應該有明確的功能、性能定義、接口定義而且可以清晰地與其他單元區分開(kāi)來(lái)。一個(gè)菜單、一個(gè)顯示界面或者能夠獨立完成的具體功能都可以是一個(gè)單元。某種意義上單元的概念已經(jīng)擴展為組件(component)!
其實(shí)這里的觀(guān)點(diǎn)我大部分都同意,就是對“很多參考書(shū)中將單元測試的概念誤導為一個(gè)具體函數或一個(gè)類(lèi)的方法”的說(shuō)法有些存疑。毫無(wú)疑問(wèn),作者的觀(guān)點(diǎn)是,單元測試不應該是針對具體函數和類(lèi)的方法的測試,接下來(lái)作者說(shuō)明了他對單元的理解:“一個(gè)最小的單元應該有明確的功能、性能定義、接口定義而且可以清晰地與其他單元區分開(kāi)來(lái)”,對這個(gè)單元的理解我完全同意,但困擾我的就是,我并沒(méi)有從這個(gè)定義中看出來(lái)一個(gè)具體函數不能作為單元測試中“單元”的理由。這段文字中提到單元是“具有明確的功能定義、性能定義、接口定義”,那我們來(lái)看看一個(gè)具體的函數,例如,C語(yǔ)言中的printf函數,一樣可以套用這樣的定義:
printf函數
功能定義:將輸入參數按照制定的格式打印輸出
性能定義:(略,不同平臺上應該有不同的性能標準)
接口定義:可用函數的參數作為函數對外的接口
另外,這段文字中提到的“一個(gè)菜單、一個(gè)顯示界面或者能夠獨立完成的具體功能都可以是一個(gè)單元”,在我看來(lái)仍然有些含糊——具體什么才是“能夠獨立完成的具體功能”,我想這里的“功能”不可能對應到具體的用戶(hù)需求中的功能,而是指設計中體現的功能,如果是這個(gè)概念,那么一個(gè)函數毫無(wú)疑問(wèn)是具有功能的。
為了慎重,我特地查閱了一些經(jīng)典的軟件測試書(shū)和定義中的單元測試內容,以下是引用和我的理解。
swebok 2004應該算得上是軟件工程領(lǐng)域的權威性文檔了,其中對unit testing的定義如下:
“Unit testing verifies the functioning in isolation of software pieces which are separately testable. Depending on the context, these could be the individual subprograms or a larger component made of tightly related units.”
從這里可以看到,swebok 2004對unit的定義具有這些特性:一個(gè)單元是一個(gè)“software pieces”,具有“separately testable”的特性,從這個(gè)角度來(lái)說(shuō),并沒(méi)有任何理由支持一個(gè)函數不能是單元測試對象的論據。而且,swebok 2004還明確說(shuō)明了,在不同的上下文中,unit可以是子程序,也可以是緊密聯(lián)系的一些單元組成的component。
《統一軟件開(kāi)發(fā)過(guò)程》中也對單元測試進(jìn)行了描述(P223):
“執行單元測試的目的是為了把已實(shí)現的構件作為個(gè)體單元進(jìn)行測試,主要有以下幾類(lèi)單元測試:
規格說(shuō)明測試(specification testing)或“黑盒測試”,驗證單元外觀(guān)上的可觀(guān)察的行為;
結構測試(structure testing)或“白盒測試”,驗證單元的內部實(shí)現”
這里的關(guān)鍵問(wèn)題在于上文中“構件”的概念,構件是RUP實(shí)現過(guò)程中的產(chǎn)物,在該書(shū)的P207中給出了構件的定義:“構件是模型元素(如設計模型中的設計類(lèi))的物理包”,可見(jiàn),根據這樣的描述,將一個(gè)類(lèi)或是一段代碼片斷作為單元測試的目標絕對是RUP所認可的。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/