Frage

Was Rate Defekt kann ich in einem C erwarten ++ Code-Basis, die für einen Embedded-Prozessor (DSP) geschrieben wird, da es noch keine Unit-Tests gewesen, keine Code-Reviews, keine statische Code-Analyse und das Kompilieren des Projekts erzeugt etwa 1500 Warnungen. 5 Defekte / 100 Zeilen Code eine vernünftige Schätzung?

War es hilfreich?

Lösung

Trotz meiner Skepsis der Gültigkeit der Schätzung in diesem Fall habe ich einige Statistiken gefunden, die relevant sein können.

dieser Artikel , der Autor zitiert Zahlen von einem " eine große Menge an empirischen Studien“, veröffentlicht in Software Assessments, Benchmarks und Beste Practices (Jones, 2000) . Bei SIE CMM Level 1 , das klingt wie das Niveau dieses Codes kann man erwarten, eine Fehlerrate von 0,75 pro Funktionspunkt . Ich werde es Ihnen überlassen, um zu bestimmen, wie Funktionspunkte und LOC in Ihrem Code beziehen kann - Sie werden wahrscheinlich brauchen eine Metriken Werkzeug diese Analyse durchzuführen.

Steve McConnell in Code Complete a zitiert studieren von 11 Projekten, die von dem gleichen Team entwickelt, 5 ohne Code-Reviews, 6 mit Code-Reviews. Die Fehlerrate für den nicht-reviewed Code betrug 4,5 pro 100 LOC, und für die Bewertung es 0,82 war. Also auf dieser Grundlage scheint Ihre Schätzung Messe in Ermangelung anderer Informationen. Allerdings muß ich unter diesem Team ein Maß an Professionalität übernehmen (nur aus der Tatsache, dass sie das Bedürfnis verspürt, die Studie durchzuführen), und dass sie zumindest auf die Warnungen besucht haben; Ihre Fehlerrate sein könnte viel höher .

Der Punkt über Warnungen ist, dass einige gutartig sind, und einige sind Fehler (das heißt zu einem unerwünschten Verhalten der Software führen wird), wenn man sich auf der Annahme, ignoriert, dass sie alle gutartig sind, werden Sie Fehler einführen. Außerdem einige werden werden Fehler unter Wartung, wenn andere Bedingungen ändern, aber wenn Sie bereits eine Warnung akzeptieren gewählt haben, haben Sie keine Verteidigung gegen Einführung solcher Fehler.

Andere Tipps

Ihre Frage lautet: „Ist 5 Defekte / 100 Zeilen Code eine vernünftige Schätzung?“ Diese Frage ist sehr schwer zu beantworten, und es ist stark abhängig von der Code-Basis und die Komplexität des Codes.

Sie auch in einem Kommentar erwähnt „das Management zu zeigen, dass es wahrscheinlich viele Fehler in der Code-Basis ist.“ - das große, ein dickes Lob ist, direkt an

Um offene Management figurative Augen, würde ich zumindest deuten auf eine 3-Säulen-Konzept:

  • nimmt spezifische Compiler-Warnungen, und zeigt, wie einige von ihnen können dazu führen, undefiniert / katastrophales Verhalten. Nicht alle Warnungen als gewichtig sein. Zum Beispiel, wenn Sie jemand mit einem nicht initialisierten Zeiger haben, das ist reines Gold. Wenn Sie jemand haben, einen nicht signierten 16-Bit-Wert in einen unsigned 8-Bit-Wert zu stopfen, und es kann, dass der Wert 16-Bit angezeigt wird immer <= 255 sein, dass man nicht gonna Hilfe ist macht Ihren Fall so stark.
  • eine statische Analyse-Tool. PC-Lint (oder FlexeLint) ist billig und bietet eine gute "bang for the buck". Es wird mit ziemlicher Sicherheit Sachen fängt die Compiler nicht, und es kann über Übersetzungseinheiten (Flusen alles zusammen, auch mit zwei oder mehreren Stichen) und findet subtile Fehler auch laufen. Wiederum einige davon als Zeichen verwendet werden.
  • ein Tool ausführen, die anderen Metriken auf der Komplexität des Codes geben, eine andere Fehlerquelle. Ich würde empfehlen, M Squared Ressourcen-Standard-Metriken (RSM) die geben Sie weitere Informationen und Metriken (einschließlich Codekomplexität) als man sich wünschen kann. Wenn Sie sagen, dass Management einer Komplexität Punktzahl über 50 „im Grunde nicht überprüfbar“ ist und Sie haben eine Punktzahl von 200 in einer Routine, dass sollten einige Augen öffnen.

