<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            淺談對單元測試對象的認識

            發(fā)布: 2009-4-07 09:02 | 作者: 不詳 | 來(lái)源: 測試時(shí)代采編 | 查看: 92次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)  最近有人對我提到的單元測試的概念產(chǎn)生了疑問(wèn),原因是他看到了《軟件測試方法和技術(shù)》(朱少民 清華大學(xué)出版社 2005年7月第一版)中的一段對單元測試的定義,對比我在單元測試中提到的主要是針對類(lèi)的單元測試,覺(jué)得兩者不太一致,于是對單元測試的對象和范圍產(chǎn)生了一些疑問(wèn)。

                    必須說(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/

            TAG: 單元 對象 認識

            21/212>

            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>