Code quality control: Lint, CS, 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)
![](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)
About me
- Eugene Zenko
- Tech Lead (PHP) @ Colours (Den Bosch, Rotterdam)
- Drupal 5-8
- Football, books, music, rock!
- 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)
Assumptions
- Quality is not a variable
2. Anything that can go wrong will go wrong (Murphy's law)
3. A man is (a little bit) lazy
3. A man is (a little bit) non-conformist
![](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 problems
- Syntax errors
2. Not following code standards, best practices, different approach to code formatting in the same team
3. Structural problems: not secure, not performing, not maintainable code
![](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)
Harm
- Psychological
2. Reputational
3. Time
![](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)
What to do?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4608218/homer-thinking.jpg)
Processes
Instruments
![](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)
Built-in native functionality
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)
Automatic code analysis on violation of the coding standards
- Out of the box - PSR1, PEAR, PSR2, MySource, Squiz, PHPCS, Zend
- Available - Drupal и DrupalPractice
- Integrates with PHPStorm
- Possible to define own standards
![](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
- Automatically generates diff between source file and coding standard
- Automatically applies it to the source file
![](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)
- Static analysis PHP5.2-7.2
- Code compatibility with PHP version
- Security
- Performance
- Complexity and maintainability
- Automatic documentation
- >700 rules, grouped into 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)
PHP Mess Detector
- Simple tool, no dependencies, just phar
- 6 rulesets: clean code, code size, naming, unused code, etc.
- Simple configuration - xml file with a list of rules to be used
- Fast
![](https://s3.amazonaws.com/media-p.slid.es/uploads/830369/images/4767463/phpmd-logo.png)
![](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)
Yes, but...
How many people will run this beautiful tools during daily routine?
![](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)
Idea
- Let's do more code reviews!
- Let's punish harder the people sabotaging the agreements!
- Let's simply be individually more responsible!
And maybe let's try to automate this somehow?
![](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)
Integration with git
- Using git hooks
- In our particular case - pre-commit (or pre-receive)
![](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)
Example
![](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)
Roadmap?
- Composer package with git hook configuration wizard and necessary dependencies
![](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)
Questions, ideas, suggestions?
Code quality control (English)
By Yauhen Zenko
Code quality control (English)
- 896