1

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

我正在玩 SE 生成的测试样本模型(累加器)。有一个方法 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 从不为后一种情况生成测试用例。

有什么建议么?先感谢您。

4

1 回答 1

1

Afaik Spec Explorer 将根据对模型进行的探索生成测试。因此,如果由于(预)条件失败而没有触发规则,则 Spec Explorer 将不会创建测试。

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

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

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

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

于 2013-02-15T21:34:37.790 回答