軟件測(cè)試技術(shù)第6章單元測(cè)試_第1頁(yè)
軟件測(cè)試技術(shù)第6章單元測(cè)試_第2頁(yè)
軟件測(cè)試技術(shù)第6章單元測(cè)試_第3頁(yè)
軟件測(cè)試技術(shù)第6章單元測(cè)試_第4頁(yè)
軟件測(cè)試技術(shù)第6章單元測(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單元測(cè)試軟件測(cè)試技術(shù)主要內(nèi)容

單元測(cè)試概述單元測(cè)試的環(huán)境單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試方法Junit使用6.1單元測(cè)試概述1.概念單元測(cè)試又稱模塊測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位——程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。單元測(cè)試的內(nèi)容包括單元的內(nèi)部結(jié)構(gòu)、單元的功能和可觀測(cè)的行為。2.測(cè)試對(duì)象:“單元”結(jié)構(gòu)化編程語(yǔ)言單元測(cè)試對(duì)象是函數(shù)或者子過(guò)程。面向?qū)ο笳Z(yǔ)言單元測(cè)試對(duì)象是類或者類的方法。如一個(gè)菜單、屏幕顯示界面或?qū)υ捒虻?.目標(biāo)(1)檢查代碼實(shí)現(xiàn)是否符合設(shè)計(jì)測(cè)試依據(jù)是詳細(xì)設(shè)計(jì)描述(2)盡早發(fā)現(xiàn)錯(cuò)誤6.2

單元測(cè)試環(huán)境基本單元本身不是一個(gè)獨(dú)立的程序,自己不能運(yùn)行,要靠其它部分來(lái)調(diào)用和驅(qū)動(dòng)。驅(qū)動(dòng)模塊(driver)

樁模塊(stub)驅(qū)動(dòng)模塊(Driver)被測(cè)基本單元的主程序,它接收測(cè)試數(shù)據(jù),并把數(shù)據(jù)傳送給被測(cè)單元,最后輸出實(shí)測(cè)結(jié)果。樁模塊(Stub)用來(lái)代替被測(cè)基本單元調(diào)用的其他基本單元。單元測(cè)試環(huán)境單元測(cè)試環(huán)境測(cè)試結(jié)果驅(qū)動(dòng)模塊樁模塊1被測(cè)模塊測(cè)試用例樁模塊3樁模塊2舉例:BACDE待測(cè)試模塊被測(cè)模塊B

驅(qū)動(dòng)模塊(模擬模塊A)樁模塊(模擬模塊E)測(cè)試用例測(cè)試結(jié)果舉例:6.3單元測(cè)試的內(nèi)容單元測(cè)試主要對(duì)模塊的五個(gè)基本特性進(jìn)行評(píng)價(jià)錯(cuò)誤處理模塊接口局部數(shù)據(jù)結(jié)構(gòu)

重要的執(zhí)行路徑邊界條件模塊一、模塊接口測(cè)試對(duì)通過(guò)被測(cè)模塊的數(shù)據(jù)流進(jìn)行測(cè)試,檢查進(jìn)出模塊的數(shù)據(jù)是否正確。檢查列表

:調(diào)用本模塊的輸入?yún)?shù)是否正確;本模塊調(diào)用子模塊時(shí)輸入給子模塊的參數(shù)是否正確;全局量的定義在各模塊中是否一致;

二、模塊局部數(shù)據(jù)結(jié)構(gòu)測(cè)試檢查局部數(shù)據(jù)結(jié)構(gòu)能否保持完整性檢查列表

:不正確或不一致的數(shù)據(jù)類型說(shuō)明變量沒有初始化變量名拼寫錯(cuò)或書寫錯(cuò)數(shù)組越界非法指針全局?jǐn)?shù)據(jù)對(duì)模塊的影響三、模塊邊界條件測(cè)試檢查臨界數(shù)據(jù)是否正確處理檢查列表:普通合法數(shù)據(jù)是否正確處理普通非法數(shù)據(jù)是否正確處理邊界內(nèi)最接近邊界的(合法)數(shù)據(jù)是否正確處理邊界外最接近邊界的(非法)數(shù)據(jù)是否正確處理四、模塊獨(dú)立執(zhí)行路徑測(cè)試對(duì)模塊中重要的執(zhí)行路徑進(jìn)行測(cè)試。檢查由于計(jì)算錯(cuò)誤、判定錯(cuò)誤、控制流錯(cuò)誤導(dǎo)致的程序錯(cuò)誤。檢查列表:死代碼錯(cuò)誤的計(jì)算優(yōu)先級(jí)精度錯(cuò)誤(比較運(yùn)算錯(cuò)誤、賦值錯(cuò)誤)表達(dá)式的不正確符號(hào)循環(huán)變量的使用錯(cuò)誤五、模塊內(nèi)部錯(cuò)誤處理測(cè)試檢查內(nèi)部錯(cuò)誤處理設(shè)施是否有效檢查列表:是否檢查錯(cuò)誤出現(xiàn)出現(xiàn)錯(cuò)誤,是否進(jìn)行錯(cuò)誤處理

