Halstead-Metrik
# Halstead-Metrik

Die Halstead-Metrik ist eine 1977 von Maurice Howard Halstead vorgestellte Softwaremetrik. Sie gehört zu den statischen, analysierenden Verfahren der Komplexitätsmessung von Software.
Hierbei wird die Systemkomponente nicht aktiv ausgeführt (wie bei den dynamischen Verfahren), sondern gezielt Informationen über den Prüfling mit analytischen Mitteln gesammelt.

## Berechnung

Die Halstead-Metrik bedient sich hierbei der Annahme, dass ausführbare Programmteile aus Operatoren und Operanden aufgebaut sind. Die Definition, was die zu betrachtenden Operatoren und Operanden sind, ist dabei eine der Aufgaben vor dem Einsatz einer Halstead-Metrik. Typischerweise werden z. B. Variablen und Konstanten als Operanden betrachtet; Schlüsselwörter, logische und Vergleichsoperatoren usw. als Operatoren.
Es werden dann für jedes Programm folgende Basismaße gebildet:
* Anzahl der verwendeten unterschiedlichen Operatoren ($\eta _{1}$) und Operanden ($\eta _{2}$), zusammen die Vokabulargröße $\eta$.
* Anzahl der insgesamt verwendeten Operatoren ($N_{1}$) und Operanden ($N_{2}$), zusammen die Implementierungslänge $N$.
Hieraus werden dann die Größen Halstead-Länge ($HL$) und Halstead-Volumen ($HV$) errechnet:
* $HL=\eta _{1}\cdot \log _{2}\eta _{1}+\eta _{2}\cdot \log _{2}\eta _{2}$
* $HV=N\cdot \log _{2}\eta$
Aus den Basisgrößen kann man verschiedene Kennzahlen berechnen:
* Schwierigkeit ein Programm zu schreiben bzw. zu verstehen, z. B. bei einem Code-Review: $D={\eta _{1} \over 2}\cdot {N_{2} \over \eta _{2}}$
* Aufwand: $E=D\cdot HV$
* Implementierungszeit: $T={E \over 18}$ Sekunden
Die Halstead-Metrik ist leicht zu ermitteln und zu berechnen, automatisierbar und für alle Programmiersprachen einsetzbar. Die Kennzahlen stimmen meist sehr gut mit tatsächlich gemessenen Werten überein. Der Nachteil ist, dass sie nur einzelne Funktionen betrifft und ausschließlich lexikalische/textuelle Komplexität misst.