Développer en Java/Analyse statique de code
L'analyse statique de code permet, sans avoir à compiler ou exécuter le code, de détecter des erreurs, du code suspect ou des pratiques à risques. Certains compilateurs détectent ce genre d'éléments et peuvent avertir le développeur via un message d'erreur. Certains outils sont spécialisés dans l'analyse de code et peuvent rapporter aux développeurs les problèmes rencontrés.
Types de problèmes détectés
[modifier | modifier le wikicode]- Pratiques à risques
- sauts dans le code (instructions
break
oucontinue
dans les boucles) - Code de mauvaise qualité
- redondances (code copié-collé), code complexe (méthode avec une complexité cyclomatique trop élevée)
- Code suspect
- méthodes privées jamais appelées, variables lues avant d'être initialisées, variables jamais lues
- Violation de conventions
- conventions pour les noms des accesseurs et modificateurs, conventions de nommage des attributs de classe, méthodes trop longues ou avec trop de paramètres, méthodes non-documentées (Javadoc)
Quelques outils
[modifier | modifier le wikicode]Si un environnement de développement est utilisé, celui-ci doit déjà donner quelques informations sous forme d'avertissement. La plupart d'entre eux peuvent être utilisés en ligne de commande ou être intégrés à l'environnement de développement.
De tels outils sont disponibles pour différents langages dans les articles List of tools for static code analysis et Automated code review.
Checkstyle
[modifier | modifier le wikicode]Checkstyle permet d'assurer que du code Java respecte bien des conventions. Sur le site officiel on peut trouver une liste des règles que Checkstyle sait vérifier.
L'ensemble des conventions à respecter sont indiquées dans un fichier XML. Il est possible de l'adapter pour inhiber des règles jugées trop contraignantes. L'application est livrée notamment avec un fichier représentant les conventions de Sun, largement adoptées.
PMD
[modifier | modifier le wikicode]PMD détecte le code suspect et les mauvaises pratiques :
- Blocs try/catch/finally, if/else vides ;
- Code mort ;
- Variables locales, paramètres et méthodes privées jamais utilisées ;
- Expressions trop complexes ;
- Code sous-optimale, mauvaises utilisation de utilisation de String/StringBuffer ;
- Méthodes avec complexité cyclomatique trop grande ;
- Code dupliqué.
FindBugs™
[modifier | modifier le wikicode]FindBugs permet également d'auditer l'application et de détecter des problèmes potentiels parmi quelques dizaines de problèmes connus. Ces détections concernent aussi bien des mauvaises pratiques que la correction du code, la correction dans un contexte concurrentiel, l'internationalisation, les failles de sécurités, les performances ou les pratiques risquées.