《軟件測試》第4章_第1頁
《軟件測試》第4章_第2頁
《軟件測試》第4章_第3頁
《軟件測試》第4章_第4頁
《軟件測試》第4章_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章 白盒測試方法本章要點n白盒測試的含義n白盒測試無法實現(xiàn)窮舉測試的原因n白盒測試的優(yōu)點和局限性n白盒測試中的靜態(tài)測試和動態(tài)測試n邏輯覆蓋法、基本路徑測試及控制結構測試n白盒測試方法的綜合使用策略4.1 白盒測試方法概述n4.1.1 白盒測試的概念白盒測試(White-box Testing)也稱結構測試。“白盒”將程序形象地比喻為放在一個透明的盒子透明的盒子里,故測試人員了解被測程序的內(nèi)部結構了解被測程序的內(nèi)部結構。測試人員利用程序的內(nèi)部邏輯結構和相關信息,對程序的內(nèi)部結構和路徑進行測試,檢驗其是否達到了預期的設計要求。白盒方法和黑盒方法一樣,也不能做到窮舉測試。故測試人員必須在仔細研究

2、程序的內(nèi)部結構的基礎上,從數(shù)量極大的可用測試用例中精心挑選盡可能少的測精心挑選盡可能少的測試用例試用例,來覆蓋程序的內(nèi)部結構。n4.1.2 白盒測試的優(yōu)點和局限性n1白盒測試的優(yōu)點與黑盒測試相比,白盒測試深入到程序的內(nèi)部進行測試,更易于定位錯誤的原因和具體位置易于定位錯誤的原因和具體位置,彌補了黑盒測試只能從程序外部進行測試的不足。n2白盒測試的局限性但白盒測試也有其局限性,即使白盒測試覆蓋了程序中的所有路徑,仍不一定能發(fā)現(xiàn)程序中的全部錯誤。這是因為:n白盒測試不能查出程序中的設計缺陷。n白盒測試不能查出程序是否遺漏了功能或路徑。n白盒測試可能發(fā)現(xiàn)不了一些與數(shù)據(jù)相關的錯誤。 n4.1.3 白盒

3、測試方法的分類n白盒測試分為靜態(tài)測試靜態(tài)測試(Static Testing)和動態(tài)動態(tài)測試測試(Dynamic Testing)兩大類。靜態(tài)測試不實際執(zhí)行程序,靜態(tài)測試的主要目的是檢查軟件的表示和描述是否一致,沒有沖突和歧義。靜態(tài)測試可以由人工執(zhí)行,也可以借助一些自動化工具完成。動態(tài)測試需要實際運行測試用例,以發(fā)現(xiàn)軟件中的錯誤。白盒測試中的動態(tài)測試主要包括功能確認與接口測試、覆蓋率測試、性能分析、內(nèi)存分析等。 4.2 典型的白盒測試方法 n白盒測試方法中的代碼檢查法、靜態(tài)結構代碼檢查法、靜態(tài)結構分析法、代碼質(zhì)量度量法分析法、代碼質(zhì)量度量法屬于靜態(tài)測試方法,而邏輯覆蓋法、基本路徑測試法、控邏輯覆

4、蓋法、基本路徑測試法、控制結構測試、程序插樁制結構測試、程序插樁則屬于動態(tài)測試方法。n4.2.1 代碼檢查法代碼檢查包括桌面檢查、代碼審查和走查桌面檢查、代碼審查和走查等。代碼檢查主要檢查代碼和設計的一致性,代碼是否遵循標準,代碼的可讀性,代碼的邏輯正確性,代碼結構的合理性等。代碼檢查應在編譯和動態(tài)測試之前進行,并且應盡早進行。n4.2.2 靜態(tài)結構分析法靜態(tài)結構分析主要是以圖形的方式表現(xiàn)程序的內(nèi)部結構,供測試人員對程序結構進行分析。在靜態(tài)結構分析中,測試人員通過使用測試工具分析程序源代碼的系統(tǒng)結構、數(shù)據(jù)結構、數(shù)據(jù)接口、內(nèi)部控制邏輯等內(nèi)部結構,生成函數(shù)調(diào)用關系圖、模塊控制流圖、內(nèi)部文件調(diào)用關系

