![第9章 路徑測試_第1頁](http://file4.renrendoc.com/view/dbc9459c1c2188e948500625ac0b2094/dbc9459c1c2188e948500625ac0b20941.gif)
![第9章 路徑測試_第2頁](http://file4.renrendoc.com/view/dbc9459c1c2188e948500625ac0b2094/dbc9459c1c2188e948500625ac0b20942.gif)
![第9章 路徑測試_第3頁](http://file4.renrendoc.com/view/dbc9459c1c2188e948500625ac0b2094/dbc9459c1c2188e948500625ac0b20943.gif)
![第9章 路徑測試_第4頁](http://file4.renrendoc.com/view/dbc9459c1c2188e948500625ac0b2094/dbc9459c1c2188e948500625ac0b20944.gif)
![第9章 路徑測試_第5頁](http://file4.renrendoc.com/view/dbc9459c1c2188e948500625ac0b2094/dbc9459c1c2188e948500625ac0b20945.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第三部分結(jié)構(gòu)性測試結(jié)構(gòu)性測試又稱白盒測試、邏輯驅(qū)動測試或基于程序的測試。基于被測程序的源代碼,根據(jù)程序?qū)崿F(xiàn)來設(shè)計測試用例,支持嚴(yán)格定義、數(shù)學(xué)分析和精確度量。通過在程序的不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。白盒測試白盒測試的目的:通過檢查軟件內(nèi)部的邏輯結(jié)構(gòu),對軟件中的邏輯路徑進行覆蓋測試;在程序不同地方設(shè)立檢查點,檢查程序的狀態(tài),以確定實際運行狀態(tài)與預(yù)期狀態(tài)是否一致。白盒測試的特點:依據(jù)軟件設(shè)計說明書進行測試、對程序內(nèi)部細(xì)節(jié)的嚴(yán)密檢驗、針對特定條件設(shè)計測試用例、對軟件的邏輯路徑進行覆蓋測試。白盒測試白盒測試要求對被測程序的結(jié)構(gòu)特性做到一定程度的覆蓋,并以軟件中某類成分是否都已經(jīng)得到測試為準(zhǔn)則來判斷軟件測試的充分性,也稱為基于覆蓋的測試技術(shù)。白盒測試主要檢查內(nèi)容:對程序模塊的所有獨立的執(zhí)行路徑至少測試一次;對所有的邏輯判定,取“真”與取“假”的兩種情況都至少測試一次;在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體;檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。白盒測試白盒測試的實施步驟:1.測試計劃階段:根據(jù)需求說明書,制定測試進度。2.測試設(shè)計階段:依據(jù)程序設(shè)計說明書,按照一定規(guī)范化的方法進行軟件結(jié)構(gòu)劃分和設(shè)計測試用例。3.測試執(zhí)行階段:輸入測試用例,得到測試結(jié)果。4.測試總結(jié)階段:對比測試的結(jié)果和代碼的預(yù)期結(jié)果,分析錯誤原因,找到并解決錯誤。白盒測試白盒測試的方法:總體上分為靜態(tài)方法和動態(tài)方法兩大類。靜態(tài)分析:是一種不通過執(zhí)行程序,有條理地仔細(xì)審查軟件設(shè)計、體系結(jié)構(gòu)和代碼,從而找出軟件缺陷的過程。靜態(tài)分析的關(guān)鍵功能是檢查軟件的表示和描述是否一致,沒有沖突或者沒有歧義。審查審查是正式、嚴(yán)格、具有深度的技術(shù)評審,以便盡可能準(zhǔn)確地確定問題之所在。審查過程的目的:在軟件開發(fā)過程中盡可能早地發(fā)現(xiàn)問題。確保對重要部分達成一致意見。審查的角色一次審查一般需要5人至7人,這些角色是:主審員:協(xié)調(diào)本次審查并主持討論。責(zé)任人:負(fù)責(zé)被審查的產(chǎn)品。講解員:在審查會上講解被審查的產(chǎn)品。審查員:審查產(chǎn)品。記錄員:記錄在審查會議上討論的問題。經(jīng)理:責(zé)任人的管理者。審查對象選擇要審查的代碼模塊的準(zhǔn)則:對于正確操作產(chǎn)品起關(guān)鍵作用的模塊。復(fù)雜度較高的模塊。與過去發(fā)生錯誤率較高的模塊功能類似的模塊。相對較新的或缺乏經(jīng)驗的軟件程序師編寫的模塊。審查標(biāo)準(zhǔn)大多數(shù)計算機語言和信息技術(shù)的國家和國際標(biāo)準(zhǔn)可以通過以下途徑獲得:國際工程協(xié)議(IEC):國際標(biāo)準(zhǔn)化組織(ISO):www.iso.ch信息技術(shù)標(biāo)準(zhǔn)國家委員會(NCITS):計算機械聯(lián)合會(ACM):電子電氣工程學(xué)會(IEEE):通用代碼審查清單數(shù)據(jù)引用錯誤;數(shù)據(jù)聲明錯誤;計算錯誤;比較錯誤;控制流程錯誤;子程序參數(shù)錯誤;輸入/輸出錯誤;其他檢查。數(shù)據(jù)引用錯誤是否引用了未初始化的變量?數(shù)組和字符串的下標(biāo)是整數(shù)值嗎?是否在應(yīng)該使用常量的地方使用了變量?變量是否被賦予不同類型的值?為引用的指針分配內(nèi)存了嗎?一個數(shù)據(jù)結(jié)構(gòu)是否在多個函數(shù)或者子程序中引用,在每一個引用中明確定義結(jié)構(gòu)了嗎?數(shù)據(jù)聲明錯誤所有變量都賦予正確的長度和類型了嗎?變量是否在聲明的同時進行了初始化?存在聲明過、但從未引用或者只引用過一次的變量嗎?在特定模塊中所有變量都顯示聲明了嗎?計算錯誤計算中是否使用了不同數(shù)據(jù)類型的變量?計算中是否了解和考慮到編譯器對類型或長度不一致的變量的轉(zhuǎn)換規(guī)則?在數(shù)值計算過程中是否可能出現(xiàn)溢出?除數(shù)/模是否可能為零?變量的值是否超過有意義的范圍?對于包含多個操作數(shù)的表達式,求值的次序是否混亂,運算優(yōu)先級對嗎?比較錯誤比較得正確嗎?存在分?jǐn)?shù)或者浮點值之間的比較嗎?如果有,精確問題會影響比較嗎?每一個邏輯表達式都正確表達了嗎?邏輯計算如期進行了嗎?求值次序有疑問嗎?邏輯表達式的操作是邏輯值嗎?控制流程錯誤如果程序包含begin…end和do…while等語句組,end是否對應(yīng)?程序、模塊、子程序和循環(huán)能否終止?可能存在永遠(yuǎn)不停的循環(huán)嗎?循環(huán)可能從不執(zhí)行嗎?子程序參數(shù)錯誤子程序接受的參數(shù)類型和大小與調(diào)用代碼發(fā)送的匹配嗎?如果子程序有多個入口點,引用的參數(shù)是否與當(dāng)前入口點沒有關(guān)聯(lián)?常量是否當(dāng)作形參傳遞,意外在子程序中改動?輸入/輸出錯誤軟件是否嚴(yán)格遵守外部設(shè)備讀寫數(shù)據(jù)的專用格式?文件或者外部不存在或者未準(zhǔn)備好的錯誤情況有處理嗎?軟件是否處理外部設(shè)備未連接、不可用,或者讀寫過程中存儲空間占滿等情況?白盒測試動態(tài)分析:主要特點是當(dāng)軟件系統(tǒng)在模擬的或真實的環(huán)境中執(zhí)行之前、之中和之后,對軟件系統(tǒng)行為的分析。動態(tài)分析包含了程序在受控的環(huán)境下使用特定的期望結(jié)果進行正式的運行。它顯示了一個系統(tǒng)在檢查狀態(tài)下是正確還是不正確。在動態(tài)分析技術(shù)中,最重要的技術(shù)是路徑和分支測試。白盒測試白盒測試的優(yōu)缺點優(yōu)點迫使測試人員去仔細(xì)思考軟件的實現(xiàn)
可以檢測代碼中的每條分支和路徑
揭示隱藏在代碼中的錯誤
對代碼的測試比較徹底
最優(yōu)化缺點昂貴
無法檢測代碼中遺漏的路徑和數(shù)據(jù)敏感性錯誤
不驗證規(guī)格的正確性結(jié)構(gòu)性測試結(jié)構(gòu)性測試的主要方法:路徑測試(邏輯覆蓋/控制流測試)數(shù)據(jù)流測試邏輯覆蓋邏輯覆蓋六種覆蓋測試方法語句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋組合覆蓋路徑覆蓋語句覆蓋(面)語句覆蓋:是最起碼的結(jié)構(gòu)覆蓋要求,語句覆蓋要求設(shè)計足夠多的測試用例,使得程序中每條語句至少被執(zhí)行一次。優(yōu)點:可以很直觀地從源代碼得到測試用例,無須細(xì)分每條判定表達式。語句覆蓋用例設(shè)計:(如果此時將A路徑上的語句1—〉T去掉,那么用例如下)
X
Y
路徑
1
50
50
OBDE
2
90
70
OBCE語句覆蓋缺點:由于這種測試方法僅僅針對程序邏輯中顯式存在的語句,但對于隱藏的條件和可能到達的隱式邏輯分支,是無法測試的。在本例中去掉了語句1—〉T,那么就少了一條測試路徑。在if結(jié)構(gòu)中若源代碼沒有給出else后面的執(zhí)行分支,那么語句覆蓋測試就不會考慮這種情況。但是我們不能排除這種以外的分支不會被執(zhí)行,而往往這種錯誤會經(jīng)常出現(xiàn)。再如,在Do-While結(jié)構(gòu)中,語句覆蓋執(zhí)行其中某一個條件分支。那么顯然,語句覆蓋對于多分支的邏輯運算是無法全面反映的,它只在乎運行一次,而不考慮其他情況。判定覆蓋(線)主要特點:判定覆蓋又稱為分支覆蓋,它要求設(shè)計足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次為假值,即:程序中的每個分支至少執(zhí)行一次。每個判斷的取真、取假至少執(zhí)行一次。判定覆蓋用例設(shè)計
X
Y
路徑
1
90
90
OAE
2
50
50
OBDE
3
90
70
OBCE判定覆蓋優(yōu)點:判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當(dāng)然也就具有比語句覆蓋更強的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細(xì)分每個判定就可以得到測試用例。缺點:往往大部分的判定語句是由多個邏輯條件組合而成(如,判定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結(jié)果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。條件覆蓋(點)又叫原子謂詞覆蓋主要特點:條件覆蓋要求設(shè)計足夠多的測試用例,使得判定中的每個條件獲得各種可能的結(jié)果,即每個條件至少有一次為真值,有一次為假值。用例設(shè)計?條件覆蓋優(yōu)點:顯然條件覆蓋比判定覆蓋,增加了對符合判定情況的測試,增加了測試路徑。缺點:要達到條件覆蓋,需要足夠多的測試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結(jié)果。判定/條件覆蓋(點線結(jié)合)又叫分支-條件覆蓋或分支-謂詞覆蓋主要特點:設(shè)計足夠多的測試用例,使得判定中每個條件的所有可能結(jié)果至少出現(xiàn)一次,每個判定本身所有可能結(jié)果也至少出現(xiàn)一次。判定/條件覆蓋
用例設(shè)計:
X
Y
路徑
1
90
90
OAE
2
50
50
OBDE
3
90
70
OBCE
4
70
90
OBCE判定/條件覆蓋優(yōu)點:判定/條件覆蓋滿足判定覆蓋準(zhǔn)則和條件覆蓋準(zhǔn)則,彌補了二者的不足。缺點:未考慮條件的組合情況。盡管看上去所有條件的所有結(jié)果似乎都執(zhí)行到了,但由于某些特定的條件會屏蔽掉其他的條件,通常并不能全部都執(zhí)行到。例如:該準(zhǔn)則并不一定會發(fā)現(xiàn)邏輯表達式中的錯誤(與、或)。
組合覆蓋(點線組合)又叫條件組合覆蓋或復(fù)合謂詞覆蓋主要特點:要求設(shè)計足夠多的測試用例,使得每個判定中條件結(jié)果的所有可能組合至少出現(xiàn)一次。組合覆蓋用例設(shè)計:
X
Y
路徑
1
90
90
OAE
2
90
70
OBCE
3
90
30
OBDE
4
70
90
OBCE
5
30
90
OBDE
6
70
70
OBDE
7
50
50
OBDE組合覆蓋優(yōu)點:多重條件覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準(zhǔn)則。更改的判定/條件覆蓋要求設(shè)計足夠多的測試用例,使得判定中每個條件的所有可能結(jié)果至少出現(xiàn)一次,每個判定本身的所有可能結(jié)果也至少出現(xiàn)一次。并且每個條件都顯示能單獨影響判定結(jié)果。缺點:線性地增加了測試用例的數(shù)量。路徑覆蓋主要特點:設(shè)計足夠的測試用例,覆蓋程序中所有可能的路徑。路徑覆蓋用例設(shè)計:XY路徑19090OAE25050OBDE39070OBCE47090OBCE路徑覆蓋優(yōu)點:這種測試方法可以對程序進行徹底的測試,是上面所給出的測試技術(shù)的強化。路徑覆蓋準(zhǔn)則包含了判定覆蓋準(zhǔn)則,但與條件覆蓋、判定/條件覆蓋和組合覆蓋之間沒有包含關(guān)系。缺點:由于路徑覆蓋需要對所有可能的路徑進行測試(包括循環(huán)、條件組合、分支選擇等),那么需要設(shè)計大量、復(fù)雜的測試用例,使得工作量呈指數(shù)級增長。而在有些情況下,一些執(zhí)行路徑是不可能被執(zhí)行的,如:
If(!A)B++;
If(!C)D--;這兩個語句實際只包括了2條執(zhí)行路徑,即A和C為真或假時候?qū)和D的處理,真或假不可能都存在,而路徑覆蓋測試則認(rèn)為是包含了真與假的4條執(zhí)行路徑。這樣不僅降低了測試效率,而且大量的測試結(jié)果的累積,也為排錯帶來麻煩。練習(xí)1求解一元二次方程程序如下:main(){floata,b,c,x1,x2,mid;scanf(“%f,%f,%f”,&a,&b,&c);if(a!=0){mid=b*b-4*a*c;if(mid>0){x1=(-b+sqrt(mid))/(2*a);x2=(-b-sqrt(mid))/(2*a);printf(“tworealroots\n”);}else{if(mid==0){x1=-b/2*a;printf(“onerealroot\n”);}else{x1=-b/(2*a);x2=sqrt(-mid)/(2*a);printf(“twocomplexroots\n”);}}printf(“x1=%f,x2=%f\n”,x1,x2);}}1、用語句覆蓋準(zhǔn)則對該程序設(shè)計測試用例;2、用分支覆蓋準(zhǔn)則對該程序設(shè)計測試用例;練習(xí)2程序如下:
main(){inti,j,k,match;scanf(“%d%d%d,&i,&j,&k);if(i<=0‖j<=0‖k<=0‖i+j<=k‖i+k<=j‖j+k<=i)match=4;elseif(i==j&&i==k&&j==k)match=1;elseif(i==j‖i==k‖j==k)match=2;elsematch=3;printf(“match=%d\n”,match);}練習(xí)2(續(xù))用條件覆蓋準(zhǔn)則對該程序設(shè)計測試用例;用分支-條件覆蓋準(zhǔn)則對該程序設(shè)計測試用例;用組合覆蓋準(zhǔn)則對該程序設(shè)計測試用例;第9章路徑測試DD-路徑測試基路徑測試程序圖定義:有向圖,圖中節(jié)點表示語句片段,邊表示控制流。(主要是命令式程序設(shè)計語言程序;語句片段可以是整個語句,也可以是語句的一部分。)如果i和j是程序圖中的節(jié)點,從節(jié)點i到節(jié)點j存在一條邊,當(dāng)且僅當(dāng)對應(yīng)節(jié)點j的語句片段可以在對應(yīng)節(jié)點i的語句片段之后立即執(zhí)行。程序圖程序和程序圖的對應(yīng)對于給定程序,可以使用多種不同的程序圖,所有這些程序圖都可以簡化為惟一的DD-路徑圖。程序的執(zhí)行對應(yīng)于程序圖中源節(jié)點到匯節(jié)點的路徑。圖9-1DD-路徑定義:DD-路徑是程序圖中的一條鏈,使得滿足以下五種情況:由一個節(jié)點組成,內(nèi)度=0;由一個節(jié)點組成,外度=0;由一個節(jié)點組成,內(nèi)度>=2或外度>=2;由一個節(jié)點組成,內(nèi)度=1且外度=1;長度>=1的最大鏈。DD-路徑圖定義:是有向圖,其中節(jié)點表示程序圖的DD-路徑,邊表示連續(xù)DD-路徑之間的控制流。測試覆蓋指標(biāo)是度量測試用例覆蓋(或執(zhí)行)某個程序擴展的工具。告訴我們要測試什么。表9-2基于指標(biāo)的測試語句與判斷測試:找出一組測試用例,使得程序圖中的所有節(jié)點至少覆蓋一次。DD-路徑測試:每條DD-路徑都被覆蓋。DD-路徑的依賴對偶:數(shù)據(jù)流測試(考慮DD-路徑對偶間的依賴關(guān)系)多條件覆蓋:判斷中有多個條件的情況,條件的組合出現(xiàn)結(jié)果覆蓋。循環(huán)覆蓋:測試兩種分支可能。測試覆蓋分析器測試覆蓋工具對單元測試具有重要的意義。存在不同類型的覆蓋度量,但是絕大多數(shù)的工具會關(guān)注行覆蓋,也叫做語句覆蓋。此外,有些工具會報告分支覆蓋。通過用一個測試工具執(zhí)行代碼庫
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度大型倉儲物流設(shè)施建設(shè)合同
- 2025年度文化產(chǎn)業(yè)發(fā)展專項借款合同
- 2025年度環(huán)保技術(shù)交易合同保密協(xié)議標(biāo)準(zhǔn)版
- 水晶制品加工合同
- 2025年科技創(chuàng)新與專利轉(zhuǎn)讓合同
- 寫字樓裝修合同明細(xì)
- 企業(yè)辦公環(huán)境改造合同模板
- 親子教育項目居間合同樣本
- 電影院裝修服務(wù)合同范本
- 農(nóng)藥購銷合同樣本
- 2024年臨床醫(yī)師定期考核試題中醫(yī)知識題庫及答案(共330題) (二)
- 2025-2030年中國反滲透膜行業(yè)市場發(fā)展趨勢展望與投資策略分析報告
- 《住院患者身體約束的護理》團體標(biāo)準(zhǔn)解讀課件
- 電商部售后客服績效考核表
- 小提琴協(xié)奏曲《梁?!纷V
- 人教版高中化學(xué)必修一第一章《物質(zhì)及其變化》教學(xué)課件
- 復(fù)工復(fù)產(chǎn)工作方案范本【復(fù)產(chǎn)復(fù)工安全工作方案】
- HyperMesh100基礎(chǔ)培訓(xùn)教程
- 化工裝置實用操作技術(shù)指南講解
- 春季高考英語《大綱短語》(218個核心詞匯相關(guān)短語)
- 護理文書書寫規(guī)范ppt課件
評論
0/150
提交評論