軟件測(cè)試與質(zhì)量保證 課件 第9、10章 單元測(cè)試、集成測(cè)試_第1頁(yè)
軟件測(cè)試與質(zhì)量保證 課件 第9、10章 單元測(cè)試、集成測(cè)試_第2頁(yè)
軟件測(cè)試與質(zhì)量保證 課件 第9、10章 單元測(cè)試、集成測(cè)試_第3頁(yè)
軟件測(cè)試與質(zhì)量保證 課件 第9、10章 單元測(cè)試、集成測(cè)試_第4頁(yè)
軟件測(cè)試與質(zhì)量保證 課件 第9、10章 單元測(cè)試、集成測(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩167頁(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)介

第9章單元測(cè)試本章內(nèi)容單元測(cè)試概述單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試過(guò)程單元測(cè)試計(jì)劃單元測(cè)試工具2程序員的難題3開發(fā)的模塊出現(xiàn)問(wèn)題,很難定位,已經(jīng)熬了幾個(gè)通宵了?。?!怎么辦?剛改正了一個(gè)BUG,過(guò)沒(méi)幾天,又發(fā)現(xiàn)了新問(wèn)題?。?!程序總在出問(wèn)題,聯(lián)調(diào)了幾個(gè)月,還是問(wèn)題不斷?。?!高質(zhì)量的程序高質(zhì)量的程序取決于以下幾個(gè)方面:高質(zhì)量的設(shè)計(jì)規(guī)范的編碼有效的測(cè)試4程序員的職責(zé)我是程序員,除了編碼我還需要做些什么?5程序員的職責(zé)傳統(tǒng)的開發(fā)觀念:開發(fā)人員的任務(wù)是完成編碼,讓系統(tǒng)正確運(yùn)行起來(lái)程序調(diào)式通過(guò)任務(wù)就完成了自信自己的程序不會(huì)出錯(cuò)6實(shí)際:1、開發(fā)人員的任務(wù)是完成程序,直到交付和維護(hù)2、人的失誤是不可避免的,無(wú)論多小心,都會(huì)有錯(cuò)誤你以前做程序開發(fā)時(shí)做過(guò)測(cè)試嗎?如何進(jìn)行對(duì)自己代碼做測(cè)試的?效果如何?7現(xiàn)實(shí)中的發(fā)現(xiàn)編碼階段會(huì)引入大量的缺陷系統(tǒng)測(cè)試發(fā)現(xiàn)的缺陷很大一部分是編碼缺陷測(cè)試版本頻繁,測(cè)試和項(xiàng)目進(jìn)度被無(wú)休止的拖延8開發(fā)部的壓力現(xiàn)狀:一個(gè)承擔(dān)多個(gè)角色的團(tuán)隊(duì)參與或部分參與高層設(shè)計(jì)承擔(dān)底層設(shè)計(jì)程序?qū)崿F(xiàn)承擔(dān)底層測(cè)試9設(shè)計(jì)編碼測(cè)試開發(fā)部的測(cè)試效果不好:為什么?沒(méi)有時(shí)間測(cè)試不知道怎樣測(cè)試不好組織缺乏方法和工具這種情況下,往往把單元測(cè)試的任務(wù)堆積到系統(tǒng)測(cè)試階段10問(wèn)題如果把單元測(cè)試的任務(wù)堆積到系統(tǒng)測(cè)試階段,將會(huì)怎樣?大量的故障堆積在項(xiàng)目中后期:項(xiàng)目后10%的工作占用了項(xiàng)目90%的時(shí)間故障難以定位故障飄忽不定開發(fā)、測(cè)試人員疲于本命11軟件缺陷的修復(fù)費(fèi)用12著名測(cè)試專家BorisBeizer博士:

Voyager

的錯(cuò)誤(將探測(cè)器發(fā)送到太陽(yáng))AT&T和DCS的錯(cuò)誤(曾造成美國(guó)三分之一的電話癱瘓)Intel奔騰芯片錯(cuò)誤13軟件開發(fā)歷史上最臭名昭彰的錯(cuò)誤都是單元錯(cuò)誤——即通過(guò)適當(dāng)?shù)貑卧獪y(cè)試就可以發(fā)現(xiàn)的錯(cuò)誤。單元測(cè)試的優(yōu)點(diǎn)最高的成本收益比減少聯(lián)調(diào)和后續(xù)測(cè)試的時(shí)間缺陷更容易定位更有信心去修改老代碼14業(yè)界單元測(cè)試工作量商業(yè)軟件單元測(cè)試工作量

/總工作量=8.3%編碼工作量/總工作量=16.6%軍工軟件單元測(cè)試工作量

/總工作量=10.1%編碼工作量/總工作量=18.1%15業(yè)界標(biāo)桿單元測(cè)試(25%)審查評(píng)審(20%)設(shè)計(jì)(17%)編碼(7%)系統(tǒng)測(cè)試(4%)計(jì)劃和跟蹤(4%)發(fā)布后缺陷:0.06個(gè)/Kloc單元測(cè)試發(fā)現(xiàn)的缺陷密度:31個(gè)/Kloc16本章內(nèi)容單元測(cè)試概述單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試過(guò)程單元測(cè)試計(jì)劃單元測(cè)試工具17單元是什么?(IEEE)軟件單元指軟件設(shè)計(jì)中一個(gè)可獨(dú)立測(cè)試的元素,是程序中一個(gè)邏輯上獨(dú)立的部分,它不能再分解為其它軟件成分(實(shí)踐中)軟件單元過(guò)程化編程:?jiǎn)蝹€(gè)程序、函數(shù)、過(guò)程等面向?qū)ο缶幊蹋侯悺⒎椒?8單元測(cè)試是什么單元測(cè)試:針對(duì)軟件單元來(lái)進(jìn)行正確性或性能檢測(cè)的測(cè)試如果把測(cè)試比作清洗一臺(tái)機(jī)器:系統(tǒng)測(cè)試就是清楚機(jī)器外面的塵土集成測(cè)試就是保證機(jī)器各個(gè)部件的接頭處干凈單元測(cè)試就是清晰各個(gè)零件的內(nèi)部19系統(tǒng)/集成測(cè)試20應(yīng)用輸入潛在錯(cuò)誤對(duì)象單元測(cè)試21測(cè)試一個(gè)類Thatiseasy!單元測(cè)試原則應(yīng)該盡早地進(jìn)行軟件單元測(cè)試應(yīng)該保證單元測(cè)試的可重復(fù)性盡可能地采用測(cè)試自動(dòng)化的手段來(lái)支持單元測(cè)試活動(dòng)22單元測(cè)試(Who)單元測(cè)試可以是開發(fā)者本人執(zhí)行也可以是獨(dú)立的專業(yè)測(cè)試人員執(zhí)行兩者各有優(yōu)勢(shì)建議:開發(fā)人員必須完整地做單元測(cè)試同時(shí)測(cè)試人員對(duì)重點(diǎn)模塊實(shí)施獨(dú)立的單元測(cè)試2324單元測(cè)試

