用例設計方法及其覆蓋率
---《軟件測試:一個軟件工藝師的方法》讀書筆記
2018-01-27
1 基本概念
- 錯誤(error):同義詞過失(mistake),編程時的錯誤成為bug。
- 故障(fault):故障是錯誤的后果。可分為過失故障和遺漏故障。
在表象中添加了不正確的信息,是過失故障。未輸入正確信息,是遺漏故障。遺漏故障更難發現。 - 失效(failure):代碼執行時發生故障導致失效。失效只和過失故障有關。
- 事故(incident):是與失效相關聯的症狀。
綠色圈表明測試用例覆蓋到的范圍:
- 區域1:是重合部分,即使期望行為,也是實現的行為
- 區域7:是無效用例
2 黑盒測試vs白盒測試
2.1 基於規格說明的測試
基於規格說明的測試最初叫做功能測試的原因是:任何程序可視為將其輸入定義域中的值映射到期輸出值域的函數。工程領域普遍采用這種思想,因為工程系統被當做黑盒子來研究,這樣就產生了一個詞--黑盒測試。
基於規格說明測試的測試用例的優點:
- 測試用例與具體實現方法無關,所以即使實現方法改變,測試用例仍然有效
- 測試用例的開發可以同軟件的實現並行開展,這樣可以縮短整個項目的開發周期
缺點:
- 測試用例之間會存在嚴重的冗余
- 還可能有測不到的地方
如上圖所示,基於規格說明用不5通方法生成的用例集1和用例集2,只能覆蓋到規格說明所規定的行為,測不到部分程序的實現行為(程序實現了未規定的行為,如木馬病毒)
2.2 基於代碼的測試
優點:
- 通過路徑覆蓋指標,解決功能測試漏洞與冗余的問題
缺點:
- 不能測到規定行為未實現的區域,遺漏故障
3 黑盒測試設計方法[1]
3.1 邊界值測試
- 邊界值分析
- 健壯性分析
- 最壞情況分析
- 健壯最壞情況分析
邊界值分析局限性
邊界值分析法非常適用於多個變量相互獨立又都代表實際物理量的情況。
- 變量相互獨立,如:NextDate函數中並沒有針對2月和閏年的測試,實際上month、day和year這幾個變量之間存在特殊的依賴關系。邊界值分析假定各個變量之間應該是完全獨立的。
- 變量的物理指標同樣重要。如果某個變量代表具體的物理量,比如溫度、壓力、速度等,這個量的物理邊界就非常重要。
邊界值測試的原則
適用於函數(程序)的
- 輸入域
- 輸出域,特別是錯誤消息的輸出
- 內部變量,如,分支、循環控制變量、下標、指針。
3.2 等價類測試
- 弱一般等價類
- 強一般等價類
- 弱健壯等價類
- 強健壯等價類
等價類測試的原則
- 可以和邊界類結合使用
- 強類型程序設計語言無需健壯測試(強類型的無效值會拋出RuntimeException)
- 若錯誤條件特別重要,適合采用健壯性測試
3.3 決策表測試
基於決策表測試是所有功能測試方法中最嚴格的,因為決策表能強化邏輯嚴密性。
決策表由左側一列的條件樁和動作樁和右側的條件項和動作項組成
決策表使用技巧
使用決策表構造測試用例,可以把條件看作程序輸入,把動作看做程序輸出。有時條件也可解釋為輸入的等價類,動作對應和程序的功能處理部分。
決策表測試的原則
決策表測試可用於變量之間存在重要的邏輯關系
4 白盒測試[2]
4.1 路徑測試
程序圖
程序圖是一種有向圖,圖中的節點表示語句片段,邊表示控制流
DD路徑
DD路徑(decision-to-decision path):是指從判斷到判斷的路徑。DD路徑這個名稱指一個語句序列,用Miller的話說,是從一條判斷語句的“出口”開始,到下一個判斷語句的“入口”結束。
DD路徑圖,是一個有向圖,其中節點表示其程序圖的DD路徑,變表示后續DD路徑的控制流。
基路徑測試
基:是數學上的定義。基是元素(稱為向量)的一個集合,且這些元素相互獨立,同時定義向量的乘法和加法運算等規則,通過運算后得到的空間,叫向量空間。
通過定義,我們可以得知:
- 該向量空間中的,所有向量可以通過基向量來表示。
- 一個向量空間,可以有多個不同的基。
基對於測試的意義在於:如果可以把程序看成一種向量空間,則這個空間的基就是需要測試的元素集合。如果基沒有問題,則可認為基所表示的一切都沒有問題。
基路徑的可行性
對於基於規格說明的測試,輸入數據域的依賴關系會給邊界值測試造成困難,我們通過基於決策表的功能測試,解決了這個問題。
對於代碼級的依賴關系,這種依賴關系對獨立基路徑隱含的假設相沖突(數學中的基中的向量是互相獨立的)。
上圖是通過三條判斷是否是三角形的DD圖,我們發現路徑經過C,必須經過H;發現路徑經過D,必須經過G。
那么基路徑p1:A-B-C-E-F-G-O是不可行的
如果要求基路徑必須是可行的,則邏輯依賴關系會壓縮基路徑集合。
4.2 數據流測試
數據流測試和數據流圖並無任何關系。
數據流測試考察變量的接收值(點)和使用(或引用)值(點)的路徑。