Автоматическое создание тестов путем записи и воспроизведения методов - PullRequest
1 голос
/ 09 июля 2009

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

Для типичного приложения эта программа генерирует тысячи и тысячи тестов автоматически после всего лишь нескольких использований программы.

Эта программа существует? Если нет, то почему? Есть ли программа, которая делает что-то похожее на это?

Более сложная версия этой программы будет делать следующее:

  1. Было бы рекомбинировать параметры из несколько звонков для создания нового теста. Например: метод вызывается с (1, A) и (2, B). Эта утилита будет генерировать модульные тесты, которые вызывают метод с (1, B) и (2, A).
  2. Это нарушит вызовы для создания новых тестов. Например: метод вызывается с двумя целыми числами (1,2). Эта утилита создаст тесты, которые вызывают метод с (0,2), (1,3), (0,3) и т. Д.

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

Ответы [ 3 ]

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

Существуют аналогичные инструменты, но они основаны на захвате пользовательского ввода и его воспроизведении.

То, что вы описали, было бы IMO не очень полезным, поскольку тесты, произведенные таким образом, не проверяли бы желаемое поведение, а просто существующее поведение. Даже если это не так. Даже если это незначительная деталь реализации. Тесты были бы чрезвычайно хрупкими и чрезмерно избыточными - то есть им не хватало бы двух наиболее важных свойств автоматизированных тестов: стабильность и независимость.

Любые изменения в приложении, любой рефакторинг могут привести к тысячам неудачных тестов. Конечным результатом может быть либо заброшенный и проигнорированный набор тестов, либо приложение, застывшее во времени, и никто не сможет выработать мотивацию для изменения каким-либо образом, потому что это требует в 10 раз больше работы по настройке тестовых случаев.

Это нарушит вызовы для создания новые тесты. Например: метод вызывается с двумя целыми числами (1,2). это Утилита будет создавать тесты, которые вызывают метод с (0,2), (1,3), (0,3), и т.д.

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

0 голосов
/ 09 июля 2009

Если вы выполняете функциональное тестирование веб-приложений, существуют такие платформы, как Selenium, и такие, которые позволяют записывать пользовательский ввод в браузере и воспроизводить его для целей тестирования.

0 голосов
/ 09 июля 2009

В мире трехмерной графики они похожи друг на друга - они записывают все вызовы API, и вы можете «воспроизвести» их позже и получить точно такую ​​же последовательность кадров и т. Д.

Я не понимаю, почему упомянутая вами утилита должна была бы создавать дополнительные тесты (это (1, A) бизнес). Является ли (2, B) даже допустимой комбинацией? Запись метода является достаточно хорошей идеей сама по себе, без ее рекомбинации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...