拋出錯(cuò)誤、通知用戶、進(jìn)行記錄錯(cuò)誤處理是否有效6.4

單元測(cè)試策略自頂向下的單元測(cè)試自底向上的單元測(cè)試孤立單元測(cè)試自頂向下的單元測(cè)試方法:先對(duì)最頂層的基本單元進(jìn)行測(cè)試,把所有調(diào)用的單元做成樁模塊。然后再對(duì)第二層的基本單元進(jìn)行測(cè)試,使用上面已測(cè)試的單元做驅(qū)動(dòng)模塊。依此類推直到測(cè)試完所有基本單元。BACDE待測(cè)試模塊自頂向下的單元測(cè)試(續(xù))優(yōu)點(diǎn):在集成測(cè)試前提供早期的集成途徑。在執(zhí)行上和詳細(xì)設(shè)計(jì)的順序一致。不需要開發(fā)驅(qū)動(dòng)模塊。缺點(diǎn):隨著測(cè)試的進(jìn)行,測(cè)試過(guò)程越來(lái)越復(fù)雜,開發(fā)和維護(hù)成本增加??偨Y(jié):比孤立單元測(cè)試的成本高很多,不是單元測(cè)試的一個(gè)好的選擇。自底向上的單元測(cè)試方法:先對(duì)最底層的基本單元進(jìn)行測(cè)試,模擬調(diào)用該單元的單元做驅(qū)動(dòng)模塊。然后再對(duì)上面一層進(jìn)行測(cè)試,用下面已被測(cè)試過(guò)的單元做樁模塊。依此類推,直到測(cè)試完所有單元。BACDE待測(cè)試模塊優(yōu)點(diǎn):在集成測(cè)試前提供系統(tǒng)早期的集成途徑。不需要開發(fā)樁模塊。缺點(diǎn):隨著測(cè)試的進(jìn)行,測(cè)試過(guò)程越來(lái)越復(fù)雜。總結(jié):比較合理的單元測(cè)試策略,但測(cè)試周期較長(zhǎng)。自底向上的單元測(cè)試(續(xù))孤立單元測(cè)試方法:不考慮每個(gè)單元與其它單元之間的關(guān)系,為每個(gè)單元設(shè)計(jì)樁模塊或驅(qū)動(dòng)模塊。每個(gè)模塊進(jìn)行獨(dú)立的單元測(cè)試。優(yōu)點(diǎn):簡(jiǎn)單、容易操作,可達(dá)到高的結(jié)構(gòu)覆蓋率。缺點(diǎn):不提供一種系統(tǒng)早期的集成途徑。總結(jié):好的單元測(cè)試策略。單元測(cè)試的難點(diǎn)到底要測(cè)試到什么程度草草了事/過(guò)猶不及/何處是平衡點(diǎn)確定測(cè)試的標(biāo)準(zhǔn)之一:覆蓋率大量的測(cè)試代碼和測(cè)試用例生成、共享、管理、標(biāo)注很麻煩盡量使用測(cè)試工具測(cè)試過(guò)程中工具用的最多的地方:?jiǎn)卧獪y(cè)試、后期的回歸測(cè)試、負(fù)載測(cè)試、缺陷管理6.5單元測(cè)試的方法靜態(tài)代碼分析檢查是否符合編程規(guī)范找出代碼中流程設(shè)計(jì)問題代碼的重構(gòu)單元結(jié)構(gòu)測(cè)試代碼執(zhí)行的覆蓋率——白盒測(cè)試方法單元功能測(cè)試程序的功能實(shí)現(xiàn)——黑盒測(cè)試方法Junit簡(jiǎn)介Junit特性在Eclipse中使用JUnit4進(jìn)行單元測(cè)試6.6Junit什么是Junit一個(gè)測(cè)試框架由ErichGamma和KentBeck創(chuàng)造是Java的測(cè)試標(biāo)準(zhǔn)開源IBM'sCPLJunit特性對(duì)于測(cè)試結(jié)果的直接斷言測(cè)試組件便于組織管理圖形化或者文本化的執(zhí)行器與IDE的融合JBuilderEclipseNetBeansJDeveloperIntegration如何得到Junit網(wǎng)站:/index.htmEclipse中的JunitEclipse提供了Junit的GUI和運(yùn)行框架也可以在Eclipse之外使用Junit也自帶TestRunner示例:在Eclipse中使用JUnit4進(jìn)行單元測(cè)試第一步:將JUnit4單元測(cè)試包引入項(xiàng)目在該項(xiàng)目上點(diǎn)右鍵,點(diǎn)“屬性”選擇“JavaBuildPath”,選擇“Libraries”標(biāo)簽,點(diǎn)擊“AddLibrary…”按鈕第二步,生成JUnit測(cè)試框架在Eclipse的PackageExplorer中選中Calculate.java,右鍵單擊選擇new->“JUnitTestCase”第二步,生成JUnit測(cè)試框架Eclipse自動(dòng)生成的框架Eclipse導(dǎo)入相應(yīng)的包第三步:編寫測(cè)試用例第四步:Eclipse中運(yùn)行測(cè)試類右擊測(cè)試類->RunAs->JUnitTest第五步:測(cè)試結(jié)果:CalculatorTest失敗第三步:編寫測(cè)試用例1、創(chuàng)建一個(gè)待測(cè)試的對(duì)象要測(cè)試哪個(gè)類,首先就要?jiǎng)?chuàng)建一個(gè)該類的對(duì)象。本例為了測(cè)試Calculator類,必須創(chuàng)建一個(gè)calculator對(duì)象。如何編寫測(cè)試用例2、測(cè)試方法的聲明在測(cè)試類中,并不是每一個(gè)方法都是用于測(cè)試的,必須使用“標(biāo)注”來(lái)明確表明哪些是測(cè)試方法。@Test、@Ignore、@Before、@After@Test標(biāo)注使用@Test標(biāo)注,以表明這是一個(gè)測(cè)試方法。方法名字可以隨便取,但規(guī)范寫法是test+方法名,方法名第一個(gè)子母大寫。方法的返回值必須為void,方法不能有任何參數(shù)。如果違反這些規(guī)定,運(yùn)行時(shí)會(huì)拋出一個(gè)異常assertEquals(5,calculator.getResult());是用來(lái)判斷期待結(jié)果和實(shí)際結(jié)果是否相等JUnit自動(dòng)進(jìn)行測(cè)試并把測(cè)試結(jié)果反饋給用戶3、忽略測(cè)試某些尚未完成的方法加上@Ignore標(biāo)注的含義是“某些方法尚未完成,暫不參與此次測(cè)試”。4、Fixture“固定代碼段”@Before,@After是每個(gè)方法測(cè)試時(shí)候必然被調(diào)用的代碼保證每一個(gè)測(cè)試都是獨(dú)立的,相互之間沒有任何耦合度@BeforeClass或@AfterClass只在測(cè)試用例初始化時(shí)執(zhí)行@BeforeClass方法,當(dāng)所有測(cè)試執(zhí)行完畢之后,執(zhí)行@AfterClass進(jìn)行收尾工作用于測(cè)試讀取文件等耗時(shí)的方法。該方法必須是public和static的執(zhí)行過(guò)程測(cè)試開始->setUp->testXXXX->tearDown->測(cè)試結(jié)束5、限時(shí)測(cè)試對(duì)于那些邏輯很復(fù)雜,循環(huán)嵌套比較深的程序采用限時(shí)測(cè)試函數(shù)設(shè)定一個(gè)執(zhí)行時(shí)間,超過(guò)了這個(gè)時(shí)間,他們就會(huì)被系統(tǒng)強(qiáng)行終止,并且系統(tǒng)還匯報(bào)該函數(shù)結(jié)束的原因是因?yàn)槌瑫r(shí)6、測(cè)試異常expected屬性用來(lái)測(cè)試函數(shù)應(yīng)該拋出的異常7、Runner(運(yùn)行器)JUnit中有一個(gè)默認(rèn)Runner,如果沒有指定,那么系統(tǒng)自動(dòng)使用默認(rèn)Runner來(lái)運(yùn)行代碼@RunWith是用來(lái)修飾類,可以指定需要的Runner8、參數(shù)化測(cè)試可以將所有參數(shù)集中起來(lái)一起測(cè)試。步驟:1:為測(cè)試專門生成一個(gè)新的類2:定義一個(gè)待測(cè)試的類,并且定義兩個(gè)變量,一個(gè)用于存放參數(shù),一個(gè)用于存放期待的結(jié)果3:定義測(cè)試數(shù)據(jù)的集合,用@Parameters標(biāo)注進(jìn)行修飾4:創(chuàng)建構(gòu)造函數(shù)對(duì)先前定義的兩個(gè)參數(shù)進(jìn)行初始化方法必須由Parameters注解修飾方法必須為publicstatic的方法必須返回Collection類型方法沒有參數(shù)二維數(shù)組的類型必須是Object類型的二維數(shù)組中的數(shù)據(jù)是為測(cè)試Calculator中的square()方法而準(zhǔn)備的二維數(shù)組中的每一個(gè)元素中的數(shù)據(jù)都對(duì)應(yīng)著構(gòu)造方法SquareTest()中的參數(shù)的位置測(cè)試的執(zhí)行流程首先執(zhí)行data()方法,將準(zhǔn)備好的數(shù)據(jù)作為一個(gè)Collection返回然后根據(jù)準(zhǔn)備好的數(shù)據(jù)調(diào)用構(gòu)造方法。Collection中有幾個(gè)元素,該構(gòu)造方法就會(huì)被調(diào)用幾次。例中被調(diào)用3次,會(huì)產(chǎn)生3個(gè)該測(cè)試類的對(duì)象Collection中的數(shù)據(jù)是由JUnit傳給SquareTest

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論