JMRI: Analyse statique avec FindBugs
FindBugs est un outil qui peut examiner le code pour trouver d'éventuels problèmes. Il fait un "analyse statique", en regardant à travers le code pour trouver certaines "mauvaises idées connues ": Les choses qui sont susceptibles de causer des problèmes occasionnels/intermittents, mauvaise performance, etc Parce que ce genre de problèmes est difficile à trouver avec les tests, les trouver par l'inspection est souvent la seule approche réaliste. Disposer d'un outil qui peut faire les inspections automatiquement, afin qu'elles puissent se faire à chaque fois que quelque chose est changé, protège le code d'une dégradation lente sans que quelqu'un le remarque jusqu'à ce qu'il soit trop tard.Pour plus d'informations sur FindBugs, voir la page d'accueil FindBugs .
Nous exécutons sous forme d'une routine FindBugs comme une partie de notre processus continue d'intégration. Vous pouvez voir les résultats des plus récentes constructions en ligne ici.
Si findBugs trouve une erreur positive, un bug qui n'est pas réellemnt un bug, vous pouvez l'éteindre avec une annotation tels que:
@edu.umd.cs.findbugs.annotations.SuppressWarnings("FE_FLOATING_POINT_EQUALITY","OK to compare floats, as even tiny differences should trigger update")
Le second argument "justification" est optionnel, mais hautement recommandé.
Expliquer pourquoi vous avez ajouté cette annotation pour supprimer un message aidera
Celui qui viendra après vous et tentera de comprendre le code.
Il aidera également à vous assurer que vous comprenez correctement la cause du rapport
du bugg sous-jacent: Parfois ce qui semble un faux positif ne l'est pas vraiment.
si vous avez besoin de mettre plus d'un type de message dans une annotation, utilisez la syntaxe en tableau:
@edu.umd.cs.findbugs.annotations.SuppressWarnings("{type1},{type2}","Pourquoi deux sont nécessaire")
Les annotations de bug peuvent l'aider à mieux comprendre votre code. Parfois, ils vont lui donner suffisamment de compréhension
exemple: quand une variable peut être nulle, que ça ne va plus faire de fausses erreurs positives.
Pour plus d'information sur ceci, voir la
page des annotations Findbugs .
Elle peut être utile pour marquer les classes avec une des annotations suivantes de telle sorte que FindBugs fasse un bon travail de raisonnement à ce sujet:
Simon White a ajouté le support FindBugs à notre Chaine de construction basée sur Antb pendant le développement du JMRI 2.5.5. Sa note sur ceci suit...
Comme demande de fonctionnalité par 1716873, j'ai ajouté une tâche Ant pour exécuter FindBugs. Ceci va produire un rapport en HTML dans le même emplacement que le JMRI jar (c'est à dire le plus haut niveau du répertoire projet ). Notez la nouvelle tâche exécute en premier ant dist parce FindBugs examine le dossier jmri.jar. Pour exécuter la tâche:
- Installer Findbugs (pour moi j'ai mis cela dans C: /FindBugs-1.3.8)
- copie FindBugs-ant.jar à partir du répertoire lib FindBugs dans le répertoire java/lib
- soit exécuter
ant-Dfindbugs.home = C: / FindBugs-1.3.8 FindBugs (remplaçant le paramètre de votre emplacement d'installation)
ou modifier le build.xml et modification du paramètre commenté de findbugs.home à votre emplacement d'installation, puis exécutez
ant FindBugs
Notez que dans le build.xml j'ai mis le réglage maximal de mémoire-Xmx pour le tâche FindBugs pour 1024m. Si votre système a plus de mémoire, la stimuler peut accélérer les choses.
L'exécution de ceci sur JMRI 2.5.4 donné les résultats suivants:
| Avertissements Mauvaise pratique | 164 |
| Avertissements Correction < td> | 77 |
| Avertissements expérimentaux | 7 |
| Avertissements vulnérabilité code malveillant | 221 |
| Avertissements multithread exactitude < td> | 90 |
| Avertissements Performance | 459 |
| Avertissements Louche | 304 |
| Total | 1322 |
|---|