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

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 -l

Afficher le nombre de lignes

Volume

Nombre de lignes

find . -name "*.php" -print0 | xargs -0 cat | wc -l

Ajouter 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 -15

Connaitre 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 -15

Calcule 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 --version

Volume

Répartition du code

php phploc.phar . | grep "Size" -A4

Dossiers à 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 --version

PHPLOC

php phploc.phar app | grep "Cyclomatic Complexity" -A5

01-cyclomatic-complexity

PHPLOC

Complexité Cyclomatique

Made with Slides.com