C語言白盒測試例_第1頁
C語言白盒測試例_第2頁
C語言白盒測試例_第3頁
C語言白盒測試例_第4頁
C語言白盒測試例_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言白盒測試實例文檔管理信息表主題C語言白盒測試實例版本TIBCO SDETest Vl. 0內(nèi)容設(shè)計關(guān)鍵字白盒參考文檔單元測試創(chuàng)建時間2008-04-11創(chuàng)建人馮昌建職位SDETest 主管最新發(fā)布日期2008-04-151/1白盒測試實例之一一需求說明三角形的問題在很多軟件測試的書籍中都岀現(xiàn)過,問題雖小,五臟俱全,是個很不錯的 軟件測試的教學(xué)例子。本文借助這個例子結(jié)合教學(xué)經(jīng)驗,從更高的視角來探討需求分析、軟 件設(shè)計、軟件開發(fā)與軟件測試之間的關(guān)系與作用。題目:根據(jù)下而給出的三角形的需求完成程序并完成測試:一、輸入條件: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、某些邊不滿足限制白盒測試實例之二答案很多初學(xué)者一看到這個需求(詳見白盒測試實例之一需求說明收藏),都覺得很簡 單,然后立刻就開始動手寫代碼了,這并不是一個很好的習(xí)慣。如果你的第一直覺也是這樣 的,不妨耐心看到文章的最后。大部分人的思路:1、首先建立一個main函數(shù),main函數(shù)第一件事是

3、提示用戶輸入三角形的三邊, 然后獲取用戶的輸入(假設(shè)用戶的輸入都是整數(shù)的情況),用C語言來寫,這一步基本上 不是問題(printf和scanf),但是要求用java來寫的話,很多學(xué)生就馬上遇到問題了,java5.0 及之前的版本不容易獲取用戶的輸入。點評:這樣的思路做出來的程序只能通過手工方式來測試所有業(yè)務(wù)邏輯,而且這個 程序只能是DOS界面版本了,要是想使用圖形化界而來做輸入,就得全部寫過代碼。2、業(yè)務(wù)處理流程的思路用流程圖表示如下:3、C語言代碼: #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) 這里可以省掉個判斷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、制”);點評:這樣的思路做出來的程序只能通過手工方式來測試所有業(yè)務(wù)邏輯,而且這個程序 只能是DOS界而版本了,要是想使用web或圖形化界面來做輸入,就得全部寫過代碼。相關(guān)閱讀:白盒測試實例之一一需求說明收藏白盒測試技術(shù)方法與實踐篇白盒測試技術(shù)白盒測試理論篇如何編寫單元測試用例(白盒測試)白盒測試中的六種覆蓋方法白盒測試實例之三一需求分析關(guān)鍵字:白盒測試、需求分析需求分析是后續(xù)工作的基石,如果分析思路有問題,后續(xù)工作可能就會疋向不正確 的方向,比如:代碼重用性差、難于測試、難于擴展和難于維護等。反而,如果需求分析做 的好,對設(shè)訃、開發(fā)和測試來說,都可能是很大的幫助??吹筋}目給出的條件達12個之多

