Правильный код
Инструменты борьбы с «говно-кодом»
Часто программистам приходится поддерживать и развивать системы, созданные не ими. Чужой код тяжело «читать» и «понимать», особенно если автор кода не позаботился об это во время его написания.
С плохим кодом можно смирится и жить на «бомбе замедленного действия», а можно его переписать. Качественное улучшение кода без изменения функционального поведения ПО называется рефактрониг (refactoring).
Прежде чем менять код, необходимо удостоверится в том, что изменения не повлекут за собой потерю работоспособности ПО. В идеале до проведения рефакторинга нужно написать модульные и функциональные тесты. Запуская пакет тестов после каждого изменения, вы будите уверены в том, что ваши изменения не повредили работоспособности ПО.
Если же код очень большой, плохо структурированный с сильными зависимостями, придется ограничится функциональными тестами, так как написать модульные тесты будет тяжело.
Начать чистить код стоит с удаления копипастов — одинаковых кусков кода, скопированных символ в символ в сотни мест кода.
Каждый, даже начинающий программист знает, что часто используемый код нужно выносить в отдельные функции (методы). Но на практике многие забывают, такое, казалось бы совсем простое правило. Когда возникает потребность в повторном использовании кода, программист зачастую просто копирует кусок из одно места в другое. В последствии, если в такой повторяющийся кусок кода понадобится внести изменения, вносить их придется в те самые сотню мест, куда этот код был скопирован. А вспомните ли вы завтра все места, куда этот кусок кода был скопипастен?
Найти повторяющиеся куски кода поможет утилита Себастьяна Бергмана (создателя phpUnit) - phpcpd.
Замена найденных повторных использований кода на вызовы методов:
- сократит объем кода
- повысит читабельность кода
- повысит гибкость и расширяемость ПО
Сократить объем кода так же поможет другая утилита — phpdcd, которая находит неиспользуемые устаревшие методы и классы. Прежде чем удалять найденные якобы не используемые методы, советую проверить их использование вручную. Врятли какая утилита сможет обнаружить динамическое формирование имени метода :) Если вы используете какой либо фреимворк, следует так же учесть, что у утилиты проблемы с определением использования экшенов и шаблонизаторов.
А для оценки читабельности кода и выявления сильно замудренных конструкций подойдет утилита phpmd. Читать конструкции с множественными вложенными условными операторами и прочими ветвлениями крайне тяжело. Хорошим тоном в программировании считается разделение таких ветвлений на отдельные методы. Код становится компактным и читабельным. Его легко отлаживать, поддерживать и расширять.
Если ПО — это большая, постоянно расширяемая система, то бороться за чистоту кода нужно регулярно. Регулярный обзор и улучшение кода позволят сделать его по-настоящему эффективным и продуктивным.