5、圖、子程序表、宏和函數(shù)參數(shù)表等各類圖形圖表,以清晰地表示程序的內(nèi)部結構,供測試人員對其進行分析,進而查找程序中的錯誤。n4.2.3 代碼質(zhì)量度量法n根據(jù)ISO/IEC 9126國際標準的定義,軟件質(zhì)量包括以下 六個方面:功能性(Functionality)可靠性(Reliability)可用性 (Usability)效率 (Efficiency)可維護性(Maintainability)可移植性(Portability)可根據(jù)ISO 9126質(zhì)量模型構造軟件的靜態(tài)質(zhì)量度量模型,通過量化的數(shù)據(jù)評估被測程序的質(zhì)量。n4.2.4 邏輯覆蓋法 n邏輯覆蓋法(Logic-coverage Testing

6、)是以程序內(nèi)部的邏輯結構為基礎設計測試用例的方法。根據(jù)對程序內(nèi)部的邏輯結構的覆蓋程度,邏輯覆蓋法具有不同的覆蓋標準:語句覆蓋、判定覆蓋、條件覆蓋、判語句覆蓋、判定覆蓋、條件覆蓋、判定定條件覆蓋、條件組合覆蓋、修正條件條件覆蓋、條件組合覆蓋、修正條件判定覆蓋判定覆蓋。n1語句覆蓋語句覆蓋(語句覆蓋(Statement Coverage)的含義是:)的含義是:設計足夠多的測試用例,使設計足夠多的測試用例,使被測程序中的每條被測程序中的每條可執(zhí)行語句至少執(zhí)行一次可執(zhí)行語句至少執(zhí)行一次。語句覆蓋也稱為點。語句覆蓋也稱為點覆蓋。覆蓋。語句覆蓋是一種很弱的邏輯覆蓋標準,其對程語句覆蓋是一種很弱的邏輯覆蓋標

7、準,其對程序的邏輯覆蓋很少。序的邏輯覆蓋很少。 n圖4-1是一個被測程序的流程圖。n對圖4-1表示的程序,若要做到語句覆蓋,程序的執(zhí)行路徑應是sacbed,為此可設計如下的測試用例(注意:A、B、X的值這里為輸入值,嚴格說來,測試用例還應包括預期輸出,在此省略,下同):nA=2,B=0,X=4圖4-1 一個被測程序的流程圖n2判定覆蓋判定覆蓋(Decision Coverage)的含義是,設計足夠多的測試用例,使被測程序中的每個判被測程序中的每個判定取到每種可能的結果定取到每種可能的結果,即覆蓋每個判定的所有分支。判定覆蓋也稱為分支覆蓋。顯然,若實現(xiàn)了判定覆蓋,則必然實現(xiàn)了語句覆蓋。n對圖4-

8、1表示的源程序,若要實現(xiàn)判定覆蓋,則需覆蓋sacbed和sabd兩條路徑,或覆蓋sacbd和sabed兩條路徑,可設計如下兩組測試用例:A=3,B=0,X=3(覆蓋路徑sacbd)A=2,B=1,X=1(覆蓋路徑sabed)n3條件覆蓋條件覆蓋(Condition Coverage)的含義是:設計足夠多的測試用例,使被測程序中的每個條件取到各種可被測程序中的每個條件取到各種可能的結果能的結果。對圖4-1表示的源程序,考慮包含在兩個判定中的4個條件,每個條件均可取真假兩種值。若要實現(xiàn)條件覆蓋,應使以下8種結果成立:nA1,A1,B=0,B0,A=2,A2,X1,X1這8種結果的前4種是在a點出現(xiàn)

9、的,而后4種是在b點出現(xiàn)的。n為覆蓋這8種結果,可設計如下兩組測試用例:A=2,B=0,X=4(覆蓋A1、B=0、A=2、X1,執(zhí)行路徑sacbed)A=1,B=1,X=1(覆蓋A1、B0、A2、X1,執(zhí)行路徑sabd)n條件覆蓋一般比判定覆蓋強,若實現(xiàn)了條件覆蓋,則也實現(xiàn)了判定覆蓋,如上述兩組測試用例也實現(xiàn)了判定覆蓋。但這不是絕對的,某些情況下,實現(xiàn)了條件覆蓋卻未能實現(xiàn)判定覆蓋。n4判定條件覆蓋n即設計足夠多的測試用例,使被測程序中的每個條件取到各種可能的結果,且每個判定取到各種可能的結果。n若實現(xiàn)了判定條件覆蓋,則必然也實現(xiàn)了判定覆蓋和條件覆蓋。n對圖4-1表示的源程序,若要實現(xiàn)判定條件覆

