11# PhpQuality - Analyseur statique PHP
22
33> Analyseur statique PHP distribué via Docker, conçu pour remplacer ` phpmetrics/phpmetrics ` (désormais non maintenu).
4- > Analyse votre code PHP et génère des rapports détaillés sur la complexité, la maintenabilité, le couplage et bien plus encore .
4+ > Analyse votre code PHP et génère des rapports détaillés sur la complexité, la maintenabilité, le couplage, l'architecture et la couverture de tests .
55
6+ ** Version:** 1.1.0
67** Auteur:** [ Pascal CESCON] ( https://moi.ruedesjasses.fr )
78** GitHub:** [ amoifr/PhpQuality] ( https://github.com/amoifr/PhpQuality )
89
910---
1011
1112## Fonctionnalités
1213
13- ### Métriques v0.1
14+ ### Métriques de code v0.1
1415
1516| Métrique | Description |
1617| ----------| -------------|
3233| ** Matrice de dépendances** | Vue matricielle des dépendances entre couches |
3334| ** Score d'architecture** | Score global 0-100 basé sur les violations |
3435
36+ ### Couverture de tests v1.1 (NOUVEAU)
37+
38+ | Fonctionnalité | Description |
39+ | ----------------| -------------|
40+ | ** Couverture des lignes** | Pourcentage de lignes de code couvertes par les tests |
41+ | ** Couverture des méthodes** | Pourcentage de méthodes testées |
42+ | ** Couverture des classes** | Pourcentage de classes testées |
43+ | ** Couverture par package** | Analyse de couverture par namespace/package |
44+ | ** Couverture par fichier** | Détail de couverture pour chaque fichier |
45+ | ** Score de couverture** | Note A-F basée sur le pourcentage de couverture |
46+
47+ ### Hall of Fame / Hall of Shame v0.3
48+
49+ | Fonctionnalité | Description |
50+ | ----------------| -------------|
51+ | ** Analyse git blame** | Statistiques par auteur via git blame |
52+ | ** Score composite** | Score combinant MI et CCN par contributeur |
53+ | ** Hall of Fame** | Top contributeurs en qualité de code |
54+ | ** Hall of Shame** | Contributeurs dont le code nécessite de l'attention |
55+
3556### Rapports HTML v0.2
3657
3758Le rapport HTML multi-pages inclut :
@@ -45,8 +66,9 @@ Le rapport HTML multi-pages inclut :
4566| ** LCOM** | Cohésion par classe |
4667| ** LOC** | Lignes de code par fichier |
4768| ** Halstead** | Métriques de complexité avancées |
48- | ** Analysis** | Analyse multi-dimensionnelle et arbre du code |
69+ | ** Analysis** | Analyse multi-dimensionnelle, arbre du code, contributeurs |
4970| ** Architecture** | Graphe de dépendances, violations SOLID, matrice de dépendances |
71+ | ** Coverage** | Couverture de tests par fichier et package |
5072| ** Dependencies** | Analyse des dépendances Composer |
5173
5274### Types de projets supportés
@@ -129,6 +151,30 @@ docker run --rm \
129151 analyze --source=/project/app/code/Vendor/Module --type=magento
130152```
131153
154+ ### Avec couverture de tests
155+
156+ ``` bash
157+ # Générer d'abord le rapport de couverture avec PHPUnit
158+ ./vendor/bin/phpunit --coverage-clover coverage.xml
159+
160+ # Puis analyser avec la couverture
161+ docker run --rm \
162+ -v $( pwd) :/project \
163+ -v $( pwd) /reports:/reports \
164+ amoifr13/phpquality \
165+ analyze --source=/project/src --coverage=/project/coverage.xml --report-html=/reports
166+ ```
167+
168+ ### Avec Hall of Fame/Shame (git blame)
169+
170+ ``` bash
171+ docker run --rm \
172+ -v $( pwd) :/project \
173+ -v $( pwd) /reports:/reports \
174+ amoifr13/phpquality \
175+ analyze --source=/project/src --git-blame --report-html=/reports
176+ ```
177+
132178### Afficher le résumé dans le terminal uniquement
133179
134180``` bash
@@ -177,7 +223,11 @@ docker run --rm \
177223| ` --no-html ` | Ne pas générer le rapport HTML |
178224| ` --fail-on-violation ` | Échouer si des violations sont détectées |
179225| ` --git-blame ` | Activer l'analyse git blame pour Hall of Fame/Shame (plus lent) |
226+ | ` --coverage ` , ` -c ` | Chemin vers le fichier de couverture Clover XML |
227+ | ` --project-name ` , ` -p ` | Nom du projet à afficher dans les titres du rapport |
228+ | ` --lang ` , ` -l ` | Langue du rapport (en, fr, de, es, it, pt, nl, pl, ru, ja, zh, ko...) |
180229| ` --list-types ` | Lister tous les types de projets disponibles |
230+ | ` --list-langs ` | Lister toutes les langues disponibles |
181231
182232---
183233
@@ -205,6 +255,8 @@ phpquality/
205255│ │ │ │ ├── LayerDetector.php
206256│ │ │ │ └── SolidAnalyzer.php
207257│ │ │ ├── ArchitectureAnalyzer.php
258+ │ │ │ ├── CoverageAnalyzer.php
259+ │ │ │ ├── GitBlameAnalyzer.php
208260│ │ │ ├── Metric/
209261│ │ │ │ └── MaintainabilityIndex.php
210262│ │ │ ├── ProjectType/
@@ -216,6 +268,11 @@ phpquality/
216268│ │ │ ├── FileAnalyzer.php
217269│ │ │ ├── ProjectAnalyzer.php
218270│ │ │ └── Result/
271+ │ │ │ ├── ProjectResult.php
272+ │ │ │ ├── FileResult.php
273+ │ │ │ ├── ClassResult.php
274+ │ │ │ ├── ArchitectureResult.php
275+ │ │ │ └── CoverageResult.php
219276│ │ ├── Command/
220277│ │ │ └── AnalyzeCommand.php
221278│ │ └── Report/
@@ -233,7 +290,12 @@ phpquality/
233290│ │ ├── halstead.html.twig
234291│ │ ├── analysis.html.twig
235292│ │ ├── architecture.html.twig
293+ │ │ ├── coverage.html.twig
236294│ │ └── dependencies.html.twig
295+ │ ├── translations/
296+ │ │ ├── messages.en.yaml
297+ │ │ ├── messages.fr.yaml
298+ │ │ └── ... (30+ langues)
237299│ └── composer.json
238300└── README.md
239301```
@@ -247,7 +309,7 @@ phpquality/
247309| Langage | PHP 8.3 |
248310| Framework | Symfony 7.x |
249311| Parseur AST | [ nikic/php-parser] ( https://github.com/nikic/PHP-Parser ) |
250- | Rendu HTML | Twig + Chart.js |
312+ | Rendu HTML | Twig + Chart.js + D3.js |
251313| CLI | Symfony Console |
252314| Image de base | ` php:8.3-cli-alpine ` |
253315| Gestion des dépendances | Composer |
@@ -296,6 +358,16 @@ phpquality/
296358| 30-49 | D | Architecture à améliorer |
297359| 0-29 | F | Architecture critique |
298360
361+ ### Test Coverage
362+
363+ | Score | Rating | Interprétation |
364+ | -------| --------| ----------------|
365+ | 80-100% | A | Excellente couverture |
366+ | 60-79% | B | Bonne couverture |
367+ | 40-59% | C | Couverture modérée |
368+ | 20-39% | D | Faible couverture |
369+ | 0-19% | F | Couverture critique |
370+
299371### Règles de couches (Clean Architecture)
300372
301373PhpQuality détecte automatiquement les couches et vérifie les règles de dépendances :
@@ -318,15 +390,75 @@ PhpQuality détecte automatiquement les couches et vérifie les règles de dépe
318390
319391---
320392
393+ ## Intégration CI/CD
394+
395+ ### GitHub Actions
396+
397+ ``` yaml
398+ name : Code Quality
399+
400+ on : [push, pull_request]
401+
402+ jobs :
403+ quality :
404+ runs-on : ubuntu-latest
405+ steps :
406+ - uses : actions/checkout@v4
407+
408+ - name : Setup PHP
409+ uses : shivammathur/setup-php@v2
410+ with :
411+ php-version : ' 8.3'
412+ coverage : xdebug
413+
414+ - name : Install dependencies
415+ run : composer install
416+
417+ - name : Run tests with coverage
418+ run : ./vendor/bin/phpunit --coverage-clover coverage.xml
419+
420+ - name : Run PhpQuality
421+ run : |
422+ docker run --rm \
423+ -v ${{ github.workspace }}:/project \
424+ amoifr13/phpquality \
425+ analyze --source=/project/src \
426+ --coverage=/project/coverage.xml \
427+ --fail-on-violation \
428+ --json=/project/phpquality.json
429+
430+ - name : Upload results
431+ uses : actions/upload-artifact@v4
432+ with :
433+ name : phpquality-report
434+ path : phpquality.json
435+ ` ` `
436+
437+ ### GitLab CI
438+
439+ ` ` ` yaml
440+ code-quality :
441+ image : amoifr13/phpquality
442+ script :
443+ - analyze --source=/builds/$CI_PROJECT_PATH/src --coverage=/builds/$CI_PROJECT_PATH/coverage.xml --fail-on-violation
444+ artifacts :
445+ reports :
446+ codequality : phpquality.json
447+ ` ` `
448+
449+ ---
450+
321451## Feuille de route
322452
323453- [x] **v0.1** - Analyse basique : LOC, CCN, MI, LCOM + rapport HTML + types de projets
324454- [x] **v0.2** - Rapport HTML multi-pages avec documentation des métriques
325455- [x] **v0.3** - Analyse multi-dimensionnelle, arbre du code, Hall of Fame/Shame, analyse des dépendances Composer
326456- [x] **v0.4** - Analyse d'architecture (couches, violations SOLID, graphe de dépendances D3.js, dépendances circulaires)
327- - [ ] ** v0.5** - Règles CI configurables, mode ` failIfFound ` , intégration GitHub Actions
328- - [ ] ** v0.6** - Plugin Git, corrélation historique/métriques
329- - [ ] ** v1.0** - Rapport HTML complet (cercles, daltonisme, filtres, groupes)
457+ - [x] **v1.0** - Option git blame, nom de projet personnalisé
458+ - [x] **v1.1** - Analyse de couverture de tests (Clover XML)
459+ - [ ] **v1.2** - Règles CI configurables, seuils personnalisés
460+ - [ ] **v1.3** - Export PDF, comparaison entre versions
461+ - [ ] **v2.0** - Interface web interactive, historique des analyses
330462
331463---
332464
@@ -358,3 +490,4 @@ MIT - voir le fichier [LICENSE](./LICENSE).
358490- [PHP Insights (GitHub)](https://github.com/nunomaduro/phpinsights) - inspiration pour l'analyse de qualité
359491- [SOLID principles (Wikipedia)](https://en.wikipedia.org/wiki/SOLID)
360492- [Clean Architecture - Robert C. Martin](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
493+ - [PHPUnit Code Coverage](https://phpunit.readthedocs.io/en/9.5/code-coverage-analysis.html)
0 commit comments