




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言白盒測試實例文檔管理信息表主題C諦言白盒測試實例版本TIBCO_SDETest_V1.0內(nèi)容設(shè)計關(guān)鍵字白盒參考文檔單元測試創(chuàng)建時間2008-04-11:創(chuàng)建人馮昌建職位SDETest主管最新發(fā)布日期2008-04-15白盒測試實例之一需求說明問題雖小,五臟俱全,是個很不錯的三角形的問題在很多軟件測試的書籍中都出現(xiàn)過,軟件測試的教學例子。本文借助這個例子結(jié)合教學經(jīng)驗,從更高的視角來探討需求分析、軟件設(shè)計、軟件開發(fā)與軟件測試之間的關(guān)系與作用。題目:根據(jù)下面給出的三角形的需求完成程序并完成測試:一、輸入條件:1、條件1:a+b>c2、條件2:a+c>b3、條件3:b+c>a4
2、、條件4:0<a<2005、條件5:0<b<2006、條件6:0<c<2007、條件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、某些邊不滿足限制白盒測試實例之二一一答案很多初學者一看到這個需求(詳見白盒測試實例之一一一需求說明收藏),都覺得很簡單,然后立刻就開始動手寫代碼了,這并不是一個很好的習慣。如果你的第一直覺也是這樣的,不妨耐心看到文章的最后。年束L&&am
3、p;3-C-b國&By&幽(D'.bAAb'OOjAA_挑=嗨也e<2而給定.證用的,3H阮郡足惇敢3、C語百代碼:1.#include<stdio.h>2.voidmain()大部分人的思路:1、首先建立一個main函數(shù),main函數(shù)第一件事是提示用戶輸入三角形的三邊,然后獲取用戶的輸入(假設(shè)用戶的輸入都是整數(shù)的情況),用C語言來寫,這一步基本上不是問題(printf和scant),但是要求用java來寫的話,很多學生就馬上遇到問題了,java5.0及之前的版本不容易獲取用戶的輸入。點評:這樣的思路做出來的程序只能通過手工方式來測試所有業(yè)務(wù)邏
4、輯,而且這個2、業(yè)務(wù)處理流程的思路用流程圖表示如下:程序只能是DOS界面版本了,要是想使用圖形化界面來做輸入,就得全部寫過代碼。某些邊不衢圮限制小循鈕成二加什是瞥通.雜裙乩肯角一免形是殍腰,條通3. (........6.7.8.inta,b,c;printf("pleaseenterthreeinteger:");scanf("%d%d%d",&a,&b,&c);if(0<a&&a<200&
5、amp;&0<b&&b<200&&0<c&&c<200)(if(a+b>c&&a+c>b&&c+b>a)(if(a=b&&b=c&&a=c)/這里可以省掉一個判斷(printf("1是等邊三角形");else(if(a=b|b=c|a=c)(printf("2是等腰三角形");else(if(a*a+b*b=c*c|a*a+c*c=b*b|b*b+c*c=a*a)(printf("3是
6、直角三角形");else(printf("4是一般三角形");else(printf("5不能組成三角形");9.else0.(1. printf("6某些邊不?t足限制");2. 3. 點評:這樣的思路做出來的程序只能通過手工方式來測試所有業(yè)務(wù)邏輯,而且這個程序只能是DOS界面版本了,要是想使用web或圖形化界面來做輸入,就得全部寫過代碼。相關(guān)閱讀:白盒測試實例之一一一需求說明收藏白盒測試技術(shù)一一方法與實踐篇白盒測試技術(shù)一一白盒測試理論篇如何編寫單元測試用例(白盒測試)白盒測試中的六種覆蓋方法白盒測試實例之三一一需求分析關(guān)
7、鍵字:白盒測試、需求分析需求分析是后續(xù)工作的基石,如果分析思路有問題,后續(xù)工作可能就會走向不正確的方向,比如:代碼重用性差、難于測試、難于擴展和難于維護等。反而,如果需求分析做的好,對設(shè)計、開發(fā)和測試來說,都可能是很大的幫助。看到題目給出的條件達12個之多,粗粗一看,好像很復(fù)雜,但仔細分析之后,發(fā)現(xiàn)可以把它們分成4組來討論:1、 條件1:a+b>c;條件2:a+c>b;條件3:b+c>a這三個表達式有什么特點呢?實際上它們的邏輯是一樣的:兩個數(shù)之和大于第三個數(shù)。那么,前面程序的寫法就存在邏輯重復(fù)的地方,應(yīng)該把這個邏輯提取到一個函數(shù)中。2、 條件4:0<a<200;
8、條件5:0<b<200;條件6:0<c<200這三個表達式也是同一個邏輯:判斷一個數(shù)的范圍是否在(0,200)區(qū)間內(nèi),也應(yīng)該把這個邏輯提取到一個函數(shù)中,去掉重復(fù)的邏輯,提高代碼的可重用性??芍赜眯缘暮锰帲罕热纾F(xiàn)在用戶的需求改為了三條邊的取值范圍要改為100,400,那么,按前面的思路來說,需要改3個地方,而現(xiàn)在只需要在一個函數(shù)里改1個地方,這就是代碼重用的好處。3、條件7:a=b;條件8:a=c;條件9:b=c這三個表達式的邏輯:判斷兩個數(shù)是否相等。也應(yīng)該把它提取到一個函數(shù)中。我們進一步來分析一下判斷是否是等邊三角形或等腰三角形的條件:(1)前面程序的判斷是從最直觀的
9、方式(a=b&&b=c&&a=c)(實際上只需要兩個表達式成立即可)三條邊都相等來判定是等邊三角形;(a=b|b=c|a=c)只有兩條邊相等來判定是等腰三角形。(2)轉(zhuǎn)變一下思路:給定三個整數(shù),然后用一個函數(shù)來判斷這三個整數(shù)有幾個相等,返回相等的個數(shù),如果返回值等于3,那么它是等邊三角形,如果返回值是2,那么它是等腰三角形,否則,它是一般三角形(如果不是直角三角形的話)。4、條件10:a2+b2=c2條件11:a2+c2=b2條件12:c2+b2=a2這三個條件的處理方式有兩種:(1)跟前面三組分析一樣,把相同的邏輯提取到一個函數(shù)中,然后三次調(diào)用。(2)根據(jù)直角
10、三角形的特點:斜邊是最長的,所以我們可以事先寫一個函數(shù)來找到最長的邊,然后把它賦值給c,這樣處理之后,只需要一次調(diào)用判定(a2+b2=c2)的函數(shù)了。相關(guān)閱讀:白盒測試實例之二一一答案白盒測試實例之一一一需求說明白盒測試實例之四一一程序設(shè)計關(guān)鍵字:白盒測試程序設(shè)計對于軟件的質(zhì)量和軟件實施過程的難易程度起著至關(guān)重要的作用。好的設(shè)計,即使聘用沒什么經(jīng)驗的開發(fā)人員都很容易產(chǎn)生出高質(zhì)量的代碼出來;而差的設(shè)計,即使是經(jīng)驗很豐富的開發(fā)人員也很容易產(chǎn)生缺陷,特別是可重用性、可測試性、可維護性、可擴展性等方面的缺陷。經(jīng)過以上的分析,下面來看一下如何設(shè)計。在下圖中,每個方框都使用一個函數(shù)來實現(xiàn),為了跟用戶界面分
11、開,最頂上的函數(shù)不要寫在main函數(shù)中。把思路用流程圖的方式表達出來,不用停留在腦袋里:觸L小蝴或三版2.馳-:帔京等同了怫人腦三:W6,某此辿舉蜿隰雕匚胤第也L等立條邊相等)2、鐮酒觸相雜3.世承臚(林躺邸由'魏三角例(附、上的判慚.炙浪:踹林朋碌IU5、6)片斷一凳腿小荏M00柩國內(nèi)聯(lián)尚的虹穗秋于婦個村裁圳肌瑞蜘嵇酬足利之和處否大于第三位(ftly1;3)是柩是斷ft興ft具體的函數(shù)的調(diào)用關(guān)系圖:復(fù)雜模塊triangleType的流程圖:/*Copyright(c)2008,*三角形類型判斷*/給建,麴吃的,電力c“拈M散相關(guān)閱讀:白盒測試實例之三白盒測試實例之白盒測試實例之一白盒
12、測試實例之五1、Triangle.h需求分析答案需求說明編碼胡添發(fā)(hutianfa)#include<stdio.h>#include<String.h>/* 判斷一個整數(shù)是否在(0,200)區(qū)間內(nèi)* 返回值:true-否;false-是* /boolisOutOfRange(inti);/* 判斷三條邊是否合法(即:判斷三條邊都在合法的范圍內(nèi))* 返回值:true-是;false-否* /boolisLegal(inta,intb,intc);/* 判斷兩條邊之和是否大于第三邊* 返回值:true-是;false-否* /boolisSumBiger(inta,in
13、tb,intc);/* 判斷三條邊是否能夠組成三角形* 返回值:true-是;false-否* /boolisTriangle(inta,intb,intc);/* 判斷兩條邊是否相等* 返回值:true-是;false-否* /boolisEquals(inta,intb);/* 求三角形有幾條邊相等* 返回值:相等邊的數(shù)量* /inthowManyEquals(inta,intb,intc);/* 判斷是否滿足兩邊平方之和是否等于第三邊的平方* /boolisPowerSumEquals(inta,intb,intc);/* 判斷第一個數(shù)是否比第二個數(shù)大* /boolisGreaterTh
14、an(inta,intb);/* 判斷是否是直角三角形* /boolisRightRriangle(inta,intb,intc);/* 判斷三角形的類型,返回值:* 1、不能組成三角形* 2、等邊三角形* 3、等腰三角形* 4、直角三角形* 5、一般三角形* 6、某些邊不滿足限制* /inttriangleType(inta,intb,intc);白盒測試實例之六一一單元測試的步驟白盒測試與黑盒測試的過程和方法是有一些區(qū)別的。單元測試的步驟:1、理解需求和設(shè)計理解設(shè)計是很重要的,特別是要搞清楚被測試模塊在整個軟件中所處的位置,這對測試的內(nèi)容將會有很大的影響。需要記住的一個原則就是:好的設(shè)計,
15、各模塊只負責完成自己的事情,層次與分工是很明確的。在單元測試的時候,可以不用測試不屬于被測試模塊所負責的功能,以減少測試用例的冗余,集成測試的時候會有機會測試到的。舉例:/* 判斷三條邊是否能夠組成三角形* 返回值:true-是;false-否* /boolisTriangle(inta,intb,intc);測試該函數(shù)的時候,只需要測試三條邊(在合法的取值范圍內(nèi)的整數(shù))是否能夠滿足兩邊之和是否大于第三邊的功能,而不需要測試三條邊是否在合法的范圍(0,200)之間的整數(shù),因為調(diào)用該函數(shù)之前,一定要先通過下面函數(shù)的檢查,要是檢查不通過,就不會執(zhí)行isTriangle函數(shù)。/* 判斷三條邊是否合法
16、(即:判斷三條邊都在合法的范圍內(nèi))* 返回值:true-是;false-否* /boolisLegal(inta,intb,intc);所以,單元測試主要是關(guān)注本單元的內(nèi)部邏輯,而不用關(guān)注整個業(yè)務(wù)的邏輯,因為會有別的模塊去完成相關(guān)的功能。白盒測試實例之七一一單元測試的嘗試關(guān)鍵字:白盒測試單元測試軟件測試以測試isOutOfRange函數(shù)為例,首先知道該函數(shù)在整個軟件架構(gòu)中處于最底層(葉子),所以對它進行測試并不需要寫樁模塊,只需要寫驅(qū)動模塊。要注意的問題是:對于測試結(jié)果是否通過測試不要使用printf方式打印被測試函數(shù)的返回結(jié)果值,否則就需要人工去檢查結(jié)果了。使用邊界值的方法可以得到5個測試用
17、例,寫的驅(qū)動模塊代碼如下:tTriangle.cpp:/* Copyright(c)2008,胡添發(fā)(hutianfa)* 單元測試與集成測試*/#include"Triangle.h"/*測試isOutOfRange函數(shù),使用邊界值的方法(0,1,5,199,200)*/voidtestIsOutOfRange_try()if(isOutOfRange(0)=true)printf("pass!n");elseprintf("fail!n");if(isOutOfRange(1)=false)printf("pass!n&
18、quot;);elseprintf("fail!n");voidmain()(testIsOutOfRange_try();)小知識:做單元測試的時候,一般不直接在main函數(shù)中寫所有的測試代碼,否則的話,main函數(shù)將會非常龐大。正確的做法:針對每個函數(shù)分別創(chuàng)建一個或若干個(函數(shù)比較復(fù)雜時)測試函數(shù),測試函數(shù)的名稱習慣以test開頭。寫到這里發(fā)現(xiàn)重復(fù)的代碼太多了,而且如果測試用例數(shù)量很多的話,對于測試結(jié)果的檢查也將是很大的工作量。在測試有錯誤的時候,這樣的單元測試結(jié)果也很難獲得更多關(guān)于錯誤的信息。解決問題的途徑可以采用cppUnit單元測試框架。不過這里為了讓學生能夠?qū)?/p>
19、元測試和單元測試框架有進一步的理解,我決定自己寫一個類似cppUnit的簡單的測試框架。相關(guān)閱讀:白盒測試實例之六一一單元測試的步驟白盒測試實例之五一一編碼白盒測試實例之四一一程序設(shè)計白盒測試實例之三一一需求分析白盒測試實例之二一一答案白盒測試實例之一一一需求說明白盒測試實例之八一一構(gòu)建自己的單元測試框架(上)關(guān)鍵字:單元測試、白盒測試在上一講單元測試的嘗試”里我們遇到了幾個問題:1、代碼重復(fù)的問題太多2、測試結(jié)果需要人工去檢查3、對測試的總體信息也無從得知本講將構(gòu)建一個簡單的單元測試框架來解決以上的問題:1、代碼重復(fù)的問題太多這個問題很容易解決,只需要把判斷預(yù)期結(jié)果和實際結(jié)果的邏輯提取到某個
20、函數(shù)中即可。從整個代碼來看,有兩種類型的結(jié)果的函數(shù):(1)返回布爾型(2)返回整數(shù)因此,需要兩個類型的判斷預(yù)期結(jié)果和實際結(jié)果是否相符的函數(shù):/*判斷是否取值為真*/voidassertTrue(char*msg,boolactual)(f(actual)(printf(".");else(printf("F");/*判斷預(yù)期結(jié)果和實際結(jié)果是否相符*/voidassertEquals(char*msg,intexpect,intactual)(if(expect=actual)(printf(".");else(printf("
21、;F");)小知識:XUnit系列的框架的習慣使用assert*的命名來定義判斷函數(shù),對于通過的測試習慣打印一個".號,而對于失敗的測試習慣打印一個“F:2、測試結(jié)果需要人工去檢查對于測試結(jié)果不要使用printf方式打印被測試函數(shù)的返回結(jié)果值就可以避免這個問題。3、對測試的總體信息也無從得知除了問題1的解決辦法里使用".表示測試通過和“F表示測試失敗可以提高對測試結(jié)果的信息的直觀性之外,做單元測試的人還希望能夠得到以下的信息:(1)執(zhí)行的測試用例總數(shù)、通過的數(shù)量和失敗的數(shù)量(2)測試執(zhí)行的時間(3)如果測試用例執(zhí)行失敗了,希望知道是哪個測試用例失敗,從而去分析失敗
22、的原因。白盒測試實例之九一一構(gòu)建自己的單元測試框架(下)完整的源代碼如下:1、UnitTest.h/* Copyright(c)2008,胡添發(fā)* 簡單的單元測試框架* /#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>/* VC中沒有sleep函數(shù),自己寫一個* wait單位是毫秒* /externvoidsleep(clock_twait);/* 判斷是否取值為真* /voidassertTrue(char*msg,boolactual);/* 判斷預(yù)期結(jié)果和實際結(jié)果是否相符* /voidassertEquals(char*msg,intexpect,intactual);/* 初始化測試,開始計時* /voidinit();/*結(jié)束測試,結(jié)束計時,打印報告*/voidend();白盒測試實例之十一一集成測試的概念測一、樁模塊和驅(qū)動模塊(以C語言為例):很多人對樁模塊和驅(qū)動模塊的概念會搞不清楚,下面先介紹這兩個概念:模塊結(jié)構(gòu)實例圖:假設(shè)現(xiàn)在項目組把任務(wù)分給了7個人,每個人
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理學備考時間管理試題及答案
- 2025年建筑施工技術(shù)試題及答案
- 社會責任實施市政學試題及答案
- 自考行政管理的驗證型案例研究試題及答案
- 行政管理學的市場分析與試題及答案
- 鄉(xiāng)鎮(zhèn)混凝土銷售合同范例
- 市政學綜合能力測試試題及答案
- 行政管理理論學習試題及答案
- 行政管理的開放性研究試題及答案
- 探索管理心理學未來發(fā)展方向試題及答案
- 有限空間作業(yè)大比武實操比賽評分細則
- QB∕T 3826-1999 輕工產(chǎn)品金屬鍍層和化學處理層的耐腐蝕試驗方法 中性鹽霧試驗(NSS)法
- 人教部編版六年級下冊語文【選擇題】專項復(fù)習訓練真題100題(附答案解析)
- 巖土工程勘察報告
- 中藥養(yǎng)護記錄表
- 《融媒體實務(wù)》教學課件(全)
- 中小企業(yè)的網(wǎng)絡(luò)組建局域網(wǎng)的組建網(wǎng)絡(luò)的組建與規(guī)劃網(wǎng)絡(luò)結(jié)構(gòu)拓撲圖
- 天津保利物業(yè)供貨合同范本
- 2023年天津市南開醫(yī)院護士招聘考試歷年高頻考點試題含答案
- 退役軍人事務(wù)局一體化平臺解決方案
- 2023年中小學生籃球比賽報名表
評論
0/150
提交評論