測(cè)單元的哪些方面?單元測(cè)試內(nèi)容25模塊出錯(cuò)處理局部數(shù)據(jù)結(jié)構(gòu)獨(dú)立路徑邊界條件模塊接口功能26單元功能測(cè)試單元接口測(cè)試單元局部數(shù)據(jù)結(jié)構(gòu)測(cè)試單元中重要的執(zhí)行路徑測(cè)試單元的各類錯(cuò)誤處理路徑測(cè)試單元邊界條件測(cè)試單元功能測(cè)試單元功能測(cè)試主要測(cè)試被測(cè)單元的功能與詳細(xì)設(shè)計(jì)說(shuō)明是否一致單元功能測(cè)試步驟:分析詳細(xì)設(shè)計(jì)說(shuō)明選用合適的單元測(cè)試工具設(shè)計(jì)單元測(cè)試用例執(zhí)行待測(cè)單元分析實(shí)際結(jié)果與預(yù)期結(jié)果差異27單元接口測(cè)試接口測(cè)試意味著測(cè)試模塊的數(shù)據(jù)流接口測(cè)試主要測(cè)試以下項(xiàng)目:調(diào)用所測(cè)模塊時(shí)實(shí)參與形參在個(gè)數(shù)、屬性、順序上是否匹配;所測(cè)模塊調(diào)用子模塊時(shí),實(shí)參與形參在個(gè)數(shù)、屬性、順序上是否匹配;是否修改了只做輸入用的形參;輸出給標(biāo)準(zhǔn)函數(shù)的參數(shù)在個(gè)數(shù)、屬性、順序上是否匹配全局變量的定義在各模塊中是否一致;限制是否通過(guò)形參來(lái)傳送。28局部數(shù)據(jù)結(jié)構(gòu)測(cè)試局部數(shù)據(jù)結(jié)構(gòu)測(cè)試主要檢查以下各種錯(cuò)誤:檢查不正確或不一致的數(shù)據(jù)類型說(shuō)明;使用尚未賦值或尚未初始化的變量;錯(cuò)誤的初始值或錯(cuò)誤的默認(rèn)值;變量名拼寫錯(cuò)誤或書寫錯(cuò)誤;不一致的數(shù)據(jù)類型。29重要執(zhí)行路徑測(cè)試執(zhí)行路徑錯(cuò)誤是由錯(cuò)誤的控制流造成的因?yàn)閱卧?guī)模小,單元中的執(zhí)行路徑錯(cuò)誤發(fā)生率低一般只需測(cè)試重要執(zhí)行路徑,可測(cè)試出的缺陷包括:錯(cuò)誤的計(jì)算算法錯(cuò)誤初始化不正確….常見的比較和控制流錯(cuò)誤不同數(shù)據(jù)類型比較不正確的邏輯運(yùn)算符或優(yōu)先次序……30本章內(nèi)容單元測(cè)試概述單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試過(guò)程單元測(cè)試計(jì)劃單元測(cè)試工具31各類錯(cuò)誤處理路徑測(cè)試完善的模塊設(shè)計(jì)要求能預(yù)見出錯(cuò)的條件,并設(shè)置適當(dāng)?shù)某鲥e(cuò)處理對(duì)策錯(cuò)誤處理路徑有錯(cuò)誤或缺陷的情況有:出錯(cuò)的描述難以理解;出錯(cuò)的描述不足以對(duì)錯(cuò)誤定位和確定出錯(cuò)的原因;顯示的錯(cuò)誤與實(shí)際的錯(cuò)誤不符;對(duì)錯(cuò)誤條件的處理不正確;在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件已經(jīng)因此系統(tǒng)的干預(yù)如果出錯(cuò)情況不予考慮,那么檢查恢復(fù)正常之后模塊可否正常工作。32邊界條件測(cè)試邊界上出現(xiàn)錯(cuò)誤是常見的。邊界條件測(cè)試主要檢查:運(yùn)算或判斷中取最大值、最小值時(shí)是否有錯(cuò)誤;數(shù)據(jù)流、控制流中剛好等于、大于、小于確定的比較值時(shí)是否出現(xiàn)錯(cuò)誤;在n次循環(huán)的第1次、第2次、第n次是否有錯(cuò)誤。33單元測(cè)試環(huán)境34被測(cè)模塊樁模塊1樁模塊2樁模塊3驅(qū)動(dòng)模塊測(cè)試結(jié)果測(cè)試用例驅(qū)動(dòng)模塊(driver):所測(cè)模塊的主程序。樁模塊(stub):用來(lái)代替所測(cè)模塊調(diào)用的子模塊驅(qū)動(dòng)與樁練習(xí)單元測(cè)試策略36開發(fā)測(cè)試設(shè)計(jì)評(píng)審代碼走查單元測(cè)試集成測(cè)試面向單元的白盒測(cè)試(單元覆蓋率測(cè)試)狹義的單元測(cè)試內(nèi)容面向單元的黑盒測(cè)試(單元功能測(cè)試)內(nèi)存和運(yùn)行錯(cuò)誤分析(內(nèi)存泄漏、越界,異常)代碼運(yùn)行性能profile(函數(shù)效率和瓶頸分析)代碼走查代碼走查:程序員和測(cè)試員組成審查小組,通過(guò)邏輯運(yùn)行程序。代碼走查步驟:第一步(靜態(tài)方法):小組成員提前閱讀設(shè)計(jì)規(guī)格書、程序文本等相關(guān)文檔。第二步(動(dòng)態(tài)方法):利用測(cè)試用例,使程序邏輯運(yùn)行,記錄程序的蹤跡,發(fā)現(xiàn)、討論、解決問(wèn)題代碼走查列表范例:/view/e10f670f763231126edb11cd.html37代碼走查檢查表模板38單元測(cè)試策略選擇三種有效的單元測(cè)試策略:代碼走查、白盒測(cè)試、黑盒測(cè)試。代碼走查費(fèi)時(shí)短,成本低,依賴走查成員的經(jīng)驗(yàn)和技術(shù)白盒測(cè)試通常采用工具,費(fèi)時(shí)短,工具成本高黑盒測(cè)試代價(jià)高,測(cè)試用例數(shù)量大對(duì)于重要單元,時(shí)間允許情況下三種測(cè)試方法都用不重要單元,可選擇一種或兩種進(jìn)行測(cè)試。39本章內(nèi)容單元測(cè)試概述單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試過(guò)程單元測(cè)試計(jì)劃單元測(cè)試工具40單元測(cè)試過(guò)程包括8個(gè)活動(dòng):確定單元測(cè)試計(jì)劃確定待測(cè)特性制定單元測(cè)試規(guī)程設(shè)計(jì)測(cè)試套件構(gòu)建測(cè)試套件執(zhí)行測(cè)試套件檢查終止條件評(píng)估測(cè)試結(jié)果41一、確定單元測(cè)試計(jì)劃確定單元測(cè)試范圍盡可能爭(zhēng)取完全地覆蓋原則上應(yīng)該做到完全覆蓋參考:通常以下情況必須安排單元測(cè)試新軟件單元新增代碼比例超過(guò)20%的軟件單元核心軟件單元42一、確定單元測(cè)試計(jì)劃單元測(cè)試充分性要求例如:語(yǔ)句覆蓋率

=100%;分支覆蓋率

