Ist es sinnvoll, die zyklomatische Komplexität / Zeilen des Codeverhältnisses zu berechnen?

8

Im Allgemeinen hängt der Wartbarkeitsindex von vielen Faktoren ab. In Visual Studio hängt es beispielsweise von der zyklomatischen Komplexität, der Vererbungstiefe, der Klassenkopplung und den Codezeilen ab. Diese vier Werte müssen so niedrig wie möglich sein.

Gleichzeitig habe ich weder in Codemetriktools noch in Büchern den Vergleich zwischen nur zyklomatischer Komplexität (CC) und Codezeilen (LC) gesehen.

Ist es sinnvoll, ein solches Verhältnis zu berechnen? Welche Informationen gibt es über den Code? Mit anderen Worten, ist es besser, den CC stärker zu verringern als den LC, um ein niedrigeres Verhältnis zu erhalten?

Was mir auffällt ist, dass bei kleinen Projekten das Verhältnis CC / LC niedrig ist (⅓ und niedriger). Mit anderen Worten ist LC hoch und CC niedrig. In großen Projekten ist CC / LC in den meisten Fällen größer als ½. Warum?

Arseni Mourzenko
quelle
13
Die einzig gültige Codequalitätsmetrik ist WTFs / Minute;)
1
Ihre letzte Vorhersage (kleine x große Projekte) hängt wahrscheinlich von der Plattform und der Menge an Boilerplate-Code ab, die Sie schreiben müssen, um ein minimales Projekt zum Laufen zu bringen. Bei Verwendung der rohen Win32-API ist die Menge an Boilerplate für echten Code beispielsweise für kleine Projekte hoch. Dies erhöht die Anzahl der Codezeilen. Sie können einige zufällige Open Source-Projekte auswählen und ein Streudiagramm von CC x LC erstellen. Vielleicht können Sie etwas Nützliches daraus finden.
Vitor Py
Das von Ihnen vorgeschlagene Verhältnis ist IMO interessant, aber ich möchte vorschlagen, Codezeilen (LOC) durch Funktionspunkte (FP) oder Anwendungsfallpunkte (UCP) zu ersetzen und zu sehen, was Sie erhalten.
M.Sameer

Antworten:

4

Von http://en.wikipedia.org/wiki/Cyclomatic_complexity

Les Hatton behauptete kürzlich (Keynote bei TAIC-PART 2008, Windsor, UK, September 2008), dass McCabe Cyclomatic Complexity die gleiche Vorhersagefähigkeit wie Codezeilen habe. [11]

Das Verhältnis hat ungefähr die gleiche Vorhersagefähigkeit wie jedes separat verwendete.

S.Lott
quelle
1
Ich stimme dir nicht zu. Die zyklomatische Komplexität (CC) korreliert eindeutig mit den logischen Codezeilen (LLOC). Je größer Ihr Projekt ist, desto komplexer ist es. Das ist offensichtlich. Aber CC / LLOC hat keine Korrelation mit der Größe eines Projekts (ich habe konkrete Beispiele gesehen). Dieses Verhältnis hängt von drei Faktoren ab: verwendete Sprache und verwendetes Framework, Komplexität der Projektfunktionen und Codestil. Wenn die beiden ersten Elemente nicht einfach geändert werden können, kann das dritte ein eindeutiger Hinweis auf die Codequalität sein.
Alexandre Butynski
6

Es gibt eine Metrik der zyklomatischen Komplexität pro Quellanweisung - sie wird als zyklomatische Komplexitätsdichte bezeichnet . Diese Metrik kann verwendet werden, um die für Softwareprojekte erforderliche Wartungszeit und -aufwand abzuschätzen.

Thomas Owens
quelle
3

Wie in einer früheren Antwort erwähnt, ist diese Aussage in der akzeptierten Antwort eindeutig falsch.

Das Verhältnis hat ungefähr die gleiche Vorhersagefähigkeit wie jedes separat verwendete.

Die CC-Dichte hat sich von verschiedenen Forschern als sinnvoll erwiesen, obwohl sie bei Praktikern anscheinend keine nennenswerte Popularität erlangt hat. Es gibt Hinweise von zwei bekannten Wissenschaftlern im Bereich Softwaremetriken, dass das Verhältnis (zyklomatische Komplexitätsdichte = CC / KLOC) ein viel besserer Prädiktor für die Wartungsproduktivität ist als das CC oder KLOC allein.

GK Gill und CF Kemerer, "Zyklomatische Komplexitätsdichte und Softwarewartungsproduktivität", in IEEE Transactions on Software Engineering, vol. 17, nein. 12, S. 1284-1288, Dezember 1991. doi: 10.1109 / 32.106988

Es gibt viele andere, die auf dieser Arbeit aufgebaut haben, um auf der CC-Dichte basierende Metriken zu verfeinern. Zwei Beispiele:

  1. T. Andersson, K. Enholm und A. Törn. Längenunabhängiges Maß für die Komplexität von Software. In M. Ross, CA Brebbia, C. Staples und J. Stapleton (Hrsg.), Zweite Internationale Konferenz über Softwarequalitätsmanagement, Band 1, Managing Quality Systems, 1994.

  2. JP Mittal, Pradeep Bhatia und Harish Mittal. 2009. Produktivitätsbewertung der Softwarewartung mithilfe von Fuzzy-Logik. SIGSOFT Softw. Eng. Anmerkungen 34, 5 (Oktober 2009), 1-4. DOI = http://dx.doi.org/10.1145/1598732.1598739

Nikos Houssos
quelle
Und sollte es dementsprechend hoch, niedrig, in einem bestimmten Bereich oder eine nebulöse Vorstellung von "vernünftig" für den besten Fall sein?
Deduplikator
Der Artikel besagt, dass in bestimmten Modulen der untersuchten Systeme die Werte zwischen 0,10 und 0,12 lagen. Ich habe in recht komplexen, um Umgestaltung bettelnden Produktionswebanwendungen Werte zwischen 0,18 und 0,20 beobachtet. Ich würde vermuten, dass etwas um 0,20 zu komplex sein könnte, während Werte näher an 0,10 eine ausreichend niedrige Komplexitätsdichte anzeigen - jedoch werden mehr Daten für sicherere Ergebnisse benötigt.
Nikos Houssos
1

Entschuldigung, aber ich bin mit dieser Aussage nicht einverstanden:

Das Verhältnis hat ungefähr die gleiche Vorhersagefähigkeit wie jedes separat verwendete.

Ein Verhältnis ist eindeutig nicht dasselbe wie eine einzelne Metrik. Basierend auf empirischen Daten behauptet Hatton, dass CC proportional zu XLOC mit einem konstanten Verhältnis von etwa 0,25 (siehe Folie 17) für seinen spezifischen Datensatz ist. Unabhängig davon, ob Ihr XLOC 60 oder 400 beträgt, beträgt Ihr CC: XLOC-Verhältnis etwa 0,25 (ohne Berücksichtigung statistischer Abweichungen bei höheren Zahlen). Das Verhältnis ist also überhaupt nicht vorhersagbar.

Brian Rowe
quelle
Sicherlich ist es wahrscheinlicher, dass Sie statistische Abweichungen mit kleinen Zahlen erhalten
jk.