6、,粗粗一看,好像很復(fù)雜,但仔細分析之后,發(fā) 現(xiàn)可以把它們分成4組來討論:1、條件 1: a+bc;條件 2: a+cb;條件 3: b+ca這三個表達式有什么特點呢?實際上它們的邏輯是一樣的:兩個數(shù)之和大于第三個 數(shù)。那么,前而程序的寫法就存在邏輯重復(fù)的地方,應(yīng)該把這個邏借提取到一個函數(shù)中。2、條件 4: 0a200:條件 5: 0b200:條件 6: 0c Triangle.h:Copyright (c) 2008,胡添發(fā)(hutianfa):三角形類型判斷:finclude include/*判斷-個整數(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);/*判斷第-個數(shù)是否比第二個數(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);白盒測試實例之六單元測試的步驟白盒測試與黑盒測試的過程和方法是有一些區(qū)別的。單元測試的步驟:1、理解需求和設(shè)計理解設(shè)計是很重要的,特別是要搞淸楚被測試模塊在整個軟件中所處的位置,這對 測試的內(nèi)容將會有很大的影響。需要記住的一個原則就是:好的設(shè)計,并模塊只負責(zé)完成自 己的事情,層次與分工是很明確的。在單元測試的時候,可以不用測試不屬于被測試模塊所 負責(zé)的功能,以減少測試用例的冗余,集成測試的時候會有機會測試到的。舉例::判斷三條邊是否能夠組成三角形:返回值:true-是;false-

10、否7ool isTriangle(int a, int b, int c);測試該函數(shù)的時候,只需要測試三條邊(在合法的取值范國內(nèi)的整數(shù))是否能夠滿 足兩邊之和是否大于第三邊的功能,而不需要測試三條邊是否在合法的范用(0,200)之間的整數(shù),因為調(diào)用該函數(shù)之前,一立要先通過下而函數(shù)的檢査,要是檢査不通過,就不會 執(zhí)行isTriangle函數(shù)。:判斷三條邊是否合法(即:判斷三條邊都在合法的范圍內(nèi)):返回值:true-是:false-否7ool isLegal(int a, int b, int c);所以,單元測試主要是關(guān)注本單元的內(nèi)部邏輯,而不用關(guān)注整個業(yè)務(wù)的邏輯,因為 會有別的模塊去完成相關(guān)

11、的功能。白盒測試實例之七單元測試的嘗試關(guān)鍵字:白盒測試單元測試軟件測試以測試isOutOfRange函數(shù)為例,首先知道該函數(shù)在整個軟件架構(gòu)中處于最底層(葉 子),所以對它進行測試并不需要寫樁模塊,只需要寫驅(qū)動模塊。要注意的問題是:對于測 試結(jié)果是否通過測試不要使用printf方式打印被測試函數(shù)的返回結(jié)果值,否則就需要人工去 檢查結(jié)果了。使用邊界值的方法可以得到5個測試用例,寫的驅(qū)動模塊代碼如下:tTrian gle.cpp::Copyright (c) 2008,胡添發(fā)(hutianfa):單元測試與集成測試7include Triangle.h*:測試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();小知識:做單元測試的時候,一般不直接在main函數(shù)中寫所有的測試代碼,否則 的話,main函數(shù)將會非常龐大。正確的做法:針對每個函數(shù)分別創(chuàng)建一個或若干個(函數(shù) 比較復(fù)雜時)測試函數(shù),測試函數(shù)的名

13、稱習(xí)慣以test 頭。寫到這里發(fā)現(xiàn)重復(fù)的代碼太多了,而且如果測試用例數(shù)量很多的話,對于測試結(jié)果 的檢查也將是很大的工作量。在測試有錯誤的時候,這樣的單元測試結(jié)果也很難獲得更多關(guān) 于錯誤的信息。解決問題的途徑可以采用cppUnit單元測試框架。不過這里為了讓學(xué)生能夠?qū)卧?測試和單元測試框架有進一步的理解,我決左自己寫一個類似cppUnit的簡單的測試框架。 相關(guān)閱讀: 白盒測試實例之六單元測試的步驟 白盒測試實例之五編碼 白盒測試實例之四程序設(shè)計 白盒測試實例之三一一需求分析 白盒測試實例之二答案 白盒測試實例之一一一需求說明 白盒測試實例之八構(gòu)建自己的單元測試框架(上) 關(guān)鍵字:單元測試、白

14、盒測試在上一講“單元測試的嘗試“里我們遇到了幾個問題:1、代碼重復(fù)的問題太多2、測試結(jié)果需要人工去檢查3、對測試的總體信息也無從得知本講將構(gòu)建一個簡單的單元測試框架來解決以上的問題:1、代碼重復(fù)的問題太多這個問題很容易解決,只需要把判斷預(yù)期結(jié)果和實際結(jié)果的邏輯提取到某個函數(shù)中即可。從整個代碼來看,有兩種類型的結(jié)果的函數(shù):(1) 返回布爾型(2) 返回整數(shù)因此,需要兩個類型的判斷預(yù)期結(jié)果和實際結(jié)果是否相符的函數(shù):判斷是否取值為真7oid assertTrue(char *msg, bool actual)F(actual)elseprintfCF);/*判斷預(yù)期結(jié)果和實際結(jié)果是否相符*/void

