View on GitHub

中山大学软件测试

蔡国扬2021年课程

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

计算结果

代码

使用 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();
TOP