Часто программистам приходится поддерживать и развивать системы, созданные не ими. Чужой код тяжело «читать» и «понимать», особенно если автор кода не позаботился об это во время его написания.
С плохим кодом можно смирится и жить на «бомбе замедленного действия», а можно его переписать. Качественное улучшение кода без изменения функционального поведения ПО называется рефакторинг (refactoring).
Прежде чем менять код, необходимо удостоверится в том, что изменения не повлекут за собой потерю работоспособности ПО. В идеале до проведения рефакторинга нужно написать модульные и функциональные тесты. Запуская пакет тестов после каждого изменения, вы будите уверены в том, что ваши изменения не повредили работоспособности ПО.
Если же код очень большой, плохо структурированный с сильными зависимостями, придется ограничится функциональными тестами, так как написать модульные тесты будет тяжело.
Начать чистить код стоит с удаления копипастов — одинаковых кусков кода, скопированных символ в символ в сотни мест кода.
Каждый, даже начинающий программист знает, что часто используемый код нужно выносить в отдельные функции (методы). Но на практике многие забывают, такое, казалось бы совсем простое правило. Когда возникает потребность в повторном использовании кода, программист зачастую просто копирует кусок из одно места в другое. В последствии, если в такой повторяющийся кусок кода понадобится внести изменения, вносить их придется в те самые сотню мест, куда этот код был скопирован. А вспомните ли вы завтра все места, куда этот кусок кода был скопипастен?
Найти повторяющиеся куски кода поможет утилита Себастьяна Бергмана (создателя phpUnit) — phpcpd.
Замена найденных повторных использований кода на вызовы методов:
Сократить объем кода так же поможет другая утилита — phpdcd, которая находит неиспользуемые устаревшие методы и классы. Прежде чем удалять найденные якобы не используемые методы, советую проверить их использование вручную. Врятли какая утилита сможет обнаружить динамическое формирование имени метода 🙂 Если вы используете какой либо фреимворк, следует так же учесть, что у утилиты проблемы с определением использования экшенов и шаблонизаторов.
А для оценки читабельности кода и выявления сильно замудренных конструкций подойдет утилита phpmd. Читать конструкции с множественными вложенными условными операторами и прочими ветвлениями крайне тяжело. Хорошим тоном в программировании считается разделение таких ветвлений на отдельные методы. Код становится компактным и читабельным. Его легко отлаживать, поддерживать и расширять.
Если ПО — это большая, постоянно расширяемая система, то бороться за чистоту кода нужно регулярно. Регулярный обзор и улучшение кода позволят сделать его по-настоящему эффективным и продуктивным.
Здорово)
есть старый проекте yii-1 выкидывает исключение
[InvalidArgumentException]
The «/protected/controllers» directory does not exist.
как правильно сделать что бы проверить например: контроллеры
делал по разному, например — так
phpcpd /protected/controllers
Спасибо
Путь к папке должен быть абсолютный, запустите в консоле «pwd» чтобы узнать польный путь до той папки в которой вы сейчас находитесь