




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言白盒測試實例文檔管理信息表主題C諦言白盒測試實例版本TIBCO_SDETest_V1.0內容設計關鍵字白盒參考文檔單元測試創建時間2008-04-11:創建人馮昌建職位SDETest主管最新發布日期2008-04-15白盒測試實例之一需求說明問題雖小,五臟俱全,是個很不錯的三角形的問題在很多軟件測試的書籍中都出現過,軟件測試的教學例子。本文借助這個例子結合教學經驗,從更高的視角來探討需求分析、軟件設計、軟件開發與軟件測試之間的關系與作用。題目:根據下面給出的三角形的需求完成程序并完成測試:一、輸入條件: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二、輸出結果: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函數,main函數第一件事是提示用戶輸入三角形的三邊,然后獲取用戶的輸入(假設用戶的輸入都是整數的情況),用C語言來寫,這一步基本上不是問題(printf和scant),但是要求用java來寫的話,很多學生就馬上遇到問題了,java5.0及之前的版本不容易獲取用戶的輸入。點評:這樣的思路做出來的程序只能通過手工方式來測試所有業務邏
4、輯,而且這個2、業務處理流程的思路用流程圖表示如下:程序只能是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. 點評:這樣的思路做出來的程序只能通過手工方式來測試所有業務邏輯,而且這個程序只能是DOS界面版本了,要是想使用web或圖形化界面來做輸入,就得全部寫過代碼。相關閱讀:白盒測試實例之一一一需求說明收藏白盒測試技術一一方法與實踐篇白盒測試技術一一白盒測試理論篇如何編寫單元測試用例(白盒測試)白盒測試中的六種覆蓋方法白盒測試實例之三一一需求分析關
7、鍵字:白盒測試、需求分析需求分析是后續工作的基石,如果分析思路有問題,后續工作可能就會走向不正確的方向,比如:代碼重用性差、難于測試、難于擴展和難于維護等。反而,如果需求分析做的好,對設計、開發和測試來說,都可能是很大的幫助。看到題目給出的條件達12個之多,粗粗一看,好像很復雜,但仔細分析之后,發現可以把它們分成4組來討論:1、 條件1:a+b>c;條件2:a+c>b;條件3:b+c>a這三個表達式有什么特點呢?實際上它們的邏輯是一樣的:兩個數之和大于第三個數。那么,前面程序的寫法就存在邏輯重復的地方,應該把這個邏輯提取到一個函數中。2、 條件4:0<a<200;
8、條件5:0<b<200;條件6:0<c<200這三個表達式也是同一個邏輯:判斷一個數的范圍是否在(0,200)區間內,也應該把這個邏輯提取到一個函數中,去掉重復的邏輯,提高代碼的可重用性。可重用性的好處:比如,現在用戶的需求改為了三條邊的取值范圍要改為100,400,那么,按前面的思路來說,需要改3個地方,而現在只需要在一個函數里改1個地方,這就是代碼重用的好處。3、條件7:a=b;條件8:a=c;條件9:b=c這三個表達式的邏輯:判斷兩個數是否相等。也應該把它提取到一個函數中。我們進一步來分析一下判斷是否是等邊三角形或等腰三角形的條件:(1)前面程序的判斷是從最直觀的
9、方式(a=b&&b=c&&a=c)(實際上只需要兩個表達式成立即可)三條邊都相等來判定是等邊三角形;(a=b|b=c|a=c)只有兩條邊相等來判定是等腰三角形。(2)轉變一下思路:給定三個整數,然后用一個函數來判斷這三個整數有幾個相等,返回相等的個數,如果返回值等于3,那么它是等邊三角形,如果返回值是2,那么它是等腰三角形,否則,它是一般三角形(如果不是直角三角形的話)。4、條件10:a2+b2=c2條件11:a2+c2=b2條件12:c2+b2=a2這三個條件的處理方式有兩種:(1)跟前面三組分析一樣,把相同的邏輯提取到一個函數中,然后三次調用。(2)根據直角
10、三角形的特點:斜邊是最長的,所以我們可以事先寫一個函數來找到最長的邊,然后把它賦值給c,這樣處理之后,只需要一次調用判定(a2+b2=c2)的函數了。相關閱讀:白盒測試實例之二一一答案白盒測試實例之一一一需求說明白盒測試實例之四一一程序設計關鍵字:白盒測試程序設計對于軟件的質量和軟件實施過程的難易程度起著至關重要的作用。好的設計,即使聘用沒什么經驗的開發人員都很容易產生出高質量的代碼出來;而差的設計,即使是經驗很豐富的開發人員也很容易產生缺陷,特別是可重用性、可測試性、可維護性、可擴展性等方面的缺陷。經過以上的分析,下面來看一下如何設計。在下圖中,每個方框都使用一個函數來實現,為了跟用戶界面分
11、開,最頂上的函數不要寫在main函數中。把思路用流程圖的方式表達出來,不用停留在腦袋里:觸L小蝴或三版2.馳-:帔京等同了怫人腦三:W6,某此辿舉蜿隰雕匚胤第也L等立條邊相等)2、鐮酒觸相雜3.世承臚(林躺邸由'魏三角例(附、上的判慚.炙浪:踹林朋碌IU5、6)片斷一凳腿小荏M00柩國內聯尚的虹穗秋于婦個村裁圳肌瑞蜘嵇酬足利之和處否大于第三位(ftly1;3)是柩是斷ft興ft具體的函數的調用關系圖:復雜模塊triangleType的流程圖:/*Copyright(c)2008,*三角形類型判斷*/給建,麴吃的,電力c“拈M散相關閱讀:白盒測試實例之三白盒測試實例之白盒測試實例之一白盒
12、測試實例之五1、Triangle.h需求分析答案需求說明編碼胡添發(hutianfa)#include<stdio.h>#include<String.h>/* 判斷一個整數是否在(0,200)區間內* 返回值:true-否;false-是* /boolisOutOfRange(inti);/* 判斷三條邊是否合法(即:判斷三條邊都在合法的范圍內)* 返回值: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);/* 求三角形有幾條邊相等* 返回值:相等邊的數量* /inthowManyEquals(inta,intb,intc);/* 判斷是否滿足兩邊平方之和是否等于第三邊的平方* /boolisPowerSumEquals(inta,intb,intc);/* 判斷第一個數是否比第二個數大* /boolisGreaterTh
14、an(inta,intb);/* 判斷是否是直角三角形* /boolisRightRriangle(inta,intb,intc);/* 判斷三角形的類型,返回值:* 1、不能組成三角形* 2、等邊三角形* 3、等腰三角形* 4、直角三角形* 5、一般三角形* 6、某些邊不滿足限制* /inttriangleType(inta,intb,intc);白盒測試實例之六一一單元測試的步驟白盒測試與黑盒測試的過程和方法是有一些區別的。單元測試的步驟:1、理解需求和設計理解設計是很重要的,特別是要搞清楚被測試模塊在整個軟件中所處的位置,這對測試的內容將會有很大的影響。需要記住的一個原則就是:好的設計,
15、各模塊只負責完成自己的事情,層次與分工是很明確的。在單元測試的時候,可以不用測試不屬于被測試模塊所負責的功能,以減少測試用例的冗余,集成測試的時候會有機會測試到的。舉例:/* 判斷三條邊是否能夠組成三角形* 返回值:true-是;false-否* /boolisTriangle(inta,intb,intc);測試該函數的時候,只需要測試三條邊(在合法的取值范圍內的整數)是否能夠滿足兩邊之和是否大于第三邊的功能,而不需要測試三條邊是否在合法的范圍(0,200)之間的整數,因為調用該函數之前,一定要先通過下面函數的檢查,要是檢查不通過,就不會執行isTriangle函數。/* 判斷三條邊是否合法
16、(即:判斷三條邊都在合法的范圍內)* 返回值:true-是;false-否* /boolisLegal(inta,intb,intc);所以,單元測試主要是關注本單元的內部邏輯,而不用關注整個業務的邏輯,因為會有別的模塊去完成相關的功能。白盒測試實例之七一一單元測試的嘗試關鍵字:白盒測試單元測試軟件測試以測試isOutOfRange函數為例,首先知道該函數在整個軟件架構中處于最底層(葉子),所以對它進行測試并不需要寫樁模塊,只需要寫驅動模塊。要注意的問題是:對于測試結果是否通過測試不要使用printf方式打印被測試函數的返回結果值,否則就需要人工去檢查結果了。使用邊界值的方法可以得到5個測試用
17、例,寫的驅動模塊代碼如下:tTriangle.cpp:/* Copyright(c)2008,胡添發(hutianfa)* 單元測試與集成測試*/#include"Triangle.h"/*測試isOutOfRange函數,使用邊界值的方法(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函數中寫所有的測試代碼,否則的話,main函數將會非常龐大。正確的做法:針對每個函數分別創建一個或若干個(函數比較復雜時)測試函數,測試函數的名稱習慣以test開頭。寫到這里發現重復的代碼太多了,而且如果測試用例數量很多的話,對于測試結果的檢查也將是很大的工作量。在測試有錯誤的時候,這樣的單元測試結果也很難獲得更多關于錯誤的信息。解決問題的途徑可以采用cppUnit單元測試框架。不過這里為了讓學生能夠對單
19、元測試和單元測試框架有進一步的理解,我決定自己寫一個類似cppUnit的簡單的測試框架。相關閱讀:白盒測試實例之六一一單元測試的步驟白盒測試實例之五一一編碼白盒測試實例之四一一程序設計白盒測試實例之三一一需求分析白盒測試實例之二一一答案白盒測試實例之一一一需求說明白盒測試實例之八一一構建自己的單元測試框架(上)關鍵字:單元測試、白盒測試在上一講單元測試的嘗試”里我們遇到了幾個問題:1、代碼重復的問題太多2、測試結果需要人工去檢查3、對測試的總體信息也無從得知本講將構建一個簡單的單元測試框架來解決以上的問題:1、代碼重復的問題太多這個問題很容易解決,只需要把判斷預期結果和實際結果的邏輯提取到某個
20、函數中即可。從整個代碼來看,有兩種類型的結果的函數:(1)返回布爾型(2)返回整數因此,需要兩個類型的判斷預期結果和實際結果是否相符的函數:/*判斷是否取值為真*/voidassertTrue(char*msg,boolactual)(f(actual)(printf(".");else(printf("F");/*判斷預期結果和實際結果是否相符*/voidassertEquals(char*msg,intexpect,intactual)(if(expect=actual)(printf(".");else(printf("
21、;F");)小知識:XUnit系列的框架的習慣使用assert*的命名來定義判斷函數,對于通過的測試習慣打印一個".號,而對于失敗的測試習慣打印一個“F:2、測試結果需要人工去檢查對于測試結果不要使用printf方式打印被測試函數的返回結果值就可以避免這個問題。3、對測試的總體信息也無從得知除了問題1的解決辦法里使用".表示測試通過和“F表示測試失敗可以提高對測試結果的信息的直觀性之外,做單元測試的人還希望能夠得到以下的信息:(1)執行的測試用例總數、通過的數量和失敗的數量(2)測試執行的時間(3)如果測試用例執行失敗了,希望知道是哪個測試用例失敗,從而去分析失敗
22、的原因。白盒測試實例之九一一構建自己的單元測試框架(下)完整的源代碼如下:1、UnitTest.h/* Copyright(c)2008,胡添發* 簡單的單元測試框架* /#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>/* VC中沒有sleep函數,自己寫一個* wait單位是毫秒* /externvoidsleep(clock_twait);/* 判斷是否取值為真* /voidassertTrue(char*msg,boolactual);/* 判斷預期結果和實際結果是否相符* /voidassertEquals(char*msg,intexpect,intactual);/* 初始化測試,開始計時* /voidinit();/*結束測試,結束計時,打印報告*/voidend();白盒測試實例之十一一集成測試的概念測一、樁模塊和驅動模塊(以C語言為例):很多人對樁模塊和驅動模塊的概念會搞不清楚,下面先介紹這兩個概念:模塊結構實例圖:假設現在項目組把任務分給了7個人,每個人
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年水環境服務項目規劃申請報告
- 2025年制衣廠勞動合同模板
- 掌握情緒管理課件(心理健康教育課件)
- 計算機編程技術基礎課件
- 《模糊神經網絡控制》課件
- 洗滌服務合同協議書
- 手機抵押維修協議書
- 機構戶外合作協議書
- 景區店鋪承包協議書
- 打樁泥漿外運協議書
- 全鋼子午線輪胎一次法成型機課件
- 產品借用申請表
- 有限空間作業大比武實操比賽評分細則
- 人教部編版六年級下冊語文【選擇題】專項復習訓練真題100題(附答案解析)
- 巖土工程勘察報告
- 中藥養護記錄表
- 《融媒體實務》教學課件(全)
- 中小企業的網絡組建局域網的組建網絡的組建與規劃網絡結構拓撲圖
- 天津保利物業供貨合同范本
- 2023年天津市南開醫院護士招聘考試歷年高頻考點試題含答案
- 退役軍人事務局一體化平臺解決方案
評論
0/150
提交評論