>85%43一、確定單元測(cè)試計(jì)劃確定終止條件確定單元測(cè)試過(guò)程的正常終止條件。該終止條件應(yīng)該包括了對(duì)測(cè)試充分性要求的滿足。例如:100%語(yǔ)句覆蓋,85%分支覆蓋識(shí)別可能造成單元測(cè)試過(guò)程異常終止的條件例如:發(fā)現(xiàn)重大的設(shè)計(jì)錯(cuò)誤,到達(dá)進(jìn)度期限44一、確定單元測(cè)試計(jì)劃確定單元測(cè)試資源考慮測(cè)試人員、硬件、通信或系統(tǒng)軟件、測(cè)試工具和其它資源。45一、確定單元測(cè)試計(jì)劃指明總體進(jìn)度計(jì)劃基于資源和項(xiàng)目計(jì)劃等方面的要求,確定計(jì)劃46二、確定待測(cè)特性研究待測(cè)特性要從研究軟件單元的需求開始功能需求、非功能需求、與待測(cè)單元相關(guān)的任何使用或操作過(guò)程單元的狀態(tài)機(jī)識(shí)別針對(duì)狀態(tài)機(jī)測(cè)試,例如測(cè)試一個(gè)類時(shí)考慮對(duì)象狀態(tài)變化單元的數(shù)據(jù)特性識(shí)別單元的輸入輸出數(shù)據(jù)分析47三、制定單元測(cè)試規(guī)程輸入單元測(cè)試計(jì)劃、待測(cè)特性分析結(jié)果、項(xiàng)目總體進(jìn)度計(jì)劃識(shí)別可重用技術(shù)通過(guò)待測(cè)特性分析,可從用例庫(kù)中識(shí)別出可以重用的測(cè)試用例和測(cè)試規(guī)程,以減少重復(fù)工作資源詳細(xì)列舉所需資源進(jìn)度計(jì)劃詳細(xì)的進(jìn)度計(jì)劃,包括風(fēng)險(xiǎn)分析和應(yīng)對(duì)措施規(guī)程評(píng)審48四、設(shè)計(jì)測(cè)試套件測(cè)試套件(Testsuite)測(cè)試用例、腳本、驅(qū)動(dòng)、樁、測(cè)試數(shù)據(jù)測(cè)試規(guī)程和測(cè)試用例的開發(fā)結(jié)合待測(cè)單元特性分析,充分考慮覆蓋率測(cè)試工具的設(shè)計(jì)考慮所設(shè)計(jì)工具的通用性測(cè)試規(guī)程/用例的評(píng)審49單元測(cè)試數(shù)據(jù)單元測(cè)試數(shù)據(jù)應(yīng)包括:正常數(shù)據(jù)邊界數(shù)據(jù)錯(cuò)誤數(shù)據(jù)50五、構(gòu)建測(cè)試套件測(cè)試數(shù)據(jù)的準(zhǔn)備測(cè)試工具的開發(fā)/調(diào)試構(gòu)建測(cè)試環(huán)境51六、執(zhí)行測(cè)試套件運(yùn)行測(cè)試,確定單元是否通過(guò)測(cè)試。對(duì)測(cè)試過(guò)程中的異常進(jìn)行分析,并根據(jù)情況處理:測(cè)試用例或測(cè)試數(shù)據(jù)的問(wèn)題。修正并重新運(yùn)行測(cè)試規(guī)程執(zhí)行的問(wèn)題。重新運(yùn)行測(cè)試環(huán)境的問(wèn)題。糾正測(cè)試環(huán)境并重新運(yùn)行;或者異常終止測(cè)試,并匯報(bào)記錄異常終止原因單元實(shí)現(xiàn)中的故障。糾正單元的故障,并運(yùn)行所有的測(cè)試;或者異常終止測(cè)試,并匯報(bào)記錄異常終止原因單元設(shè)計(jì)中的故障。糾正單元設(shè)計(jì)和實(shí)現(xiàn)中的故障,必要時(shí)修改測(cè)試設(shè)計(jì)和測(cè)試數(shù)據(jù),并重新運(yùn)行所有的測(cè)試52七、檢查終止條件測(cè)試充分性檢查檢查是否達(dá)到覆蓋率要求,包括測(cè)試用例執(zhí)行/通過(guò)覆蓋率和被測(cè)單元代碼/分支覆蓋率。以及其它測(cè)試充分性要求。異常終止條件檢查補(bǔ)充測(cè)試套件以上條件不滿足時(shí),則需要補(bǔ)充測(cè)試套件,繼續(xù)進(jìn)行測(cè)試。53八、評(píng)估測(cè)試結(jié)果按照單元測(cè)試報(bào)告模塊出具單元測(cè)試報(bào)告如有必要對(duì)單元測(cè)試報(bào)告進(jìn)行評(píng)審將所有測(cè)試相關(guān)工作產(chǎn)品納入配置管理54本章內(nèi)容單元測(cè)試概述單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試過(guò)程單元測(cè)試計(jì)劃單元測(cè)試工具55測(cè)試驅(qū)動(dòng)開發(fā)測(cè)試驅(qū)動(dòng)開發(fā)(即Test-drivendevelopment,簡(jiǎn)稱TDD),是一種測(cè)試方法,即在進(jìn)行代碼變更或新功能增加之前,先編寫單元測(cè)試代碼,再完善代碼確保測(cè)試通過(guò)。56測(cè)試驅(qū)動(dòng)開發(fā)測(cè)試驅(qū)動(dòng)是一種開發(fā)形式:首先要編寫測(cè)試代碼除非存在相關(guān)測(cè)試,否則不編寫任何的產(chǎn)品代碼由測(cè)試來(lái)決定需要編寫什么樣的代碼要求維護(hù)一套詳盡的測(cè)試集57測(cè)試驅(qū)動(dòng)開發(fā)流程58分析設(shè)計(jì)單元測(cè)試代碼產(chǎn)品代碼重構(gòu)執(zhí)行測(cè)試測(cè)試失敗單元測(cè)試代碼錯(cuò)誤產(chǎn)品代碼錯(cuò)誤本章內(nèi)容單元測(cè)試概述單元測(cè)試的內(nèi)容單元測(cè)試策略單元測(cè)試過(guò)程單元測(cè)試計(jì)劃單元測(cè)試工具59JUnitJunit概述由ErichGamma和KentBeck編寫的測(cè)試框架ErichGamma:設(shè)計(jì)模式KentBeck:極限編程是開放源碼軟件,在下載是一種白盒測(cè)試法,是進(jìn)行回歸測(cè)試的工具JUnit自定義包、類框架結(jié)構(gòu)和接口,可以參閱下載文件中的javadoc目錄內(nèi)容JUnit適用于Java開發(fā)人員在單元測(cè)試階段,進(jìn)行單個(gè)方法實(shí)現(xiàn)功能或者類本身的測(cè)試60測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器開發(fā)一個(gè)計(jì)算器,實(shí)現(xiàn)加減乘除的運(yùn)算61測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第一步:創(chuàng)建項(xiàng)目62測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第二步:編寫單元測(cè)試用例代碼63publicclassCaculatorTestextendsjunit.framework.TestCase{}CaculatorTest將從junit.framework.TestCase獲得或是繼承所有的能力(行為)和數(shù)據(jù)(屬性)必須指定該類為public類型,這樣JUnit測(cè)試框架才能識(shí)別它測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第三步:執(zhí)行測(cè)試用例測(cè)試失敗64測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第四步:增加一個(gè)測(cè)試65

