Spec Explorer:错误测试

时间:2012-12-07 10:27:19

标签: c# specifications model-based-testing

目前,我正在评估Microsoft Research的Spec Explorer 2010。我有点想知道如何生成测试用例。

我正在玩SE生成的测试样本模型(Accumulator)。有一个方法Accumulator.Add,它增加了一个自然数> 0到成员变量。

该模型指定:

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

如您所见,上述条件(x> 0)在模型代码中指定。另外,我在CORD文件中为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 个答案:

答案 0 :(得分:1)

Afaik Spec Explorer将根据模型上的探索生成测试。因此,如果规则因为失败(Pre-)条件而未触发,则Spec Explorer将不会创建测试。

我建议对此进行建模,是手动创建等价类,即为负值创建另一个规则,但对于相同的操作:

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

配置文件以及实现可以保持不变,如果添加了负值,测试套件将报告错误(我刚试过)。

您还需要为负值创建第二个规则,或者在开头删除条件。