Slide 1

Slide 1 text

P H P S O F T WA R E Q U A L I T Y T O O L S 2 0 2 2 - 0 7 | O L I V E R K L E E | @ O L I K L E E | M A S T O D O N : O L I K L E E @ C H A O S . S O C I A L

Slide 2

Slide 2 text

A B O U T M E Oliver „Oli“ Klee #bonn #typo3-extension-dev #workshop-teacher #unit-testing-guy #phpstan-guy #typo3-ombudsperson #typo3-quality-assurance-initiative #gamification-working-group #game-cooking #powermetal

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Get an overview over some tools for software quality in PHP and TYPO3 projects Find out how to decide which of these tools to use when.

Slide 5

Slide 5 text

T H E R E A R E N O S T U P I D Q U E S T I O N S .

Slide 6

Slide 6 text

C H E E S E

Slide 7

Slide 7 text

T H E S W I S S C H E E S E M O D E L https://upload.wikimedia.org/wikipedia/commons/3/36/SwissCheese_Respiratory_Virus_Interventions-ver3.0.png

Slide 8

Slide 8 text

T Y P E S O F C H E E S E F O R S O F T WA R E Q U A L I T Y static analysis (syntax, style, types …) dynamic tests (unit, functional, …) code reviews (by humans)

Slide 9

Slide 9 text

C H O O S I N G T O O L S F O R S O F T WA R E Q U A L I T Y M o re i s b ette r. D o n ot d u p licate. P H P S ta n v s. 
 Ps a l m C h e ck w h at yo u h a v e. S te a l f ro m T Y P O 3.

Slide 10

Slide 10 text

C L A S S E S O F T O O L S F O R S O F T WA R E Q U A L I T Y 🚀 
 f i re a n d fo rg et exa m p le : P H P 
 C S F i xe r 🐿 
 s lo w ly f i x e v e r y t h i n g exa m p le : 
 P H P S ta n 🏋 
 co n sta nt ly d o it exa m p le : 
 co d e re v i e w s 🛠 
 s e l f - m a d e

Slide 11

Slide 11 text

T Y P O 3 C O R E : C O D E R E V I E W S 🏋 re v i e w 
 by re a d i n g 🏋 v e r if y 
 by m a n u a l te st i n g

Slide 12

Slide 12 text

T Y P O 3 C O R E : B U I L D M AT R I X A N D S Y S T E M CI runner GitLab CI PHP versions 7.4/8.1–8.2 test run order fixed, randomized Composer dependencies lowest, highest, locked DMBS MySQL, MariaDB, Postgres, SQLite

Slide 13

Slide 13 text

T Y P O 3 C O R E : D Y N A M I C T E S T S Test Type Tool Language 🏋 unit tests PHPUnit PHP 🏋 functional tests PHPUnit PHP 🏋 acceptance tests 
 (end-to-end tests) Codeception PHP

Slide 14

Slide 14 text

T Y P O 3 C O R E : S TAT I C C O D E T O O L S Tool Type Tool Language 🚀 code autoformatter, 
 style checker PHP CS Fixer PHP 🚀 IDE settings .editorcon fi g all 🚀 TYPO3 coding standards Composer package

Slide 15

Slide 15 text

T Y P O 3 C O R E : S TAT I C C O D E T O O L S Tool Type Tool Language 🚀 syntax checker Lint: php -l PHP 🚀 style checker Stylelint SCSS 🚀 style checker ESLint TypeScript 🐿 type checker PHPStan PHP

Slide 16

Slide 16 text

T Y P O 3 C O R E : 🛠 H O M E G R O W N T O O L S Check Type Language/Tool 🚀 PHPDoc annotation PHP 🚀 PSR-4 namespaces PHP 🚀 duplicate exception codes PHP

Slide 17

Slide 17 text

T Y P O 3 C O R E : 🛠 H O M E G R O W N T O O L S Check Type Language/Tool 🚀 UTF-8 byte order marks (BOM) all text files 🚀 maximum file path length all files 🚀 git file permissions git 🚀 git submodules git

Slide 18

Slide 18 text

T Y P O 3 C O R E : 🛠 H O M E G R O W N T O O L S Check Type Language/Tool 🚀 ReST file structure ReST 🚀 extension scanner entries vs. changelog ReST 🚀 build & compare artifacts SCSS/CSS 🚀 build & compare artifacts TypeScript/JavaScript

Slide 19

Slide 19 text

T Y P O 3 C O R E : 🛠 H O M E G R O W N T O O L S Check Type Language/Tool 🚀 composer.json of monorepo 
 vs. system extensions Composer 🚀 file indentation against .editorcon fi g HTML

Slide 20

Slide 20 text

T Y P O 3 T E A E X A M P L E E X T E N S I O N : T O O L S Tool Type Tool Language/Ecosystem 🚀 CI runner GitHub Actions – 🚀 dependency updater Dependabot Composer, npm 🚀 TER release Tailor TER 🚀 Code coverage Coveralls PHPUnit

Slide 21

Slide 21 text

T Y P O 3 T E A E X A M P L E E X T E N S I O N : T O O L S Tool Type Tool Language/Ecosystem 🚀 syntax & style JSON Lint JSON 🚀 syntax & style TypoScript Lint TypoScript 🚀 syntax & style YAML Lint YAML 🚀 syntax & style PHP_CodeSniffer PHP

Slide 22

Slide 22 text

T Y P O 3 T E A E X A M P L E E X T E N S I O N : T O O L S Tool Type Tool Language/Ecosystem 🚀 syntax & style Prettier JavaScript 🚀 syntax & structure XLIFF Lint XLIFF 🚀 duplicate code PHPCPD PHP

Slide 23

Slide 23 text

H O N O R A B L E M E N T I O N S Tool Type Tool Language/Ecosystem 🐿 type schecker Phan PHP 🐿 type checker Psalm PHP 🐿 taint analysis (security) Psalm PHP 🐿 strict type checker 😉 strict rules PHPStan

Slide 24

Slide 24 text

H O N O R A B L E M E N T I O N S Tool Type Tool Language/Ecosystem 🐿 code metrics PHPMD PHP 🐿 mutation testing Infection PHPUnit 🐿 Fuzzing PHP Fuzzer PHPUnit 🐿 type checker PHP Inspections PhpStorm

Slide 25

Slide 25 text

H O N O R A B L E M E N T I O N S Tool Type Tool Language/Ecosystem 🚀 PHP compatibility compatibility rules PHP_CodeSniffer 🐿 auto-refactorings Rector PHP 🐿 TYPO3 upgrades TYPO3Scan TYPO3

Slide 26

Slide 26 text

H O N O R A B L E M E N T I O N S Tool Type Tool Language/Ecosystem 🏋 acceptance tests Cypress JavaScript 🏋 unit tests Cypress JavaScript 🏋 unit tests Jest JavaScript 🏋 BDD Behat PHP

Slide 27

Slide 27 text

H O N O R A B L E M E N T I O N S Tool Type Tool Language/Ecosystem 🚀 security Composer audit Composer 2.4 🚀 security npm audit npm 🐿 accessibility axe Chrome 🏋 performance Lighthouse Chrome

Slide 28

Slide 28 text

T O B E T T E R S O F T WA R E ! 2 0 2 2 - 0 7 | O L I V E R K L E E | @ O L I K L E E | M A S T O D O N : O L I K L E E @ C H A O S . S O C I A L