Frage

Wir haben mit einem statischen Analysator (Coverity) auf unserer Code-Basis gestartet. Wir waren von der schieren Menge von Warnungen prompt betäubte erhielten wir (sein in den Hunderttausenden), wird es das gesamte Team ein paar Monate dauern, sie alle (obliviously unmöglich) zu löschen.

die Optionen, die wir bisher diskutiert wurden, sind

1) mieten einen Auftragnehmer die Warnung zu klären und lösen - er Nachteil. Wir müssen wahrscheinlich sehr erfährt Menschen alle diese Änderungen zu tun, und kein Auftragnehmer haben wird des Codes zu verstehen

2) Filter aus der Warnung und befassen sich nur mit den gefährlichsten - das Problem hier ist, dass unsere statische Analyse ausgegeben wird immer mit der Warnung laden macht es für uns schwierig zu isolieren Probleme. auch die Filterung der Warnung ist auch eine große Anstrengung.

oder so, unseren Code in einen Zustand zu bringen, wenn der statische Analysator ein nützliches Werkzeug für uns sein kann, scheint eine gewaltige Aufgabe.

so wie ist es möglich, die Arbeit mit dem statischen Analysator ohne noch laufenden Entwicklungsbemühungen zu einem vollständigen Stand braining?

War es hilfreich?

Lösung

Das erste, was zu tun ist, das Heck aus Ihrer Analyse-Einstellungen zu optimieren; Coverity Unterstützung, das Sie wahrscheinlich mit einer ziemlich allgemeinen Konfiguration verlassen.

  • Triage eine repräsentative Stichprobe der Defekte, und wenn ein Kontrolleur scheint nicht viel mehr Signal als Rauschen zu produzieren, schalten Sie es jetzt aus. (Die meisten von Coverity-Kontrolleure sind gut, aber niemand ist perfekt, und es klingt wie Sie brauchen eine rücksichtslose Priorisierung zu tun.)
    • Auf langer Sicht, schalt einige diese Kontrolleure wieder auf, aber sie in Ihrer Berichterstattung als niedrige Priorität markieren. (Dies ist schwieriger, als es sein sollte, ich habe lange argumentiert, dass Coverity ein paar Papiere auf Fehler lesen muss von jemandem Ranking genannt Dawson Engler:. -)
    • In der noch länger laufen, versuchen Sie die Kontrolleure, die standardmäßig deaktiviert sind; einige von ihnen finden beeindruckende Bugs. Und Parse-Warnungen sind überraschend nützlich, wenn Sie brauchen ein paar gefälscht diejenigen auszuschalten.
  • Seien Sie zynisch realistisch, welcher Teil Ihrer Code-Basis sind Sie tatsächlich bald los zu beheben. Verwenden Sie Komponenten überspringen Analyse auf dem Code, den Sie sind nicht, zumindest vorerst zu beheben Mängel gehen. (Zum Beispiel, in der Theorie, wenn Ihr Produkt enthält Code von Drittanbietern, Sie ist verantwortlich für seine Qualität und sollen Bugs Patch drin. In der Praxis solche Fehler selten repariert. Und wenn dann ist es Code von Drittanbietern reifen, die falschen positive-Rate hoch sein wird.)
    • Einrichten von Komponenten und Ausgrenzung ist schwierig, aber sobald es fertig ist, sie arbeiten gut einen meines negativen Vorgriff Regexes hatte über hundert Disjunktionen.
    • Komponenten auch Hilfe bei der Zuordnung der individuellen Verantwortung für Mängel, die ich gefunden habe, von entscheidender Bedeutung sein, um bekommen sie fixiert.
  • Richten Sie einen Bericht für nur neue Mängel und haben die Leute zu beobachten, dass die URL. Neue Mängel sind im aktiven Code, und es ist einfacher, mit einer Politik keine neuen Warnungen beginnen.

