第-章-軟件測試單元測試優(yōu)秀文檔_第1頁
第-章-軟件測試單元測試優(yōu)秀文檔_第2頁
第-章-軟件測試單元測試優(yōu)秀文檔_第3頁
第-章-軟件測試單元測試優(yōu)秀文檔_第4頁
第-章-軟件測試單元測試優(yōu)秀文檔_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第17章單元測試 通常而言,單元測試是在軟件開發(fā)過程中要進(jìn)行的最低級(jí)別的測試活動(dòng),或者說是針對軟件設(shè)計(jì)的最小單位——程序模塊,進(jìn)行正確性檢驗(yàn)的測試工作。其目的在于發(fā)現(xiàn)每個(gè)程序模塊內(nèi)部可能存在的差錯(cuò)。在單元測試活動(dòng)中,軟件的獨(dú)立單元將在與程序的其他部分相隔離的情況下進(jìn)行測試,主要工作分為兩個(gè)步驟:人工靜態(tài)檢查和動(dòng)態(tài)執(zhí)行跟蹤。單元測試的分工大致如下:一般由開發(fā)組在一般由開發(fā)組在開發(fā)組組長監(jiān)督下進(jìn)行,保證使用合適的測試技術(shù),根據(jù)單元測試計(jì)劃和測試說明文檔中制定的要求,執(zhí)行充分的測試;由編寫該單元的開發(fā)組中的成員設(shè)計(jì)所需要的測試用例,測試該單元并修改缺陷。

1、單元測試是一種浪費(fèi)時(shí)間的工作2、單元測試只能證明代碼做了什么3、我是個(gè)很棒的程序員,我是不是可以不進(jìn)行單元測試?4、集成測試能捕捉到所有的Bug5、單元測試的成本效率不高其實(shí),在經(jīng)過了單元測試之后,系統(tǒng)集成過程將會(huì)大大地簡化。

單元測試與集成測試的主要區(qū)別在于測試的對象不同。單元測試對象是實(shí)現(xiàn)具體功能的單元,一般對應(yīng)詳細(xì)設(shè)計(jì)中所描述的設(shè)計(jì)單元。集成測試是針對概要設(shè)計(jì)所包含的模塊以及模塊組合進(jìn)行的測試。單元測試所使用的主要測試方法是基于代碼的白盒測試。而集成測試所使用的主要測試方法是基于功能的黑盒測試。因?yàn)榧蓽y試要在所有要集成的模塊都通過了單元測試之后才能進(jìn)行,也就是說在測試時(shí)間上,集成測試要晚于單元測試,所以單元測試的好壞直接影響著集成測試。單元測試的工作內(nèi)容包括模塊內(nèi)程序的邏輯、功能、參數(shù)傳遞、變量引用、出錯(cuò)處理、需求和設(shè)計(jì)中有具體的要求等方面測試。集成測試的工作內(nèi)容主要是驗(yàn)證各個(gè)接口、接口之間的數(shù)據(jù)傳遞關(guān)系、模塊組合后能否達(dá)到預(yù)期效果。雖然單元測試和集成測試有一些區(qū)別,但是二者之間也有著千絲萬縷的聯(lián)系。目前集成測試和單元測試的界限趨向模糊。單元測試與系統(tǒng)測試的區(qū)別不僅僅在于測試的對象和測試的層次的不同,最重要的區(qū)別是測試性質(zhì)不同。在單元測試過程中,單元測試的執(zhí)行早于系統(tǒng)測試,測試的是軟件單元的具體實(shí)現(xiàn)、內(nèi)部邏輯結(jié)構(gòu)以及數(shù)據(jù)流向等。系統(tǒng)測試屬于后期測試,主要是根據(jù)需求規(guī)格說明書進(jìn)行的,是從用戶角度來進(jìn)行的功能測試和性能測試等等,證明系統(tǒng)是否滿足用戶的需求。單元測試中發(fā)現(xiàn)的錯(cuò)誤容易進(jìn)行定位,并且多個(gè)單元測試可以并行進(jìn)行;而系統(tǒng)測試發(fā)現(xiàn)的錯(cuò)誤比較難定位。

由于一個(gè)模塊或一個(gè)方法(Method)并不是一個(gè)獨(dú)立的程序,在考慮測試它時(shí)要同時(shí)考慮它和外界的聯(lián)系,因此要用到一些輔助模塊,來模擬與所測模塊相聯(lián)系的其他模塊。一般把這些輔助模塊分為兩種:1、驅(qū)動(dòng)模塊(driver):相當(dāng)于所測模塊的主程序。2、樁模塊(stub):用于代替所測模塊調(diào)用的子模塊。那么,所測模塊和與它相關(guān)的驅(qū)動(dòng)模塊及樁模塊共同構(gòu)成了一個(gè)“測試環(huán)境”,如圖3-2所示。圖3-2單元測試環(huán)境

