2012-12-07 58 views
1

目前,我正在通過Microsoft Research評估Spec Explorer 2010。我有點想知道如何生成測試用例。Spec Explorer:錯誤測試

我正在玩SE生成的測試樣本模型(Accumulator)。有一個方法Accumulator.Add將一個自然數> 0添加到成員變量中。

的模型規定:

[Rule(Action = "Add(x)")] 
static void AddRule(int x) 
{ 
    Condition.IsTrue(x > 0); 
    accumulator += x; 
} 

正如你可以看到,上述(X> 0)的條件是在型號代碼中指定的。此外,我指定的可能的輸入爲Accumulator.Add索文件中:

config ParameterCombination: Main 
{ 
    action abstract static void Accumulator.Add(int x) 
     where x in {-3..3};  
} 

但聲明Condition.IsTrue(x> 0)的部隊SpecExplorer只生成與值> 0測試這不是我所期待的:輸入參數類型爲int,因此可以將非正數傳遞給方法。根據規範,該方法不應該允許這樣的數字。從我的角度來看,SE應該使用非正向輸入生成測試來驗證算法不接受它們。

這種行爲可以以某種方式建模嗎? 請不要將我指向像PEX這樣的解決方案,因爲PEX專用於白盒測試。 SE寧願把重點放在黑盒測試上,而從我所瞭解到的情況來看,黑盒測試應該使用基於我的規範的等價類。那些將是:

Equivalence class 1: Positive input 
Equivalence class 2: Non-positive input 

但是,SE永遠不會爲後一種情況生成測試用例。

有什麼建議嗎?先謝謝你。

回答

1

Afaik Spec Explorer將根據在模型上進行的探索生成測試。因此,如果規則因爲失敗(預)條件而不啓動,Spec Explorer將不會創建測試。

我的建議,建模,是手工做的等價類的創建,即創建負值另一個規則,但對於同樣的動作:

[Rule(Action="Add(x)")] 
static void AddRule2(int x) 
{ 
    Condition.IsTrue(x <= 0); 
} 

的配置文件,以及執行可以保持不變,如果添加負值,測試套件將報告錯誤(我剛剛嘗試過)。

您還需要爲負值創建第二個規則,或者在開始時刪除條件。