軟件工程第六講_第1頁
軟件工程第六講_第2頁
軟件工程第六講_第3頁
軟件工程第六講_第4頁
軟件工程第六講_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六講 結(jié)構(gòu)化實現(xiàn)白盒測試幾個問題對測試過的軟件有足夠信心嗎?如何預(yù)防內(nèi)存泄漏問題?系統(tǒng)測試覆蓋了多少代碼?某些難執(zhí)行到的異常處理分支測試到了嗎?實驗室條件無法難模擬出真實的測試環(huán)境,怎么辦?2隱藏的錯誤使用一個經(jīng)過運算處理后的數(shù)據(jù)作為除數(shù)進(jìn)行運算:float Div=1.0;if(Div=0) printf(“除數(shù)為0,退出”); return;else mod=BeDiv/Div;3內(nèi)容進(jìn)度白盒測試白盒測試的目的白盒測試和黑盒測試的聯(lián)系白盒測試的策略代碼質(zhì)量代碼度量使用LogiScope度量代碼質(zhì)量代碼檢查工具4白盒測試又稱透明盒測試、邏輯驅(qū)動測試是測試被測單元內(nèi)部如何工作的一種測試方法允

2、許測試人員根據(jù)程序內(nèi)部邏輯結(jié)構(gòu)及有關(guān)信息來設(shè)計和選擇測試用例,對程序的邏輯結(jié)構(gòu)進(jìn)行測試可覆蓋全部代碼、分支、路徑和條件等5白盒測試和黑盒測試比較6白盒測試目的 保證一個模塊中的所有獨立路徑至少被執(zhí)行一次;對所有的邏輯值均需要測試真、假兩個分支;在上下邊界及可操作范圍內(nèi)運行所有循環(huán);檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。7白盒測試的策略桌前檢查(Desk Check) 單元測試(Unit Testing)同行評審(Peer Review) 代碼評審(Code Review) 代碼走查(Walkthrough) 靜態(tài)分析(static analyse)靜態(tài)分析報告、代碼質(zhì)量報告8白盒測試對測試人員的要求

3、 了解軟件語言了解軟件開發(fā)技術(shù)有開發(fā)經(jīng)驗最好掌握白盒測試工具掌握白盒測試用例設(shè)計方法掌握開發(fā)人員編程中容易出現(xiàn)的問題,不斷積累經(jīng)驗9內(nèi)容進(jìn)度白盒測試白盒測試的目的白盒測試和黑盒測試的聯(lián)系白盒測試的策略代碼質(zhì)量代碼度量使用LogiScope度量代碼質(zhì)量代碼檢查工具10軟件質(zhì)量軟件質(zhì)量要求產(chǎn)品中沒有BUG常用指標(biāo)缺陷率(缺陷密度 )可靠性(運行n小時失效次數(shù))顧客滿意度軟件質(zhì)量反映的三個方面軟件需求開發(fā)準(zhǔn)則隱含的需求11代碼質(zhì)量對軟件質(zhì)量的貢獻(xiàn)代碼是軟件產(chǎn)品中的重要部分代碼質(zhì)量反映軟件質(zhì)量其它非代碼因素也起著關(guān)鍵作用文檔(設(shè)計、幫助、用戶手冊等)12制約程序員編寫高質(zhì)量代碼的因素對需求和設(shè)計的理解

4、不透徹對軟件業(yè)務(wù)流程不熟悉沒有開發(fā)經(jīng)驗對開發(fā)工具或開發(fā)語言不熟悉受情緒因素的影響等因素其它非代碼因素也起著關(guān)鍵作用13如何提高代碼質(zhì)量培訓(xùn)業(yè)務(wù)技術(shù)工具和語言審查和監(jiān)督編碼規(guī)范測試.14編碼規(guī)范和標(biāo)準(zhǔn)堅持標(biāo)準(zhǔn)和規(guī)范的原因可靠性可讀性/可維護(hù)性移植性15代碼審查單代碼審查單代碼審查單數(shù)據(jù)引用錯誤數(shù)據(jù)聲明錯誤計算錯誤函數(shù)參數(shù)錯誤比較錯誤輸入/輸出錯誤其它檢查控制流程錯誤16代碼質(zhì)量度量程序復(fù)雜性:費用、周期、錯誤代碼行度量法McCabe度量法Halstead軟件科學(xué)法結(jié)構(gòu)度量17代碼度量-代碼行度量18代碼度量-Halstead軟件科學(xué)法 程序=運算符化+ 運算元結(jié)構(gòu)度量 Halstead公式N=N

