Halstead複雜度
設n1 表示程序中不同的操作符(程序保留字、運算符、分隔 符、函數調用) 個數,n2 表示程序中不同的操作數(常量、 變量) 個數,N1 表示程序中出現的操作符總數,N2 表示程序 中出現的操作數總數。
Halstead程序詞彙表長度Program vocabulary:n= n1+ n2 .
實際Halstead長度或簡單長度Program length: N= N1+N2 .
以N^表示程序的預測長度Calculated program length: N^= n1log2n1 + n2log2n2 . ◌ Halstead 的重要結論之一是:程序的實際長度N與預測長度 N^ 非常接近,這表明即使程序還未編寫完也能預先估算出 程序的實際長度N。
#include <stdio.h>
#include <math.h>
int main() {
float a, b, c, mean;
scanf("%f %f %f", &a, &b, &c);
mean = a * b * c;
mean = pow(mean, 1.0 / 3.0);
printf("Geometric Mean = %f", mean);
return 0;
}
unique operator:#, include, <>, stdio.h, math.h, int, main, (), {}, float, scanf, &, *, =, pow,/, printf, return.
unique oprands:a, b, c, mean, “%f,%f,%f”,1.0,3.0,”Geometric Mean = %f”,0.
n1=18,n2=9,N1=28,N2=19.
Halstead程序詞彙表長度Program vocabulary:n= n1+ n2 =18+9=27
實際Halstead長度或簡單長度Program length: N= N1+N2=28+19=47
以N^表示程序的預測長度Calculated program length:
N^= n1log2n1 + n2log2n2=103.5879
- 程序體積或容量Volume: ,表明了程序在詞彙上 的複雜性。
- 程序級別Level: ^ x ,表明了一個程序的最 緊湊形式的程序量與實際程序量之比,反映了程序的效率。
^ x - 程序難度Difficulty: ^,表明了實現算法的困難程度。
D = 19 - 編程工作量Effort: x ^ .
E = 223.48*19 = 4246.12 - 智能級別: ^x .
I = 223.35 - 語言級別: ^x ^x .
- 編程時間(hours): ^ x ,這裏S = 60x60, f = 18 .
^=0.065526 - 平均語句大小:N/語句數
47/10=4.7 - 程序中的錯誤數預測值: x .
x