STMT

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

  1. 程序體積或容量Volume: V=Nlog2(n) ,表明了程序在詞彙上 的複雜性。
    V=47log2(27)=223.48
  2. 程序級別Level: L ^=(2/n1) x(n2/N2) ,表明了一個程序的最 緊湊形式的程序量與實際程序量之比,反映了程序的效率。
    L ^=(2/n1) x(n2/N2)=(2/18)(9/19)=0.0526
  3. 程序難度Difficulty: D=1/L ^,表明了實現算法的困難程度。
    D = 19
  4. 編程工作量Effort:E=V xD=V/L ^ .
    E = 223.48*19 = 4246.12
  5. 智能級別:I=L ^xE .
    I = 223.35
  6. 語言級別:L=L ^xL ^xV .
    L=0.618
  7. 編程時間(hours): T ^ =E/(S xf) ,這裏S = 60x60, f = 18 .
    T ^=0.065526
  8. 平均語句大小:N/語句數
    47/10=4.7
  9. 程序中的錯誤數預測值:B=N xlog2(n1+n2)/3000 .
    B=47 xlog2(18+9)/3000=0.0745
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章