5、1+N2=n1log2(n1)+n2log2(n2) N1=運算符出現(xiàn)的總次數(shù)N2=運算元出現(xiàn)的總次數(shù)19代碼度量-結(jié)構(gòu)度量 扇入:調(diào)用一給定模塊的模塊計數(shù);扇出:給定模塊所調(diào)用的模塊計數(shù);使用扇入扇出來評價軟件設(shè)計具有大扇入和大扇出的模塊可能是不良設(shè)計。這種模塊可能未能正確分解并需要重新設(shè)計。20McCabe度量法21輔助分析工具對源代碼進(jìn)行分析經(jīng)常需要輔助分析工具PC-lint:代碼規(guī)則走查工具CodeWizard:C/C+代碼分析工具M(jìn)cCabe:軟件質(zhì)量度量方法 TestBed:源代碼檢查工具Logiscope:源代碼規(guī)則檢查工具22Logiscope代碼檢查工具23學(xué)習(xí)目標(biāo)邏輯驅(qū)動覆

6、蓋測試語句覆蓋判定(分支)覆蓋條件覆蓋判定條件覆蓋條件組合覆蓋路徑測試覆蓋24邏輯覆蓋測試用例設(shè)計技術(shù)邏輯驅(qū)動覆蓋基本路徑覆蓋循環(huán)語句覆蓋25邏輯驅(qū)動覆蓋測試針對程序的內(nèi)部邏輯結(jié)構(gòu)設(shè)計測試用例通過運行測試用例達(dá)到邏輯覆蓋目的是最傳統(tǒng)最經(jīng)典的白盒測試技術(shù)要求測試人員對程序的邏輯結(jié)構(gòu)非常清楚26例子代碼先看下面代碼: void DoWork(int x,int y,int z) int k=0,j=0; if( x3 ) & ( z5 ) j=x*y+10; /語句塊2 j=j%3; /語句塊327輔助方法流程圖x3 & z5入口 語句塊1語句塊2語句塊3出口abcde 畫出模塊的流程圖發(fā)現(xiàn)問題輔

7、助設(shè)計測試用例28語句覆蓋概念語句覆蓋就是設(shè)計若干個測試用例,運行被測試程序,使得每一條可執(zhí)行語句至少執(zhí)行一次。29語句覆蓋設(shè)計用例測試用例輸入為: x=4、y=5、z=5x3 & z5入口 語句塊1語句塊2語句塊3出口abcde程序執(zhí)行的路徑是:abd30分支/判定覆蓋概念設(shè)計若干個測試用例,運行所測程序,使程序中每個判斷的取真分支和取假分支至少執(zhí)行一次;31分支/判定覆蓋設(shè)計用例測試用例的輸入為: x=4、y=5、z=5 x=2、y=5、z=5Test Casesx3 & z5入口 語句塊1語句塊2語句塊3出口abcde程序執(zhí)行的路徑是:abd程序執(zhí)行的路徑是:ace32條件覆蓋概念設(shè)計足

8、夠多的測試用例,運行所測程序,使程序中每個判斷的每個條件的每個可能取值至少執(zhí)行一次;33條件覆蓋設(shè)計用例x3 & z5入口 語句塊1語句塊2語句塊3出口abcdeT1和T1T2和T2T3和T3T4和T434條件覆蓋設(shè)計用例測試用例的輸入為: x=4、y=6、z=5 x=2、y=5、z=5 x=4、y=5、z=15Test Casesx3 & z5入口 語句塊1語句塊2語句塊3出口abcde程序執(zhí)行的路徑是:abd程序執(zhí)行的路徑是:ace程序執(zhí)行的路徑是:acd35測試用例(1)測試用例 通過路徑 條件取值覆蓋分支x=4、y=6、z=5 abdT1、T2、T3、T4 bdx=2、y=5、z=5

