Transcript
Page 1: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Повышаем качество PHP кода с помощью инструментов и методик

Александр Махомет @amahomet

Page 2: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Что я сделал для хип-хопа PHP в свои годы

• 10 лет PHP девелопмента

• Product architect http://odesk.com (alexa.com rank 409)

• Основатель http://zendframework.ru

• Организатор http://frameworksdays.com

Page 3: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Стандарты• Кодирования

PSR-0, PSR-1, PSR-2 | PSR-3, PSR-4, PSR-5, PSR-6http://sideeffect.kr/popularconvention/#php (Какие стандарты популярны на github)

• Наименования

• Документирования

• Тестирования

• Понятный и знакомый код

• Легче поддается анализу и рефакторингу

• Меньше конфликтов

Page 4: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Анализаторы кода

• PHP_CodeSniffer- Большое количество правил- PSR1, PSR2 из коробки- Гибкая настройка

- Большое количество отчетов в различных форматах

• PHPMD

• PHP-Analyzer

• PHPLint

Page 5: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Еще анализаторов

• PHPDependСтроим метрики и графики

• Pfff tools от facebook

Набор различных инструментов

• PHPQaTools

Готовый набор от Sebastian Bergmann

• PHP Parser

Парсер php от Никиты Попова

• security.sensiolabs.org

Безопасны ли ваши зависимости? Google Gruyere + OWASP WebGoat

• PHPCPDБоримся с копипастом

• PHPDCDНаходим мертвый код

• PHPLOCИзмеряем проект

Page 6: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Legacy code

Что делать если мы получили проект в наследие?

• PHP-CS-Fixer

• PHP_CodeSniffer 2.0

• PHP-Analyzer

Page 7: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

IDE

• PHPStorm, NetBeans, Eclypse

• Sublime, Vim

• Анализ кода на лету

• Поддержка стандартов кодирования

• Проверка орфографии

• Интеграция со сторонними инструментами

Page 8: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

PHPStorm

Page 9: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Git hooks

• Client-Side Hooks- pre-commit

• Server-Side Hooks- pre-receive

- post-receive

Еще хуков

Page 10: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Pre-commit hook

• Проверка php синтаксиса

• Интеграция статических анализаторов

• Запуск модульных тестов

Можем проигнорировать с помощью

--no-verify

Page 11: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Pre-commit hook + phpcs

• Различные уровни ошибок- Good code

- Warnings

- Errors

- Syntax error

• Игнорирование директорий

• Фильтрация по расширению файлов

Page 12: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Pre-commit + phpcs = Accepted

Page 13: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Pre-commit + phpcs = Rejected

Page 14: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Server side hooks

• Уведомление на e-mail

• Полное отклонение коммита

- pre-receive

- post-receive

Page 15: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Continuous integration

• Запуск модульных тестов

• Интеграция с инструментами

- PHP_CodeSniffer

- PHPMD

Page 16: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Sonar

• Благодаря интеграции с рядом инструментов предоставляет множество отчетов и метрик вашего проекта

• Количество кода, функций, классов

• Количество нарушений в коде

• Количество дублированного кода

• Покрытие тестами

Позволяет наблюдать динамику улучшения вашего проекта со временем

Page 17: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Sonar in action

Page 18: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Инструменты хороши, пора поговорить о методиках

Page 19: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Code Review

• Позволяет находить ошибки в коде на ранних этапах

• Повышает уровень разработчиков

• Дисциплинирует

• Распространяет знания о системе

• Заставляет разработчика делать более декомпозированные, понятные коммиты что в конечном итоге влияет на качество кода и возможности его анализа в дальнейшем

- Дополнительные ресурсы, то есть время разработчиков- Возможны конфликты.

Page 20: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Реализация code review

• Эй Семен, подойди посмотри код,

• Используя Web интерфейс CVS системы.

• Внешние не интегрированные инструменты вроде codereview.google.com

• Pull requests way. - Интегрировать автоматические средства проверки пул реквестов

Page 21: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Рекомендации по code review

• Создать список того на что стоит обращать внимание в code review. Создать best practices по процессу

• Понимать и донести до всех что code review это не критика человека а критика его кода

• Проводить ревью своевременно, не допускать ситуации когда приходится проверять мегабайты кода.

Page 22: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Code review checklist

• Решает ли код поставленную задачу

• Соответствует ли код принятым стандартам проекта

• Покрыт ли код юнит тестами

• Не содержит ли код отладочной информации или мертвого кода

• Безопасен ли код

• Использует ли он принятые best practices проекта.

Page 23: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Еще методики

• Test Driven Development (TDD)

• Парное программирование

• Scrum

Page 24: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Психологический климат

Помимо технических методик по улучшению кода существую также другие, которые следует учитывать. Например психологический климат в коллективе, к нему относятся лидерские качества руководителя команды и особенности сработанности и сплоченности коллектива.

Психологический климат в коллективе это высокий уровень мотивации в коллективе, общая цель в работе, комфорт общения в коллективе, эффективные коммуникации, график работы и степень занятости

МоральЧем более гармоничные отношения в команде тем лучше это для

сработанности, коммуникаций и в итоге для качества вашего кода

Page 25: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Четкий сайт

http://www.phptherightway.com/

Page 26: Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Спасибо за внимание

Александр Махомет

http://twitter.com/amahomet

http://podumaem.com/contacts

http://fwdays.com

http://zendframework.ru


Top Related