improvement of php code quality (by alexander makhomet) - web back-end tech hangout - 2014.04.12

26
Повышаем качество PHP кода с помощью инструментов и методик Александр Махомет @amahomet

Upload: innovecs

Post on 15-Jan-2015

211 views

Category:

Education


0 download

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

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