9、ace-T1、T2、-T3、-T4 cex=4、y=5、z=15 acdT1、-T2、T3、-T4 cd則可以設(shè)計測試用例如下:36測試用例(2)測試用例 通過路徑 條件取值覆蓋分支x=2、y=6、z=5 acd-T1、T2、-T3、T4 cdx=4、y=5、z=5 acdT1、-T2、T3、-T4 cd假如根據(jù)定義設(shè)計測試用例如下:37分支條件測試概念設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷的所有可能判斷結(jié)果至少執(zhí)行,即要求各個判斷的所有可能的條件取值組合至少執(zhí)行一次。38分支條件測試設(shè)計用例根據(jù)定義只需設(shè)計以下兩個測試用例便可以覆蓋8個條件值以及4個判

10、斷分支。 測試用例 通過路徑 條件取值覆蓋分支x=4、y=6、z=5 abdT1、T2、T3、T4 bdx=2、y=5、z=11ace-T1、-T2、-T3、-T4 ce39分析例如對于條件表達(dá)式(x3)&(z3)為假則一般的編譯器不在判斷是否z5)來說,若x=4測試結(jié)果為真,就認(rèn)為表達(dá)式的結(jié)果為真,這時不再檢查(y5)條件了。40條件組合覆蓋概念設(shè)計足夠的測試用例,運行被測試對象,使得每一個判斷的所有可能的條件取值組合至少執(zhí)行一次。41標(biāo)記 x3,z3,z=10記做T1 -T2第一個判斷的取假分支x=3,z0記做-T1 T2第一個判斷的取假分支x=10記做-T1 -T2第一個判斷的取假分支x

11、=4,y5記做T3 T4第二個判斷的取真分支x=4,y5記做-T3 T4第二個判斷的取真分支x!=4,y=5記做-T3 -T4第二個判斷的取假分支現(xiàn)在對例子中的各個判斷的條件取值組合加以標(biāo)記如下:42設(shè)計測試用例 測試用例 通過路徑 條件取值覆蓋組合號x=4、y=6、z=5 abdT1、T2、T3、T4 1和5 x=4、y=5、z=15 acdT1、-T2、T3、-T4 2和6 x=2、y=6、z=5 acd-T1、T2、-T3、T4 3和7 x=2、y=5、z=15ace-T1、-T2、-T3、-T4 4和8丟失了一條路徑abe43路徑測試路徑測試就是設(shè)計足夠多的測試用例,覆蓋被測試對象中的

12、所有可能路徑。44測試用例 測試用例 通過路徑 覆蓋條件 x=4、y=6、z=5 abdT1、T2、T3、T4x=4、y=5、z=15 acdT1、-T2、T3、-T4 x=2、y=6、z=15 ace-T1、-T2、-T3、-T4 x=5、y=6、z=5 abeT1、T2、-T3、-T4 在上面的測試用例中修改一個測試用例則可對程序進(jìn)行了全部的路徑覆蓋。 45測試充分性路徑測試條件組合覆蓋判定條件覆蓋判定覆蓋條件覆蓋語句覆蓋46內(nèi)容進(jìn)度邏輯驅(qū)動覆蓋測試語句覆蓋判定(分支)覆蓋條件覆蓋判定條件覆蓋條件組合覆蓋循環(huán)語句覆蓋測試簡單循環(huán)嵌套循環(huán)串接循環(huán)47循環(huán)測試-簡單循環(huán)簡單循環(huán): 其中n是允許

13、通過循環(huán)的最大次數(shù)。整個跳過循環(huán);只有一次通過循環(huán);兩次通過循環(huán);m次通過循環(huán),其中mn;n-1,n次通過循環(huán)。48簡單循環(huán)舉例舉例:.for(s=0;si;s+) fwrite(&profs,sizeof(struct ENGINEER),1,fp);.49循環(huán)測試嵌套循環(huán)嵌套循環(huán):從最內(nèi)層循環(huán)開始,將其它循環(huán)設(shè)置為最小值;對最內(nèi)層循環(huán)使用簡單循環(huán),而使外層循環(huán)的疊代參數(shù)(即循環(huán)計數(shù))最??;由內(nèi)向外構(gòu)造下一個循環(huán)的測試,但其它的外層循環(huán)為最小值,并使其它的嵌套循環(huán)為“典型”值;繼續(xù)直到測試所有的循環(huán)。50嵌套循環(huán)舉例舉例:for(i=0; i0)j-; 51循環(huán)測試串接循環(huán):如果串接循環(huán)的循