單元測試涉及到的測試技術(shù)通常有:針對被測單元需求的功能測試、用于代碼評審和代碼走讀的靜態(tài)測試、白盒測試、狀態(tài)轉(zhuǎn)換測試和非功能測試。為了提高單元測試的質(zhì)量,只了解這些單元測試技術(shù)還遠(yuǎn)遠(yuǎn)不夠,還要選擇合適的測試策略。在選擇測試策略時(shí),主要考慮如下3種方式:自頂向下(TopDownUnitTesting)的單元測試策略、自底向上的單元測試策略(BottomupUnitTesting)和孤立的單元測試策略。一)步驟:1.從最頂層開始,把頂層調(diào)用的單元做成樁模塊。2.對第二層測試,使用上面已測試的單元做驅(qū)動(dòng)模塊。3.依次類推,直到全部單元測試結(jié)束。二)優(yōu)點(diǎn):可以在集成測試之前為系統(tǒng)提供早期的集成途徑。5、單元測試的成本效率不高單元測試的分工大致如下:一般由開發(fā)組在一般由開發(fā)組在開發(fā)組組長監(jiān)督下進(jìn)行,保證使9、分析出錯(cuò)處理是否正確由于一個(gè)模塊或一個(gè)方法(Method)并不是一個(gè)獨(dú)立的程序,在考慮測試它時(shí)要同時(shí)考慮它和外界的聯(lián)系,因此要用到一些輔助模塊,來模擬與所測模塊相聯(lián)系的其他模塊。依次類推,直到全部單元測試結(jié)束。圖3-2單元測試環(huán)境對那些以高覆蓋率為目標(biāo)或者軟件開發(fā)時(shí)間緊張的軟件項(xiàng)目來說,這種測試方法不適用。3、分析能否使用反向關(guān)聯(lián)檢查?源代碼文件進(jìn)入配置庫的為了提高單元測試的質(zhì)量,只了解這些單元測試技術(shù)還遠(yuǎn)遠(yuǎn)不夠,還要選擇合適的測試策略。5、單元測試的成本效率不高單元測試所使用的主要測試方法是基于代碼的白盒測試。測試用例源代碼通過同級(jí)由于只有在底層單元測試完畢之后才能夠進(jìn)行頂層單元的測試,所以并行性不好。1、先對模塊調(diào)用圖上的最底層模塊開始測試,模擬調(diào)用該模塊的模塊為驅(qū)動(dòng)模塊1、驅(qū)動(dòng)模塊(driver):相當(dāng)于所測模塊的主程序。三)缺點(diǎn):單元測試被樁模塊控制,隨著單元測試的不斷進(jìn)行,測試過程也會(huì)變得越來越復(fù)雜,測試難度以及開發(fā)和維護(hù)的成本都不斷增加; 要求的低層次的結(jié)構(gòu)覆蓋率也難以得到保證;由于需求變更或其他原因而必須更改任何一個(gè)單元時(shí),就必須重新測試該單元下層調(diào)用的所有單元;低層單元測試依賴頂層測試,無法進(jìn)行并行測試,使測試進(jìn)度受到不同程度的影響,延長測試周期。四)總結(jié):從上述分析中,不難看出該測試策略的成本要高于孤立的單元測試成本,因此從測試成本方面來考慮,并不是最佳的單元測試策略。

