Auditez votre code avec Perl: :Critic

Date de publication:
Durée de lecture estimée:

Si vous récupérez une importante base de code dont vous ignorez la qualité ou si vous voulez tout simplement écrire du code propre, Perl dispose d'un outil nommé Perl::Critic pour vous aider.

Présenté comme étant un framework extensible, il s’agit surtout d’un outil en ligne de commande permettant de vérifier la bonne application des règles de programmation en Perl. De base, chaque module Perl::Critic::Policy est basé sur le contenu du livre « Perl Best Practices » de Damian Conway.

A l’aide de Perl::Critic, vous allez pouvoir détecter:

  • les constructions maladroites,
  • les portions de code difficiles à lire,
  • les lignes sujettes aux erreurs ou non conventionnelles dans votre code.

Vous avez toute liberté d’activer ou de désactiver l’utilisation de chaque règle et même d’ajouter vos propres règles en fonction de vos besois telles que des conventions d’écriture spécifiques à votre projet.

Installation de Perl::Critic

L’installation du module se fait tout simplement avec la commande suivante:

sudo cpanm Perl::Critic.

Vous disposez alors du framework de vérification ainsi que de l’outil en ligne de commande perlcritic. C’est ce dernier que nous allons utiliser pour auditer notre code Perl.

Utilisation de Perl::Critic

Pour travailler avec votre code source, vous avez deux possibilités. La première consiste à indiquer un nom de fichier Perl et seul ce fichier sera analysé.

perlcritic foo.pl

Vous obtenez alors une réponse formatée avec les problèmes trouvés, les emplacements dans le code et la description des différents problèmes relevés.

Bareword file handle opened at line 213, column 2.  See pages 202,204 of PBP.  (Severity: 5)
Two-argument "open" used at line 213, column 2.  See page 207 of PBP.  (Severity: 5)

Par contre, si vous voulez analyser le contenu d’une arborescence de fichiers telle que le code d’un module, il vous suffit de fournir le chemin du répertoire:

perlcritic foo/

Le framework Perl::Critic classe les problèmes dans cinq catégories, numérotées de 1 à 5 (de la moins problématique à la plus critique). Le niveau 5 est le niveau par défaut utilisé pour toute analyse de code. Avec l’option --severity, il est possible de définir la sévérité de Perl::Critic. Ainsi, si vous définissez la sévérité à 1 avec la commande perlcritic --severity 1 foo.pl, vous obtenez l’intégralité des problèmes détectés. Par contre, avec une sévérité fixée à 5, seuls les problèmes critiques sont retournés.

Avec l’option --top, vous obtenez les 20 premiers problèmes trouvés par fichier analysé. Ils sont classés du plus critique au moins important.

perlcritic --top foo.pl

Il est possible d’indiquer un nombre pour fixer le nombre de problèmes retournés. L’exemple suivant ne retourne que les 5 principaux problèmes trouvés:

perlcritic --top 5 foo.pl 

Pour chaque problème, il vous est possible de consulter une documentation exhaustive qui explique pourquoi une règle a été violée. L’exemple suivant affiche le contenu de la règle Variables::ProhibitAugmentedAssignmentInDeclaration:

perlcritic --doc Variables::ProhibitAugmentedAssignmentInDeclaration

Analyse du code

Avec l’option --count, vous obtenez le nombre de problèmes trouvés pour chaque script Perl vérifié:

perlcritic --count foo.pl

Plus intéressante encore, l’option --statistics fournit de nombreuses d’informations pour chaque fichier Perl audité.

perlcritic --statistics foo.pl 

Vous obtenez alors une sortie telle que:

1 files.
10 subroutines/methods.
427 statements.

537 lines, consisting of:
    108 blank lines.
    140 comment lines.
    0 data lines.
    289 lines of Perl code.
    0 lines of POD.

Average McCabe score of subroutines was 8.70.

2 violations.
Violations per file was 2.000.
Violations per statement was 0.005.
Violations per line of code was 0.004.

2 severity 5 violations.

1 violations of InputOutput::ProhibitBarewordFileHandles.
1 violations of InputOutput::ProhibitTwoArgOpen.

En complément des problèmes trouvés, vous obtenez des informations sur la structure du code, sa taille ou encore sur le volume de documentation présent.

Pour faire du tri entre les fichiers, les options --files-with-violations et --files-without-violations permettent respectivement de référencer les fichiers Perl présentant des problèmes et ceux ne contenant aucune violation d’une règle.

Conclusion

Avec Perl::Critic, vous disposez d’un outil extrêmement puissant pour analyser et fiabiliser votre code Perl mais également faciliter sa maintenance ainsi que son évolution. Une bonne approche consiste probablement à intégrer perlcritic dans des processus d’intégration continu afin de bénéficier d’une vérification régulière de votre code.

Seules les principales options de la commande perlcritic ont été ici présentées. Je vous recommande de consulter la page https://metacpan.org/dist/Perl-Critic/view/bin/perlcritic afin d’appronfondir son utilisation.