Software Engineering | Halstead’s Software Metrics

A computer program is an implementation of an algorithm considered to be a collection of tokens which can be classified as either operators or operands. Halstead’s metrics are included in a number of current commercial tools that count software lines of code. By counting the tokens and determining which are operators and which are operands, the following base measures can be collected : 

n1 = Number of distinct operators. 
n2 = Number of distinct operands. 
N1 = Total number of occurrences of operators. 
N2 = Total number of occurrences of operands. 

In addition to the above, Halstead defines the following : 

n1* = Number of potential operators. 
n2* = Number of potential operands. 

Halstead refers to n1* and n2* as the minimum possible number of operators and operands for a module and a program respectively. This minimum number would be embodied in the programming language itself, in which the required operation would already exist (for example, in C language, any program must contain at least the definition of the function main()), possibly as a function or as a procedure: n1* = 2, since at least 2 operators must appear for any function or procedure : 1 for the name of the function and 1 to serve as an assignment or grouping symbol, and n2* represents the number of parameters, without repetition, which would need to be passed on to the function or the procedure. 



 

Halstead metrics –

Halstead metrics are : 

 

 

Counting rules for C language –

 

  1. Comments are not considered.
  2. The identifier and function declarations are not considered
  3. All the variables and constants are considered operands.
  4. Global variables used in different modules of the same program are counted as multiple occurrences of the same variable.
  5. Local variables with the same name in different functions are counted as unique operands.
  6. Functions calls are considered as operators.
  7. All looping statements e.g., do {…} while ( ), while ( ) {…}, for ( ) {…}, all control statements e.g., if ( ) {…}, if ( ) {…} else {…}, etc. are considered as operators.
  8. In control construct switch ( ) {case:…}, switch as well as all the case statements are considered as operators.
  9. The reserve words like return, default, continue, break, sizeof, etc., are considered as operators.
  10. All the brackets, commas, and terminators are considered as operators.
  11. GOTO is counted as an operator and the label is counted as an operand.
  12. The unary and binary occurrence of “+” and “-” are dealt separately. Similarly “*” (multiplication operator) are dealt separately.
  13. In the array variables such as “array-name [index]” “array-name” and “index” are considered as operands and [ ] is considered as operator.
  14. In the structure variables such as “struct-name, member-name” or “struct-name -> member-name”, struct-name, member-name are taken as operands and ‘.’, ‘->’ are taken as operators. Some names of member elements in different structure variables are counted as unique operands.
  15. All the hash directive are ignored.

Example – List out the operators and operands and also calculate the values of software science measures like 

 

int sort (int x[ ], int n)

{
    int i, j, save, im1;
    /*This function sorts array x in ascending order */
    If (n< 2) return 1;
    for (i=2; i< =n; i++)
    {
        im1=i-1;
        for (j=1; j< =im1; j++)
            if (x[i] < x[j])
            {
                Save = x[i];
                x[i] = x[j];
                x[j] = save;
            }
    }
    return 0;
}

Explanation – 
 

operators occurrences operands occurrences
int 4 sort 1
() 5 x 7
, 4 n 3
[] 7 i 8
if 2 j 7
< 2 save 3
; 11 im1 3
for 2 2 2
= 6 1 3
1 0 1
<= 2
++ 2
return 2
{} 3
n1=14 N1=53 n2=10 N2=38

 

Therefore,
N = 91
n = 24
V = 417.23 bits
N^ = 86.51
n2* = 3 (x:array holding integer 
to be sorted. This is used both
as input and output)
V* = 11.6
L = 0.027
D = 37.03
L^ = 0.038
T = 610 seconds

Advantages of Halstead Metrics:

Disadvantages of Halstead Metrics: 

Reference – 
Halstead complexity measures – Wikipedia 
ristancase 

This article is contributed by Shivani Virmani. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 

 




Article Tags :