軟件測試專欄 | ||
---|---|---|
上一篇 | 主目錄 | 下一篇 |
【前言】
1 簡介
結構性測試方法
基於被測程序的源代碼,支持嚴格定義、數學分析和精確度量,是白盒
測試。
程序圖
給定採用命令式程序設計語言編寫的一段程序,其程序圖是一種有向圖,圖中的節點表示語句片段(if-than-else中的if),邊表示控制流。
2 DD路徑&DD路徑圖
DD路徑:
決策到決策路徑,從決策語句的“出路開始”,到下一個決策語句的“入路”結束。這種序列中沒有內部分支,因此對應節點像排列起來的一行多米諾骨牌,當第一張牌倒後,序列中其他牌 也會倒下。
路徑稱爲鏈:起始和終點不同,每個節點的入度和出度都是1 。
DD路徑圖:
有向圖,節點是表示其程序圖 的DD路徑,邊表示連續DD路徑之間的控制流。一種壓縮圖。
練習:
3 覆蓋測試指標及方法
當通過一組測試用例滿足DD路徑
覆蓋要求時,可以發現全部缺陷中的大約85%
c0語句覆蓋:
如果節點對應完整語句,則只執行判斷的一個選項就滿足語句覆蓋準則。語句覆蓋是指設計若干個測試用例,當將它們作用於被測程序後,程序中的每一條可執行語句至少被執行一次。(由於程序圖來源於程序代碼,語句覆蓋與節點覆蓋相同)
C1指標
要求覆蓋每條DD路徑。判定覆蓋也稱爲分支覆蓋,是指設計一組測試用例,當它們作用於被測軟件時,程序中每個判定的取真分支和取假分支至少各執行一次。判定覆蓋等同於邊覆蓋。
C1p判定/分支覆蓋
需要判斷每個分支的所有情況。條件語句覆蓋真假,case語句覆蓋每個子句
C1與C1p的區別
對於if-then語句,c1只覆蓋真分支,而c1p覆蓋真假分支
Cd是數據流測試
DD路徑對偶之間最常用的依賴關係是定義/引用關係,其中一個變量在一個DD路徑中被定義,在另一個DD路徑中被引用。簡單DD路徑覆蓋測試可能不會遍歷這些關係,因此更深的缺陷類不會被發現。
Ccmcc條件覆蓋
不是直接遍歷判斷到其真或假分支,而應該研究可能出現分支的不同方式。條件覆蓋是指設計足夠多的測試用例,當它們作用於被測軟件後,程序中每個判定內的每個條件的各種可能取值至少被執行一次。條件覆蓋關注的是更爲細緻的條件取值情況,而不僅僅是整個判定的取值。
如:三個簡單條件的複合條件If(A>5 and B!=10 andC<100)會有八行(2的3次方),產生八個測試用例
(A>5,B!=10,C<100)、(A>5,B!=10,C>=100)、(A>5,B = =10,C<100)、(A>5,B= =10,C>100)(A<5,B!=10,C<100)、(A<5,B!=10,C>=100)、(A<5,B= =10,C<100)、(A<5,B==10,C>100)
判定-條件覆蓋是判定覆蓋和條件覆蓋的結合,要求設計一組測試用例,針對被測程序運行完這些測試用例後,不僅程序中每個判定的各種取值至少被執行一次,而且每個判定中的每個條件的各種取值也至少被執行一次。
條件組合覆蓋是指設計足夠多的測試用例,運行被測軟件後,程序中每個判定的所有條件的可能取值組合都至少被執行一次。
CiK循環覆蓋
三種:
- 串聯循環是不相交的簡單循環序列
- 嵌套循環是一個循環包含在另一個循環中的循環
- 複雜循環,如果跳轉到某個循環內(或跳轉出),而這個分支位於其他循環的內部,就是複雜循環
-
每個循環都包含一個判斷,並且需要測試判斷的兩個分支:
- 一個遍歷循環
- 另一個退出(或不進入)循環
採用經過修改的邊界值方法,循環指數按最小值、一般值和最大值給出
循環測試的路徑選擇
- 1.簡單循環(邊界值方法)
1)零次循環:從循環入口到出口
2)一次循環:檢查循環的初始值
3)二次循環:檢查初始值+1
4)m次循環:檢查多次循環
5)最大次數循環-1
6)最大次數循環
7)最大次數+1 - 2.嵌套循環
1)對最內層循環做簡單循環的全部測試,其他層的循環變量置爲最小值
2)逐步外推,對其外面的一層循環進行簡單循環測試,內層取典型值,當前循環的所有外層取最小值
3)反覆進行,直到所有各層循環測試完畢
4)對全部各層循環同時取最小循環次數、同時取最大循環次數進行測試
4 基路徑測試
基路徑:對應於測試來說,所有的程序路徑認爲是一個集合,那麼在這些路徑當中必然會存在一個最小路徑的集合,我們稱之爲基路徑
線性獨立路徑數是:V(G)=e-n+2p=10-7+2*1=5
e:邊數 n:節點數 p:連接區域數
由於圈複雜度爲5,所以有5條獨立路徑
用節點序列表示的路徑:
p1:A,B,C,G
p2:A,B,C,B,C,G
p3:A,B,E,F,G
p4:A,D,E,F,G
p5:A,D,F,G
5 McCabe算法
—基線方法
McCabe的算法,用於確定基路徑集合。不要求唯一基
步驟1:首先從DD-路徑圖的首節點出發,到末節點結束,尋找一條最長的路徑記錄下來,稱爲
基線路徑
步驟2:然後對於基線路徑中出現分支結構的節點轉移到另外一條路徑由此產生新路徑
步驟3:重複步驟2的過程直到沒有新路徑加入,即所有判斷節點都“翻轉”一次
步驟4:分析所產生的所有路徑,排除那些沒有可能的路徑,剩餘的就是基路徑
例子:
步驟1:首先從DD-路徑圖的首節點出發,到末節點結束,尋找一條最長的路徑記錄下來p1. A、B、C、B、E、F、G 的路徑爲基線
步驟2:然後對於出現分支結構的節點轉移到另外一條路徑由此產生新路徑這條路徑上的第一個判斷節點(外度>=2)是節點A,因此對於下一個基路徑,要經過邊2,而不是邊1;p2. A、D、E、F、G
步驟三:對於下一條路徑,可以選第二條路徑,取節點D的另一個判斷分支,得到路徑:p3. A、D、F、G
步驟四:對B、C進行翻轉,得到如下2條路徑:p4. A、B、E、F、G 。p5. A、B、C、G
三角形問題應用McCabe算法
如果經過節點C,則必須經過節點H
如果經過節點D,則必須經過節點G
壓縮構造