Ein weiterer Punkt: Ich benötige sauber compiliert in meinen Gruppen und sauber Lint Ausgang zu. Normalerweise erreicht dies kann nur durch guten Code zu schreiben, aber gelegentlich die Compiler / Flusen Warnungen müssen gezwickt werden, um das Werkzeug für die Dinge zu beruhigen, die nicht Probleme (Verwendung umsichtig).

Aber der wichtige Punkt, den ich machen will, ist dies: sehr vorsichtig sein, wenn sie in gehen & Fixierung Compiler & Flusen Warnungen . Es ist ein bewundernswertes Ziel, aber man kann auch inadvertantly bricht Code zu arbeiten, und / oder uncover undefiniertes Verhalten, das zufällig in dem „gebrochen“ Code gearbeitet. Ja, das ist wirklich passiert. So trat vorsichtig.

Schließlich, wenn Sie eine solide Reihe von Tests haben bereits an Ort und Stelle, die Sie bestimmen, ob Sie versehentlich etwas während Refactoring brechen helfen.

Viel Glück!

Werfen Sie einen Blick auf den Code-Qualität. Es würde Sie schnell einen Hinweis auf die Menge von Problemen in der Quelle zu verstecken. Wenn die Quelle eine lange Zeit hässlich und nehmen ist es zu verstehen, wird eine Menge Fehler im Code sein.

Nun strukturierter Code mit einheitlichem Stil und das ist leicht zu verstehen, wird weniger Probleme enthalten. Code zeigt, wie viel Mühe und Gedanken gingen hinein.

Meine Vermutung ist, wenn die Quelle enthält, dass viele Warnungen es wird eine Reihe von Fehlern im Code versteckt sein.

Das hängt auch davon ab, die den Code (Erfahrungsstufe) schrieb, und wie groß die Code-Basis ist.

Ich möchte alle Warnungen als Fehler behandeln.

Wie viele Fehler Sie erhalten, wenn Sie ein statisches Analyse-Tool auf dem Code ausführen?

EDIT

Ausführen cccc, und überprüfen Sie die zyklische Komplexität des mccabe. Es sollte sagen, wie komplex der Code es.

http://sourceforge.net/projects/cccc/

Ausführen andere statische Analysetools.

Wenn Sie eine Schätzung der Anzahl der Defekte erhalten möchten, ist die übliche Art und Weise der statistischen estimatation ist, die Daten unterabzutasten. Ich würde drei mittlere Subroutinen zufällig auswählen und prüfen sie sorgfältig für Fehler (Compiler-Warnungen beseitigen, statische Analyse-Tool ausführen, etc). Wenn Sie drei Fehler in insgesamt 100 Zeilen Code zufällig ausgewählt finden, scheint es sinnvoll, dass eine ähnliche Dichte von Fehlern in dem Rest des Codes ist.

Das Problem hier erwähnte neue Bugs Einführung ist ein wichtiges Thema, aber Sie brauchen nicht den geändertenen Code wieder in den Produktionszweig zu prüfen, diesen Test auszuführen. Ich würde eine gründliche Reihe von Unit-Tests deuten darauf hin, bevor Sie Subroutinen Modifizierung und Reinigung alle durch sehr gründliche Systemtests gefolgt Code vor neuen Code zur Produktion freigegeben wird.

Wenn Sie die Vorteile von Unit-Tests, Code-Reviews, statischen Analyse-Tool demonstrieren wollen, schlage ich vor, eine Pilotstudie zu tun.

Hat einige Unit-Tests, Code-Reviews und statische Analyse-Tools auf einem Teil des Codes ausgeführt werden. Zeigen Management, wie viele Fehler, die Sie mit Hilfe dieser Methoden finden. Hoffentlich sprechen die Ergebnisse für sich.

Der folgende Artikel hat einige Zahlen basieren auf realen Projekten, die statische Analyse angewendet wurde: http://www.stsc.hill.af.mil/crosstalk/2003/11/0311German.html

Natürlich sind die Kriterien, nach denen eine Anomalie gezählt wird dramatisch die Ergebnisse beeinflussen können, was zu einer großen Variation in den in Tabelle 1 In dieser Tabelle angegebenen Zahlen liegt die Anzahl von Anomalien pro tausend Zeilen Code für C 500 (!) bis etwa 10 (automatisch generiert).

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