Download - Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12
Повышаем качество PHP кода с помощью инструментов и методик
Александр Махомет @amahomet
Что я сделал для хип-хопа PHP в свои годы
• 10 лет PHP девелопмента
• Product architect http://odesk.com (alexa.com rank 409)
• Основатель http://zendframework.ru
• Организатор http://frameworksdays.com
Стандарты• Кодирования
PSR-0, PSR-1, PSR-2 | PSR-3, PSR-4, PSR-5, PSR-6http://sideeffect.kr/popularconvention/#php (Какие стандарты популярны на github)
• Наименования
• Документирования
• Тестирования
• Понятный и знакомый код
• Легче поддается анализу и рефакторингу
• Меньше конфликтов
Анализаторы кода
• PHP_CodeSniffer- Большое количество правил- PSR1, PSR2 из коробки- Гибкая настройка
- Большое количество отчетов в различных форматах
• PHPMD
• PHP-Analyzer
• PHPLint
Еще анализаторов
• PHPDependСтроим метрики и графики
• Pfff tools от facebook
Набор различных инструментов
• PHPQaTools
Готовый набор от Sebastian Bergmann
• PHP Parser
Парсер php от Никиты Попова
• security.sensiolabs.org
Безопасны ли ваши зависимости? Google Gruyere + OWASP WebGoat
• PHPCPDБоримся с копипастом
• PHPDCDНаходим мертвый код
• PHPLOCИзмеряем проект
Legacy code
Что делать если мы получили проект в наследие?
• PHP-CS-Fixer
• PHP_CodeSniffer 2.0
• PHP-Analyzer
IDE
• PHPStorm, NetBeans, Eclypse
• Sublime, Vim
• Анализ кода на лету
• Поддержка стандартов кодирования
• Проверка орфографии
• Интеграция со сторонними инструментами
PHPStorm
Git hooks
• Client-Side Hooks- pre-commit
• Server-Side Hooks- pre-receive
- post-receive
Еще хуков
Pre-commit hook
• Проверка php синтаксиса
• Интеграция статических анализаторов
• Запуск модульных тестов
Можем проигнорировать с помощью
--no-verify
Pre-commit hook + phpcs
• Различные уровни ошибок- Good code
- Warnings
- Errors
- Syntax error
• Игнорирование директорий
• Фильтрация по расширению файлов
Pre-commit + phpcs = Accepted
Pre-commit + phpcs = Rejected
Server side hooks
• Уведомление на e-mail
• Полное отклонение коммита
- pre-receive
- post-receive
Continuous integration
• Запуск модульных тестов
• Интеграция с инструментами
- PHP_CodeSniffer
- PHPMD
Sonar
• Благодаря интеграции с рядом инструментов предоставляет множество отчетов и метрик вашего проекта
• Количество кода, функций, классов
• Количество нарушений в коде
• Количество дублированного кода
• Покрытие тестами
Позволяет наблюдать динамику улучшения вашего проекта со временем
Sonar in action
Инструменты хороши, пора поговорить о методиках
Code Review
• Позволяет находить ошибки в коде на ранних этапах
• Повышает уровень разработчиков
• Дисциплинирует
• Распространяет знания о системе
• Заставляет разработчика делать более декомпозированные, понятные коммиты что в конечном итоге влияет на качество кода и возможности его анализа в дальнейшем
- Дополнительные ресурсы, то есть время разработчиков- Возможны конфликты.
Реализация code review
• Эй Семен, подойди посмотри код,
• Используя Web интерфейс CVS системы.
• Внешние не интегрированные инструменты вроде codereview.google.com
• Pull requests way. - Интегрировать автоматические средства проверки пул реквестов
Рекомендации по code review
• Создать список того на что стоит обращать внимание в code review. Создать best practices по процессу
• Понимать и донести до всех что code review это не критика человека а критика его кода
• Проводить ревью своевременно, не допускать ситуации когда приходится проверять мегабайты кода.
Code review checklist
• Решает ли код поставленную задачу
• Соответствует ли код принятым стандартам проекта
• Покрыт ли код юнит тестами
• Не содержит ли код отладочной информации или мертвого кода
• Безопасен ли код
• Использует ли он принятые best practices проекта.
Еще методики
• Test Driven Development (TDD)
• Парное программирование
• Scrum
Психологический климат
Помимо технических методик по улучшению кода существую также другие, которые следует учитывать. Например психологический климат в коллективе, к нему относятся лидерские качества руководителя команды и особенности сработанности и сплоченности коллектива.
Психологический климат в коллективе это высокий уровень мотивации в коллективе, общая цель в работе, комфорт общения в коллективе, эффективные коммуникации, график работы и степень занятости
МоральЧем более гармоничные отношения в команде тем лучше это для
сработанности, коммуникаций и в итоге для качества вашего кода
Спасибо за внимание
Александр Махомет
http://twitter.com/amahomet
http://podumaem.com/contacts
http://fwdays.com
http://zendframework.ru