10、蓋,可設計如下兩組測試用例:A=2,B=0,X=4(覆蓋A1、B=0、A=2、X1,執(zhí)行路徑sacbed)A=1,B=1,X=1(覆蓋A1、B0、A2、X1,執(zhí)行路徑sabd)n5條件組合覆蓋條件組合覆蓋 n當某個判定中存在多個條件時,僅僅考慮單個條件的取值是不夠的,條件組合覆蓋的含義是:設計足夠多的測試用例,使被設計足夠多的測試用例,使被測程序中每個判定的所有條件取值組合都測程序中每個判定的所有條件取值組合都至少出現(xiàn)一次至少出現(xiàn)一次。n對圖4-1表示的源程序,若要實現(xiàn)條件組合覆蓋,應使如下的8種條件取值組合至少出現(xiàn)一次: A1,B=0 A1,B0 A1,B=0 A1,B0 A=2,X1 A=

11、2,X1 A2,X1 A2,X1n為覆蓋此8種組合,可設計如下的4組測試用例:A=2,B=0,X=4(覆蓋、兩種組合,執(zhí)行路徑sacbed)A=2,B=1,X=1(覆蓋、兩種組合,執(zhí)行路徑sabed)A=1,B=0,X=2(覆蓋、兩種組合,執(zhí)行路徑sabed)A=1,B=1,X=1(覆蓋、兩種組合,執(zhí)行路徑sabd)n對某被測程序,若實現(xiàn)了條件組合覆蓋,則一定實現(xiàn)了判定覆蓋、條件覆蓋及判定條件覆蓋 。n但條件組合覆蓋不一定能覆蓋程序中的每條路徑,如上述4組測試用例就沒有覆蓋到圖4-1所示源程序中的路徑sacbd。n6修正條件判定覆蓋這個覆蓋度量需要足夠的測試用例來確定各個條件能夠影響到包含的判

12、定的結果。它要求滿足兩個條件:n首先,每一個程序模塊的入口和出口點都要至少被調(diào)用一次,每個程序的判定到所有可能的結果值要至少轉(zhuǎn)換一次;n其次,程序的判定被分解為通過邏輯操作符(AND、OR)連接的布爾條件,每個條件對于判定的結果值是獨立的。 要實現(xiàn)修正條件判定覆蓋,需付出極大的成本。n4.2.5 基本路徑測試法n1. 基本路徑測試的概念圖4-1所示源程序共有4條路徑,若要覆蓋此4條路徑,可設計如下4組測試用例:nA=2,B=0,X=4(覆蓋路徑sacbed)nA=2,B=1,X=1(覆蓋路徑sabed)nA=1,B=1,X=1(覆蓋路徑sabd)nA=3,B=0,X=1(覆蓋路徑sacbd)n

13、圖4-1所示源程序是一個極簡單的程序,大多數(shù)情況下,由于程序中選擇結構和循環(huán)結構的存在,使得測試程序中的每一條路徑成為現(xiàn)實不允許的事情。故必須將測試的路徑數(shù)目壓縮到一定范圍內(nèi)。n基本路徑測試(Basic Path Testing)就是這樣的一種測試,其在程序的流圖基礎上,確定程序的環(huán)路復雜性,導出基本路徑的集合,進而在其基礎上設計測試用例,這些測試用例能覆蓋到程序覆蓋到程序中的每條可執(zhí)行語句中的每條可執(zhí)行語句。 n2. 流圖流圖也稱為程序圖,它將流程圖中的結構化構件改用一般有向圖一般有向圖的表示形式,如圖4-2所示。在圖4-2中,每個圓圈代表一個結點,表示源程序或PDL中的一個或多個連續(xù)的無分

14、支語句。n圖4-3(a)所示的流程圖(假設每個判斷均不含復合條件),其對應的流圖為圖4-3(b)所示。n流圖中用謂詞結點來表示簡單條件判斷,即謂詞結點不允謂詞結點不允許含有復合條件許含有復合條件。對于程序(或流程圖)中的復合條件,應將其轉(zhuǎn)化為多個簡單條件判斷,在流圖中用相應的謂詞結點加以表示。n如圖4-4(a)所示的流程圖,圖中的判斷含有兩個條件,即為復合條件判斷,故將此判斷在流圖中用兩個謂詞結點表示。圖4-4(a)對應的流圖如圖4-4(b)所示。abXYabXY謂詞結點(a) 流程圖(b) 流圖圖4-4 流程圖和對應的流圖n3. 程序的環(huán)路復雜性程序的環(huán)路復雜性環(huán)路復雜性(Cyclomati

15、c Complexity)又稱為圈復雜性,其值等于流圖中的區(qū)域個數(shù)流圖中的區(qū)域個數(shù)。在進行基本路徑測試時,確定了程序的環(huán)路復雜性,則可在其基礎上確定程序基本路徑集合的獨立路徑數(shù)獨立路徑數(shù)目目,這個數(shù)目是確保程序中每條可執(zhí)行語句至少執(zhí)行一次的測試用例數(shù)目的最小值。獨立路徑是一條含有以前未處理的語句或判斷的路徑,在流圖中,獨立路徑表現(xiàn)為至少含有一條其他獨立路徑中均沒有的邊的路徑。n圖4-3(b)所示的流圖含有4個區(qū)域,故其對應的程序的環(huán)路復雜性度量V(G)為4,程序有以下4條獨立路徑。路徑1:111路徑2:1234510111路徑3:12368910111路徑4:12367910111n可由此設計

