Как понять, пишу ли я правильно? Мой код точно хорош? Каждый время от времени задает себе эти вопросы. И на них есть два ответа: первый вы сами ощущаете, насколько с кодом удобно работать, насколько он понятен, легко ли его читать и поддерживать. Второй более объективный: существуют инструменты и методики, которые помогают измерить и улучшить качество кода.
Что бы было легче двигаться, вот небольшая подборка по типам:
Некоторые ошибки кода трудно заметить при обычной работе. PHP — динамический язык, и некоторые несоответствия типов или опечатки не вызывают сразу явной ошибки.
Статические анализаторы читают код и находят такие ситуации:
- Использование методов или свойств, которых не существует;
- Передача аргументов неподходящего типа;
- Использование переменных до их инициализации;
- Фрагменты кода, которые никогда не выполняются.
Примеры инструментов: PHPStan, Psalm.
- PHPStan/Psalm — статический анализ кода, выявление ошибок типов и потенциальных дефектов на этапе разработки.
Инструменты проверки стиля помогают:
- Проверять соответствие стандартам (PSR-12 и другие);
- Автоматически исправлять мелкие ошибки, приводя код к единому стилю.
Примеры инструментов: PHP_CodeSniffer, PHP-CS-Fixer, Laravel Pint.
Тестирование позволяет проверять каждую функцию и её поведение в разных сценариях.
- Модульные тесты проверяют отдельные методы и классы;
- Мутационное тестирование оценивает, насколько тесты эффективны, и выявляет недостатки в покрытии.
Примеры инструментов: PHPUnit, Infection.
По мере роста проекта субъективные ощущения перестают быть достаточными. Метрики дают цифры, которые показывают реальное состояние проекта:
- Сложность методов и классов;
- Дублирование кода;
- Общая структура и объём кода.
Примеры инструментов: phpmetrics, phploc (заброшен!)
Автоматизированные инструменты помогают:
- Обновлять устаревшие конструкции;
- Устранять дублирование;
- Приводить код к современным стандартам.
Пример инструмента: Rector.
Качество кода включает и его безопасность. Менеджеры зависимостей позволяют проверять проекты на наличие известных уязвимостей, быстро выявлять потенциальные риски и управлять обновлениями.
Например команда: composer audit