Spec Explorer: ложные тесты

В данный момент я оцениваю Spec Explorer 2010 от Microsoft Research. Мне немного интересно, как генерируются тестовые случаи.

Я играю с моделью тестового образца (Accumulator), созданной SE. Есть метод Accumulator.Add, который добавляет натуральное число> 0 к переменной-члену.

Модель определяет:

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

Как видите, указанное выше условие (x > 0) указано в коде модели. Кроме того, я указал возможные входные данные для Accumulator.Add в файле CORD:

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);
}

Файл конфигурации и реализация могут остаться прежними, и набор тестов сообщит об ошибке, если будет добавлено отрицательное значение (я только что попробовал это).

Вам также нужно будет создать второе правило для отрицательных значений или удалить условие в начале.

Другие вопросы по тегам