Как вы тестируете программы, которые требуют сложных входных данных? - PullRequest
1 голос
/ 20 июля 2009

У нас есть набор преобразователей, которые принимают сложные данные и преобразуют их. В основном входными данными являются EDI, а выходными - XML ​​или наоборот, хотя существуют и другие форматы.

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

В настоящее время мы используем два метода: (1) набор примеров файлов, которые мы создавали в течение многих лет, в основном из файловых ошибок и примеров в документации, и (2) генерация псевдослучайных тестовых данных. Но первый охватывает только часть случаев, а второй имеет множество компромиссов и тестирует только подмножество полей.

Прежде чем идти дальше по пути реализации (переизобретения?) Сложного табличного генератора данных, какие варианты вы нашли успешными?

Ответы [ 2 ]

2 голосов
/ 20 июля 2009

Ну, ответ на ваш вопрос. Если вы не реализуете сложный генератор данных на основе таблиц, вы все делаете правильно с (1) и (2).

(1) охватывает правило «1 ошибка подтверждена, 1 новый контрольный пример». И если структура данных псевдослучайного теста (2) соответствует чему бы то ни было в реальных жизненных ситуациях, это нормально.

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

Таким образом, (2) всегда будет соответствовать доле случаев. Если в один прекрасный день он будет соответствовать всем случаям, это будет фактически новая версия вашего алгоритма.

0 голосов
/ 20 июля 2009
  1. Я бы посоветовал не использовать случайные данные, так как это может затруднить, если не невозможно, воспроизвести сообщенную ошибку (я знаю, что вы сказали «псевдослучайный», просто не уверен, что именно вы подразумеваете под этим) .

  2. Работа над целыми файлами данных, вероятно, будет включать функциональное или интеграционное тестирование. Я бы предложил взять ваш набор файлов с известными ошибками и перевести их в модульные тесты, или, по крайней мере, сделать это для любых будущих ошибок, с которыми вы столкнетесь. Затем вы также можете расширить эти модульные тесты, включив в них покрытие для других ошибочных условий, когда у вас нет «выборочных данных». Это, вероятно, будет проще, чем создавать новый файл данных каждый раз, когда вы думаете о нарушении условия / правила, которое хотите проверить.

  3. Убедитесь, что ваш анализ формата данных инкапсулирован из интерпретации данных в формате. Это значительно упростит модульное тестирование, как описано выше.

  4. Если вам определенно необходимо провести тестирование, возможно, вы захотите получить машиночитаемое описание формата файла и написать генератор тестовых данных, который проанализирует формат и сгенерирует допустимые / недействительные файлы на его основе. Это также позволит вашим тестовым данным развиваться вместе с форматами файлов.

...