Lassen Sie mich mit ein paar Haftungsausschlüssen beenden:

  • Sie können möchten diese Frage in dem Coverity-Support-Forum erneut fragen ( http://forums.coverity.com / ), die nicht sehr aktiv ist, aber wo wir die NDA zu kümmern sich nicht um die Verletzung. Ich habe eine Liste bekommt es den Kontrolleure Ich fand Wert zu ermöglichen.
  • Ich tue dies für ein Leben, und vielleicht möchten Sie uns mieten ( http://codeintegritysolutions.com/ ); Ich gebe heute einen Vortrag an der Stanford zu diesem Thema. Die Einstellung eines Beraters die Abstimmung zu tun, sehr viel Sinn macht; mit jemand außerhalb des Unternehmens das tut, ist Das Selektieren der knifflig. ein Außenseiter mit den Korrekturen zu tun ist schwieriger noch; aus Fehlern zu lernen ist wichtig, noch mehr als sie zu befestigen.

Andere Tipps

Ein Tag pro Woche: Schalten Sie Analyse; wählen Sie die 100 nervigsten Warnungen; repariere sie; drehen Analyse ab. Kurz gesagt: keine Panik; Ihr Code funktioniert, wie es ist (oder nicht?); Arbeit durch die Warnungen in mundgerechte Stücke schneiden.

Wenn Sie feststellen, dass die gleichen Arten von Warnungen immer wieder auftauchen (schlechte Praktiken Codierung), erziehen Sie Ihr Team sie in Zukunft zu vermeiden.

Ich tat dies mit einer alten Codebasis: Ich würde früh am Morgen in (vor dem Rest des Teams), bis kurbelte die Warnung / Analyseebene auf dem Compiler, einige Warnungen beheben und dann setze sie wieder auf die Standardwerte.

  1. Für Legacy-Code. Priorisieren diese leagcy Bugs und ausgezogen, einen Plan mit ihnen zu beschäftigen. Balancieren Sie den Bug-Fix und die Entwicklung neuer Funktionen. Neu ist auch immer mehr an Bedeutung.
  2. Für neuen Code. Machen Sie es Teil Ihrer Integrationsprozess. Bevor Sie den neuen Code überprüft, stellen Sie sicher, sie sind Coverity frei

Für Ihre Auftragnehmer Option, könnten Sie einen moderateren Weg gehen eine haben sie nur die Probleme beheben, die klar, lokal sind und nicht ein volles Verständnis des Codes benötigen. Ich würde vermuten, dass eine hohe Anzahl der Coverity Hits sind Dinge wie möglich NULL-Zeiger dereferenziert oder mögliche schreibt über das Ende eines Puffers, der mit einfachen Überprüfungen festgelegt werden kann, die vollständig lokal auf den betreffenden Code und müssen kein Verständnis für die großes Bild.

Ich gebe zu - ich habe getan Arbeit, wie dies vor der PREfast / Präfix oder was auch immer das Werkzeug von Microsoft genannt wird, und eine Menge davon war mechanische Art von Veränderungen. Gut an einen Auftragnehmer geeignet oder vielleicht sogar einen Praktikanten. Aber es wird Material sein, dass mehr Analyseanforderungen -. Nur sicherstellen, dass es ist klar, an den Auftragnehmer (n), dass sie nicht zu tief in die Dinge zu bekommen versuchen

Und nett zu ihnen -. Es ist drudge Arbeit, so machen was sonst kann man angenehm

Die Coverity Leute sagten uns, zu ‚ignorieren‘ alle Warnungen zum ersten Mal Sie es verwenden. Dann in der nächsten Differenz Build, wird es schrittweise neue Warnungen: die Sie beheben sollen. Dann, nachdem Sie das Tool für ein paar Monate verwenden und sie bequem mit ihm gehen Sie zurück und beginnt die alten Warnungen zu befestigen.

Versuchen Sie andere statische Analysatoren. Früher habe ich die Arbeit mit Para C ++ Test, und es hatte eine bequeme Möglichkeit, Filter Warnungen nach deren Grenzwerte.

Bedeutet es, Sie haben Probleme mit ihm auf Ihre Bedürfnisse abstimmen?
Als

"" Anpassbare Analyse

Coverity Static Analysis bietet die Möglichkeit zur Feinabstimmung Analysen durch entweder die Anzahl der Kontrolleure modifizierende eingesetzt oder die Einstellungen des spezifisch für einen einzelnen checker, wie beispielsweise die Schwelle für die Null-Zeiger-Dereferenzen. Die Fähigkeit zu konfigurieren Coverity für einen bestimmten Codeblock oder eine Anwendung, ermöglicht es Entwicklern, das Leistungsniveau am besten geeignet für ihre Anwendung und führt zu genaueren und zuverlässigeren Ergebnissen auszuwählen. Der Coverity Software Development Kit ermöglicht es Ihnen, durch das Erstellen von benutzerdefinierten Kontrolleure einzigartige Fehlertypen in C und C ++ Code zu erkennen. Dies ist zusätzlich zu benutzerdefinierten Kontrolleure zu schaffen für die Suche nach Gleichzeitigkeit, Ausnahmebehandlung und andere wichtige Fragen. „“
http://www.coverity.com/products/static-analysis.html

Typische out-of-the-Box-Analyse-Konfiguration für Coverity wird dazu neigen, zwischen einem und drei Fehlern pro tausend Zeilen Code zu geben. Wenn Sie Hunderttausende von Defekten haben, und Sie haben deutlich weniger als 100 Millionen Zeilen Code, kann ich garantieren, dass Ihre Analyse Konfiguration für Ihre Organisation falsch oder suboptimal ist.

Neben Tuning-Analyse-Konfiguration selbst, können Sie durch Auswirkungen priorisieren - den Standard „hoch“, „mittel“ und „niedrig“ Mapping sollte gut genug sein, um Ihnen den Einstieg, bis Sie ein Gefühl dafür bekommen, für die Unterkategorien neigen dazu, schädlichsten auf Ihre Bewerbung.

Drittens, wenn Ihre Code-Basis groß ist (und deren nicht) unterteilen sie in Komponenten, so dass jedes Team oder eine Gruppe von Entwicklern nur einen Blick darauf werfen kann sie direkt halten den Code - dies ermöglicht sowohl mehr überschaubaren Einheiten von Arbeit Griff, und es können Sie auch auf die Komponente priorisieren (Defekte in Servercode sind kritischer als Defekte in Client-Code oder Testcode oder Code von Drittanbietern, etc.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top