Metriken aus vorherigen TwinCAT-Versionen
Metriken aus Versionen < TwinCAT 3.1.4026.14:
Spaltenabkürzung in der Ansicht „Standard-Metriken“ | Beschreibung |
|---|---|
Prather | Verschachtelungskomplexität (Prather) |
n1 (Halstead) | Halstead – Anzahl unterschiedlicher verwendeter Operatoren (n1) |
N1 (Halstead) | Halstead – Anzahl Operatoren (N1) |
n2 (Halstead) | Halstead – Anzahl unterschiedlicher verwendeter Operanden (n2) |
N2 (Halstead) | Halstead – Anzahl Operanden (N2) |
HL (Halstead) | Halstead – Länge (HL) |
HV (Halstead) | Halstead – Volumen (HV) |
D (Halstead) | Halstead – Schwierigkeit (D) |
Verschachtelungskomplexität (Prather)
Verschachtelungsgewicht = Anweisungen * Verschachtelungstiefe
Verschachtelungskomplexität = Verschachtelungsgewicht / Anzahl Anweisungen
Verschachtelung beispielsweise durch IF/ELSEIF- oder CASE/ELSE-Anweisungen.
Halstead (n1, N1, n2, N2, HL, HV, D)
Die folgenden Metriken gehören zu dem Bereich "Halstead":
- Anzahl unterschiedlicher verwendeter Operatoren - Halstead (n1)
- Anzahl Operatoren - Halstead (N1)
- Anzahl unterschiedlicher verwendeter Operanden - Halstead (n2)
- Anzahl Operanden - Halstead (N2)
- Länge - Halstead (HL)
- Volumen - Halstead (HV)
- Schwierigkeit - Halstead (D)
Hintergrundinformationen:
- Verhältnis von Operatoren und Operanden (Anzahl, Komplexität, Testaufwand)
- Basiert auf der Annahme, dass sich ausführbare Programme aus Operatoren und Operanden zusammensetzen.
- Operanden in TwinCAT: Variablen, Konstanten, Komponenten, Literale und IEC-Adressen.
- Operatoren in TwinCAT: Schlüsselwörter, logische und Vergleichsoperatoren, Zuweisungen, IF, FOR, BY, ^, ELSE, CASE, Caselabel, BREAK, RETURN, SIN, +, Labels, Aufrufe, Pragmas, Konvertierungen, SUPER, THIS, Indexzugriff, Komponentenzugriff etc.
Für jedes Programm werden die folgenden Basismaße gebildet:
- Anzahl unterschiedlicher verwendeter Operatoren - Halstead (n1),
Anzahl unterschiedlicher verwendeter Operanden - Halstead (n2): - Anzahl der verwendeten unterschiedlichen Operatoren (h1) und Operanden (h2), zusammen die Vokabulargröße h.
- Anzahl Operatoren - Halstead (N1),
Anzahl Operanden - Halstead (N2): - Anzahl der insgesamt verwendeten Operatoren (N1) und Operanden (N2), zusammen die Implementierungslänge N.
- (Sprachkomplexität = Operatoren/Operatorenvorkommnisse * Operanden/Operandenvorkommnisse)
Hieraus werden dann die Größen Halstead-Länge (HL) und Halstead-Volumen (HV) errechnet:
- Länge - Halstead (HL),
Volumen - Halstead (HV): - HL = h1* log2h1 + h2* log2h2
- HV = N* log2h
Aus den Basisgrößen kann man verschiedene Kennzahlen berechnen:
- Schwierigkeit - Halstead (D):
- Schwierigkeit, ein Programm zu schreiben bzw. zu verstehen (beispielsweise bei einem Code-Review)
- D = h1/2 *N2/h2
- Aufwand:
- E = D*V
Die Kennzahlen stimmen meist sehr gut mit tatsächlich gemessenen Werten überein. Der Nachteil ist, dass die Methode nur einzelne Funktionen betrifft und ausschließlich lexikalische/textuelle Komplexität misst.