4.6因果圖
前面介紹的等價類劃分方法和邊界值分析方法,都是著重考慮輸入條件,但未考慮輸入條件之間的聯系。如果在測試時必須考慮輸入條件的各種組合,可能的組合數將是天文數字。因此必須考慮使用一種適合于描述對于多種條件的組合,相應產生多個動作的形式來考慮設計測試用例,這就需要利用因果圖。
因果圖方法最終生成的就是判定表。它適合于檢查程序輸入條件的各種組合情況。
利用因果圖生成測試用例的基本步驟是:
分析軟件規格說明描述中,哪些是原因(即輸入條件或輸入條件的等價類),哪些是結果(即輸出條件),并給每個原因和結果賦予一個標識符。
分析軟件規格說明描述中的語義,找出原因與結果之間,原因與原因之間對應的是什么關系? 根據這些關系,畫出因果圖。
由于語法或環境限制,有些原因與原因之間,原因與結果之間的組合情況不可能出現。為表明這些特殊情況,在因果圖上用一些記號標明約束或限制條件。
把因果圖轉換成判定表。
把判定表的每一列拿出來作為依據,設計測試用例。
通常,在因果圖中,用Ci表示原因,Ei表示結果,其基本符號如圖7所示。各結點表示狀態,可取值“0”或“1”。“0”表示某狀態不出現,“1”表示某狀態出現。
恒等:若原因出現,則結果出現。若原因不出現,則結果也不出現。
非:若原因出現,則結果不出現。若原因不出現,反而結果出現。
或(∨):若幾個原因中有一個出現,則結果出現,幾個原因都不出現,結果不出現。
與(∧):若幾個原因都出現,結果才出現。若其中有一個原因不出現,結果不出現。
為了表示原因與原因之間,結果與結果之間可能存在的約束條件,在因果圖中可以附加一些表示約束條件的符號。從輸入(原因)考慮,有四種約束;從輸出(結果)考慮,還有一種約束,參看圖8:
E(互斥):表示a,b兩個原因不會同時成立,兩個中最多有一個可能成立。
I(包含):表示a,b,c三個原因中至少有一個必須成立。
O(唯一):表示a和b當中必須有一個,且僅有一個成立。
R(要求):表示當a出現時,b必須也出現。不可能a出現,b不出現。
M(屏蔽):表示當a是1時,b必須是0。而當a為0時,b的值不定。
因果圖方法是一個非常有效的黑盒測試方法,它能夠生成沒有重復性的且發現錯誤能力強的測試用例,而且對輸入、輸出同時進行了分析。
4.7測試方法選擇的綜合策略
Myers提出了使用各種測試方法的綜合策略:
在任何情況下都必須使用邊界值分析方法。經驗表明用這種方法設計出測試用例發現程序錯誤的能力最強。
必要時用等價類劃分方法補充一些測試用例。
用錯誤推測法再追加一些測試用例。
對照程序邏輯,檢查已設計出的測試用例的邏輯覆蓋程度。如果沒有達到要求的覆蓋標準,應當再補充足夠的測試用例。
如果程序的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法。
5. 程序的靜態測試
5.1源程序靜態分析
通常采用以下一些方法進行源程序的靜態分析。
?、?生成各種引用表
直接從表中查出說明/使用錯誤等。如,循環層次表、變量交叉引用表、標號交叉引用表等。
為用戶提供輔助信息。如,子程序(宏、函數)引用表、等價(變量、標號)表、常數表等。
用來做錯誤預測和程序復雜度計算。如,操作符和操作數的統計表等。
?、?靜態錯誤分析
靜態錯誤分析主要用于確定在源程序中是否有某類錯誤或“危險”結構。
類型和單位分析 :為了強化對源程序中數據類型的檢查,發現在數據類型上的錯誤和單位上的不一致性,在程序設計語言中擴充了一些結構。如單位分析要求使用一種預處理器,它能夠通過使用一般的組合/消去規則,確定表達式的單位。
引用分析 :最廣泛使用的靜態錯誤分析方法就是發現引用異常。如果沿著程序的控制路徑,變量在賦值以前被引用,或變數在賦值以后未被引用,這時就發生了引用異常。為了檢測引用異常,需要檢查通過程序的每一條路徑。也可以建立引用異常的探測工具。
原文轉自:http://www.uml.org.cn/Test/201511262.asp