Global Exam
Analyse Statique
C'est quoi ?

Initiation à l'analyse statique
Connaitre les enjeux
Tester les outils
Comprendre les métriques
The Dwight Signal

Des références
Oouhuou - je suis une référence
là
Un fil d'ariane
01-cyclomatic-complexity
ici
C'est quoi ?
L'analyse statique est un examen automatisé du code sans exécution visant à détecter des erreurs potentielles et à évaluer la qualité.
Historique

Stephen C. Johnson
Maurice H. Halstead

Créateur de LINT
Créateur des métriques de Halstead
Des outils
PHP Metrics 💫
PHP Mess Detector
PHPLOC

PHPStan
Larastan
Rector
Des métriques
Volume
Complexity
OOM
Coupling
Des métriques
Volume
Complexity
OOM
Coupling
Nombre de lignes
Répartition du code
Des métriques
Volume
Complexity
OOM
Coupling
Complexité du code
Probabilité de bugs
Des métriques
Volume
Complexity
OOM
Coupling
Métrique sur les composants objets
Des métriques
Volume
Complexity
OOM
Coupling
Relations et couplage des objets
Une métrique est une sonde objective mais ignorante
Elle ne remplace pas l'expertise

Vanity metrics

vanity
Des chiffres qui flattent votre ego
Les métriques doivent vous aider à mieux connaitre votre code
... non à recevoir des sentences
Une métrique doit être analysé en considérant son [???]

Une métrique doit être analysé en considérant son contexte

Tout est une histoire de contexte
c'est une app
imagine
Tout est une histoire de contexte
Système
BDD, machine, framework ...
c'est une app
imagine
Tout est une histoire de contexte
Système
Métier
BDD, machine, framework ...
Règles de calcul, services, actions ...
c'est une app
imagine
Tout est une histoire de contexte
Système
Métier
Applicatif
BDD, machine, framework ...
Règles de calcul, services, actions ...
Routage, contrôleurs, droits ...
c'est une app
imagine
Tout est une histoire de contexte
Système
Métier
Applicatif
Front
BDD, machine, framework ...
Règles de calcul, services, actions ...
Routage, contrôleurs, droits ...
Interaction avec l'utilisateur
c'est une app
imagine
Tout est une histoire de contexte
Front
Interaction avec l'utilisateur
Applicatif
Routage, contrôleurs, droits ...
Métier
Règles de calcul, services, actions ...
Système
BDD, machine, framework ...
Fiabilité, solidité
Cohérence, flexibilité
Réutilisabilité, évolutivité
Simplicité
Tout est une histoire de contexte
Front
Interaction avec l'utilisateur
Applicatif
Routage, contrôleurs, droits ...
Métier
Règles de calcul, services, actions ...
Système
BDD, machine, framework ...
Fiabilité, solidité
Cohérence, flexibilité
Réutilisabilité, évolutivité
Simplicité
peu enclin aux changements
plus enclin aux changements

La brique applicative doit déterminer votre manière d'analyser le code.
Des questions ?
https://github.com/DeGraciaMathieu/static-analysis
à vous de bosser

Vous savez de combien de lignes sont vos projets ?

01-nombre-de-lignes.md
find . -name "*.php" -print0 | xargs -0 cat | wc -lAfficher le nombre de lignes
Volume
Nombre de lignes
find . -name "*.php" -print0 | xargs -0 cat | wc -lAjouter un séparateur nul
Ouvrir et afficher tous les fichiers
Compter le nombre de ligne
Ouvrir et afficher tous les fichiers
Afficher le nombre de lignes
Volume
Nombre de lignes
01-nombre-de-lignes.md
Récupérer les fichiers ...
... avec une extension php
À quoi ca sert de connaitre le nombre de ligne d'un projet ?
Volume
Nombre de lignes


à quoi ca sert de connaitre le nombre de ligne d'un projet ?
à rien
désolé
Volume
Nombre de lignes
du -h . | sort -rh | head -15Connaitre la répartitions des lignes
Volume
Nombre de lignes
C'est plus utile ça déjà
01-nombre-de-lignes.md
du -h . | sort -rh | head -15Calcule l'utilisation du disque
Trier les dossiers par taille
Affiche 15 resultats
Trier les dossiers contenant des lignes
Volume
Nombre de lignes
01-nombre-de-lignes.md
Volume
Répartition du code
On entends quoi par répartition du code ?

Type de la ligne
Lines of code
Comment lines
Logical lines of code
Volume
Répartition du code
LLOC
CLOC
LOC
Volume
Répartition du code
public function getTitle(Html $html): string
{
/**
* I dont care, i just want to silence warnings
*/
@$this->domDocument->loadHTML($html);
$elements = $this->domDocument->getElementsByTagName('title');
$title = $elements[0]->nodeValue;
return $title ?? 'undefined';
}

LLOC
CLOC
LOC
???
???
???
Volume
Répartition du code
public function getTitle(Html $html): string
{
/**
* I dont care, i just want to silence warnings
*/
@$this->domDocument->loadHTML($html);
$elements = $this->domDocument->getElementsByTagName('title');
$title = $elements[0]->nodeValue;
return $title ?? 'undefined';
}
LOC
LLOC
4
14
CLOC
3
02-répartition-du-code.md
Volume
Répartition du code
wget https://phar.phpunit.de/phploc.phar
php phploc.phar --versionVolume
Répartition du code
php phploc.phar . | grep "Size" -A4Dossiers à analyser
Traitement du résulat
"affiche 4 lignes à partir du grep"
02-répartition-du-code.md
Volume
Répartition du code
01-volume
Laquelle est la plus importante ?

Lines of code
Comment lines
Logical lines of code
Volume
Répartition du code
01-volume
On a dit que tout dépendait du contexte 😡

Le niveau zéro mais néanmoins utile de l’analyse statique

Jean-François Lépine
Créateur de PHPMetrics
Volume
Nombre de lignes
Complexity
Complexité du code
02-phploc
PHPLOC
wget https://phar.phpunit.de/phploc.phar
php phploc.phar --versionPHPLOC
php phploc.phar app | grep "Cyclomatic Complexity" -A501-cyclomatic-complexity
PHPLOC
Complexité Cyclomatique
Analyse statique
By madegracia
Analyse statique
- 151