FindBugs est un logiciel libre d'analyse statique de bytecode Java. Son but est de trouver des bugs dans les programmes Java en identifiant des patterns reconnus comme étant des bugs.
FindBugs a été créé par William Pugh à l'université du Maryland et est distribué selon les termes de la licence GNU LGPL.
Principe de fonctionnement
FindBugs est basé sur des plugins et des détecteurs de bugs. Les plugins (sous forme de jar) contiennent un fichier xml décrivant les détecteurs qu'il contient ainsi que les détecteurs eux-mêmes.
FindBugs prend en entrée les fichiers .class à analyser et leur applique l'un après l'autre les détecteurs provenant des plugins. Chaque détecteur parcourt le bytecode Java et émet un avertissement lorsqu'il rencontre un ensemble d'instructions qui pourrait correspondre à un bug. Les avertissements sont collectés par FindBugs pour être présentés à l'utilisateur lorsque tous les détecteurs auront été exécutés. L'utilisateur pourra ensuite examiner le rapport de bug pour vérifier manuellement s'il y a bien un bug et le corriger si besoin.
La vérification manuelle des rapports de bugs est nécessaire car, comme tout outil d'analyse statique, FindBugs peut émettre des avertissements qui ne correspondent pas à de vrais bugs, ou des bugs qui ne peuvent jamais arriver en pratique. C'est ce que l'on appelle des "faux positifs". Malgré l'attention portée par les développeurs à réduire le taux de faux avertissements, il est impossible de tous les éliminer.
Tous les détecteurs n'ont pas la même complexité, et certains réclament plus de ressources (temps, processeur) pour s'exécuter. De plus les bugs trouvés sont plus ou moins importants et ils peuvent donc être classés par niveau de priorité.
Extensibilité
FindBugs peut être étendu à l'aide de plugins, il est ainsi possible d'écrire des détecteurs adaptés aux problèmes que l'on veut résoudre.
Il est déjà livré avec des détecteurs recherchant les bugs les plus communs[1] : Déréférencement de pointeur nul (NullPointerException), race conditions, etc.
Il existe également fb-contrib, un plugin pour FindBugs contenant un nombre important de détecteurs supplémentaires[2] qui n'ont pas été acceptés pour intégration dans le projet FindBugs. Cependant ces détecteurs sont suffisamment généraux pour intéresser tout programmeur Java.
Open Source
Il utilise Apache BCEL pour lire les fichiers .class et les parcourir. Une réflexion est en cours pour remplacer BCEL par ASM car ce dernier étant plus performant, il permettrait de réduire le temps d'exécution de Findbugs.
Intégration de FindBugs avec d'autres logiciels
FindBugs est distribué sous la forme d'une application stand-alone avec GUI. Il existe également différentes possibilités d'intégration :
Logiciels utilisant les analyses de FindBugs
Voir aussi
Références
Liens externes