improvement of php code quality (by alexander makhomet) - web back-end tech hangout - 2014.04.12
DESCRIPTION
On Saturday, 12 of April, regular quarterly meeting of Tech Hangout Community took place in Creative Space 12, the cultural and educational center based in Kiev! The event was held under the motto «One day of inspiring talks on Web Back-End». This time Python, Ruby and PHP developers gathered to make peace and learn the Force. *TECH HANGOUT COMMUNITY was found in 2012 by the developers for the developers for knowledge and experience sharing. Such meetings are the part of Innovecs Educational Project that actively develops sphere of internal trainings and knowledge exchange program among professionals. This Initiative was born within the walls of Innovecs and has proved to be extremely popular and high-demand. In a short period of time it gained its own Facebook group with more than 90 members, blog with more than 40 posts and constant quarterly external meeting of Tech hangout community with more than 80 participants. The concept of the event proposes a 30-minute report on the topic previously defined, and the discussion in a roundtable session format. Join to discuss - https://www.facebook.com/groups/techhangout/TRANSCRIPT
Повышаем качество 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