E S O F T WA R E Q U A L I T Y ? because it’s a promise to out customers because we want to be able to be proud of our work because we’re too old for bad code
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.
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
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
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
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
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
🛠 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
🛠 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
🛠 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
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
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
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 🚀 consistency Normalize Composer
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
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
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
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
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
L E A R G O A L S rule levels for PHPStan and Psalm baseline file (with a blocklist) enable rules one after the other write tests only when you change the code cover one class per week with tests
C H A L L E N G E S Which rule level can we reach? How high can we get the code coverage? How few mutations will escape our tests? How much can we code in a test-driven way? Which things can we automate?
U R PA R T Y make use of superpowers in your team work around weaknesses in your team let the computer check the small things celebrate your achievements