16、測試用例,覆蓋以上4條獨立路徑,則可使程序中的所有可執(zhí)行語句和所有判斷的真、假分支至少執(zhí)行一次。n也可利用以下公式計算程序的環(huán)路復雜性度量V(G)。V(G)=E-N+2公式中的E代表流圖中的邊數(shù),N代表流圖中的結點數(shù)。如圖4-3(b)所示的流圖中,邊數(shù)為11,結點數(shù)為9,故V(G)=11-9+2=4。n此外,還可利用流圖中的謂詞結點數(shù)來計算環(huán)路復雜性度量V(G)。V(G)=P+1公式中的P為流圖中的謂詞結點數(shù)。如圖4-3(b)所示的流圖中,謂詞結點數(shù)為3,故V(G)=3+1=4。若能事先確定程序中的簡單條件判斷的個數(shù)(即等于流圖中的謂詞結點數(shù)),則可在不畫出流圖的情況下確定程序的環(huán)路復雜性。n

17、4. 基本路徑測試舉例(見書)n4.2.6 控制結構測試(詳見書)詳見書)n4.2.7 程序插樁程序插樁(Instrumentation)是一種通過向被測程序中通過向被測程序中插入操作來發(fā)現(xiàn)和定位錯誤的方法插入操作來發(fā)現(xiàn)和定位錯誤的方法。在測試或調(diào)試程序時,常常需要在程序中插入一些打印語句,使其在程序執(zhí)行過程中能打印出我們關心的信息,通過這些信息來了解程序執(zhí)行過程中的動態(tài)特性,如程序的實際執(zhí)行路徑、程序中某語句的執(zhí)行次數(shù)、程序中各路徑的被覆蓋程度、程序中某變量在特定時刻的值等。這些是可以通過程序插樁來完成的。n下面以計算整數(shù)X和整數(shù)Y的最大公約數(shù)的程序為例,來說明程序插樁方法的要點。計算整數(shù)X

18、和整數(shù)Y的最大公約數(shù)的程序流程圖如圖4-9所示。n圖4-9中的虛線框是為了記錄語句的執(zhí)行次數(shù)而插入的,其形式為: C(i) = C(i) +1 i=1,2,6n程序從入口開始執(zhí)行到出口結束執(zhí)行,經(jīng)過的計數(shù)語句記錄下該程序點語句的執(zhí)行次數(shù)。若在程序的入口處插入了對計數(shù)器C(i)初始化的語句,在程序出口處則插入打印這些計數(shù)器的語句,則構成了一個完整的插樁程序。開始c(1) = c(1) +1c(2) = c(2) +1為X、Y賦值C(4) = C(4) +1結束C(3) = C(3) +1XYX YC(5) = C(5) +1C(6) = C(6) +1X = X YY=YXFTFTn設計程序插樁方法時需考慮如下問題:應探測程序中的哪些信息。在程序的什么位置設置探測點。4.3 白盒測試方法的綜合使用策略(1) 靜態(tài)測試和動態(tài)測試的時序關系 一般可先進行靜態(tài)測試,接著進行動態(tài)測試。(2) 白盒測試的重點 覆蓋率測試是白盒測試的重點,一般可使用基本路徑測試方法來使基本路徑集合中的每條獨立路徑至少執(zhí)行一次。(3) 不同測試階段使用的白盒測試方法n在單元測試階段,以代碼檢查法、邏輯覆蓋法、基本路徑測試法為主。n在集成測試階段,需增加靜態(tài)結構分析法、代碼質(zhì)量度量法。n在集成測試之后的測試階段,應盡量使用黑盒方法,有選擇性

溫馨提示

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

評論

0/150

提交評論