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