方法名testAdd,暗示這是一個(gè)測(cè)試方法。對(duì)Java而言,這不過(guò)是個(gè)方法名。但是JUnit根據(jù)名稱來(lái)識(shí)別一個(gè)測(cè)試方法,所以測(cè)試方法的命名要遵從下面的標(biāo)準(zhǔn):方法必須聲明為public方法的返回值必須為void方法的名字必須以小寫test為前綴方法不能接受任何參數(shù)測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第五步:編譯測(cè)試用例代碼,執(zhí)行測(cè)試66JUnit執(zhí)行成功(顯示一根綠條),對(duì)測(cè)試類CaculatorTest,JUnit顯示成功地執(zhí)行了一個(gè)測(cè)試方法,沒(méi)有任何錯(cuò)誤和失敗。請(qǐng)記住在testAdd中沒(méi)有任何代碼。JUnit執(zhí)行成功表明空的測(cè)試方法一定可以通過(guò)。測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第六步:編寫產(chǎn)品代碼67故意制造一個(gè)缺陷。測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第七步:測(cè)試中增加測(cè)試斷言(assertion)斷言:用于在代碼中捕捉編寫代碼所做的假設(shè)斷言表示為一些布爾表達(dá)式Junit提供的常用斷言:assertEquals、assertFalse、assertNotNull、assertNotSame、assertNull、assertSame、assertTrue68測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第八步:執(zhí)行測(cè)試69測(cè)試不通過(guò),需要判斷失敗原因測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器第九步:修改錯(cuò)誤以使測(cè)試執(zhí)行通過(guò)70測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器測(cè)試套件(Testsuite)包含了一組相關(guān)的TestCase如果你沒(méi)有為你的TestCase定義一個(gè)suite,Junit會(huì)自動(dòng)為你提供suite并將在TestCase中發(fā)現(xiàn)的所有測(cè)試都包含進(jìn)來(lái)。和TestCase一樣,作為JUnit的一個(gè)類實(shí)現(xiàn)Test接口TestSuite類的suite()方法如同普通類中的main()方法一樣,JUnit用來(lái)執(zhí)行測(cè)試71測(cè)試驅(qū)動(dòng)開發(fā)實(shí)例:計(jì)算器應(yīng)用測(cè)試套件(Testsuite)72Junit應(yīng)用總結(jié)JUnit用于開發(fā)人員進(jìn)行單元測(cè)試適合一邊編程,一邊測(cè)試,可盡早糾正編程錯(cuò)誤,減小糾正代價(jià)在JUnit框架下,編寫針對(duì)不同工作代碼的測(cè)試代碼,只需做部分修改,實(shí)現(xiàn)測(cè)試代碼重用JUnit有特定的框架結(jié)構(gòu),只有多練習(xí),才能熟練應(yīng)用73驅(qū)動(dòng)開發(fā)測(cè)試特點(diǎn)主要優(yōu)點(diǎn):提高代碼質(zhì)量改進(jìn)設(shè)計(jì)為功能代碼提供了良好的文檔在一定程度上可替代程序調(diào)試有效的質(zhì)量控制和項(xiàng)目管理74驅(qū)動(dòng)開發(fā)測(cè)試特點(diǎn)主要不足:難以測(cè)試包含界面、數(shù)據(jù)庫(kù)、通信等類型的代碼不適合密碼技術(shù)、容錯(cuò)等安全類型的應(yīng)用軟件單元與單元測(cè)試用例如果由同一開發(fā)人員編寫,導(dǎo)致測(cè)試與開發(fā)產(chǎn)生共同的盲點(diǎn)測(cè)試代碼將成為項(xiàng)目維護(hù)額外的負(fù)擔(dān)單元測(cè)試的高通過(guò)率可能造成軟件高質(zhì)量的假象75MockitoMockito是一個(gè)開源的Java測(cè)試框架用于創(chuàng)建和管理mock對(duì)象(虛擬對(duì)象)。它可以幫助我們進(jìn)行單元測(cè)試,并容易集成到我們現(xiàn)有的測(cè)試框架中。Mockito的作用在于模擬或者替代依賴項(xiàng)或難以設(shè)置的對(duì)象。使用Mockito可以使單元測(cè)試更簡(jiǎn)單、更容易理解和維護(hù)。Mockito主要提供了以下操作:創(chuàng)建Mock對(duì)象打樁(Stubbing):定義模擬對(duì)象在給定參數(shù)時(shí)應(yīng)該產(chǎn)生什么樣的結(jié)果驗(yàn)證(Verification):驗(yàn)證模擬對(duì)象的互動(dòng)行為以及調(diào)用次數(shù)等真實(shí)對(duì)象的Spy:間諜(Spy)對(duì)象允許你使用真實(shí)的對(duì)象,但是還會(huì)跟蹤對(duì)象的特定行為76JUnit與Mockito結(jié)合使用Mockito的應(yīng)用場(chǎng)景一般包括:模擬接口,用于測(cè)試接口調(diào)用是否合理。模擬依賴,用于測(cè)試代碼中的依賴關(guān)系是否正確。模擬外部系統(tǒng),例如HTTP接口、數(shù)據(jù)庫(kù)等,用于測(cè)試代碼是否能夠正確地與外部系統(tǒng)交互。77JUnit與Mockito結(jié)合使用78JUnit與Mockito結(jié)合使用79本章內(nèi)容為什么做單元測(cè)試單元測(cè)試的概念和內(nèi)容如何做單元測(cè)試測(cè)試驅(qū)動(dòng)開發(fā)與JUnit單元測(cè)試的難點(diǎn)和對(duì)策80常見的單元測(cè)試難點(diǎn)沒(méi)有時(shí)間做單元測(cè)試單元測(cè)試責(zé)任人不清楚測(cè)試代碼難以管理覆蓋率難以手工統(tǒng)計(jì)驅(qū)動(dòng)和樁編寫困難(可測(cè)試性)81對(duì)策:沒(méi)有時(shí)間做單元測(cè)試單元測(cè)試計(jì)劃在項(xiàng)目計(jì)劃應(yīng)該有體現(xiàn)。編寫代碼之前或同時(shí),先設(shè)計(jì)測(cè)試用例。每個(gè)軟件單元應(yīng)該有什么功能?是否每個(gè)功能都有測(cè)試用例來(lái)驗(yàn)證它?82對(duì)策:?jiǎn)卧獪y(cè)試責(zé)任人不清楚強(qiáng)調(diào)單元測(cè)試必須由類包的設(shè)計(jì)者負(fù)責(zé)編寫,因?yàn)橹挥羞@樣,測(cè)試才能保證對(duì)象的運(yùn)行時(shí)態(tài)行為符合需求。讓測(cè)試人員或第三方人員編寫測(cè)試用例,將花費(fèi)更多的工作量。(20>>1)執(zhí)行測(cè)試用例可以讓測(cè)試人員或自動(dòng)構(gòu)造系統(tǒng)。83對(duì)策:測(cè)試代碼難以管理采用測(cè)試工具管理測(cè)試代碼如:XUnit、C++Test、RTRT配置管理中建立配置項(xiàng)如,不同模塊的一組代碼,建立相應(yīng)測(cè)試代碼目錄和配置項(xiàng)84對(duì)策:覆蓋率難以手工統(tǒng)計(jì)利用各種工具:PureCoverage(C/C++/Java/.Net,Windows/UNIX)RTRT(C/C++/Java/Ada,嵌入式系統(tǒng))C++Test(C/C++,Windows/UNIX)Discover(Delphi,Windows)Jacoco(Java)85對(duì)策:驅(qū)動(dòng)和樁編寫困難通常情形下,測(cè)試驅(qū)動(dòng)難以編寫,測(cè)試難以進(jìn)行由以下幾方面原因?qū)е拢罕粶y(cè)試對(duì)象需要傳入的參數(shù)過(guò)多。內(nèi)部的邏輯判斷過(guò)多(內(nèi)部牽扯復(fù)雜)。和界面顯示部分交互過(guò)于頻繁(耦合性太強(qiáng))。被測(cè)對(duì)象過(guò)多的調(diào)用了其他類或方法。需要構(gòu)造的作為參數(shù)的對(duì)象本身過(guò)于復(fù)雜86提高可測(cè)試性提高可測(cè)試性策略堅(jiān)持驅(qū)動(dòng)設(shè)計(jì)的方法功能分解分層原則設(shè)計(jì)的分層思想,例如MVC抽象降低耦合度復(fù)雜參數(shù)對(duì)象表示為接口面向接口編程開發(fā)人員時(shí)刻想著測(cè)試重構(gòu)8788歡迎提問(wèn)和討論謝謝

