白盒測試方法
靜態白盒測試
檢查設計和代碼
靜態測試是指測試非運行部分——檢查和審查。白盒測試是指訪問代碼,能夠查看和審查。靜態白盒測試實在不執行的條件下有條理地仔細審查軟件設計、體系結構和代碼,從而找出軟件缺陷的過程。有時也稱為結構分析。
進行靜態白盒子測試的首要原因就是盡早發現軟件缺陷,以找出動態黑盒子測試難以揭示或遇到的軟件缺陷;另一個好處是為接受該軟件測試的黑盒測試員的測試案例提供思路,他們不必了解代碼細節,但是根據審查備注,可以確定似乎有問題或者存在軟件缺陷的特性范圍。
正式審查
正式審查就是進行靜態白盒子測試的過程。正式審查含義廣泛,從程序員之間的交談,到代碼的嚴格檢查均屬於此過程。
有4個基本要素:
- 確定問題。審查的目標是找出軟件的問題,不僅是出錯的項目,還包括遺漏的項目。全部的批評應直指代碼,而不是其創建者。合作者不應該互相指責。個人情緒化感覺要保留。
- 遵守規則。 審查要遵守一套固定的規則,規則可能設定要審查的代碼量、花費多少時間、哪些內容要做備注等等。其重要性在於合作者了解自己的作用和目標,這有助於使審查進展的更加順利。
- 准備。每個合作者需要了解自己的責任和義務,並積極參與審查。在審查過程中找出問題大部分的缺陷是在准備期間發現的,而不是實際審查期間。
- 編寫報告。審查小組必須做出總結審查結果的書面報告,並使報告便於開發小組使用。審查結果必須盡快告訴別人,比如發現多少問題,在哪發現的。
動態白盒測試
用一句話來概括,動態白盒測試是指利用查看代碼功能和實現方式得到的信息來確定哪些要測試,哪些不要測試,如何開展測試。動態白盒測試的另一個常用名稱是結構化測試,因為軟件測試員可以查看並使用代碼的內部結構,從而設計和執行測試。
動態白盒測試不僅僅是查看代碼,還包括直接參數和控制軟件。它包括四部分:
1.直接測試底層功能、過程、子程序和庫。即應用程序接口(API)
2.以完整程序的方式從頂層測試軟件,但是要根據對軟件運行的了解調整測試案例。
3.從軟件獲得讀取變量和狀態信息的訪問權,以便確定測試與預期結果是否相符,同時,強制軟件以正常測試難以實現的方式運行。
4. 估算執行測試時“命中”的代碼量和具體代碼,然后調整測試,去掉多余的,補充遺漏的。
代碼檢查法
代碼檢查方法
桌面檢查
變量的交叉引用表
標號的交叉引用表
子程序、宏、函數
等價性檢查
常量檢查
代碼審查
標准檢查
風格檢查
走查
對照程序的規格說明,詳細閱讀源代碼,逐字逐句進行分析和思考,比較實際的代碼和期望的代碼,從它們的差異中發現程序的問題和錯誤。
補充文檔。
邏輯覆蓋法
邏輯覆蓋是通過對程序邏輯結構的遍歷實現程序的覆蓋。它是一系列測試過程的總稱 ,這組測試過程逐漸進行越來越完整的通路測試
邏輯覆蓋法又可分為
語句覆蓋
設計足夠的測試用例,運行被測程序,使得程序中每一個可執行語句至少執行一次。
執行路徑:abd 測試數據:[x=4,y=5,z=9]
判斷覆蓋
設計足夠的測試用例,運行被測程序,使得每個判定的取真分支和取假分支至少執行一次.
執行路徑:abe,acd 測試數據:[x=5,y=5,z=9]、[x=4,y=5,z=10]
條件覆蓋
設計足夠多的測試用例,運行被測程序,使得每一判定語句中每 個邏輯條件的可能取值至少執行一次。
執行路徑: (t1, t2,t3,-t4)acd、(-t1,t2,-t3,t4)acd
測試數據: [x=4,y=5,z=10]、 [x=3,y=6,z=9]
判斷-條件覆蓋
設計足夠多的測試用例,使得判定中的每個條件的所有可能(真假分支)至少執行-次,並且每個判定本身的判定結果也至少執行次。
執行路徑:(t1, t2,t3,t4)abd、(-t1, -t2,-t3,-t4)ace
測試數據:[x=4,y=6,z=9]、[x=3,y=5,z=10]
條件組合覆蓋
設計足夠多的測試用例,使得每個判定中條件的各種可能組合都至少執行次。
執行路徑:(t1,t2,t3,t4)abd、(-t1,-t2,-t3,-t4)ace、 (t1,-t2,t3, t4)acd、(-t1,t2,-t3,t4)acd
測試數據:[x=4,y=6,z=9]、[x=3,y=5,z=10]、 [x=4,y=5,z=10]、 [x=3,y=6,z=9]
路徑補充覆蓋
針對條件組合覆蓋,如果發現丟失路徑的情況存在,則補充丟失的路徑。
執行路徑:abe
測試數據:[x=5,y=5,z=9]
基本路徑測試法
程序的控制流程圖如下:
例子:
程序環路復雜性
McCabe復雜性度量
有以下兩種方法計算圈復雜度:
控制流程圖:
基本路徑測試法步驟
以詳細設計或源代碼作為基礎,導出程序的控制流圖。
計算得到的控制流圖G的環路復雜性V(G)。
確定線性無關的路徑的基本集。
生成測試用例,確保基本路徑集中每條路徑的執行。
循環覆蓋
簡單覆蓋
其中n是允許通過循環的最大次數
整個跳過循環;
只有一次通過循環;
兩次通過循環;
m次通過循環,其中m<n ;
n-1 , n次通過循環。
嵌套覆蓋
從最內層循環開始,將其它循環設置為最小值。
對最內層循環使用簡單循環,而使外層循環的疊代參數(即循環計數) 最小,並為范圍外或排除的值增加其它測試。
由內向外構造下一個循環的測試,但其它的外層循環為最小值,並使其它的嵌套循環為"典型”值。
繼續直到測試所有的循環。
串接循環
如果串接循環的循環都彼此獨立,可是使用簡單循環策略測試。
如果第一個循環是第 個循環的初始值,則這兩個循環並不是獨立的則推薦使用的嵌套循環的方法進行測試。
不規則循環
不能測試,盡量重新設計成結構化的程序結構后再進行測試。