0% ont trouvé ce document utile (0 vote)
46 vues4 pages

Vérification Code avec Checkstyle

Transféré par

Antoine Sodo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
46 vues4 pages

Vérification Code avec Checkstyle

Transféré par

Antoine Sodo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

C306: Vérification de l'écriture du code https://pedag.u-picardie.fr/moodle/upjv/mod/page/view.php?

id=7735

C306 - Ingénierie du logiciel (ISI_05)


Accueil / Mes cours / FOAD / E-Miage / MASTER 1 MIAGE A DISTANCE [M1MIAA211] - 2021 / C306 - Ingénierie du logiciel (ISI_05)

/ Cours / Vérification de l'écriture du code

Vérification de l'écriture du code

1 - Introduction
L'écriture du code suit un 'standard', différent pour chaque language mais où les objectifs sont toujours similaires :
• donner une lecture et relecture aisée du code,
• limiter les risques d'erreur,
• vérifier la présence de documentation

Document de référence: https://wiki.sei.cmu.edu/confluence/display/java/Java+Coding+Guidelines.


De nombreux outils permettent d'en vérifier la bonne écriture. Nous allons expérimenter "checkstyle" pour nous familiariser avec ces notions.

checkstyle
2 - Mise en oeuvre de 'checkstyle'
1. récupérer la dernière version de checkstyle (par exemple checkstyle-8.22-all.jar) sur le dépôt github: https://github.com/checkstyle
/checkstyle/releases/, il contient checkstyle et ses dépendances.
2. exécution de l'audit checkstyle sur un fichier Java:

>java -jar checkstyle-5.6-all.jar -c sun_checks.xml MaClasse.java

sun_checks.xml est le fichier de checkstyle contenant la liste des règles à appliquer, il est situé dans le jar. Si vous voulez modifier la liste des
règles, il suffit d'extraire ce fichier du jar (c'est un zip), et l'adapter.

3 - Exemple
Exécution sur un code simple:

1 /** ?
2 * Test d'ecriture, MaClasse.java
3 *
4 * @author [email protected] (Sebastien Choplin)
5 */
6 public class MaClasse {
7
8 public static int min(int a,int b){
9 int result = 0;
10 if ( a < b )
11 result = a;
12 else
13 result = b;
14 return result;
15 }
16 }

A priori ça parait bien écrit...

1 >java -jar checkstyle-8.22-all.jar -c sun_checks.xml MaClasse.java ?


