Halstead Complexity Measures
   HOME

TheInfoList



OR:

Halstead complexity measures are software metrics introduced by Maurice Howard Halstead in 1977 as part of his treatise on establishing an empirical science of software development. Halstead made the observation that metrics of the software should reflect the implementation or expression of algorithms in different languages, but be independent of their execution on a specific platform. These metrics are therefore computed statically from the code. Halstead's goal was to identify measurable properties of software, and the relations between them. This is similar to the identification of measurable properties of matter (like the volume, mass, and pressure of a gas) and the relationships between them (analogous to the gas equation). Thus his metrics are actually not just complexity metrics.


Calculation

For a given problem, let: * \,\eta_1 = the number of distinct operators * \,\eta_2 = the number of distinct operands * \,N_1 = the total number of operators * \,N_2 = the total number of operands From these numbers, several measures can be calculated: * Program vocabulary: \eta = \eta_1 + \eta_2 \, * Program length: N = N_1 + N_2 \, * Calculated estimated program length: \hat = \eta_1 \log_2 \eta_1 + \eta_2 \log_2 \eta_2 * Volume: V = N \times \log_2 \eta * Difficulty : D = \times * Effort: E = D \times V The difficulty measure is related to the difficulty of the program to write or understand, e.g. when doing
code review Code review (sometimes referred to as peer review) is a software quality assurance activity in which one or several people check a program mainly by viewing and reading parts of its source code, and they do so after implementation or as an interr ...
. The effort measure translates into actual coding time using the following relation, * Time required to program: T = seconds Halstead's delivered bugs (B) is an estimate for the number of errors in the implementation. *Number of delivered bugs : B = or, more recently, B = is accepted .


Example

Consider the following C program: main() The distinct operators (\,\eta_1) are: main, (), , int, scanf, &, =, +, /, printf, ,, ; The distinct operands (\,\eta_2) are: a, b, c, avg, "%d %d %d", 3, "avg = %d" * \eta_1 = 12, \eta_2 = 7, \eta = 19 * N_1 = 27, N_2 = 15, N = 42 * Calculated Estimated Program Length: \hat = 12 \times log_2 12 + 7 \times log_2 7 = 62.67 * Volume: V = 42 \times log_2 19 = 178.4 * Difficulty: D = \times = 12.85 * Effort: E = 12.85 \times 178.4 = 2292.44 * Time required to program: T = = 127.357 seconds * Number of delivered bugs: B = = 0.05


See also

* Function point *
Cyclomatic complexity Cyclomatic complexity is a software metric used to indicate the complexity of a program. It is a quantitative measure of the number of linearly independent paths through a program's source code. It was developed by Thomas J. McCabe, Sr. in 1976. ...


References

{{Reflist


External links


The Halstead metrics
- Extensive discussion on the calculation and use of Halstead Metrics in an object-oriented environment (with specific reference to Java).

- Measurement of Halstead Metrics.
Explanation with a Sample Program
- Example (on Page 6 of the PDF)
Script computing Halstead Metrics and using them for commented code detection



Calculator for computing Halstead metrics
Software metrics