文章目录
Assignment 4
计算下列代码片段的Halstead 复杂度的11项内容:
if (month < 3) { month += 12; –year; } return dayray((int)(day + (month + 1) * 26/10 + year + year/4 + 6 * (year/100) + year/400)% 7);
Operator | Number of Occurrences | Operand | Number of Occurrences |
---|---|---|---|
if | 1 | month | 3 |
< | 1 | year | 5 |
+= | 1 | day | 1 |
- | 1 | 3 | 1 |
return | 1 | 12 | 1 |
dayray | 1 | 26 | 1 |
(int) | 1 | 10 | 1 |
+ | 6 | 4 | 1 |
* | 2 | 6 | 1 |
/ | 4 | 100 | 1 |
% | 1 | 400 | 1 |
7 | 1 | ||
n 1 = 11 n_1 = 11 n1=11 | N 1 = 20 N_1 = 20 N1=20 | n 2 = 12 n_2 = 12 n2=12 | N 2 = 18 N_2 = 18 N2=18 |
所以有:
-
程序种不同的操作符个数: n 1 = 11 n_1 = 11 n1=11
-
程序中不同的操作数个数: n 2 = 12 n_2 = 12 n2=12
-
程序中出现的操作符总数: N 1 = 20 N_1 = 20 N1=20
-
程序中出现的操作数总数: N 2 = 18 N_2 = 18 N2=18
-
Halstead程序词汇表长度: n = n 1 + n 2 = 23 n = n_1 + n_2 = 23 n=n1+n2=23
-
Halstead程序长度或简单长度: N = N 1 + N 2 = 38 N = N_1 + N_2 = 38 N=N1+N2=38
-
以 N N N^ 表示程序的预测长度: N N N^ = n 1 l o g 2 n 1 + n 2 l o g 2 n 2 = 11 l o g 2 11 + 12 l o g 2 12 = n_1log_2n_1 + n_2log_2n_2 = 11log_211 + 12log_212 =n1log2n1+n2log2n2=11log211+12log212
-
程序体积或容量Volumne: V = N l o g 2 ( n ) = 38 l o g 2 23 = 171.89535433 V = Nlog_2(n) = 38log_223 = 171.89535433 V=Nlog2(n)=38log223=171.89535433
-
程序级别Level: L L L^ = ( 2 / n 1 ) × ( n 2 / N 2 ) = 2 11 × 12 18 = 0.1212 = (2/n_1) \times (n_2/N_2) = \frac{2}{11} \times \frac{12}{18} = 0.1212 =(2/n1)×(n2/N2)=112×1812=0.1212
-
程序难度Difficulty: D = 1 / L D = 1/L D=1/L^ $ = 8.251$
-
编程工作量Effort: E = V × D = V / L E = V \times D = V / L E=V×D=V/L^ = 171.89535433 / 0.1212 = 1418.27850107 =171.89535433/0.1212 = 1418.27850107 =171.89535433/0.1212=1418.27850107
-
语言级别 L ′ = L L' = L L′=L^ × L \times L ×L^ × V = 0.1212 × 0.1212 × 171.18953433 = 2.5147 \times V = 0.1212\times 0.1212 \times 171.18953433 = 2.5147 ×V=0.1212×0.1212×171.18953433=2.5147
-
编程时间(hours): T ′ = E / ( S × f ) = 0.0218870139 T' = E/(S \times f) = 0.0218870139 T′=E/(S×f)=0.0218870139
-
平均语句大小: N / 语 句 数 = 38 2 = 19 N/ 语句数 = \frac{38}{2} = 19 N/语句数=238=19
-
程序中的错误数预测值: B = V / 3000 = 0.0573 B = V/3000 = 0.0573 B=V/3000=0.0573