logiciel d'analyse statique pour PHP
www.phpmetrics.org - @Halleck45
@Halleck45
plate-forme de supervision de projet web
phpdepend, phploc, messdetector...
Les outils sont supers !
Mais il faut savoir lire leurs rapports
wget https://github.com/Halleck45/PhpMetrics/raw/master/build/phpmetrics.phar
chmod +x phpmetrics.phar
mv phpmetrics.phar /usr/local/bin/phpmetricsbrew install phpmetricscomposer require halleck45/phpmetricsou
ou
phpmetrics \
report-html=report.html \
<dossier-des-sources>Chemin 1
Chemin 2
La classe possède probablement 2 responsabilités
=violation du Single responsability principle
Le PNEU est utilisé par plein de VOITURES
=La classe Pneu a un afferent coupling élévé
Pour être bénéfique aux voitures, le pneu doit être très très stable, résistant et solide
=la classe Pneu doit avoir un CRAP faible, une complexité faible et une couverture forte
La VOITURE utilise un chassis, un frein, des pneus, un moteur...
= la classe Voiture a un efferent coupling élevé
Pour éviter les problèmes de maintenance et d'évolutivité, il doit être possible de changer facilement le modèle du pneu.
=la classe voiture doit avoir une cohésion faible avec ses composants
function foo() {
$a = 1;
$b = array();
if($a == 1) {
foreach($b as $value) {}
}
switch($a) {
case 1:
break;
case 2:
break;
}
}Nombres de points de décisions dans le code
ccn = (1 + 4) = 5
directement lié aux cas de tests unitaires à réaliser
une distance supérieure à 10 est très mauvais signe
La complexité cyclomatique ne tient pas compte:
ccn:(ccn+nb opérateurs)
interval = 5:6
distance = 1
function foo() {
$a = 1;
$b = array();
if($a == 1 ||$a == 2) {
foreach($b as $value) {}
}
switch($a) {
case 1:
break;
case 2:
break;
}
}fournit une note sur :
basée sur les métriques d'Halstead et la complexité cyclomatique
> 85
Très bon
> 65
code maintenable
< 65
code peu évolutif / maintenable
Basé sur:
Est ramenée au volume de code logique pour fournir un note relative
Fournit une vue générale de la complexité du projet
Selon le rôle / la couche du composant
ccn(controlleur) != ccn(classe métier)
http://blog.lepine.pro/industrialisation/bornes-pour-les-indicateurs-et-metriques/
--failure-condition="sum.loc > 8000 or avg.mi < 65"
# code 1 si plus de 8000 lignes de code au total ou si
# l'indice de maintenabilité moyen est inférieur à 65
--config=<fichier>
# utilisatin d'un fichier yaml
# recherche par défaut le fichier .phpmetrics[.dist].yml
--ignore-errors
# sera nécessaire si vous parsez du code PHP7 avec un moteur PHP5
--excluded-dirs="vendor|tests"
# par défaut les dépendances et les tests sont ignorés
self-update
# mettre à jour le PharVous aurez besoin du plugin Jenkins "Violations"
Vous aurez besoin du plugin Jenkins "Plot"
Intégration à Symfony2, ZendServer, PhpStorm, npm, docker...
composer require halleck45/phpmetrics-collector-bundle https://github.com/Halleck45/DesignPatternDetector
@Halleck45
https://goo.gl/l1Lkgk