Мы все пишем элегантный код в первый раз, который никогда не нужно менять, верно? И я нет.

Рефакторинг — это просто еще один инструмент в арсенале разработчика. Только недавно я понял, насколько это важный инструмент. Я начал небольшой рефакторинг, который превратился в большой рефакторинг, который превратился в огромный рефакторинг. В конце концов, я был доволен новой архитектурой, но в итоге работы оказалось намного больше, чем я ожидал. Исходя из этого опыта, у меня есть четыре совета, как сделать ваши рефакторинги эффективными и управляемыми.

1. Иметь хорошее тестовое покрытие

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

2. Рефакторинг основной ветки

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

3. Часто держите тесты зелеными

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

4. Помните о своей цели

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

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

Первоначально опубликовано на spin.atomicobject.com 13 августа 2016 г.