Question

Nous avons commencé à utiliser un analyseur statique (Coverity) sur notre base de code. Nous avons été rapidement stupéfié de l'énorme quantité d'avertissements que nous avons reçus (son des centaines de milliers), il faudra toute l'équipe quelques mois pour les effacer tous (obliviously impossible).

les options dont nous avons parlé jusqu'à présent sont

1) embaucher un entrepreneur pour trier l'avertissement et les corriger - il Inconvénient: nous aurons probablement besoin d'expériences très gens à faire toutes ces modifications, et aucun entrepreneur aura nécessité la compréhension du code

.

2) filtrer l'avertissement et de traiter uniquement avec ceux qui sont dangereux - le problème ici est que notre sortie d'analyse statique sera toujours encombré en avertissant ce qui rend difficile pour nous d'isoler les problèmes. également le filtrage de l'avertissement est également un effort important.

De toute façon, ce qui porte notre code à un état lorsque l'analyseur statique peut être un outil utile pour nous paraît une tâche monumentale.

alors comment est-il possible de travailler avec l'analyseur statique sans Braining efforts actuels de développement dans un stand complet encore?

Était-ce utile?

La solution

La première chose à faire est de modifier le diable hors de vos paramètres d'analyse; soutien Coverity vous avez probablement laissé une configuration assez générique.

  • un échantillon représentatif priorisation des défauts, et si un vérificateur ne semble pas produire beaucoup plus de signal que le bruit, la désactiver pour l'instant. (La plupart des dames de Coverity sont bons, mais personne n'est parfait, et il semble que vous devez faire établir des priorités sans pitié.)
    • À long terme, tourner certaines de ces dames de retour, mais les marquer dans vos rapports de priorité faible. (Cela est plus difficile que ce qu'elle devrait être, je l'ai longtemps soutenu que Coverity a besoin de lire quelques articles sur le classement des défauts par quelqu'un appelé Dawson Engler: -.)
    • Dans le même courir plus, essayez les dames qui sont désactivées par défaut; certains d'entre eux trouvent des bogues impressionnants. Et parse avertissements sont étonnamment utiles, si vous avez besoin de désactiver certains d'usurpateurs.
  • Soyez cyniquement réaliste sur quelle partie de votre code de base que vous allez effectivement corriger bientôt. Utilisez des composants pour sauter l'analyse sur le code que vous ne va pas corriger les défauts dans, au moins pour l'instant. (Par exemple, en théorie, si votre produit contient du code tiers, vous êtes responsable de la qualité et doit colmater les bugs en elle. Dans la pratique, ces bugs sont rarement fixés. Et si c'est un code tiers mature, le faux taux positif sera élevé.)
    • Mise en place des composants et l'exclusion est difficile, mais une fois qu'il est fait, ils travaillent bien un de mes regexes négatives regard ahead avait plus d'une centaine disjoints.
    • Composants également aider à attribuer la responsabilité individuelle des défauts que j'ai trouvé être crucial pour les obtenir fixes.
  • Mise en place d'un rapport pour que de nouveaux défauts, et des gens regardent cette URL. De nouveaux défauts sont en code actif, et il est plus facile de démarrer avec une nouvelle politique Pas Avertissements.

Permettez-moi de terminer par un couple de non-responsabilité:

  • Vous pouvez vouloir re-poser cette question dans le forum de soutien Coverity ( http://forums.coverity.com / ), ce qui est pas très actif, mais où on n'a pas à se soucier de violer la NDA. J'ai une liste il y a des dames que j'ai trouvé une valeur permettant.
  • Je le fais pour gagner ma vie, et peut-être vous voulez nous engager ( http://codeintegritysolutions.com/ ); Je donne une conférence sur ce sujet à Stanford aujourd'hui. L'embauche d'un consultant pour faire l'accord fait beaucoup de sens; avoir quelqu'un en dehors de la compagnie qui fait le plus délicat est triage. Avoir un outsider faire les corrections est plus délicate encore; l'apprentissage de vos erreurs est encore plus important que de les fixer.

Autres conseils

Un jour par semaine: Allumez l'analyse; choisir les avertissements les plus ennuyeux 100; répare les; analyse désactiver. En bref: ne paniquez pas; votre code fonctionne comme il est (non?); travailler à travers les mises en garde en petits morceaux de taille.

Si vous trouvez que les mêmes types d'avertissements gardent réapparaissant (mauvaises pratiques de codage), éduquer votre équipe pour les éviter à l'avenir.

Je l'ai fait avec une ancienne base de code: Je reçois tôt le matin (avant le reste de l'équipe), manivelle le niveau d'avertissement / analyse sur le compilateur, corriger quelques avertissements, puis le remettre à les valeurs par défaut.

  1. Pour le code existant. Ces bugs donner la priorité leagcy et sortir un plan pour y faire face. Équilibrer le correctif de bug et développement de nouvelles fonctionnalités. Nouvelle fonctionnalité est toujours plus important.
  2. Pour le nouveau code. Faire partie de votre processus d'intégration. Avant de vérifier dans le nouveau code, assurez-vous qu'ils sont sans Coverity

Pour votre option entrepreneur, vous pouvez aller un itinéraire plus modéré un avoir entre eux ne résoudre les problèmes qui sont claires, locales et ne nécessitent pas une bonne compréhension de votre code. Je suppose qu'un grand nombre de hits Coverity sont des choses comme déréférence possibles pointeur NULL ou écritures possibles depuis la fin d'un tampon qui peut être fixé avec de simples contrôles qui sont tout à fait local au code en question et ne nécessitent aucune compréhension du grande image.

Je l'avoue - je l'ai fait un travail comme celui-ci avant d'utiliser le PREfast / Prefixe ou quel que soit l'outil est appelé à partir de Microsoft, et beaucoup de ce genre était mécanique des changements. Bien adapté à un entrepreneur ou peut-être même un stagiaire. Mais il y aura des choses qui a besoin d'une analyse plus poussée -. Assurez-vous qu'il est clair à l'entrepreneur (s) qu'ils ne devraient pas essayer de se rendre à profondément dans les choses

Et être gentil avec eux -. C'est un travail de tâcheron, donc faire tout ce que vous pouvez agréable

Les gens Coverity nous ont dit de « ignorer » tous les avertissements la première fois que vous l'utilisez. Puis, dans la prochaine version différentielle, il aura progressivement de nouveaux avertissements: que vous devez résoudre. Ensuite, après avoir utilisé l'outil pendant quelques mois et vous obtenez à l'aise avec elle, vous revenez en arrière et commencer à réparer les anciens avertissements.

Essayez d'autres analyseurs statiques. Je l'habitude de travailler avec le test de Parasoft C et il y avait un moyen pratique pour filtrer les avertissements selon leurs sévérités.

Est-ce que cela signifie que vous avez des problèmes avec la personnalisation à vos besoins?
Comme

"" Analyse personnalisable

Coverity analyse statique permet d'affiner les analyses en modifiant soit le nombre de pions déployé, ou les paramètres spécifiques à un contrôleur particulier, comme le seuil de déréférencement du pointeur null. La possibilité de configurer Coverity pour un bloc de code particulier, ou une application, permet aux développeurs de sélectionner le niveau de performance le plus approprié pour leur application, et conduit à des résultats plus précis et fiables. Le développement de logiciels Coverity Kit vous permet de détecter les types de défauts uniques dans le code C et C ++ en créant des dames personnalisés. Ceci est en plus de créer des pions personnalisés pour trouver concurrency, la gestion des exceptions, et d'autres questions critiques. « »
http://www.coverity.com/products/static-analysis.html

typique hors-the-box configuration d'analyse pour Coverity aura tendance à donner entre un et trois défauts par mille lignes de code. Si vous avez des centaines de milliers de défauts, et vous avez beaucoup moins de 100 millions de lignes de code, je peux vous garantir que votre configuration d'analyse est incorrecte ou suboptimale pour votre organisation.

En plus de la configuration de l'analyse de l'accord lui-même, vous pouvez donner la priorité par l'impact - la valeur par défaut « élevé », « moyen » et la cartographie « faible » devrait être assez bon pour vous aider à démarrer jusqu'à ce que vous obtenez une sensation pour laquelle les sous-catégories ont tendance à être plus dommageable à votre application.

Troisièmement, si votre base de code est grande (et dont ne) subdiviser en composants afin que chaque équipe ou un groupe de développeurs peuvent regarder uniquement le code qu'ils maintiennent directement - cela permet à la fois des morceaux plus faciles à gérer de travail gérer, et il vous permet également de donner la priorité sur le composant (défauts dans le code du serveur sont plus critiques que les défauts dans le code client, ou un code de test, ou code tiers, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top