版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言白盒測(cè)試實(shí)例文檔管理信息表主題C語(yǔ)言白盒測(cè)試實(shí)例版本TIBCO SDETest Vl. 0內(nèi)容設(shè)計(jì)關(guān)鍵字白盒參考文檔單元測(cè)試創(chuàng)建時(shí)間2008-04-11創(chuàng)建人馮昌建職位SDETest 主管最新發(fā)布日期2008-04-151/1白盒測(cè)試實(shí)例之一一需求說(shuō)明三角形的問(wèn)題在很多軟件測(cè)試的書(shū)籍中都岀現(xiàn)過(guò),問(wèn)題雖小,五臟俱全,是個(gè)很不錯(cuò)的 軟件測(cè)試的教學(xué)例子。本文借助這個(gè)例子結(jié)合教學(xué)經(jīng)驗(yàn),從更高的視角來(lái)探討需求分析、軟 件設(shè)計(jì)、軟件開(kāi)發(fā)與軟件測(cè)試之間的關(guān)系與作用。題目:根據(jù)下而給出的三角形的需求完成程序并完成測(cè)試:一、輸入條件:1、條件1:a+bc2、條件2:a+cb3、條件3:b+ca4、條件4:
2、0a2005、條件5:0b2006、條件6:0c2007、條件7:a=b8、條件8:a=c9、條件9:b=c10、條件 10: a2+b2=c211、條件 11: a2+ c2= b212、條件 12: c2+b2=a2二、輸出結(jié)果:1、不能組成三角形2、等邊三角形3、等腰三角形4、直角三角形5、一般三角形6、某些邊不滿足限制白盒測(cè)試實(shí)例之二答案很多初學(xué)者一看到這個(gè)需求(詳見(jiàn)白盒測(cè)試實(shí)例之一需求說(shuō)明收藏),都覺(jué)得很簡(jiǎn) 單,然后立刻就開(kāi)始動(dòng)手寫(xiě)代碼了,這并不是一個(gè)很好的習(xí)慣。如果你的第一直覺(jué)也是這樣 的,不妨耐心看到文章的最后。大部分人的思路:1、首先建立一個(gè)main函數(shù),main函數(shù)第一件事是
3、提示用戶輸入三角形的三邊, 然后獲取用戶的輸入(假設(shè)用戶的輸入都是整數(shù)的情況),用C語(yǔ)言來(lái)寫(xiě),這一步基本上 不是問(wèn)題(printf和scanf),但是要求用java來(lái)寫(xiě)的話,很多學(xué)生就馬上遇到問(wèn)題了,java5.0 及之前的版本不容易獲取用戶的輸入。點(diǎn)評(píng):這樣的思路做出來(lái)的程序只能通過(guò)手工方式來(lái)測(cè)試所有業(yè)務(wù)邏輯,而且這個(gè) 程序只能是DOS界面版本了,要是想使用圖形化界而來(lái)做輸入,就得全部寫(xiě)過(guò)代碼。2、業(yè)務(wù)處理流程的思路用流程圖表示如下:3、C語(yǔ)言代碼: #include void main()int a, b, c;printf(Hplease enter three integer:); s
4、canf(,%d%d%d,/ &a, &b, &c);if(Oa & a200 & Ovb & b200 & Ovc & cc & a+cb & c+ba) if(a=b & b=c & a = =c) 這里可以省掉個(gè)判斷printf(nl是等邊三角形J;elseif(a=b 11 b=c 11 a=c)printf(H2是等腰三角形J;elseif(a*a+b*b=c*c 11 a*a+c*c=b*b 11 b*b+c*c=a*a) printf(n3是直角三角形J;elseprintf(H4是-般三角形J;elseprintf(H5不能組成三角形J;elseprintf(n6某些邊不滿足限
5、制”);點(diǎn)評(píng):這樣的思路做出來(lái)的程序只能通過(guò)手工方式來(lái)測(cè)試所有業(yè)務(wù)邏輯,而且這個(gè)程序 只能是DOS界而版本了,要是想使用web或圖形化界面來(lái)做輸入,就得全部寫(xiě)過(guò)代碼。相關(guān)閱讀:白盒測(cè)試實(shí)例之一一需求說(shuō)明收藏白盒測(cè)試技術(shù)方法與實(shí)踐篇白盒測(cè)試技術(shù)白盒測(cè)試?yán)碚撈绾尉帉?xiě)單元測(cè)試用例(白盒測(cè)試)白盒測(cè)試中的六種覆蓋方法白盒測(cè)試實(shí)例之三一需求分析關(guān)鍵字:白盒測(cè)試、需求分析需求分析是后續(xù)工作的基石,如果分析思路有問(wèn)題,后續(xù)工作可能就會(huì)疋向不正確 的方向,比如:代碼重用性差、難于測(cè)試、難于擴(kuò)展和難于維護(hù)等。反而,如果需求分析做 的好,對(duì)設(shè)訃、開(kāi)發(fā)和測(cè)試來(lái)說(shuō),都可能是很大的幫助??吹筋}目給出的條件達(dá)12個(gè)之多
6、,粗粗一看,好像很復(fù)雜,但仔細(xì)分析之后,發(fā) 現(xiàn)可以把它們分成4組來(lái)討論:1、條件 1: a+bc;條件 2: a+cb;條件 3: b+ca這三個(gè)表達(dá)式有什么特點(diǎn)呢?實(shí)際上它們的邏輯是一樣的:兩個(gè)數(shù)之和大于第三個(gè) 數(shù)。那么,前而程序的寫(xiě)法就存在邏輯重復(fù)的地方,應(yīng)該把這個(gè)邏借提取到一個(gè)函數(shù)中。2、條件 4: 0a200:條件 5: 0b200:條件 6: 0c Triangle.h:Copyright (c) 2008,胡添發(fā)(hutianfa):三角形類型判斷:finclude include/*判斷-個(gè)整數(shù)是否在(0, 200)區(qū)間內(nèi)*返回值:true-否;false-是*/bool isO
7、utOfRange(int i);/*判斷三條邊是否合法(即:判斷三條邊都在合法的范圉內(nèi))*返回值:true-是:false-否*/bool isLegal(int a, int b, int c);/*判斷兩條邊之和是否大于第三邊*返回值:true-是:false否*/bool isSumBiger(int az int bz int c);/*判斷三條邊是否能夠組成三角形*返回值:true-是:false否*/bool isTriangle(int az int bz int c);*判斷兩條邊是否相等*返回值:true-是:false-否*/bool isEquals(int a, in
8、t b);/*求三角形有幾條邊相等*返回值:相等邊的數(shù)量*/int howManyEquals(int a, int b, int c);/*判斷是否滿足兩邊平方之和是否等于第三邊的平方*/bool isPowerSumEquals(int a, int b, int c);/*判斷第-個(gè)數(shù)是否比第二個(gè)數(shù)大*/bool isGreaterThan(int a, int b);/*判斷是否是直角三角形*/bool isRightRriangle(int a, int bz int c);*判斷三角形的類型,返回值:* 1、不能組成三角形* 2、等邊三角形* 3、等腰三角形* 4、直角三角形* 5
9、、般三角形* 6、某些邊不滿足限制*/int triangleType(int a, int bz int c);白盒測(cè)試實(shí)例之六單元測(cè)試的步驟白盒測(cè)試與黑盒測(cè)試的過(guò)程和方法是有一些區(qū)別的。單元測(cè)試的步驟:1、理解需求和設(shè)計(jì)理解設(shè)計(jì)是很重要的,特別是要搞淸楚被測(cè)試模塊在整個(gè)軟件中所處的位置,這對(duì) 測(cè)試的內(nèi)容將會(huì)有很大的影響。需要記住的一個(gè)原則就是:好的設(shè)計(jì),并模塊只負(fù)責(zé)完成自 己的事情,層次與分工是很明確的。在單元測(cè)試的時(shí)候,可以不用測(cè)試不屬于被測(cè)試模塊所 負(fù)責(zé)的功能,以減少測(cè)試用例的冗余,集成測(cè)試的時(shí)候會(huì)有機(jī)會(huì)測(cè)試到的。舉例::判斷三條邊是否能夠組成三角形:返回值:true-是;false-
10、否7ool isTriangle(int a, int b, int c);測(cè)試該函數(shù)的時(shí)候,只需要測(cè)試三條邊(在合法的取值范國(guó)內(nèi)的整數(shù))是否能夠滿 足兩邊之和是否大于第三邊的功能,而不需要測(cè)試三條邊是否在合法的范用(0,200)之間的整數(shù),因?yàn)檎{(diào)用該函數(shù)之前,一立要先通過(guò)下而函數(shù)的檢査,要是檢査不通過(guò),就不會(huì) 執(zhí)行isTriangle函數(shù)。:判斷三條邊是否合法(即:判斷三條邊都在合法的范圍內(nèi)):返回值:true-是:false-否7ool isLegal(int a, int b, int c);所以,單元測(cè)試主要是關(guān)注本單元的內(nèi)部邏輯,而不用關(guān)注整個(gè)業(yè)務(wù)的邏輯,因?yàn)?會(huì)有別的模塊去完成相關(guān)
11、的功能。白盒測(cè)試實(shí)例之七單元測(cè)試的嘗試關(guān)鍵字:白盒測(cè)試單元測(cè)試軟件測(cè)試以測(cè)試isOutOfRange函數(shù)為例,首先知道該函數(shù)在整個(gè)軟件架構(gòu)中處于最底層(葉 子),所以對(duì)它進(jìn)行測(cè)試并不需要寫(xiě)樁模塊,只需要寫(xiě)驅(qū)動(dòng)模塊。要注意的問(wèn)題是:對(duì)于測(cè) 試結(jié)果是否通過(guò)測(cè)試不要使用printf方式打印被測(cè)試函數(shù)的返回結(jié)果值,否則就需要人工去 檢查結(jié)果了。使用邊界值的方法可以得到5個(gè)測(cè)試用例,寫(xiě)的驅(qū)動(dòng)模塊代碼如下:tTrian gle.cpp::Copyright (c) 2008,胡添發(fā)(hutianfa):單元測(cè)試與集成測(cè)試7include Triangle.h*:測(cè)試isOutOfRange函數(shù),使用邊界值
12、的方法(0,1,5,199,200)*/void testIsOutOfRange_try()if(isOutOfRange(0) = true)printf(pass!n);elseprintf(fail!n);if(isOutOfRange(l) = false)printf(pass!n);elseprintf(fail!n);void main() testIsOutOfRange_try();小知識(shí):做單元測(cè)試的時(shí)候,一般不直接在main函數(shù)中寫(xiě)所有的測(cè)試代碼,否則 的話,main函數(shù)將會(huì)非常龐大。正確的做法:針對(duì)每個(gè)函數(shù)分別創(chuàng)建一個(gè)或若干個(gè)(函數(shù) 比較復(fù)雜時(shí))測(cè)試函數(shù),測(cè)試函數(shù)的名
13、稱習(xí)慣以test 頭。寫(xiě)到這里發(fā)現(xiàn)重復(fù)的代碼太多了,而且如果測(cè)試用例數(shù)量很多的話,對(duì)于測(cè)試結(jié)果 的檢查也將是很大的工作量。在測(cè)試有錯(cuò)誤的時(shí)候,這樣的單元測(cè)試結(jié)果也很難獲得更多關(guān) 于錯(cuò)誤的信息。解決問(wèn)題的途徑可以采用cppUnit單元測(cè)試框架。不過(guò)這里為了讓學(xué)生能夠?qū)卧?測(cè)試和單元測(cè)試框架有進(jìn)一步的理解,我決左自己寫(xiě)一個(gè)類似cppUnit的簡(jiǎn)單的測(cè)試框架。 相關(guān)閱讀: 白盒測(cè)試實(shí)例之六單元測(cè)試的步驟 白盒測(cè)試實(shí)例之五編碼 白盒測(cè)試實(shí)例之四程序設(shè)計(jì) 白盒測(cè)試實(shí)例之三一一需求分析 白盒測(cè)試實(shí)例之二答案 白盒測(cè)試實(shí)例之一一一需求說(shuō)明 白盒測(cè)試實(shí)例之八構(gòu)建自己的單元測(cè)試框架(上) 關(guān)鍵字:?jiǎn)卧獪y(cè)試、白
14、盒測(cè)試在上一講“單元測(cè)試的嘗試“里我們遇到了幾個(gè)問(wèn)題:1、代碼重復(fù)的問(wèn)題太多2、測(cè)試結(jié)果需要人工去檢查3、對(duì)測(cè)試的總體信息也無(wú)從得知本講將構(gòu)建一個(gè)簡(jiǎn)單的單元測(cè)試框架來(lái)解決以上的問(wèn)題:1、代碼重復(fù)的問(wèn)題太多這個(gè)問(wèn)題很容易解決,只需要把判斷預(yù)期結(jié)果和實(shí)際結(jié)果的邏輯提取到某個(gè)函數(shù)中即可。從整個(gè)代碼來(lái)看,有兩種類型的結(jié)果的函數(shù):(1) 返回布爾型(2) 返回整數(shù)因此,需要兩個(gè)類型的判斷預(yù)期結(jié)果和實(shí)際結(jié)果是否相符的函數(shù):判斷是否取值為真7oid assertTrue(char *msg, bool actual)F(actual)elseprintfCF);/*判斷預(yù)期結(jié)果和實(shí)際結(jié)果是否相符*/void
15、 assertEquals(char *msgz int expect, int actual)if(expect = actual)printfelse printfCT);小知識(shí):XUnit系列的框架的習(xí)慣使用assert*的命爼來(lái)泄義判斷函數(shù),對(duì)于通過(guò)的 測(cè)試習(xí)慣打印一個(gè)“一”號(hào),而對(duì)于失敗的測(cè)試習(xí)慣打印一個(gè)“F”。2、測(cè)試結(jié)果需要人工去檢查對(duì)于測(cè)試結(jié)果不要使用printf方式打印被測(cè)試函數(shù)的返回結(jié)果值就可以避免這個(gè)問(wèn) 題。3、對(duì)測(cè)試的總體信息也無(wú)從得知除了問(wèn)題1的解決辦法里使用“ ”表示測(cè)試通過(guò)和“F”表示測(cè)試失敗可以提高對(duì)測(cè)試 結(jié)果的信息的直觀性之外,做單元測(cè)試的人還希望能夠得到以下
16、的信息:(1)執(zhí)行的測(cè)試用例總數(shù)、通過(guò)的數(shù)量和失敗的數(shù)量(2)測(cè)試執(zhí)行的時(shí)間(3)如果測(cè)試用例執(zhí)行失敗了,希望知道是哪個(gè)測(cè)試用例失敗,從而去分析失敗 的原因。白盒測(cè)試實(shí)例之九構(gòu)建自己的單元測(cè)試框架(下)完整的源代碼如下:1、UnitTest.h* Copyright (c) 200& 胡添發(fā)*簡(jiǎn)單的單元測(cè)試框架*/?include;includestring h#include#include/* VC中沒(méi)有sleep函數(shù),自己寫(xiě)個(gè)* wait單位是亳秒*/extern void sleep(clock_t wait):*判斷是否取值為真*/void assertTrue(char *msg,
17、 bool actual);/*判斷預(yù)期結(jié)果和實(shí)際結(jié)果是否相符*/void assertEquals(char *msg, int expect, int actual);/*初始化測(cè)試,開(kāi)始計(jì)時(shí)*/void init ();/*結(jié)束測(cè)試,結(jié)束計(jì)時(shí),打印報(bào)告*/void end();白盒測(cè)試實(shí)例之十集成測(cè)試的概念測(cè)一、樁模塊和驅(qū)動(dòng)模塊(以C語(yǔ)言為例):很多人對(duì)樁模塊和驅(qū)動(dòng)模塊的概念會(huì)搞不淸楚,下面先介紹這兩個(gè)槪念:模塊結(jié)構(gòu)實(shí)例圖:假設(shè)現(xiàn)在項(xiàng)目組把任務(wù)分給了 7個(gè)人,每個(gè)人負(fù)責(zé)實(shí)現(xiàn)一個(gè)模塊。你負(fù)責(zé)的是B 模塊,你很優(yōu)秀,第一個(gè)完成了編碼工作,現(xiàn)在需要開(kāi)展單元測(cè)試工作,先分析結(jié)構(gòu)圖:1、由于B模塊
18、不是最頂層模塊,所以它一泄不包含main函數(shù)(A模塊包含main 函數(shù)),也就不能獨(dú)立運(yùn)行。2、B模塊調(diào)用了 D模塊和E模塊,而目前D模塊和E模塊都還沒(méi)有開(kāi)發(fā)好,那 么想讓B模塊通過(guò)編譯器的編譯也是不可能的。那么怎樣才能測(cè)試B模塊呢?需要做:1、寫(xiě)兩個(gè)模塊Sd和Sc分別代替D模塊和E模塊(函數(shù)名、返回值、傳遞的參數(shù) 相同),這樣B模塊就可以通過(guò)編譯了。Sd模塊和Sc模塊就是樁模塊。2、寫(xiě)一個(gè)模塊Da用來(lái)代替A模塊,里而包含main函數(shù),可以在main函數(shù)中調(diào) 用B模塊,讓B模塊運(yùn)行起來(lái)。Da模塊就是驅(qū)動(dòng)模塊。知識(shí)點(diǎn):樁模塊的使命除了使得程序能夠編譯通過(guò)之外,還需要模擬返回被代替的模塊的齊種可能返回值(什么時(shí)候返回什么值需要根據(jù)測(cè)試用例的情況來(lái)決定)。驅(qū)動(dòng)模塊的使命就是根據(jù)測(cè)試用例的設(shè)汁去調(diào)用被測(cè)試模塊,并且判斷彼測(cè)試模塊的返回值是否與測(cè)試用例的預(yù)期結(jié)果相符。1/1二、集成測(cè)試策略:1.非增式集成測(cè)試各個(gè)單元模塊經(jīng)過(guò)單元測(cè)試之后,一次性組裝成完整的系統(tǒng)。優(yōu)點(diǎn):
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度航空航天項(xiàng)目合伙人利益分配及項(xiàng)目保密合同4篇
- 二零二五年度農(nóng)藥企業(yè)環(huán)保合規(guī)審查合同4篇
- 二零二五年度危化品運(yùn)輸合同標(biāo)的運(yùn)輸安全責(zé)任書(shū)3篇
- 二零二五年度船舶電子設(shè)備維修與升級(jí)合同3篇
- 2025年度環(huán)保型鋼材研發(fā)與應(yīng)用采購(gòu)合同
- 2025年度能源項(xiàng)目居間服務(wù)合同模板4篇
- 二零二五版木地板廢舊回收與環(huán)保處理合同4篇
- 2025年度內(nèi)墻涂料產(chǎn)品綠色生產(chǎn)技術(shù)改造合同4篇
- 2025產(chǎn)品銷售代理合同樣式
- 2025合同模板酒吧轉(zhuǎn)讓合同
- 燃?xì)饨?jīng)營(yíng)安全重大隱患判定標(biāo)準(zhǔn)課件
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 深圳小學(xué)英語(yǔ)單詞表(中英文)
- 護(hù)理質(zhì)量反饋內(nèi)容
- 山東省濟(jì)寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 抖音搜索用戶分析報(bào)告
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 鉆孔灌注樁技術(shù)規(guī)范
- 2023-2024學(xué)年北師大版必修二unit 5 humans and nature lesson 3 Race to the pole 教學(xué)設(shè)計(jì)
- 供貨進(jìn)度計(jì)劃
- 彌漫大B細(xì)胞淋巴瘤護(hù)理查房
評(píng)論
0/150
提交評(píng)論