一)步驟:1、先對模塊調(diào)用圖上的最底層模塊開始測試,模擬調(diào)用該模塊的模塊為驅(qū)動(dòng)模塊 2、其次,對上一層模塊進(jìn)行單元測試,用已經(jīng)被測試過的模塊做樁模塊。3、依次類推,直到全部單元測試結(jié)束。二)優(yōu)點(diǎn):不需要單獨(dú)設(shè)計(jì)樁模塊。三)缺點(diǎn):隨著單元測試的不斷進(jìn)行,測試過程會(huì)變得越來越復(fù)雜,測試周期延長,測試和維護(hù)的成本增加;隨著各個(gè)基本單元逐步加入,系統(tǒng)會(huì)變得異常龐大,因此測試人員不容易控制;越接近頂層的模塊的測試其結(jié)構(gòu)覆蓋率就越難以保證;另外,頂層測試易受底層模塊變更的影響,任何一個(gè)模塊修改之后,直接或間接調(diào)用該模塊的所有單元都要重新測試。5、單元測試的成本效率不高低層單元測試依賴頂層測試,無法進(jìn)行并行測試,使測試進(jìn)度受到不同程度的影響,延長測試周期。1、單元測試是一種浪費(fèi)時(shí)間的工作一般而言,對某個(gè)值進(jìn)行計(jì)算會(huì)有一種以上的算法,但我們會(huì)因考慮到運(yùn)行效率或其他方面的原因而選擇其中的一種。由于一個(gè)模塊或一個(gè)方法(Method)并不是一個(gè)獨(dú)立的程序,在考慮測試它時(shí)要同時(shí)考慮它和外界的聯(lián)系,因此要用到一些輔助模塊,來模擬與所測模塊相聯(lián)系的其他模塊。4、分析是否能使用其他手段來交叉檢查一下結(jié)果?在實(shí)際程序中,有一些方法可以使用反向的邏輯關(guān)系來驗(yàn)證它們。由于只有在底層單元測試完畢之后才能夠進(jìn)行頂層單元的測試,所以并行性不好。源代碼文件進(jìn)入配置庫的而系統(tǒng)測試發(fā)現(xiàn)的錯(cuò)誤比較難定位。一)步驟:無需考慮每個(gè)模塊與其他模塊之間的關(guān)系,分別為每個(gè)模塊單獨(dú)設(shè)計(jì)樁模塊和驅(qū)動(dòng)模塊,逐一完成所有單元模塊的測試。單元測試與系統(tǒng)測試的區(qū)別不僅僅在于測試的對象和測試的層次的不同,最重要的區(qū)別是測試性質(zhì)不同。圖3-7從宏觀的角度概括了單元測試的工作過程圖。由于只有在底層單元測試完畢之后才能夠進(jìn)行頂層單元的測試,所以并行性不好。另外,自底向上的單元測試也不能和詳細(xì)設(shè)計(jì)、編碼同步進(jìn)行。四)總結(jié):相對其它測試策略而言,該測試策略比較合理,尤其是需要考慮對象或復(fù)用時(shí)。它屬于面向功能的測試,而非面向結(jié)構(gòu)的測試。對那些以高覆蓋率為目標(biāo)或者軟件開發(fā)時(shí)間緊張的軟件項(xiàng)目來說,這種測試方法不適用。一)步驟:無需考慮每個(gè)模塊與其他模塊之間的關(guān)系,分別為每個(gè)模塊單獨(dú)設(shè)計(jì)樁模塊和驅(qū)動(dòng)模塊,逐一完成所有單元模塊的測試。二)優(yōu)點(diǎn):該方法簡單、容易操作,因此所需測試時(shí)間短,能夠達(dá)到高覆蓋率。三)缺點(diǎn):不能為集成測試提供早期的集成途徑。依賴結(jié)構(gòu)設(shè)計(jì)信息,需要設(shè)計(jì)多個(gè)樁模塊和驅(qū)動(dòng)模塊,增加了額外的測試成本。四)總結(jié):該方法是比較理想的單元測試方法。如輔助適當(dāng)?shù)募蓽y試策略,有利于縮短項(xiàng)目的開發(fā)時(shí)間。

在單元測試中,為了有效地減少開發(fā)樁模塊的工作量,可以考慮綜合自底向上測試策略和孤立測試策略。

一般可以從如下幾個(gè)方面進(jìn)行分析和測試,即:1、判斷得到的結(jié)果是否正確?因?yàn)?,對于測試而言,首要的任務(wù)就是察看一下所期望的結(jié)果是否正確,即對結(jié)果進(jìn)行驗(yàn)證。2、判斷是否滿足所有的邊界條件?邊界條件是指軟件計(jì)劃的操作界限所在的邊緣條件。邊界條件測試是單元測試中最后也是最重要的一項(xiàng)任務(wù)。在使用邊界值測試的方法時(shí),不妨結(jié)合實(shí)際項(xiàng)目參考以下測試技巧:輸入了完全偽造或者和要求不一致的數(shù)據(jù)。1)輸入一個(gè)格式錯(cuò)誤的數(shù)據(jù)。2)提供一個(gè)空值或者不完整的值。

