|
speziell abgetragen sind jeweils die Werte an den Schwellwerten betrachtet man jedes Komplexitätsmass einzeln gilt: zwischen 7 und 9 Prozent (65-85) der Module überschreiten in den entsprechenden Metriken die festgelegten Schwellwerte |
|
reliable | unreliable |
---|
subjektive Bewertung durch "Anschauen"
schlecht: | 12x | Bsp: TC_812ISA::ExecuteCmd(char*) v ev iv | |
naja: | 19x | Bsp: TBraun_Psd::PsdInit() v ev iv | |
geht: | 10x | Bsp: TMList::ParsingAxis(char*) v |
Beispiele für den Quadrant v(G) > 10 und ev(G) < 4 (wartbar aber unzuverlässig) Diese Module sind in der Mehrheit durch große Fallunterscheidungen (switch und switch-Ersatz). Häufig sind das dialog procedures oder Parsing-Methoden.
Es gibt aber auch Module die davon Abweichen. |
iv(G) | v(G) | nl | nv(G) | ev(G) | |
---|---|---|---|---|---|
max | 45 | 70 | 296 | 1 | 34 |
min | 1 | 1 | 1 | 0,01 | 1 |
avg | 2,79 | 3,64 | 19,92 | 0,37 | 1,70 |
thr | 7 | 10 | 66 | 0,40 | 4 |
Die Mittelwerte liegen alle liegen alle gut unterhalb der Schwellwerte, nur bei edr Normaliesierten Kompelxität nv(G) liegt der Mittelwert recht dicht beim Schwellwert, was aber wohl auf eine unzutreffende Verschiebung durch einen sehr hohen Anteil von Modulen mit nv(G)=1 (20%) zurückzuführen ist, die aber tatsächlich sehr einfache Module sind (siehe unten). Außerdem ist zu erkennen daß - vor allem bei den Komplexitätsmaßen - es Module gibt die die Schwellwerte um mehr als das 5- bis 7-fache übersteigen. Da es sich aber um Maximalwerte handelt ist dies zur Beurteilung nur bedingt geeignet, da jeweils ein einziger Ausreißer genügt um das entsprechende Bild zu erzeigen. Trotzdem ist das Vorkommen solcher Extremwerte sicher bedenklich. |
hier ist eine relativ gute Korrelation zu erkennen; wenn man für die zyklomatische Komplexität einen Schwellwert von 10 festlegt, kann man für die Größe von Modulen eine Obergrenze von 60 Zeilen als Richtlinie ableiten |
hier liegt eine wesentlich schlechtere Korrelation vor, was aber plausibel ist da zur Bestimmung der Essentiellen Komplexität eine Reduktion der Graphen vorgenommen wird und dadurch der Zusammenhang zur Größe aufgelöst wird. (Ideal wäre nach Definition für jedes Modul unabhängig von der Größe der Wert 1) |
der überdimensional große Balken bei 1, der 20% aller Module repräsentiert, umfasst hauptsächlich Get-/Set-Methoden bzw. die Standartimplemetationen die in den RTK-Quellen häufig für virtuelle Methoden implementiert werden, z.B.: virtual void SetSpezificParametersDlg(void) {}; virtual int SingleStepMeasurement(int) {return 0;}; virtual int GetData(WORD*,WORD,WORD) {return 0;}; |