第10章集成測(cè)試本章內(nèi)容集成測(cè)試概述集成靜態(tài)測(cè)試集成動(dòng)態(tài)測(cè)試集成測(cè)試流程集成測(cè)試計(jì)劃持續(xù)集成工具Jenkins接口測(cè)試工具Postman90什么是集成測(cè)試?也叫做組裝測(cè)試、聯(lián)合測(cè)試、子系統(tǒng)測(cè)試和部件測(cè)試。是在單元測(cè)試的基礎(chǔ)上,將所有模塊按照概要設(shè)計(jì)要求組裝成為子系統(tǒng)或系統(tǒng),進(jìn)行集成測(cè)試。91單元測(cè)試、集成測(cè)試與系統(tǒng)測(cè)試的差別92集成測(cè)試系統(tǒng)測(cè)試單元測(cè)試灰盒測(cè)試,采用較多黑盒方法構(gòu)造測(cè)試用例黑盒測(cè)試大量采用白盒測(cè)試方法測(cè)試方法模塊間的集成和調(diào)用關(guān)系整個(gè)系統(tǒng),包括系統(tǒng)軟硬件等模塊內(nèi)部程序代碼對(duì)象找出與軟件設(shè)計(jì)相關(guān)的程序結(jié)構(gòu),模塊調(diào)用關(guān)系,模塊間接口方面的問(wèn)題對(duì)整個(gè)系統(tǒng)進(jìn)行一系列的整體、有效性測(cè)試消除局部模塊邏輯和功能上的缺陷目的目標(biāo)說(shuō)明書需求說(shuō)明書等程序結(jié)構(gòu)設(shè)計(jì)模塊詳細(xì)設(shè)計(jì)模塊外部說(shuō)明測(cè)試依據(jù)集成測(cè)試關(guān)注的重點(diǎn)在把各個(gè)模塊連接起來(lái)時(shí),穿越模塊接口的數(shù)據(jù)是否會(huì)丟失。各個(gè)子功能組合起來(lái),能否達(dá)到預(yù)期要求的父功能。一個(gè)模塊的功能是否會(huì)對(duì)另一個(gè)模塊的功能產(chǎn)生不利的影響。全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問(wèn)題,會(huì)不會(huì)被異常修改單個(gè)模塊的誤差積累起來(lái),是否會(huì)放大,從而達(dá)到不可以接受的程度。93集成測(cè)試的層次產(chǎn)品開發(fā)過(guò)程:一個(gè)分層設(shè)計(jì)和逐步細(xì)化的過(guò)程94系統(tǒng)結(jié)構(gòu)圖軟件結(jié)構(gòu)95軟件結(jié)構(gòu)圖軟件模塊結(jié)構(gòu)圖集成測(cè)試的層次集成測(cè)試可分成3個(gè)層次——集成測(cè)試都應(yīng)覆蓋:模塊內(nèi)集成測(cè)試子系統(tǒng)內(nèi)集成測(cè)試子系統(tǒng)間集成測(cè)試面向?qū)ο蟮膽?yīng)用系統(tǒng)來(lái)說(shuō),可分為2個(gè)層次:類內(nèi)集成測(cè)試類間集成測(cè)試96本章內(nèi)容集成測(cè)試概述集成靜態(tài)測(cè)試集成動(dòng)態(tài)測(cè)試集成測(cè)試流程集成測(cè)試計(jì)劃持續(xù)集成工具Jenkins接口測(cè)試工具Postman97系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)測(cè)試系統(tǒng)體系結(jié)構(gòu)的“4+1”視圖描述:

用例視圖:用例視圖定義系統(tǒng)的外部行為。邏輯視圖:邏輯視圖描述邏輯結(jié)構(gòu)。實(shí)現(xiàn)視圖:實(shí)現(xiàn)視圖描述用于組建系統(tǒng)的物理組件。進(jìn)程視圖:進(jìn)程視圖描述將系統(tǒng)分解為過(guò)程和任務(wù)。部署視圖:描述系統(tǒng)的物理網(wǎng)絡(luò)布局及程序分布。系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)測(cè)試主要驗(yàn)證系統(tǒng)各組件間的結(jié)構(gòu)設(shè)計(jì)是否合理,屬于模塊間接口和交互的測(cè)試范疇。98數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)測(cè)試數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)確定軟件涉及的文件系統(tǒng)的結(jié)構(gòu)以及數(shù)據(jù)庫(kù)的模式、子模式,進(jìn)行數(shù)據(jù)完整性和安全性的設(shè)計(jì)。它包括以下幾個(gè)方面:確定輸入、輸出文件的詳細(xì)數(shù)據(jù)結(jié)構(gòu);結(jié)合算法設(shè)計(jì),確定算法所必需的邏輯數(shù)據(jù)結(jié)構(gòu)及操作;內(nèi)部模塊之間的接口數(shù)據(jù)格式設(shè)計(jì);數(shù)據(jù)庫(kù)設(shè)計(jì)合理性,具體見數(shù)據(jù)庫(kù)專業(yè)書籍。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)測(cè)試主要驗(yàn)證數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)文檔的規(guī)范性、邏輯正確性與接口一致性。通過(guò)評(píng)審設(shè)計(jì)文檔、檢查數(shù)據(jù)模型、分析接口定義來(lái)發(fā)現(xiàn)潛在缺陷,確保設(shè)計(jì)符合需求且易于實(shí)現(xiàn)。99類圖靜態(tài)測(cè)試類圖進(jìn)行靜態(tài)測(cè)試時(shí)主要關(guān)注的內(nèi)容:完整性檢查:驗(yàn)證類圖中是否包含了所有必要的類,包括實(shí)體類、控制類和邊界類等。正確性驗(yàn)證:確認(rèn)類之間的關(guān)系是否準(zhǔn)確表示了領(lǐng)域模型和系統(tǒng)設(shè)計(jì)。一致性檢驗(yàn):確保類圖與系統(tǒng)的需求文檔和設(shè)計(jì)文檔相一致,沒(méi)有遺漏或多余的元素。訪問(wèn)控制檢查:檢查類之間的訪問(wèn)權(quán)限是否合理。重用和代碼質(zhì)量:檢查類的設(shè)計(jì)是否促進(jìn)了代碼的重用,例如通過(guò)繼承和接口實(shí)現(xiàn);評(píng)估類和類之間的關(guān)系是否遵循了良好的設(shè)計(jì)原則,如單一職責(zé)原則和開閉原則。設(shè)計(jì)模式的應(yīng)用:確認(rèn)類圖是否正確地實(shí)現(xiàn)了設(shè)計(jì)模式,檢查設(shè)計(jì)模式的應(yīng)用是否提高了系統(tǒng)的靈活性和可維護(hù)性。關(guān)聯(lián)和依賴檢查:驗(yàn)證類之間的關(guān)聯(lián)關(guān)系(如一對(duì)一、一對(duì)多、多對(duì)多)是否正確和必要;檢查依賴關(guān)系是否合理,確保類之間的耦合度適中,不會(huì)導(dǎo)致過(guò)高的復(fù)雜性。抽象和具體類的平衡:評(píng)估類圖中抽象類和具體類的比例,確保它們?cè)谠O(shè)計(jì)中扮演了合適的角色;檢查是否有過(guò)度使用抽象類或接口,導(dǎo)致設(shè)計(jì)過(guò)于復(fù)雜。100本章內(nèi)容集成測(cè)試概述集成靜態(tài)測(cè)試集成動(dòng)態(tài)測(cè)試集成測(cè)試流程集成測(cè)試計(jì)劃持續(xù)集成工具Jenkins接口測(cè)試工具Postman101集成測(cè)試策略非增量方式先測(cè)試好每一個(gè)軟件單元,然后一次性組裝在一起再測(cè)試整個(gè)程序。增量方式逐步把下一個(gè)要被組裝的軟件單元或部件,同已測(cè)好的軟件部件結(jié)合起來(lái)測(cè)試。增量方式主要包括自頂向下、自底向上、自頂向下與自底向上相結(jié)合等方法。102大系統(tǒng)中較復(fù)雜、也是核心集成測(cè)試策略非增量方式

