Рефакторинг: инструменты борьбы с «говно-кодом»

10 января, 2014

Часто программистам приходится поддерживать и развивать системы, созданные не ими. Чужой код тяжело «читать» и «понимать», особенно если автор кода не позаботился об это во время его написания.

С плохим кодом можно смирится и жить на «бомбе замедленного действия», а можно его переписать. Качественное улучшение кода без изменения функционального поведения ПО называется рефакторинг (refactoring).

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

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

Начать чистить код стоит с удаления копипастов — одинаковых кусков кода, скопированных символ в символ в сотни мест кода.

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

Найти повторяющиеся куски кода поможет утилита Себастьяна Бергмана (создателя phpUnit) — phpcpd.

Замена найденных повторных использований кода на вызовы методов:

  • сократит объем кода
  • повысит читабельность кода
  • повысит гибкость и расширяемость ПО

Сократить объем кода так же поможет другая утилита — phpdcd, которая находит неиспользуемые устаревшие методы и классы. Прежде чем удалять найденные якобы не используемые методы, советую проверить их использование вручную. Врятли какая утилита сможет обнаружить динамическое формирование имени метода 🙂 Если вы используете какой либо фреимворк, следует так же учесть, что у утилиты проблемы с определением использования экшенов и шаблонизаторов.

А для оценки читабельности кода и выявления сильно замудренных конструкций подойдет утилита phpmd. Читать конструкции с множественными вложенными условными операторами и прочими ветвлениями крайне тяжело. Хорошим тоном в программировании считается разделение таких ветвлений на отдельные методы. Код становится компактным и читабельным. Его легко отлаживать, поддерживать и расширять.

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



Оставить комментарий

3 комментария »

    Denis

    Здорово)


    roe

    есть старый проекте yii-1 выкидывает исключение
    [InvalidArgumentException]
    The «/protected/controllers» directory does not exist.

    как правильно сделать что бы проверить например: контроллеры
    делал по разному, например — так
    phpcpd /protected/controllers
    Спасибо

      Developer

      Путь к папке должен быть абсолютный, запустите в консоле «pwd» чтобы узнать польный путь до той папки в которой вы сейчас находитесь


Оставить комментарий:









Копирование материалов разрешено при наличии активной ссылки на источник