SlideShare une entreprise Scribd logo
1  sur  26
Повышаем качество 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-6
http://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://www.phptherightway.com/
Спасибо за внимание
Александр Махомет
http://twitter.com/amahomet
http://podumaem.com/contacts
http://fwdays.com
http://zendframework.ru

Contenu connexe

Tendances

Crucible или почему для Code Review нужна не только голова, но и инструмент
Crucible или почему для Code Review нужна не только голова, но и инструментCrucible или почему для Code Review нужна не только голова, но и инструмент
Crucible или почему для Code Review нужна не только голова, но и инструмент
Maxim Kuzmich
 
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QAFest
 
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
Омские ИТ-субботники
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
 

Tendances (20)

Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптов
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
 
Crucible или почему для Code Review нужна не только голова, но и инструмент
Crucible или почему для Code Review нужна не только голова, но и инструментCrucible или почему для Code Review нужна не только голова, но и инструмент
Crucible или почему для Code Review нужна не только голова, но и инструмент
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
 
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
 
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
 
Особенности тестирования аудио\видео интерфейсов
Особенности тестирования аудио\видео интерфейсовОсобенности тестирования аудио\видео интерфейсов
Особенности тестирования аудио\видео интерфейсов
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Тестирование инсталляторов
Тестирование инсталляторовТестирование инсталляторов
Тестирование инсталляторов
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 
Построение процесса тестирования производительности игрового клиента
Построение процесса тестирования производительности игрового клиентаПостроение процесса тестирования производительности игрового клиента
Построение процесса тестирования производительности игрового клиента
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web api
 
Scrum глазами тестировщика или как создать стратегию для любой задачи
Scrum глазами тестировщика или как создать стратегию для любой задачиScrum глазами тестировщика или как создать стратегию для любой задачи
Scrum глазами тестировщика или как создать стратегию для любой задачи
 

Similaire à Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech Hangout - 2014.04.12

Oleksandr Tolstykh "Quality. Android quality"
Oleksandr Tolstykh "Quality. Android quality"Oleksandr Tolstykh "Quality. Android quality"
Oleksandr Tolstykh "Quality. Android quality"
IT Event
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
avokin
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
Gleb Rybalko
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)
 
Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...
tabtabus
 
Контроль за качеством кода
Контроль за качеством кодаКонтроль за качеством кода
Контроль за качеством кода
Кирилл Борисов
 

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

Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кода
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Oleksandr Tolstykh "Quality. Android quality"
Oleksandr Tolstykh "Quality. Android quality"Oleksandr Tolstykh "Quality. Android quality"
Oleksandr Tolstykh "Quality. Android quality"
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
 
Улучшить KPI в два раза? Сделано!
Улучшить KPI в два раза? Сделано!Улучшить KPI в два раза? Сделано!
Улучшить KPI в два раза? Сделано!
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
 
Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
 
Контроль за качеством кода
Контроль за качеством кодаКонтроль за качеством кода
Контроль за качеством кода
 
Инструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективныеИнструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективные
 
Enter: code style
Enter: code styleEnter: code style
Enter: code style
 
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере BadooРИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
 
Разработка качественного ПО
Разработка качественного ПОРазработка качественного ПО
Разработка качественного ПО
 

Plus de Innovecs

Plus de Innovecs (20)

Building Efficient and High Performing iLottery Solutions
Building Efficient and High Performing iLottery SolutionsBuilding Efficient and High Performing iLottery Solutions
Building Efficient and High Performing iLottery Solutions
 
Innovecs Meetup Lifestory
Innovecs Meetup LifestoryInnovecs Meetup Lifestory
Innovecs Meetup Lifestory
 
Подходы и технологии в React Redux
Подходы и технологии в React ReduxПодходы и технологии в React Redux
Подходы и технологии в React Redux
 
Redux vs RxJS vs Mobx в связке с React
Redux vs RxJS vs Mobx в связке с ReactRedux vs RxJS vs Mobx в связке с React
Redux vs RxJS vs Mobx в связке с React
 
React & Redux (Lazarev)
React & Redux (Lazarev)React & Redux (Lazarev)
React & Redux (Lazarev)
 
Web Platform for Fashion Shop
Web Platform for Fashion ShopWeb Platform for Fashion Shop
Web Platform for Fashion Shop
 
Programmatic Advertising Platform
Programmatic Advertising PlatformProgrammatic Advertising Platform
Programmatic Advertising Platform
 
Multimedia Newsroom
Multimedia NewsroomMultimedia Newsroom
Multimedia Newsroom
 
Media Buying Platform (DSP+DPM)
Media Buying Platform (DSP+DPM)Media Buying Platform (DSP+DPM)
Media Buying Platform (DSP+DPM)
 
Web-based Shipment Application
Web-based Shipment ApplicationWeb-based Shipment Application
Web-based Shipment Application
 
Digital Trading Platform
Digital Trading PlatformDigital Trading Platform
Digital Trading Platform
 
Mobile Insurance Agent
Mobile Insurance AgentMobile Insurance Agent
Mobile Insurance Agent
 
Online Learning Platform
Online Learning PlatformOnline Learning Platform
Online Learning Platform
 
Client Bank
Client BankClient Bank
Client Bank
 
Fertility Tracking App
Fertility Tracking AppFertility Tracking App
Fertility Tracking App
 
Warranty Wallet App
Warranty Wallet AppWarranty Wallet App
Warranty Wallet App
 
Online Bingo Game
Online Bingo GameOnline Bingo Game
Online Bingo Game
 
Secure Messenger
Secure MessengerSecure Messenger
Secure Messenger
 
Search Data Platform
Search Data PlatformSearch Data Platform
Search Data Platform
 
Website Builder for Insurance Agents
Website Builder for Insurance AgentsWebsite Builder for Insurance Agents
Website Builder for Insurance Agents
 

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

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