大爆炸(BigBang)增量方式自頂向下方法(Top-Down

)自底向上方法(Bottom-Up

)“三明治”方法(Sandwich)103大爆炸集成(BigBang)將所有系統(tǒng)組件一次性集成到被測(cè)系統(tǒng)中104d1、d2、d3、d4、d5是為單元測(cè)試時(shí)建立的驅(qū)動(dòng)模塊s1、s2、s3、s4、s5是為單元測(cè)試而建立的樁模塊先測(cè)每一個(gè)思考:1)在基于Junit的單元測(cè)試中樁和驅(qū)動(dòng)程序呢?集中測(cè)試中如何編寫?在哪運(yùn)行?大爆炸集成(BigBang)優(yōu)點(diǎn):可以迅速完成集成測(cè)試;并且只要極少數(shù)的驅(qū)動(dòng)和樁模塊;用例也是最少的(為什么?);簡(jiǎn)單;資源利用率高缺點(diǎn):一次試運(yùn)行成功的可能性不大,問(wèn)題定位和修改比較困難,許多接口錯(cuò)誤很容易躲過(guò)測(cè)試。適應(yīng)于一個(gè)維護(hù)型項(xiàng)目或被測(cè)試系統(tǒng)較小105增量測(cè)試測(cè)試單獨(dú)的模塊可能需要一個(gè)特殊的驅(qū)動(dòng)模塊和一個(gè)或多個(gè)樁模塊驅(qū)動(dòng)模塊是為測(cè)試編寫的一個(gè)小模塊,用來(lái)將測(cè)試用例驅(qū)動(dòng)或傳輸數(shù)據(jù)到被測(cè)模塊。驅(qū)動(dòng)模塊還需要向測(cè)試人員顯示被測(cè)模塊的結(jié)果。樁模塊充當(dāng)被測(cè)模塊調(diào)用的模塊,模擬該模塊的功能。例如測(cè)試模塊B時(shí)需要一個(gè)驅(qū)動(dòng)模塊,和一個(gè)模擬模塊E的樁模塊ABDCFE非增量測(cè)試和增量測(cè)試107增量測(cè)試非增量測(cè)試使用前面測(cè)試過(guò)的模塊來(lái)取代非增量測(cè)試中所需要的驅(qū)動(dòng)模塊或樁模塊。要設(shè)計(jì)驅(qū)動(dòng)模塊和樁模塊可以較早發(fā)現(xiàn)模塊中與不匹配接口、不正確假設(shè)等編程錯(cuò)誤。到了測(cè)試過(guò)程的最后階段,模塊之間才能“互相看到”容易進(jìn)行調(diào)試,新出現(xiàn)的錯(cuò)誤往往與最近添加的模塊有關(guān)直到整個(gè)程序組裝之后,模塊之間接口相關(guān)的錯(cuò)誤才會(huì)浮現(xiàn),難以定位測(cè)試可以進(jìn)行地更徹底,每個(gè)模塊經(jīng)受了更多的檢驗(yàn)使用驅(qū)動(dòng)模塊和樁模塊而非實(shí)際模塊,對(duì)被測(cè)試模塊的測(cè)試只影響自身在測(cè)試上花費(fèi)的時(shí)間多,設(shè)計(jì)驅(qū)動(dòng)模塊和樁模塊所用時(shí)間少測(cè)試時(shí)間少,但設(shè)計(jì)驅(qū)動(dòng)模塊和樁模塊需要大量時(shí)間并行性差可以同時(shí)并行測(cè)試很多模塊

