Генерация тестов из анализа во время выполнения

У нас есть большой объем устаревшего кода, некоторые части которого запланированы на рефакторинг или замену. Мы хотим оптимизировать части, которые в настоящее время влияют на взаимодействие с пользователем, облегчить повторное использование в новом планируемом продукте и, надеюсь, улучшить ремонтопригодность.

У нас есть неплохие/всесторонние функциональные тесты для существующего продукта. Это смесь автоматических и ручных тестов графического интерфейса, но на их полное выполнение у разработчика может уйти более половины дня. «Низкоуровневая доменная логика» имеет хороший набор модульных тестов (NUnit) с хорошим покрытием. К сожалению, остальная часть кода не имеет модульных тестов (или, по крайней мере, достойных модульных тестов).

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

Существуют ли такие инструменты? Есть ли у вас какие-либо рекомендации для меня?

Я наткнулся на Parasoft .TEST, который выглядит так, как будто я хочу, чтобы я хотел. Есть ли у вас какие-либо комментарии по поводу моей ситуации?

Я не думаю, что что-то, что просто генерирует тестовый код из статического анализа, аля NStub, полезно здесь. Я полагаю, что на самом деле важно генерировать репрезентативные тестовые данные.

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


person Stewart    schedule 06.05.2009    source источник


Ответы (2)


Попробуйте Pex:

Прямо из редактора кода Visual Studio Pex находит интересные значения ввода-вывода ваших методов, которые вы можете сохранить в виде небольшого набора тестов с большим охватом кода. Pex выполняет систематический анализ, отыскивая граничные условия, исключения и ошибки утверждений, которые вы можете сразу отладить. Pex поддерживает параметризованное модульное тестирование, расширение модульного тестирования, которое снижает затраты на обслуживание тестов.

person Anton Gogolev    schedule 06.05.2009

Ну, вы могли бы взглянуть на PEX, но я считаю, что он изобретает свой собственные данные (он не смотрит ваши существующие тесты, AFAIK).

person Marc Gravell    schedule 06.05.2009