15、 assertEquals(char *msgz int expect, int actual)if(expect = actual)printfelse printfCT);小知識:XUnit系列的框架的習(xí)慣使用assert*的命爼來泄義判斷函數(shù),對于通過的 測試習(xí)慣打印一個“一”號,而對于失敗的測試習(xí)慣打印一個“F”。2、測試結(jié)果需要人工去檢查對于測試結(jié)果不要使用printf方式打印被測試函數(shù)的返回結(jié)果值就可以避免這個問 題。3、對測試的總體信息也無從得知除了問題1的解決辦法里使用“ ”表示測試通過和“F”表示測試失敗可以提高對測試 結(jié)果的信息的直觀性之外,做單元測試的人還希望能夠得到以下

16、的信息:(1)執(zhí)行的測試用例總數(shù)、通過的數(shù)量和失敗的數(shù)量(2)測試執(zhí)行的時間(3)如果測試用例執(zhí)行失敗了,希望知道是哪個測試用例失敗,從而去分析失敗 的原因。白盒測試實例之九構(gòu)建自己的單元測試框架(下)完整的源代碼如下:1、UnitTest.h* Copyright (c) 200& 胡添發(fā)*簡單的單元測試框架*/?include;includestring h#include#include/* VC中沒有sleep函數(shù),自己寫個* wait單位是亳秒*/extern void sleep(clock_t wait):*判斷是否取值為真*/void assertTrue(char *msg,

17、 bool actual);/*判斷預(yù)期結(jié)果和實際結(jié)果是否相符*/void assertEquals(char *msg, int expect, int actual);/*初始化測試,開始計時*/void init ();/*結(jié)束測試,結(jié)束計時,打印報告*/void end();白盒測試實例之十集成測試的概念測一、樁模塊和驅(qū)動模塊(以C語言為例):很多人對樁模塊和驅(qū)動模塊的概念會搞不淸楚,下面先介紹這兩個槪念:模塊結(jié)構(gòu)實例圖:假設(shè)現(xiàn)在項目組把任務(wù)分給了 7個人,每個人負責(zé)實現(xiàn)一個模塊。你負責(zé)的是B 模塊,你很優(yōu)秀,第一個完成了編碼工作,現(xiàn)在需要開展單元測試工作,先分析結(jié)構(gòu)圖:1、由于B模塊

18、不是最頂層模塊,所以它一泄不包含main函數(shù)(A模塊包含main 函數(shù)),也就不能獨立運行。2、B模塊調(diào)用了 D模塊和E模塊,而目前D模塊和E模塊都還沒有開發(fā)好,那 么想讓B模塊通過編譯器的編譯也是不可能的。那么怎樣才能測試B模塊呢?需要做:1、寫兩個模塊Sd和Sc分別代替D模塊和E模塊(函數(shù)名、返回值、傳遞的參數(shù) 相同),這樣B模塊就可以通過編譯了。Sd模塊和Sc模塊就是樁模塊。2、寫一個模塊Da用來代替A模塊,里而包含main函數(shù),可以在main函數(shù)中調(diào) 用B模塊,讓B模塊運行起來。Da模塊就是驅(qū)動模塊。知識點:樁模塊的使命除了使得程序能夠編譯通過之外,還需要模擬返回被代替的模塊的齊種可能返回值(什么時候返回什么值需要根據(jù)測試用例的情況來決定)。驅(qū)動模塊的使命就是根據(jù)測試用例的設(shè)汁去調(diào)用被測試模塊,并且判斷彼測試模塊的返回值是否與測試用例的預(yù)期結(jié)果相符。1/1二、集成測試策略:1.非增式集成測試各個單元模塊經(jīng)過單元測試之后,一次性組裝成完整的系統(tǒng)。優(yōu)點:

溫馨提示

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

最新文檔

評論

0/150

提交評論