自頂向下測(cè)試與自底向上測(cè)試自頂向下測(cè)試從最頂層模塊開始,逐漸加入下層模塊自底向上測(cè)試從最底層模塊開始,逐漸加入上層模塊ABDCFE自定向下方法從頂層控制開始,從程序的頂部模塊開始測(cè)試。再選擇后續(xù)模塊添加進(jìn)來(lái)進(jìn)行增量測(cè)試添加的原則是:至少一個(gè)調(diào)用該模塊的模塊事先經(jīng)過(guò)了測(cè)試。有多種可能的測(cè)試序列時(shí),應(yīng)該考慮先測(cè)試關(guān)鍵模塊和I/O模塊為測(cè)試上層模塊,需設(shè)計(jì)樁模塊,樁模塊通常要向被測(cè)模塊提供測(cè)試數(shù)據(jù),如讀取外部數(shù)據(jù)文件109ABDCFE集成的方式有兩種:深度優(yōu)先組裝法按縱向考慮,層次多的分支優(yōu)先測(cè)試廣度優(yōu)先組裝法從橫向考慮,總是先測(cè)試下一級(jí)的模塊ABDCFE111深度優(yōu)先組裝方式112廣度優(yōu)先組裝方式較復(fù)雜的情況圖中共有12個(gè)模塊A到L模塊I包含IO的寫操作模塊J包含IO的讀操作ACDBJIHGFLKE自頂向下的增量測(cè)試首先測(cè)試模塊A,需要設(shè)計(jì)代表模塊B,C,D的樁模塊;如圖接著用實(shí)際模塊代替樁模塊,如B,并添加B的樁模塊;如圖增量的序列有多種可能,例如:ABFJDICGEKHL,加入I后如圖AstubCstubDstubBstubFstubEBJFDstubHI自頂向下的增量測(cè)試中的樁模塊顯示跟蹤信息顯示傳遞信息返回一個(gè)值根據(jù)輸入返回一個(gè)值A(chǔ)BCD集成步驟(遍歷算法)以主模塊為所測(cè)模塊兼驅(qū)動(dòng)模塊,所有直屬于主模塊的下屬模塊全部用樁模塊對(duì)主模塊進(jìn)行測(cè)試采用深度優(yōu)先或廣度優(yōu)先的策略,用實(shí)際模塊替換相應(yīng)樁模塊,再用樁代替它們的直接下屬模塊,與已測(cè)試的模塊或子系統(tǒng)集成為新的子系統(tǒng)。進(jìn)行回歸測(cè)試(即重新執(zhí)行以前做過(guò)的全部測(cè)試或部分測(cè)試),排除集成過(guò)程中引起錯(cuò)誤的可能判斷是否所有的模塊都已集成到系統(tǒng)中,是則結(jié)束測(cè)試,否則轉(zhuǎn)到(2)去執(zhí)行。116ABDCFE自頂向下的增量測(cè)試方法特點(diǎn)優(yōu)點(diǎn):較早地驗(yàn)證了主要控制和判斷點(diǎn);按深度優(yōu)先可以首先實(shí)現(xiàn)和驗(yàn)證一個(gè)完整的軟件功能;功能較早證實(shí),帶來(lái)信心;只需一個(gè)驅(qū)動(dòng),減少驅(qū)動(dòng)器開發(fā)的費(fèi)用;支持故障隔離。缺點(diǎn):樁的開發(fā)量大;底層驗(yàn)證被推遲;底層組件測(cè)試不充分。117ABDCFE118適用范圍產(chǎn)品控制結(jié)構(gòu)比較清晰和穩(wěn)定;高層接口變化較?。坏讓咏涌谖炊x或經(jīng)??赡鼙恍薷模划a(chǎn)品控制組件具有較大的技術(shù)風(fēng)險(xiǎn),需要盡早被驗(yàn)證;希望盡早能看到產(chǎn)品的系統(tǒng)功能行為。ABDCFE119自底向上方法從具有最小依賴性的底層組件開始,按照依賴關(guān)系樹的結(jié)構(gòu),逐層向上集成,以檢驗(yàn)系統(tǒng)的穩(wěn)定性。選擇下一個(gè)模塊進(jìn)行增量測(cè)試的原則是:該模塊調(diào)用的所有的模塊都已經(jīng)事先經(jīng)過(guò)了測(cè)試。為了測(cè)試低層模塊,需要為它們?cè)O(shè)計(jì)驅(qū)動(dòng)模塊:即包含著有效的測(cè)試輸入、調(diào)用被測(cè)模塊且顯示輸出的模塊。ABDCFE集成示意圖自底向上方法121自底向上方法集成步驟(1)起始于模塊依賴關(guān)系樹的底層葉子模塊,也可以把兩個(gè)或多個(gè)葉子模塊合并到一起進(jìn)行測(cè)試(2)使用驅(qū)動(dòng)模塊對(duì)步驟1選定的模塊(或模塊組)進(jìn)行測(cè)試(3)用實(shí)際模塊代替驅(qū)動(dòng)模塊,與它已測(cè)試的直屬子模塊組裝成一個(gè)更大的模塊進(jìn)行測(cè)試(4)重復(fù)上面的行為直到系統(tǒng)最頂層模塊被加入到已測(cè)系統(tǒng)中ABDCFE122自底向上方法優(yōu)缺點(diǎn)分析優(yōu)點(diǎn):對(duì)底層組件行為較早驗(yàn)證;工作最初可以并行集成,比自頂向下效率高;減少了樁的工作量;支持故障隔離。缺點(diǎn):驅(qū)動(dòng)的開發(fā)工作量大;對(duì)高層的驗(yàn)證被推遲,設(shè)計(jì)上的錯(cuò)誤不能被及時(shí)發(fā)現(xiàn)。ABDCFE123自底向上方法適用范圍:適應(yīng)于底層接口比較穩(wěn)定;高層接口變化比較頻繁;底層組件較早被完成。ABDCFE自底向上的增量測(cè)試第一步測(cè)試E,J,G,K,L和I中的部分或全部模塊既可以串行也可以并行進(jìn)行;需要設(shè)計(jì)驅(qū)動(dòng)模塊,有的驅(qū)動(dòng)模塊可以供幾個(gè)測(cè)試模塊使用ACDBJIHGFLKE自底向上的增量測(cè)試接著測(cè)試的模塊序列有多種可能如果接下來(lái)是測(cè)試較關(guān)鍵的模塊F,H,則用它們代替相應(yīng)的驅(qū)動(dòng)模塊,并加入它們的驅(qū)動(dòng)模塊JDriverDriverLKIDriverFDriverDDriverH自底向上的增量測(cè)試中的驅(qū)動(dòng)模塊調(diào)用從屬模塊調(diào)用從屬模塊,并傳遞參數(shù)調(diào)用從屬模塊,并要求得到參數(shù)兼有B,C的功能ABCD自頂向下測(cè)試和自底向上測(cè)試的比較自頂向下優(yōu)點(diǎn)如果主要缺陷發(fā)生在程序頂層將非常有利早期程序框架可以進(jìn)行演示,即提早發(fā)現(xiàn)主要的控制問(wèn)題缺點(diǎn)必須開發(fā)樁模塊樁模塊可能要比最初表現(xiàn)的更復(fù)雜創(chuàng)建測(cè)試環(huán)境可能很難,甚至無(wú)法實(shí)現(xiàn)觀測(cè)測(cè)試輸出比較困難自底向上優(yōu)點(diǎn)如果主要的缺陷發(fā)生在程序的底層將非常有利提早發(fā)現(xiàn)程序當(dāng)中的主要算法問(wèn)題測(cè)試環(huán)境比較容易建立觀測(cè)測(cè)試輸出比較容易缺點(diǎn)必須開發(fā)驅(qū)動(dòng)模塊直到最后一個(gè)模塊添加進(jìn)去,程序才形成一個(gè)整體128“三明治”方法(Sandwich)混合式集成把系統(tǒng)劃分成三層,中間一層為目標(biāo)層,目標(biāo)層之上采用自頂向下集成,之下采用自底向上集成129三明治集成策略集成步驟(1)首先對(duì)目標(biāo)層之上一層使用自頂向下集成,因此測(cè)試A,使用樁代替B,C,D(2)其次對(duì)目標(biāo)層之下一層使用自底向上集成,因此測(cè)試E,F(xiàn),使用驅(qū)動(dòng)代替B,D(3)其三,把目標(biāo)層下面一層與目標(biāo)層集成,因此測(cè)試(B,E),(D,F(xiàn)),使用驅(qū)動(dòng)代替A(4)最后,把三層集成到一起,因此測(cè)試(A,B,C,D,E,F(xiàn))130三明治集成策略優(yōu)缺點(diǎn)優(yōu)點(diǎn):集合了自頂向下和自底向上兩種策略的優(yōu)點(diǎn)缺點(diǎn):中間層測(cè)試不充分適用范圍:適應(yīng)于大部分軟件開發(fā)項(xiàng)目ABDCFE131修改過(guò)的三明治集成面向?qū)ο蟮募蓽y(cè)試面向?qū)ο蟮募蓽y(cè)試特點(diǎn)結(jié)構(gòu)集成測(cè)試功能集成測(cè)試集成測(cè)試方法繼承關(guān)系的類集成測(cè)試類交互的集成測(cè)試132結(jié)構(gòu)集成測(cè)試方法:靜態(tài)測(cè)試測(cè)試對(duì)象:類繼承、類容器、組件的接口目的:結(jié)構(gòu)是否符合設(shè)計(jì)可逆性工程:ISA公司的Panorama-2、Rational公司的RoseC++Analyzer對(duì)照類關(guān)系圖133功能集成測(cè)試方法:檢查類間方法交互、組件間交互等;信息來(lái)源:系統(tǒng)的規(guī)約、系統(tǒng)設(shè)計(jì)、代碼。其它信息:設(shè)計(jì)模型、功能調(diào)用結(jié)構(gòu)圖、類關(guān)系圖或者實(shí)體關(guān)系圖134類層次結(jié)構(gòu)繼承->類交互->組件->應(yīng)用類通過(guò)繼承集成類通過(guò)交互集成類到組件的集成組件到應(yīng)用系統(tǒng)的集成135交互集成對(duì)象交互通過(guò)消息傳遞實(shí)現(xiàn)通過(guò)參數(shù)引用136Wood和Flooring集成Flooring類137Wood和Surface單元測(cè)試Flooring集成測(cè)試其它類交互參數(shù)交互返回類對(duì)象類方法中創(chuàng)建對(duì)象類引用全局類對(duì)象138集成測(cè)試步驟選定檢測(cè)的類,參考OOD分析結(jié)果,仔細(xì)分析類的狀態(tài)和相應(yīng)的行為,類或方法間傳遞消息,前置條件和后置條件的界定等;確定覆蓋標(biāo)準(zhǔn);利用結(jié)構(gòu)關(guān)系圖確定待測(cè)類的所有關(guān)聯(lián);根據(jù)程序中類的對(duì)象構(gòu)造測(cè)試用例,確認(rèn)使用什么輸入激發(fā)類狀態(tài)的改變,使用類的服務(wù)和期望產(chǎn)生什么行為等;進(jìn)行集成測(cè)試,根據(jù)類的層次關(guān)系確定測(cè)試的先后順序,盡量使測(cè)試用例能夠復(fù)用。139集成測(cè)試原則首先測(cè)試公共類測(cè)試僅調(diào)用公共類的類有繼承層次關(guān)系的先測(cè)試父類再測(cè)試子類集成時(shí)盡量一次添加一個(gè)被測(cè)試的類或組件形成組件的先單獨(dú)測(cè)試組件再集成到子系統(tǒng)140實(shí)例:發(fā)布新聞141“發(fā)布新聞”用例的順序圖發(fā)布新聞,可上傳附件實(shí)例:發(fā)布新聞集成測(cè)試先測(cè)試FileUpload、NewsDao,需要驅(qū)動(dòng)類News類可以不測(cè)然后測(cè)試NewsService,需要Mock對(duì)象、驅(qū)動(dòng)類,然后NewsDao對(duì)象替換Mock對(duì)象再測(cè)試NewsController,需要Mock對(duì)象、驅(qū)動(dòng)類最后測(cè)AddNewsFrame,

