Metriken - Übersicht und Beschreibung
Spaltenabkürzung in der Ansicht „Standard-Metriken“ | Beschreibung |
---|---|
Codegröße | |
Variablengröße | |
Stack-Größe | |
Aufrufe | |
Tasks | |
Globale | |
EAs | |
Lokale | |
Eingänge | |
Ausgänge | |
NOS | |
Kommentare | |
McCabe | |
Prather | |
DIT | |
NOC | |
RFC | |
CBO | |
Elshof | |
LCOM | |
n1 (Halstead) | Halstead – Anzahl unterschiedlicher verwendeter Operatoren (n1) |
N1 (Halstead) | |
n2 (Halstead) | Halstead – Anzahl unterschiedlicher verwendeter Operanden (n2) |
N2 (Halstead) | |
HL (Halstead) | |
HV (Halstead) | |
D (Halstead) | |
AS-Verzweigungen (englisch: "SFC Branches") | |
AS-Schritte (englisch: "SFC Steps") |
Detaillierte Beschreibung
Codegröße [Anzahl Bytes] ("Codegröße")
Codegröße als Anzahl an Bytes.
Variablengröße [Anzahl Bytes] ("Variablengröße")
Variablengröße als Anzahl an Bytes.
Stack-Größe [Anzahl Bytes] ("Stack-Größe")
Stack-Größe als Anzahl an Bytes.
Anzahl Aufrufe ("Aufrufe")
Anzahl der Aufrufe des Bausteins innerhalb der Applikation.
Anzahl der Aufrufe aus Tasks ("Tasks")
Anzahl der Tasks, die den Baustein aufrufen.
Unterschiedliche globale Variablen verwendet ("Globale")
Anzahl der unterschiedlichen globalen Variablen, die im Baustein verwendet werden.
Anzahl direkter Adresszugriffe ("EAs")
Anzahl der Zugriffe auf EAs im Baustein = Anzahl aller lesenden und schreibenden Zugriffe auf eine direkte Adresse.
Beispiel:
Die Anzahl direkter Adresszugriffe für das Programm MAIN beträgt 2.
PROGRAM MAIN
VAR
OnOutput AT%QB1 : INT;
nVar : INT;
END_VAR
OnOutput := 123;
nVar := OnOutput;
Anzahl lokaler Variablen ("Lokale")
Anzahl der lokalen Variablen im Baustein (VAR).
Anzahl Eingabevariablen ("Eingänge")
Anzahl der Eingangsvariablen des Bausteins (VAR_INPUT).
Anzahl Ausgabevariablen ("Ausgänge")
Anzahl der Ausgangsvariablen des Bausteins (VAR_OUTPUT).
Anzahl Anweisungen ("NOS")
NOS: Number Of executable Statements
NOS = Anzahl der ausführbaren Anweisungen im Baustein
Prozentsatz Kommentare ("Kommentare")
Kommentaranteil = Anzahl der Kommentare / Anzahl der Anweisungen im Baustein
Zu den Anweisungen gehören an dieser Stelle beispielsweise auch Deklarationsanweisungen.
Komplexität (McCabe) ("McCabe")
Komplexität = Anzahl der Binärverzweigungen im Kontrollflussgraphen für den Baustein (beispielsweise die Anzahl an Verzweigungen bei IF- und CASE-Anweisungen sowie Schleifen)
Verschachtelungskomplexität (Prather) ("Prather")
Verschachtelungsgewicht = Anweisungen * Verschachtelungstiefe
Verschachtelungskomplexität = Verschachtelungsgewicht / Anzahl Anweisungen
Verschachtelung beispielsweise durch IF/ELSEIF- oder CASE/ELSE-Anweisungen.
Tiefe des Vererbungsbaums ("DIT")
DIT: Depth of Inheritance Tree
DIT = Vererbungstiefe bzw. maximale Pfadlänge von der Wurzel bis zur betrachteten Klasse
Anzahl Kindobjekte ("NOC")
NOC: Number Of Children
NOC = Anzahl der Kinderklassen bzw. Anzahl der direkten Spezialisierungen einer Klasse
Reaktion auf Klasse ("RFC")
RFC: Response For Class
RFC = Anzahl der Methoden, die potenziell ausgeführt werden können, wenn ein Objekt der betrachteten Klasse auf eine eingegangene Nachricht reagiert
Der Wert dient der Messung der Komplexität (im Hinblick auf Testbarkeit und Wartbarkeit). Dabei werden alle möglichen direkten und indirekten über Assoziationen erreichbaren Methodenaufrufe gewertet.
Koppeln zwischen Objekten ("CBO")
CBO: Coupling Between Objects
CBO = Anzahl der mit der betrachteten Klasse gekoppelten Klasse(n)
Der Wert dient der Angabe der Kopplung zwischen Objektklassen. Dabei bezieht sich die Kopplung darauf, dass eine Klasse Instanzvariablen (Variablen einer instanzierten Klasse) und die Methoden einer anderen Klasse verwendet.
Referenzierungskomplexität (Elshof) ("Elshof")
Referenzkomplexität = Referenzierte Daten (Anzahl Variablen) / Anzahl der Datenreferenzen
Mangelnder Zusammenhalt in Methoden (LCOM) ("LCOM")
Zusammenhalt = Paare von Methoden ohne gemeinsame Instanzvariablen abzüglich Paare von Methoden mit gemeinsamen Instanzvariablen
Dieser Zusammenhaltswert ist ein Maß für die Kapselung einer Klasse. Je höher der Wert, desto schlechter die Kapselung. Es werden hierbei auch die gegenseitigen Methoden- und Property-Aufrufe (ohne Init und Exit) berücksichtigt.
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.
Anzahl AS-Verzweigungen
Wenn der Funktionsbaustein in Ablaufsprache (AS, englisch: SFC) implementiert ist, gibt diese Codemetrik die Anzahl an Verzeigungen im Funktionsbaustein an.
Anzahl AS-Schritte
Wenn der Funktionsbaustein in Ablaufsprache (AS, englisch: SFC) implementiert ist, gibt diese Codemetrik die Anzahl an Schritten im Funktionsbaustein an.