Messung von Halstead-Metriken mit Testwell CMT++ und CMTJava (Complexity Measures Tools)Quick Finder: 1 Zweck und HerkunftDie Halstead-Komplexitätsmetriken wurden durch Maurice Halstead als quantitatives Maß für die Komplexität entwickelt. Sie basieren direkt auf der Anzahl der Operatoren und Operanden in einem Modul.Die Halstead-Metriken zählen zu den ältesten Softwaremetriken. Sie wurden bereits 1977 eingeführt und sind seither intensiv genutzt und verifiziert worden. Da sie im direkten Zusammenhang zum Programmcode stehen, werden sie oft als Metrik zur Messung der Wartbarkeit eingesetzt. Die Halstead-Messungen sind auch nützlich, um die Codequalität bereits während der Entwicklungsphase positiv zu gestalten. 2 Anzahl der Operatoren und OperandenDie Halstead-Metriken betrachten den Quellcode als eine Aufeinanderfolge von Operatoren und Operanden.Sie zählen
Alle anderen Halstead-Maße werden von diesen vier Werten mit Hilfe der unten beschriebenen Formeln abgeleitet. 2.1 OperandenZeichen der folgenden Kategorien werden von CMT++ als Operanden gezählt:
2.2 OperatorenAlle Zeichen der folgenden Kategorien werden durch CMT++ als Operatoren gezählt (die Zeichen asm und this werden jedoch als Operanden gezählt) :
Die folgenden Kontrollstrukturen case ...: for (...) if (...) seitch (...) while for (...) und catch (...) werden in einer besonderen Weise behandelt. 2.3 Andere
3.1 Programmlänge (N)Die Programmlänge (program length, N) ist die Summe der Gesamtzahl aller Operatoren und Operanden eines Programms:N = N1 + N2 3.2 Vokabulargröße (n)Die Vokabulargröße (vocabulary size, n) erhält man durch die Addition der Anzahl der verschiedenen Operatoren und Operanden:n = n1 + n2 3.3 Volumen des Programms (V)Das Volumen des Programm (program volume, V) gibt den Informationsgehalt der Software gemessen in mathematischen Bits an. Man erhält das Volumen, wenn man die Programmlänge mit dem Zweierlogaritmus der Vokabulargröße (n) multipliziert:V = N * log2(n) Halsteads Volumen (V) beschreibt die Größe der Implementation. Die Berechnung erfolgt mit Hilfe der Anzahl der ausgeführten Operationen und der Bearbeiteten Operanden im Algorithmus. Der Wert V ist daher im Vergleich zu den Zeilenmetriken weniger vom Code-Layout abhängig. Das Volumen einer Funktion sollte mindestens 20 und höchstens 1000 betragen. Eine parameterlose Funktion, die aus einer nicht leeren Zeile besteht beträgt etwa 20. Wenn das Volumen den Wert von 1000 übersteigt, macht die Funktion wahrscheinlich zu viele Dinge. Das Volumen einer Datei sollte zwischen 100 und höchstens 8000 liegen. Diese Grenzwerte basieren auf Volumen, deren LOCpro und v(G) nahe der empfohlenen Limits liegen. Sie können daher zur doppelten Kontrolle dienen. 3.4 Schwierigkeitsgrad (D)Der Schwierigkeitsgrad (difficulty level, D) oder Fehlerneigung eines Programms ist proportional zur Anzahl der verschiedenen Operatoren in diesem Programm.D ist ebenfalls proportional zum Verhältnis zwischen der Gesamtanzahl der Operatoren und der Anzahl der verschiedenen Operanden. Wird der gleiche Operand beispielsweise mehrmals im Programm benutzt, wird er dadurch fehleranfälliger. D = ( n1 / 2 ) * ( N2 / n2 ) 3.5 Programmniveau/Program level (L)Durch den Kehrwert des Schwierigkeitsgrades erhält man das Programmniveau.Ein Programm mit einem niedrigen Niveau ist relativ anfällig für Fehler. L = 1 / D 3.6 Implementieraufwand/Effort to implement (E)Der Implementieraufwand (Effort to implement, E) ist proportional zum Volumen und zum Schwierigkeitsgrad des Programms.E = V * D 3.7 Implementierzeit/Time to implement (T)Die Implementierzeit (T) und die Zeit, die notwendig ist ein Programm zu verstehen, ist proportional zum Implementieraufwand (Effort to implement). Empirische Untersuchungen haben ergeben, daß man eine guten Wert für die notwendige Zeit in Sekunden erhält, wenn man den Implementieraufwand (E) durch 18 teilt.T = E / 18 3.8 Anzahl der ausgelieferten Bugs (B)Anzahl der ausgelieferten Bugs (B) korreliert mit der Komplexität der Software.Halstead gibt für die Berechnung von B die folgende Formel: B = ( E ** (2/3) ) / 3000 ** steht für den Exponenten "Halsteads delivered Bugs" (B) ist eine Schätzung für die Anzahl der Fehler in der Implementation. B ist die wichtigste Halstead-Metrik für den dynamischen Test von Software. Beim Softwaretest sollte man mindestens so viele Fehler im Modul finden wie die Metrik B angibt.
4 Andere "CMT"-Metriken, die in diesem Dokument angesprochen wurdenLOCpro v(G) weitere Informationen über Testwell Complexity Measures Tools: last updated: 05.06.2010 © 2006-2010 Testwell Oy / Verifysoft Technology GmbH |