2
3 Début de la vérification...
4 [ERROR] MaClasse.java:1: La première ligne de la Javadoc doit se terminer avec un point. [JavadocStyle]
5 [ERROR] MaClasse.java:1: Le fichier package-info.java est manquant. [JavadocPackage]
6 [ERROR] MaClasse.java:6:1: Les classes utilitaires ne doivent pas avoir de constructeur par défaut ou public. [HideUtilityClassC
7 [ERROR] MaClasse.java:8:5: Commentaire Javadoc manquant. [MissingJavadocMethod]
8 [ERROR] MaClasse.java:8:27: Le paramètre a devrait être final. [FinalParameters]
9 [ERROR] MaClasse.java:8:32: Il manque une espace après ','. [WhitespaceAfter]
10 [ERROR] MaClasse.java:8:33: Le paramètre b devrait être final. [FinalParameters]
11 [ERROR] MaClasse.java:8:39: Il manque une espace avant '{'. [WhitespaceAround]
12 [ERROR] MaClasse.java:10: L'instruction 'if' devrait utiliser des accolades ('{' et '}'). [NeedBraces]
13 [ERROR] MaClasse.java:10: Line has trailing spaces. [RegexpSingleline]
14 [ERROR] MaClasse.java:10:12: Il y a une espace de trop après '('. [ParenPad]
15 [ERROR] MaClasse.java:10:20: Il y a une espace de trop avant ')'. [ParenPad]
16 [ERROR] MaClasse.java:12: L'instruction 'else' devrait utiliser des accolades ('{' et '}'). [NeedBraces]
17 Vérification terminée.
18 Checkstyle se termine par 13 erreurs.

Visiblement il y a beaucoup de choses à corriger, voyons en détail:

4 [ERROR] MaClasse.java:1: La première ligne de la Javadoc doit se terminer avec un point. [JavadocStyle] ?

1 sur 4 30/05/2022, 17:18


C306: Vérification de l'écriture du code https://pedag.u-picardie.fr/moodle/upjv/mod/page/view.php?id=7735

Si on souhaite avoir une javadoc, le doit avoir un fichier de documentation le décrivant, ce fichier est "package-info.java"

5 [ERROR] MaClasse.java:1: Le fichier package-info.java est manquant. [JavadocPackage] ?

6 [ERROR] MaClasse.java:6:1: Les classes utilitaires ne doivent pas avoir de constructeur par défaut ou public. [HideUtilityClassCo
?

Cette classe ne contient qu'une fonction 'static', elle est qualifié d'utilitaire car on ne crééra visiblement pas d'objet 'MaClasse' et on utilisera
directement la méthode min ainsi MaClasse.min(4,5), donc il est préconisé de mettre le constructeur en 'private' pour éviter son instantiation;
mais comme cela empêchera de l'appeler pour les tests unitaires, il est préconisé de le mettre en 'protected' et de lever une exception dans le
constructeur (comportement qui pourra être testé).
Depuis Java 8, les interfaces peuvent contenir des méthodes, ce qui rend la notion de 'classe utilitaire' désuète.

7 [ERROR] MaClasse.java:8:5: Commentaire Javadoc manquant. [MissingJavadocMethod] ?

La méthode 'min' n'a pas de documentation

8 [ERROR] MaClasse.java:8:27: Le paramètre a devrait être final. [FinalParameters] ?

Il est préconisé de ne pas modifier les valeurs des paramètres de type simple d'une méthode. Si le paramètre 'a' est mis en final, il ne pourra
pas être modifié.

9 [ERROR] MaClasse.java:8:32: Il manque une espace après ','. [WhitespaceAfter] ?

Pour une uniformisation de la présentation

10 [ERROR] MaClasse.java:8:33: Le paramètre b devrait être final. [FinalParameters] ?

idem que pour a.

11 [ERROR] MaClasse.java:8:39: Il manque une espace avant '{'. [WhitespaceAround] ?

Pour une uniformisation de la présentation

12 [ERROR] MaClasse.java:10: L'instruction 'if' devrait utiliser des accolades ('{' et '}'). [NeedBraces] ?

Même s'il est inutile de mettre les accolades lorsque le bloc ne contient qu'une ligne, il est plus prudent de les mettre systématiquement,
sinon on risque facilement d'ajouter juste une ligne en croyant la mettre dans le bloc.

13 [ERROR] MaClasse.java:10: Line has trailing spaces. [RegexpSingleline] ?

Il y a des espaces inutiles en fin de ligne, rien de bien grave mais toujours pour une uniformisation.

14 [ERROR] MaClasse.java:10:12: Il y a une espace de trop après '('. [ParenPad] ?

Pour une uniformisation de la présentation

15 [ERROR] MaClasse.java:10:20: Il y a une espace de trop avant ')'. [ParenPad] ?

Pour une uniformisation de la présentation

16 [ERROR] MaClasse.java:12: L'instruction 'else' devrait utiliser des accolades ('{' et '}'). [NeedBraces] ?

idem que pour le 'if'


Après correction ça donne:

1 /** ?
2 * Test d'ecriture, MaClasse.java .
3 *
4 * @author [email protected] (Sebastien Choplin)
5 */
6 public final class MaClasse {
7
8 /**
9 * Constructeur protected avec exception
10 * pour empecher l'instantiation de la classe.
11 */
12 protected MaClasse() {
13 throw new Exception("cette classe ne peut pas être instanciée");
14 }
15
16 /**
17 * Calcul du min.
18 * @param a premier entier
19 * @param b deuxiement entier
20 * @return le plus petit de a et b
21 */
22 public static int min(final int a, final int b) {
23 int result = 0;
24 if (a < b) {
25 result = a;
26 } else {
27 result = b;
28 }
29 return result;
30 }
31 }

2 sur 4 30/05/2022, 17:18


C306: Vérification de l'écriture du code https://pedag.u-picardie.fr/moodle/upjv/mod/page/view.php?id=7735

sans oublier le fichier package-info.java:

1 /** ?
2 * package-info.java: toutes les infos sur le package
3 */

on reteste:

1 > java -jar checkstyle-8.22-all.jar -c sun_checks.xml MaClasse.java ?


2
3 Début de la vérification...
4 Vérification terminée.

4 - Exercice
Exercice
Corriger le code suivant pour qu'il passe l'audit de 'checkstyle' avec les règles du fichier 'sun_ckecks.xml'

1 /** ?
2 *
3 */
4 public class ExoEcritureCode {
5
6 public static double moyenne(double [] valeurs) {
7 double somme;
8 for(int i=0;i<valeurs.length;i=i+1)somme+=valeurs[i];
9 return somme/valeurs.length;
10 }
11 }

5 - Conclusion
Le fichier 'sun_checks.xml' liste les tests de l'audit, on peut les modifier,en supprimer, en ajouter, ... suivant les règles de programmation qu'on
veut mettre ou ne pas mettre en application.

Si vous ne souhaitez pas tenir compte de certaines vérification (javadoc par exemple), il ne faut surtout pas laisser des erreurs en se disant
que celles ci ne sont pas importantes, sinon vous risquez de ne pas voir passer d'autres erreurs, noyées dans celles dont vous ne voulez pas
tenir compte. Dans ce cas : adaptez le fichier des règles.

Le plus simple est de respecter un maximum de règles, si une règle que vous ne connaissez pas est violée, demandez vous pourquoi ce
critère semble important à respecter, vous apprendrez ainsi facilement les différents contours du langage.

Les IDE (Integrated Development Environnement) comme Eclipse intègre bon nombre de ces règles et permet ainsi, sans effort, de respecter
ou tout au moins de vous alerter lorsque l'une d'elles est violée.

Modifié le: mercredi 10 juillet 2019, 16:38

◄ Bonnes pratiques

Aller à…

Modularité ►

Connecté sous le nom « SODO KANGNI KOMLAN » (Déconnexion)


C306
Mes cours
ı Événements
ı Aide
ı
Accompagnement enseignants
ı Etudiants Maîtrisez votre environnement numérique
ı Enseignants Préparez vos examens à distance
ı Learning Hub
ı Bac à sable
ı Moodle Epione
ı Français (fr)
ı
English (en)
ı Français (fr)
Résumé de conservation de données
Obtenir l'app mobile

3 sur 4 30/05/2022, 17:18


C306: Vérification de l'écriture du code https://pedag.u-picardie.fr/moodle/upjv/mod/page/view.php?id=7735

UNIVERSITÉ PICARDIE JULES VERNE ı Contact ı Charte informatique ı CGU

4 sur 4 30/05/2022, 17:18

Vous aimerez peut-être aussi