Assignment 5
姓名 | 学号 | 学院 | 专业 |
---|---|---|---|
米家龙 | 18342075 | 计算机学院 | 软件工程 |
要求
计算下列代码片段的 Halstead 复杂度的11项内容:
if (month < 3) {
month = month + 12;
year = year - 1;
}
return dayray((int)(day + (month + 1) * 26/10 + year +
year / 4 + 6 * (year / 100) + year / 400) % 7);
分析
详细表格
操作符 | 数量 | 操作数 | 数量 |
---|---|---|---|
if |
1 | month |
4 |
< |
1 | year |
6 |
= |
2 | day |
1 |
+ |
7 | 3 |
1 |
- |
1 | 12 |
1 |
* |
2 | 1 |
2 |
/ |
4 | 26 |
1 |
% |
1 | 10 |
1 |
return |
1 | 4 |
1 |
dayray |
1 | 6 |
1 |
int |
1 | 100 |
1 |
400 |
1 | ||
7 |
1 | ||
$n_1$ = 11 | $N_1$ = 22 | $n_2$ = 13 | $N_2$ = 22 |
计算结果
- 程序词汇表:$n = n_1 + n_2 = 24$
- 程序长度:$N = N_1 + N_2 = 44$
- 程序预测长度:$N ^\wedge = n_1 \log_2 n_1 + n_2 \log_2 n_2 = 86.1595$
- 程序体积:$V = N \log_2 (n) = 201.7384$
- 程序级别:$L^\wedge = \frac{2}{n_1} * \frac{n_2}{N_2} = 0.1074$
- 程序难度:$D = \frac{1}{L^\wedge} = 9.3077$
- 编程工作量:$E = V * D = 1877.7185$
- 语言级别:$L’ = L^{\wedge}L^{\wedge}V = 2.3287$
- 编程时间:$T^\wedge = E / (S * f) = 0.0290$
- 平均语句大小:$N / \text{语句数量} = 11$
- 错误预测值:$B = V / 3000 = 0.0672$
代码
使用 JS 编写代码:
"use strict";
const n1 = 11,
N1 = 22,
n2 = 13,
N2 = 22;
const size = 4;
function main() {
const n = n1 + n2,
N = N1 + N2;
let N_wedge =
(n1 * Math.log(n1)) / Math.log(2) + (n2 * Math.log(n2)) / Math.log(2);
let V = (N * Math.log(n)) / Math.log(2);
let L_wedge = ((2 / n1) * n2) / N2;
let D = 1 / L_wedge;
let E = V * D;
let L_pie = L_wedge ** 2 * V;
const S = 60 * 60,
f = 18;
let T_wedge = E / (S * f);
let avgSize = N / size;
let B = V / 3000;
console.log(`复杂度度量:
不同操作符个数:${n1}
不同操作数个数:${n2}
不同操作数总数:${N1}
不用操作符总数:${N2}
程序词汇长度:${n}
程序长度:${N}
程序预测长度:${N_wedge.toFixed(4)}
程序体积:${V.toFixed(4)}
程序级别:${L_wedge.toFixed(4)}
程度难度:${D.toFixed(4)}
编程工作量:${E.toFixed(4)}
语言级别:${L_pie.toFixed(4)}
编程时间:${T_wedge.toFixed(4)}
平均语句大小:${avgSize.toFixed(4)}
错误预测值:${B.toFixed(4)}
`);
}
main();