Контроль качества кода: Lint, CS, Exacat
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603412/me.jpg)
Обо мне
- Зенько Евгений
- Tech Lead @ Colours NL
- Drupal 5-8
- Футбол, книги, музыка, угар
- Socials: @zeuty
- Linkedin: yzenko
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Тезисы
- Качество - это не переменная
2. Если какая-нибудь неприятность может произойти, то она обязательно произойдёт (Закон Мёрфи)
3. Человек (немножечко) ленив
3. Человек (немножечко) нонконформист
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Проблемы
- Синтаксические ошибки
2. Несоответствие code standards, best practices, разный подход к форматированию кода в команде
3. Структурные ошибки: небезопасный, непроизводительный, неподдерживаемый код
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Ущерб
- Психологический
2. Репутационный
3. Затраты времени
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Что делать?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4608218/homer-thinking.jpg)
Процессы
Инструменты
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
PHP Lint
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4608796/PHP.png)
Встроенная функциональность
php -l {filename}
Example:
php -l sites/all/modules/custom/with_error.php
PHP Parse error: syntax error, unexpected '?>'
in sites/all/modules/custom/with_error.php on line 4
Errors parsing sites/all/modules/custom/with_error.php
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
PHP Code Sniffer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4611484/php-sniffer-smell.png)
Автоматическая проверка кода на предмет нарушения coding standards
- Из коробки - PSR1, PEAR, PSR2, MySource, Squiz, PHPCS, Zend
- Доступны - Drupal и DrupalPractice
- Интегрируется с PHPStorm
- Возможность создавать свои стандарты
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
PHP Code Beautifier and Fixer
- Автоматически генерирует diff между исходным файлом и стандартом
- Автоматически применяет его к исходному файлу
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Exakat
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4611594/exakat.png)
- Статический анализ PHP5.2-7.2
- Совместимость кода с версией PHP
- Безопасность
- Производительность
- Сложность и поддерживаемость
- Автоматическое документирование
- >700 правил, сгрупированных в Recipes: Security, Performances, Dead code, etc.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Да, но...
Сколько людей будет запускать всё это богатство каждый день?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4611980/zero.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Идея
- Давайте делать больше код ревью!
- Давайте сильнее наказывать врагов саботирующих наши договорённости!
- Давайте просто будем ответственнее!
А может попробуем как-то всё это автоматизировать?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Интеграция с git
- Используем git hooks
- В нашей ситуации precommit
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Что дальше?
- Composer package с конфигуратором git hook, и необходимыми зависимостями
- Стоит ли интегрировать в этот процесс глубокий статический анализ (например, Exakat)?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603378/quality-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4603380/logo_colours_400px_crop_400x400.jpg)
Вопросы, идеи, предложения?
Code quality control (Russian)
By Yauhen Zenko
Code quality control (Russian)
- 1,038