14、環(huán)都彼此獨立,可是使用嵌套的策略測試。但是如果兩個循環(huán)串接起來,而第一個循環(huán)是第二個循環(huán)的初始值,則這兩個循環(huán)并不是獨立的。如果循環(huán)不獨立,則推薦使用的嵌套循環(huán)的方法進(jìn)行測試。52循環(huán)測試不規(guī)則循環(huán): 不能測試,盡量重新設(shè)計給結(jié)構(gòu)化的程序結(jié)構(gòu)后再進(jìn)行測試。53總結(jié)邏輯驅(qū)動覆蓋測試語句覆蓋判定覆蓋條件覆蓋判定條件覆蓋條件組合覆蓋路徑覆蓋54內(nèi)容進(jìn)度控制流圖程序環(huán)路復(fù)雜性導(dǎo)出測試用例55基本路徑測試它在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計測試用例的方法。設(shè)計出的測試用例要保證在測試中程序的每一個可執(zhí)行語句至少執(zhí)行一次。 56前提條件被測試對象有了一定

15、的了解基本上明確了被測試軟件的邏輯結(jié)構(gòu)基本路徑測試代碼57步驟一畫出程序的控制流圖計算程序圈復(fù)雜度導(dǎo)出測試用例執(zhí)行測試用例畫出程序的控制流圖58控制流圖符號59例子void sort(int iRecordNum,int iType)1 2 int x=0;3 int y=0;4 while (iRecordNum- 0)5 6 if(0= =iType)7x=y+2;8 else9 if(1= =iType)10 x=y+10;11 else12 x=y+20;13 14 60繪制流程圖61繪制控制流圖62復(fù)合條件流圖表示 1 if a or b 2 x 3 else 4 y對應(yīng)的邏輯為:判

16、定節(jié)點:包含條件的結(jié)點被稱為判定結(jié)點,從每一個判定結(jié)點發(fā)出兩條或多條邊。63內(nèi)容進(jìn)度控制流圖程序環(huán)路復(fù)雜性導(dǎo)出測試用例64步驟二畫出程序的控制流圖計算程序圈復(fù)雜度導(dǎo)出測試用例執(zhí)行測試用例計算程序圈復(fù)雜度65計算圈復(fù)雜度方法1、流圖中區(qū)域的數(shù)量對應(yīng)于環(huán)型的復(fù)雜性;2、給定流圖G的圈復(fù)雜度V(G),定義為V(G)=E-N+2,E是流圖中邊的數(shù)量,N是流圖中結(jié)點的數(shù)量;有以下兩種方法計算圈復(fù)雜度:66計算圈復(fù)雜度流圖中有四個區(qū)域;V(G)=10條邊-8結(jié)點+2=4;對應(yīng)上面圈復(fù)雜度的算法,計算如下:67內(nèi)容進(jìn)度控制流圖程序環(huán)路復(fù)雜性導(dǎo)出測試用例68導(dǎo)出測試用例畫出程序的控制流圖計算程序圈復(fù)雜度導(dǎo)出測試用例執(zhí)行測試用例導(dǎo)出測試用例69導(dǎo)出基本路徑集根據(jù)上面的計算方法,可得出四個獨立的路徑:路徑1:4-14路徑2:4-6-7-14路徑3:4-6-8-10-13-4-14路徑4:4-6-8-11-13-4-1470測試用例通過路徑輸入數(shù)據(jù) 預(yù)期結(jié)果4-14iRecordNum0,或者取iRecordNum 0)5 6 if(0= =iType)7x=y+2;8 else9 if(1= =iType)10 x=y+10;11 else12 x=y+20; ret=x; 15 73驅(qū)動模塊/主程序

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論