Ich frage mich, ob jemand einige Experimente durchgeführt hat, bei denen Codemetriken (SLOC, zyklomatische Komplexität usw.) mit der Fehlerdichte in objektorientierten Anwendungen in Beziehung gesetzt wurden.
Ich suche keine Experimente, die nur eine Korrelation beweisen oder widerlegen, sondern beides. Ich versuche nicht , einen Königsweg zu finden , wie ich , dass die Bug Dichte eines Projektes glauben könnte , um eine oder mehr Metriken für ein bestimmtes Projekt oder Team korrelieren und die Korrelation kann während der Laufzeit des Projektes / Teams ändern.
Mein Ziel ist es,
- Messen Sie alle interessanten Messdaten für 2-3 Monate (wir haben bereits einige vom Sonar).
- Suchen Sie eine Metrik, die mit der Anzahl der neuen Fehler korreliert.
- Führen Sie eine Ursachenanalyse durch, um zu überprüfen, warum dies passiert (z. B. fehlt uns eine bestimmte Konstruktionskompetenz?).
- Verbessern Sie die Fertigkeit und messen Sie Änderungen für ein paar Wiederholungen.
- Abspülen und wiederholen 2.
Wenn Sie hierzu noch keine Erfahrung haben, sich aber an eine Veröffentlichung / einen Blog zu diesem Thema erinnern, würde ich mich freuen, wenn Sie uns diese mitteilen können.
Bisher habe ich die folgenden Links mit einigen Informationen zu diesem Thema gefunden
- Befinden sich Bugs in komplexem Code? - nur die Folien aus einer Präsentation.
- Änderungen und Fehler: Mining und Vorhersage von Entwicklungsaktivitäten - Folien nur für eine Präsentation. Unterm Strich ist die Wahrscheinlichkeit von Fehlern umso höher, je mehr Abhängigkeiten vorhanden sind (ich denke, dies ist eine recht allgemeine Regel).
- Misserfolg ist ein Wort aus vier Buchstaben - Ein Paradies in Bezug auf die Korrelation zwischen Fehlern und Metriken.
quelle
Antworten:
Immer wenn ich von Versuchen höre, eine Art codebasierte Metrik mit Softwarefehlern in Verbindung zu bringen, denke ich zuerst an McCabes zyklomatische Komplexität . Verschiedene Studien haben ergeben, dass ein Zusammenhang zwischen einer hohen zyklomatischen Komplexität und der Anzahl der Defekte besteht. Andere Studien, die Module mit einer ähnlichen Größe (in Bezug auf Codezeilen) untersuchten, stellten jedoch möglicherweise keine Korrelation fest.
Für mich könnten sowohl die Anzahl der Zeilen in einem Modul als auch die zyklomatische Komplexität als gute Indikatoren für mögliche Fehler dienen oder möglicherweise die Wahrscheinlichkeit erhöhen, dass Fehler auftreten, wenn Änderungen an einem Modul vorgenommen werden. Ein Modul (insbesondere auf Klassen- oder Methodenebene) mit hoher zyklomatischer Komplexität ist schwerer zu verstehen, da es eine große Anzahl unabhängiger Pfade durch den Code gibt. Ein Modul (wiederum insbesondere auf Klassen- oder Methodenebene) mit einer großen Anzahl von Zeilen ist ebenfalls schwer zu verstehen, da die Zunahme der Zeilen bedeutet, dass mehr Dinge geschehen. Es gibt viele statische Analysewerkzeuge, die die Berechnung beider Quellcodezeilen anhand festgelegter Regeln und der zyklomatischen Komplexität unterstützen. Es scheint, als würde das Erfassen dieser Regeln die gering hängenden Früchte packen.
Die Halstead-Metrik könnte auch interessant sein. Leider scheint ihre Gültigkeit etwas umstritten zu sein, sodass ich mich nicht unbedingt auf sie verlassen müsste. Eine von Halsteads Maßnahmen ist die Schätzung von Fehlern auf der Grundlage des Aufwands oder des Volumens (ein Verhältnis zwischen der Programmlänge in Bezug auf die Gesamtzahl der Operatoren und Operanden und dem Programmvokabular in Bezug auf die einzelnen Operatoren und Operatoren).
Es gibt auch eine Gruppe von Metriken, die als CK-Metriken bezeichnet werden. Die erste Definition dieser Metrik-Suite befindet sich in einem Artikel mit dem Titel Eine Metrik-Suite für objektorientiertes Design von Chidamber und Kemerer. Sie definieren gewichtete Methoden pro Klasse, Tiefe des Vererbungsbaums, Anzahl der Kinder, Kopplung zwischen Objektklassen, Antwort für eine Klasse und mangelnde Kohäsion in Methoden. Ihr Artikel enthält die Berechnungsmethoden sowie eine Beschreibung der Analyse der einzelnen Methoden.
In Bezug auf die wissenschaftliche Literatur, die diese Metriken analysiert, könnte Sie die empirische Analyse von CK-Metriken auf objektorientierte Entwurfskomplexität: Implikationen für Softwarefehler interessieren, die von Ramanath Subramanyam und MS Krishna verfasst wurde. Sie analysierten drei der sechs CK-Metriken (gewichtete Methoden pro Klasse, Kopplung zwischen Objektklasse und Tiefe des Vererbungsbaums). Ein Blick durch das Papier zeigt, dass es sich um potenziell gültige Messgrößen handelt, die jedoch mit Vorsicht interpretiert werden müssen, da eine "Verbesserung" zu anderen Änderungen führen kann, die ebenfalls zu einer höheren Wahrscheinlichkeit von Fehlern führen.
Die von Yuming Zhou und Hareton Leung verfasste empirische Analyse objektorientierter Entwurfsmetriken zur Vorhersage von Fehlern mit hohem und niedrigem Schweregrad untersucht auch die CK-Metriken. Ihr Ansatz bestand darin, zu bestimmen, ob sie Fehler basierend auf diesen Metriken vorhersagen können. Sie stellten fest, dass viele der CK-Metriken (mit Ausnahme der Tiefe des Vererbungsbaums und der Anzahl der Kinder) ein gewisses Maß an statistischer Signifikanz bei der Vorhersage von Bereichen haben, in denen Fehler lokalisiert werden könnten.
Wenn Sie eine IEEE-Mitgliedschaft haben, würde ich empfehlen, in den IEEE-Transaktionen zur Softwareentwicklung nach mehr wissenschaftlichen Veröffentlichungen und in der IEEE-Software nach realistischeren und angewandten Berichten zu suchen . Der ACM verfügt möglicherweise auch über relevante Veröffentlichungen in seiner digitalen Bibliothek .
quelle
Ich habe mögliche Zusammenhänge in einem meiner Blog-Beiträge besprochen :
quelle
In dem Buch Code Complete, S. 457, sagt Steve McConnell, dass "die Komplexität des Kontrollflusses wichtig ist, weil sie mit geringer Zuverlässigkeit und häufigen Fehlern korreliert wurde". Anschließend erwähnt er einige Referenzen, die diese Korrelation stützen, einschließlich McCabe selbst (dem zugeschrieben wird, die zyklomatische Komplexitätsmetrik entwickelt zu haben). Die meisten dieser Kriterien datieren auf die weit verbreitete Verwendung objektorientierter Sprachen zurück. Da diese Metrik jedoch für Methoden in diesen Sprachen gilt, sind die Referenzen möglicherweise genau das, wonach Sie suchen.
Diese Referenzen sind:
Aus eigener Erfahrung ist McCabes Metrik, wie sie von einem Programm in vielen Codeabschnitten berechnet werden kann, nützlich, um Methoden und Funktionen zu finden, die überkompliziert sind und mit hoher Wahrscheinlichkeit Fehler enthalten. Obwohl ich nicht gerechnet habe, hat die Verteilung der Fehler in Funktionen mit hoher zyklomatischer Komplexität im Vergleich zu Funktionen mit niedriger zyklomatischer Komplexität es mir ermöglicht, übersehene Programmierfehler zu entdecken, wenn ich diese Funktionen untersuche.
quelle