1. 程式人生 > >《軟件測試設計》第2章——基於結構的測試

《軟件測試設計》第2章——基於結構的測試

程序代碼 組件 信息 圖片 原子 結果 系統架構 結構 測量

概念:又稱白盒測試,是基於測試對象的代碼、數據或者系統架構而進行測試的一種技術

關註測試對象的內部結構

基於結構的測試技術的共同特點為:

① 測試對象的內部結構信息是設計測試用例的依據,如程序代碼和設計架構

② 測試對象的覆蓋率可通過已有的測試用例測量,並且可系統地增加測試用例來提高覆蓋率

要求:測試人員需詳細了解測試對象的內部結構

步驟

① 分析測試對象的具體實現和內部結構

② 識別測試對象的不同路徑(選擇合適的代碼覆蓋標準,如語句覆蓋)

③ 選擇合適的輸入數據覆蓋測試對象的相關路徑並確定期望結果

④ 執行測試用例

⑤ 比較測試對象的實際結果和期望結果

⑥ 確定測試對象是否實現了正確的功能

應用

① 特別適用於低級別測試,如組件測試

② 適用於更高級別測試,如集成測試中考慮的結構是集成模塊間調用的樹形結構。以及在系統測試過程中測試對象的菜單結構、網頁的關聯結構和業務流程等。

作用:測試人員可確保識別並測試了測試對象的各種路徑

缺點:若路徑和輸入數據的組合很多,對這些路徑進行完全的測試基本不可能,需采取合適的測試技術以滿足覆蓋率要求。

下引入控制流和控制流圖等幾個概念

控制流:測試對象中一系列順序發生的事件或路徑

控制流圖:在測試對象那個執行過程中所有可能的事件或路徑序列的抽象表示

控制流圖是控制流測試的基礎。

基於結構的測試中首先將測試對象的代碼轉換為相應控制流圖,然後分析其中的路徑,並根據分析的結果創建相應的測試用例。

控制流圖組成

① 過程塊

技術分享圖片

② 決策點

技術分享圖片

③ 匯聚點

技術分享圖片

控制流圖缺點

① 路徑龐大時有限時間內窮盡測試難以實現

② 根據規格說明所設計的代碼可能在模塊中遺漏某些路徑,而控制流測試依據測試對象實現的路徑展開,所以無法發現遺漏的路徑。

③ 測試對象對小部分數據可能無法正確執行

下介紹基於結構的各種測試技術

2.1 語句測試

概念:設計若幹測試用例來執行程序代碼中的語句

語句覆蓋指被執行的語句數與所有可能的語句數之間的比值

案例1

if(a>0&&b>0){c=c/a;}
if(a>1||c>1){c=c+1;}
c=c+b;

化成控制流圖

技術分享圖片

滿足100%語句覆蓋準則所對應的測試用例

測試用例ID 輸入a、b和c 輸出a、b和c 滿足的判定 覆蓋的路徑
1 a=1、b=2且c=3 a=1、b=2且c=6 T1T2 abdegh

其它測試用例

測試用例ID 輸入a、b和c 輸出a、b和c 滿足的判定 覆蓋的路徑
2 a=1、b=2且c=-3 a=1、b=2且c=-1 T1F2 abdfh
3 a=-1、b=2且c=3 a=-1、b=2且c=6 F1T2 acegh

盡管語句測試可識別沒有測試到的代碼塊,但可能無法正確判斷程序代碼中的邏輯關系

例:案例1中語句測試無法發現(a>0&&b>0)錯寫為(a>0||b>0)

語句覆蓋可能會遺漏多個路徑(本案例共4條路徑)

盡管語句覆蓋是最低級別的測試覆蓋,在實際測試中達到100%的語句覆蓋也不易

2.2 判定測試

概念:是種針對判定結果設計測試用例的技術。

判定覆蓋:執行測試套件能夠覆蓋的判定結果百分比

低級別測試中,判定覆蓋可作為出口準則之一。例:測試出口準則可要求測試對象達到100%的判定覆蓋,100%的判定覆蓋可保證100%的語句覆蓋。

案例1中(T1 T2)和(F1 F2)兩個用例滿足100%判定覆蓋

測試用例ID 輸入a、b和c 輸出a、b和c 滿足的判定 覆蓋的路徑
1 a=1、b=2且c=3 a=1、b=2且c=6 T1T2 abdegh
2 a=-1、b=2且c=-3 a=-1、b=2且c=-1 F1F2 acfh

或者用(T1 F2)和(F1 T2)兩個用例滿足100%判定覆蓋

測試用例ID 輸入a、b和c 輸出a、b和c 滿足的判定 覆蓋的路徑
3 a=1、b=2且c=-3 a=-1、b=2且c=-1 T1F2 abdfh
4 a=-1、b=2且c=3 a=-1、b=2且c=6 F1T2 acegh

可以看出,100%的判定覆蓋可保證100%的語句覆蓋。

判定測試可發現程序中的邏輯錯誤,但並不能保證發現判定中原子條件的錯誤

2.3 條件測試

概念:設計若幹測試用例來執行不同條件的結果

條件覆蓋指被執行條件能夠覆蓋原子條件的百分比,需要註意條件覆蓋並不比判定覆蓋更強。

舉例:黑體TF表示判定的真假,普通T和F表示判定中條件的真假。

測試用例ID 輸入a、b和c 輸出a、b和c 滿足的判定 覆蓋的路徑
3 a=1、b=2且c=-3 a=-1、b=2且c=-1 T1F2 abdfh
4 a=-1、b=2且c=3 a=-1、b=2且c=6 F1T2 acegh

可得原子條件的所有組合及滿足條件的取值。

若要測試對象滿足100%的條件覆蓋,那麽根據定義需將判定中的每個原子取值分別取真和假一次。

舉例

上例中100%的條件覆蓋也滿足了100%的判定覆蓋,但條件覆蓋不保證100%判定覆蓋,舉例:

所以條件覆蓋並不比判定覆蓋更強。

條件覆蓋也可能無法發現測試對象中的邏輯錯誤

2.4判定條件測試

概念:指設計若幹測試用例來執行條件結果和判定結果

判定條件覆蓋指執行測試用例套件能夠覆蓋的條件結果和判定結果百分比

100%判定條件覆蓋意味著100%的判定覆蓋和100%的條件覆蓋

滿足100%判定條件覆蓋並不唯一

2.5條件決定測試

能夠獨立影響判定結果的單獨條件測試

《軟件測試設計》第2章——基於結構的測試