需要Mock對(duì)象142本章內(nèi)容集成測(cè)試概述集成靜態(tài)測(cè)試集成動(dòng)態(tài)測(cè)試集成測(cè)試流程集成測(cè)試計(jì)劃持續(xù)集成工具Jenkins接口測(cè)試工具Postman143集成測(cè)試流程144制定集成測(cè)試計(jì)劃集成測(cè)試分析與設(shè)計(jì)集成測(cè)試實(shí)現(xiàn)集成測(cè)試執(zhí)行集成測(cè)試評(píng)估軟件體系結(jié)構(gòu)初步分析關(guān)鍵特性分析工作量估計(jì)資源安排進(jìn)度安排集成測(cè)試對(duì)象分析集成策略選擇集成測(cè)試工具選擇和設(shè)計(jì)集成測(cè)試代碼設(shè)計(jì)集成測(cè)試用例設(shè)計(jì)集成測(cè)試工具開發(fā)集成測(cè)試代碼開發(fā)集成測(cè)試用例開發(fā)建立集成測(cè)試環(huán)境執(zhí)行集成測(cè)試測(cè)試結(jié)果記錄集成測(cè)試數(shù)據(jù)分析集成測(cè)試評(píng)估145(1)為系統(tǒng)運(yùn)行設(shè)計(jì)用例——多角度設(shè)計(jì)測(cè)試用例

目的:測(cè)試各個(gè)模塊的接口是否能用,驗(yàn)證系統(tǒng)最基本功能可使用的主要測(cè)試分析技術(shù)有(黑盒技術(shù)):(1)等價(jià)類劃分。(2)邊界值分析。(3)基于決策表的測(cè)試。146(2)為正向測(cè)試設(shè)計(jì)用例目的:驗(yàn)證集成后的模塊是否按照設(shè)計(jì)實(shí)現(xiàn)了預(yù)期的功能??墒褂萌缦聨追N主要測(cè)試分析技術(shù):(1)輸入域測(cè)試。(2)輸出域測(cè)試。(3)等價(jià)類劃分。(4)狀態(tài)轉(zhuǎn)換測(cè)試。正向測(cè)試是指,當(dāng)你輸入一個(gè)有效的輸入并且期望軟件能夠完成一些根據(jù)說(shuō)明書規(guī)定的行為。147(3)為逆向測(cè)試設(shè)計(jì)用例目的:測(cè)試是否多余功能、接口遺漏、接口錯(cuò)誤、接口異常??墒褂玫闹饕獪y(cè)試分析技術(shù)有:(1)錯(cuò)誤猜測(cè)法。(2)基于風(fēng)險(xiǎn)的測(cè)試。(3)基于故障的測(cè)試。(4)邊界值分析。(5)特殊值測(cè)試。(6)狀態(tài)轉(zhuǎn)換測(cè)試。逆向測(cè)試是指,當(dāng)你輸入無(wú)效的輸入時(shí)并且期望得到一個(gè)錯(cuò)誤的信息。148集成測(cè)試用例設(shè)計(jì)(4)為滿足特殊需求設(shè)計(jì)用例。(5)為高覆蓋設(shè)計(jì)用例可使用的主要測(cè)試分析技術(shù)有:(1)功能覆蓋分析。(2)接口覆蓋分析。149集成測(cè)試流程(思考各階段IO)計(jì)劃階段設(shè)計(jì)階段實(shí)現(xiàn)階段執(zhí)行階段分析評(píng)估缺陷跟蹤根據(jù)項(xiàng)目組提供設(shè)計(jì)模型和集成構(gòu)建計(jì)劃,制定出適合本項(xiàng)目的集成測(cè)試計(jì)劃根據(jù)集成測(cè)試計(jì)劃和設(shè)計(jì)模型設(shè)計(jì)集成測(cè)試用例及測(cè)試過(guò)程獲取工作版本后,由測(cè)試設(shè)計(jì)員創(chuàng)建測(cè)試腳本(可選)、更新測(cè)試過(guò)程,由設(shè)計(jì)員負(fù)責(zé)設(shè)計(jì)驅(qū)動(dòng)程序和樁,實(shí)施員負(fù)責(zé)實(shí)施驅(qū)動(dòng)和樁測(cè)試人員根據(jù)測(cè)試腳本(可選)和工作版本執(zhí)行集成測(cè)試,并記錄測(cè)試結(jié)果依照集成測(cè)試計(jì)劃和測(cè)試結(jié)果,由測(cè)試設(shè)計(jì)員負(fù)責(zé)會(huì)同集成員、編碼員、設(shè)計(jì)人員評(píng)估此次測(cè)試,并生成測(cè)試評(píng)估摘要150計(jì)劃階段輸入需求規(guī)格說(shuō)明書概要設(shè)計(jì)文檔產(chǎn)品開發(fā)計(jì)劃輸出集成測(cè)試計(jì)劃151計(jì)劃階段活動(dòng)步驟確定被測(cè)試對(duì)象和測(cè)試范圍評(píng)估集成測(cè)試被測(cè)試對(duì)象的數(shù)量及難度確定角色分工和劃分工作任務(wù)標(biāo)識(shí)出測(cè)試各階段的時(shí)間、任務(wù)、約束等條件考慮一定的風(fēng)險(xiǎn)分析及應(yīng)急計(jì)劃考慮和準(zhǔn)備集成測(cè)試需要的測(cè)試工具、測(cè)試儀器、環(huán)境等資源考慮外部技術(shù)支援的力度和深度,以及相關(guān)培訓(xùn)安排定義測(cè)試完成標(biāo)準(zhǔn)152設(shè)計(jì)階段輸入需求規(guī)格說(shuō)明書概要設(shè)計(jì)集成測(cè)試計(jì)劃輸出集成測(cè)試設(shè)計(jì)方案集成測(cè)試用例153

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論