Генерация тестовых случаев - PullRequest
0 голосов
/ 02 августа 2011

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

В качестве упрощенного примера:

Предположим, я тестирую функцию F (a, b, c, d)

  1. a может быть a1, a2, a3
  2. b может быть b1, b2
  3. c может быть c1, c2, c3
  4. d может быть d1, d2, если a = a1, d2, d3, d4, если a = a2, d5, если a = a3

Как я могу генерировать все комбинации аргументов?

[a1, b1, c1, d1] [a2, b1, c1, d3] [a2, b1, c1, d4]

и так далее?

Ответы [ 3 ]

1 голос
/ 10 августа 2011

То, на что вы смотрите, формально известно как комбинаторное тестирование. Вы можете прочитать больше об этом здесь . Вы можете найти много инструментов онлайн, но у меня есть хороший успех, используя CTE-XL и PICT

Ни один из них не генерирует код, но генерирует комбинации для вас.

0 голосов
/ 10 августа 2011

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

Phadke's план экспериментов подход к выбору значений параметров для систем тестирования (программного обеспечения).

В двух словах, подход использует минимальные, типичные и максимальные значения параметров теста (метода) и изменяет их в соответствии с соответствующим образом выбранным массивом Тагучи .

0 голосов
/ 03 августа 2011

Это звучит относительно особенным. Предполагая, что вы упорядочили свои параметры так, что список возможностей для одного параметра зависит только от «предыдущих» параметров, вы должны иметь возможность сделать что-то вроде:

recursiveTestAllCombinations(previousParameters)
{

  if (length(previousParameters) == numberOfParameters)
  {
    performTest(previousParameters)
    return; //end of recursion
  }


  possibilitiesForCurrentParameter = getPossibilities(currentParameterIndex, previousParameters)

  foreach (p in possibilitiesForCurrentParameter)
  {
    parameters = previousParameters
    parameters.append(p);
    recursiveTestAllCombinations(parameters)
  }
}

recursiveTestAllCombinations([])

Метод getPossibilities будет определять ваши условия для параметров:

getPossibilities(previousParameters)
{
  if (length(previousParameters) == 0)
  {
    return [a1, a2, a3];
  }
  ..
  if (length(previousParameters) == 3)
  {
    if (previousParameters[0] == a1) return [d, d2];
    ..
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...