3)與意料之中的值相差很遠(yuǎn)的值。4)假如一個(gè)列表中不允許有重復(fù)的數(shù)值存在,就可以給它傳入一組存在重復(fù)數(shù)值的列表;如果某個(gè)字段的值要求唯一,那么可以輸入兩個(gè)或多個(gè)相同的數(shù)值來進(jìn)行測試。5)假如一個(gè)列表中不允許有重復(fù)的數(shù)值存在,就可以給它傳入一組存在重復(fù)數(shù)值的列表;如果某個(gè)字段的值要求唯一,那么可以輸入兩個(gè)或多個(gè)相同的數(shù)值來進(jìn)行測試。6)如果要求按照一定的順序來存儲(chǔ)一些數(shù)據(jù),那么可以輸入一些順序打亂的數(shù)據(jù)來做測試。7)對于一些做了安全限制的部分,盡量通過各種途徑嘗試能否繞過安全限制的測試。8)如果功能的啟用有一定的順序限制,就用和期望不一致的順序來進(jìn)行測試。3、分析能否使用反向關(guān)聯(lián)檢查?在實(shí)際程序中,有一些方法可以使用反向的邏輯關(guān)系來驗(yàn)證它們。4、分析是否能使用其他手段來交叉檢查一下結(jié)果?一般而言,對某個(gè)值進(jìn)行計(jì)算會(huì)有一種以上的算法,但我們會(huì)因考慮到運(yùn)行效率或其他方面的原因而選擇其中的一種。5、分析是否可以強(qiáng)制一些錯(cuò)誤發(fā)生?在實(shí)際使用過程當(dāng)中,總會(huì)有意想不到各種各樣的情況和錯(cuò)誤發(fā)生。6、分析模塊接口數(shù)據(jù)在接口處出錯(cuò)就好像丟掉了進(jìn)入大門的鑰匙,無法進(jìn)行下一步的工作,只有在數(shù)據(jù)能正確流入、流出模塊的前提下,其他測試才有意義。7、分析局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)結(jié)構(gòu)往往是錯(cuò)誤的根源,對其檢查主要是為了保證臨時(shí)存儲(chǔ)在模塊內(nèi)的數(shù)據(jù)在程序執(zhí)行過程中完整、正確,因此應(yīng)仔細(xì)設(shè)計(jì)測試用例。8、分析獨(dú)立路徑 在模塊中應(yīng)對每一條獨(dú)立執(zhí)行路徑進(jìn)行測試,單元測試的基本任務(wù)是保證模塊中每條語句至少執(zhí)行一次。9、分析出錯(cuò)處理是否正確一個(gè)好的設(shè)計(jì)應(yīng)能預(yù)見各種出錯(cuò)條件,并進(jìn)行適當(dāng)?shù)某鲥e(cuò)處理,即預(yù)設(shè)各種出錯(cuò)處理通路。

一般把這些輔助模塊分為兩種:2、樁模塊(stub):用于代替所測模塊調(diào)用的子模塊。對那些以高覆蓋率為目標(biāo)或者軟件開發(fā)時(shí)間緊張的軟件項(xiàng)目來說,這種測試方法不適用。6)如果要求按照一定的順序來存儲(chǔ)一些數(shù)據(jù),那么可以輸入一些順序打亂的數(shù)據(jù)來做測試。3、分析能否使用反向關(guān)聯(lián)檢查?1、先對模塊調(diào)用圖上的最底層模塊開始測試,模擬調(diào)用該模塊的模塊為驅(qū)動(dòng)模塊一般把這些輔助模塊分為兩種:而系統(tǒng)測試發(fā)現(xiàn)的錯(cuò)誤比較難定位。一)步驟:無需考慮每個(gè)模塊與其他模塊之間的關(guān)系,分別為每個(gè)模塊單獨(dú)設(shè)計(jì)樁模塊和驅(qū)動(dòng)模塊,逐一完成所有單元模塊的測試。由于需求變更或其他原因而必須更改任何一個(gè)單元時(shí),就必須重新測試該單元下層調(diào)用的所有單元;第17章單元測試目前集成測試和單元測試的界限趨向模糊。1、驅(qū)動(dòng)模塊(driver):相當(dāng)于所測模塊的主程序。四)總結(jié):相對其它測試策略而言,該測試策略比較合理,尤其是需要考慮對象或復(fù)用時(shí)。四)總結(jié):從上述分析中,不難看出該測試策略的成本要高于孤立的單元測試成本,因此從測試成本方面來考慮,并不是最佳的單元測試策略。另外,頂層測試易受底層模塊變更的影響,任何一個(gè)模塊修改之后,直接或間接調(diào)用該模塊的所有單元都要重新測試。邊界條件測試是單元測試中最后也是最重要的一項(xiàng)任務(wù)。表3-1進(jìn)入準(zhǔn)則要素判斷準(zhǔn)則詳細(xì)設(shè)計(jì)說明書單元測試用例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論