Как проверить, что я ничего не сломал при рефакторинге? - PullRequest
3 голосов
/ 20 декабря 2009

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

Я планирую провести рефакторинг некоторого довольно изолированного кода, поэтому мне не нужно проверять всю программу, только области, которыеЯ работаю над.

Для контекста, код, над которым я работаю, написан на C / C ++, а я работаю в Linux с GCC и VIM.

Ответы [ 5 ]

10 голосов
/ 20 декабря 2009

gcov предоставит вам информацию о покрытии для ваших модульных тестов.

Трудно ответить на ваш вопрос точно, не зная больше о рефакторингах, которые вы планируете выполнить.

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

Ссылка: Инструмент покрытия GNU - краткое руководство

7 голосов
/ 20 декабря 2009

Нет «простого» способа гарантировать, что функциональность не была изменена. Вы должны пройти полные юнит-тесты, которые охватывают все возможности. Невозможно протестировать абсолютно все, но вы можете убедиться, что ваши наиболее важные пользовательские случаи прошли тщательные тесты.

Вы также можете использовать инструмент покрытия, чтобы обеспечить хорошее тестовое покрытие:

http://covtool.sourceforge.net/

5 голосов
/ 20 декабря 2009

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

2 голосов
/ 20 декабря 2009

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

1 голос
/ 20 декабря 2009

Я не уверен, какую именно платформу вы выбрали, но рассматривали ли вы инструменты покрытия кода, такие как Bullseye . Он не предоставит вам анализ всей функциональности (и, если она отклонится), но поможет вам убедиться, что ваши тесты адекватно работают с вашими целевыми библиотеками. Это коммерческие приложения, но я знаю, что есть аналогичные версии OSS для других языков, могут быть бесплатные лицензии, если они вам нужны.

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