Halstead complexity measures: Difference between revisions

Content deleted Content added
No edit summary
Add: redlink for Maurice Howard Halstead
 
(78 intermediate revisions by 61 users not shown)
Line 1:
{{short description|Software maintainability index}}
'''Halstead complexity mehttp://en.wikipedia.org/wiki/Main_Pageasuresmeasures''' are [[software metric]]s introduced by [[Maurice Halstead|Maurice Howard Halstead]] in 1977<ref name="Elements of Software Science">{{cite book |author=Halstead, Maurice H. |title=Elements of Software Science |publisher=Elsevier North-Holland, Inc. |___location=Amsterdam |year=1977 |isbn=0-444-00205-7}}</ref> as part of his treatise on establishing an empirical science of software development.
Halstead makesmade 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 http://en.wikipedia.org/wiki/Main_Pagethethe code.
http://en.wikipedia.org/wiki/Main_Page
 
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 [[ideal gas law|gas equahttp://en.wikipedia.org/wiki/Main_Pagetionequation]]).
Thus his metrics are actually not just complexity metrics.http://en.wikipedia.org/wiki/Main_Page
 
http://en.wikipedia.org/wiki/Main_Pagehttp://en.wikipedia.org/wiki/Main_Pagehttp://en.wikipedia.org/wiki/Main_Page
== Calculation ==http://en.wikipedia.org/wiki/Main_Page
For a given problem, Letlet:
* <math>\,\eta_1</math> = the number of distinct operators
* <math>\,\eta_2</math> = the number of distinct operandshttp://en.wikipedia.org/wiki/Main_Pageoperands
* <math>\,N_1</math> = the total number of operators
* <math>\,N_2</math> = the total number of operands
Line 17 ⟶ 18:
* Program vocabulary: <math>\eta = \eta_1 + \eta_2 \,</math>
* Program length: <math>N = N_1 + N_2 \,</math>
* Calculated estimated program length: <math>\hat{N} = \eta_1 \log_2 \eta_1 + \eta_2 \log_2 \eta_2 </math>
* Volume: <math>V = N \times \log_2 \eta </math>
* Difficulty : <math>D = { \eta_1 \over 2 } \times { N_2 \over \eta_2 } </math>
Line 28 ⟶ 29:
 
Halstead's delivered bugs (B) is an estimate for the number of errors in the implementation.
*Number of delivered bugs : <math>B = {E^{2 \over 3} \over 3000}</math> or, more recently, <math>B = {V \over 3000}</math> is accepted.<ref name="Elements of Software Science" />
 
==References Example ==
 
<references />
Consider the following [[C (programming language)|C]] program:
 
<syntaxhighlight lang="c">
main()
{
int a, b, c, avg;
scanf("%d %d %d", &a, &b, &c);
avg = (a+b+c)/3;
printf("avg = %d", avg);
}
</syntaxhighlight>
The distinct operators (<math>\,\eta_1</math>) are:
<code>main</code>, <code>()</code>, <code>{}</code>, <code>int</code>, <code>scanf</code>,
<code>&</code>, <code>=</code>, <code>+</code>, <code>/</code>, <code>printf</code>, <code>,</code>, <code>;</code>
The distinct operands (<math>\,\eta_2</math>) are:
<code>a</code>, <code>b</code>, <code>c</code>, <code>avg</code>, <code>"%d %d %d"</code>, <code>3</code>, <code>"avg = %d"</code>
* <math>\eta_1 = 12</math>, <math>\eta_2 = 7</math>, <math>\eta = 19</math>
* <math>N_1 = 27</math>, <math>N_2 = 15</math>, <math>N = 42</math>
* Calculated Estimated Program Length: <math>\hat{N} = 12 \times log_2 12 + 7 \times log_2 7 = 62.67</math>
* Volume: <math>V = 42 \times log_2 19 = 178.4</math>
* Difficulty: <math>D = { 12 \over 2 } \times { 15 \over 7 } = 12.85</math>
* Effort: <math>E = 12.85 \times 178.4 = 2292.44</math>
* Time required to program: <math>T = { 2292.44 \over 18 } = 127.357</math> seconds
* Number of delivered bugs: <math>B = { 2292.44 ^ { 2 \over 3 } \over 3000 } = 0.05</math>
 
== See also ==
* [[Function point]]
* [[Cyclomatic complexity]]
 
==References==
{{Reflist}}
 
==External links==
Line 41 ⟶ 72:
* [http://www.verifysoft.com/en_halstead_metrics.html Calculation of Halstead metrics] - Measurement of Halstead Metrics.
* [http://www.win.tue.nl/~aserebre/2IS55/2010-2011/10.pdf Explanation with a Sample Program] - Example (on Page 6 of the PDF)
* [https://github.com/dborowiec/commentedCodeDetector Script computing Halstead Metrics and using them for commented code detection]
 
* [http://pic.dhe.ibm.com/infocenter/rtrthelp/v8r0m0/index.jsp?topic=%2Fcom.ibm.rational.testrt.studio.doc%2Ftopics%2Fcsmhalstead.htm IBM]
* [https://www.vcalc.com/wiki/halstead%20software%20complexity Calculator for computing Halstead metrics]
[[Category:Software metrics]]