Генерация тестов из анализа времени выполнения
У нас есть большой объем унаследованного кода, некоторые части которого запланированы для рефакторинга или замены. Мы хотим оптимизировать детали, которые в настоящее время влияют на пользовательский опыт, облегчают повторное использование в планируемом новом продукте и, надеемся, также улучшают ремонтопригодность.
У нас есть неплохие / комплексные функциональные тесты для существующего продукта. Это смесь автоматизированных и управляемых вручную тестов графического интерфейса, но они могут занять разработчика более полдня, чтобы выполнить полностью. "Низкоуровневая логика домена" имеет хороший набор модульных тестов (NUnit) с хорошим охватом. К сожалению, в оставшейся части кода нет юнит-тестов (или, по крайней мере, нет достойных юнит-тестов).
То, что я хотел бы найти, - это инструмент, который автоматически генерирует модульные тесты для определенных методов / классов и, возможно, определенных интерфейсов на основе их использования и поведения в функциональных тестах. Эти модульные тесты будут иметь неоценимое значение для рефакторинга, а также будут выполняться как часть нашей системы CI, чтобы обнаруживать регрессии намного раньше, чем происходит в настоящее время (и локализовать регрессии гораздо лучше, чем "кнопка X не работает").
Существуют ли такие инструменты? Есть ли у вас какие-либо рекомендации для меня?
Я сталкивался с Parasoft.TEST, который выглядит так, как будто я хочу этого. Есть ли у вас какие-либо комментарии по поводу моей ситуации?
Я не думаю, что что-то, что просто генерирует тестовый код из статического анализа, аля NStub, здесь полезно. Я полагаю, что на самом деле генерация репрезентативных тестовых данных действительно важна.
Пожалуйста, не обращайте внимания на достоинства или недостаток автоматического создания тестов - это не то, что я обычно защищаю. (Не в последнюю очередь потому, что вы получаете тесты, которые проходят для неработающего кода!)
2 ответа
Попробуйте Pex:
Прямо из редактора кода Visual Studio Pex находит интересные значения ввода-вывода ваших методов, которые вы можете сохранить в виде небольшого набора тестов с высоким охватом кода. Pex выполняет систематический анализ, выискивая граничные условия, исключения и ошибки подтверждений, которые можно сразу же отладить. Pex включает параметризованное модульное тестирование, расширение модульного тестирования, которое снижает затраты на обслуживание теста.
Ну, вы могли бы взглянуть на PEX - но я считаю, что он изобретает свои собственные данные (он не смотрит ваши существующие тесты, AFAIK).