个性化阅读
专注于IT技术分析

什么是Halstead软件指标?

本文概述

根据Halstead的说法, “计算机程序是一种算法的实现, 被认为是令牌的集合, 可以将其分类为运算符或操作数。”

令牌计数

在这些度量标准中, 计算机程序被视为令牌的集合, 可以将其分类为运算符或操作数。可以根据这些基本符号定义所有软件科学指标。这些符号称为令牌。

基本措施是

n1 =唯一运算符的数量。

n2 =唯一操作数的计数。

N1 =运算符的总出现次数。

N2 =操作数总数的计数。

就所使用的令牌总数而言, 程序的大小可以表示为N = N1 + N2。

Halstead指标

音量程序(V)

体积的度量单位是大小”位”的标准单位。如果对词汇表使用统一的二进制编码, 则它是程序的实际大小。

V = N * log2n

程序级别(L)

L的值在零和一之间, 其中L = 1表示以尽可能高的级别(即, 具有最小的大小)编写的程序。

L = V * / V

程序难度

程序的难度或易错性(D)与程序中唯一运算符的数量成正比。

D =(n1 / 2)*(N2 / n2)

编程努力(E)

E的度量单位是基本的精神歧视。

E = V / L = D * V

预计节目长度

根据Halstead的说法, 软件科学的第一个假设是, 结构良好的程序的长度仅取决于唯一运算符和操作数的数量。

N = N1 + N2

估计的程序长度用N ^表示

N ^ = n1log2n1 + n2log2n2

已发布以下替代表达式来估计程序长度:

  • NJ = log2(n1!)+ Log2(n2!)
  • NB = n1 * log2n2 + n2 * log2n1
  • NC = n1 * sqrt(n1)+ n2 * sqrt(n2)
  • NS =(n * log2n)/ 2

潜在最小体积

潜在的最小音量V *定义为可以在其中编码问题的最短程序的音量。

V * =(2 + n2 *)* log2(2 + n2 *)

在此, n2 *是唯一输入和输出参数的计数

词汇量(n)

程序词汇表的大小(包括用于构建程序的唯一令牌的数量)定义为:

n = n1 + n2

其中

n =程序词汇

n1 =唯一运算符的数量

n2 =唯一操作数

语言级别-显示算法实施程序的语言级别。如果使用低级程序语言编写相同的算法, 则需要付出额外的努力。例如, 在Pascal中编程比在Assembler中编程容易。

L’= V / D / D的

λ= L * V * = L2 * V

语言水平

Language 语言水平λ Variance σ
PL/1 1.53 0.92
ALGOL 1.21 0.74
FORTRAN 1.14 0.81
CDC Assembly 0.88 0.42
PASCAL 2.54
APL 2.42
C 0.857 0.445

C语言的计数规则

  1. 不考虑评论。
  2. 不考虑标识符和函数声明
  3. 所有变量和常量都被视为操作数。
  4. 在同一程序的不同模块中使用的全局变量被计为同一变量的多次出现。
  5. 在不同函数中具有相同名称的局部变量计为唯一操作数。
  6. 函数调用被视为运算符。
  7. 所有循环语句, 例如, 对于(){…}, {{}}, 而(){…}, 而(){…}, 则所有控制语句, 例如if(){…}, if() {…}其他{…}等被视为运算符。
  8. 在控制构造switch(){case:…}中, switch以及所有case语句均被视为运算符。
  9. 保留字(例如return, default, continue, break, sizeof等)被视为运算符。
  10. 所有方括号, 逗号和终止符均视为运算符。
  11. GOTO被计为运算符, 标签被计为操作数。
  12. ” +”和”-“的一元和二进制出现分别处理。同样, ” *”(乘法运算符)也分开处理。
  13. 在数组变量中, 例如” array-name [index]”, ” array-name”和” index”被视为操作数, 而[]被视为运算符。
  14. 在诸如”结构名称, 成员名称”或”结构名称->成员名称”的结构变量中, 将结构名称, 成员名称视为操作数, 并以’。’, ‘->’作为操作员。不同结构变量中成员元素的某些名称被视为唯一操作数。
  15. 所有的hash指令都将被忽略。

示例:考虑如图所示的排序程序:列出运算符和操作数, 并计算n, N, V, E, λ等软件科学度量的值。

解决方案:下表给出了运算符和操作数的列表

Operators Occurrences Operands Occurrences
int 4 SORT 1
() 5 x 7
, 4 n 3
[] 7 i 8
if 2 j 7
< 2 save 3
; 11 im1 3
for 2 2 2
= 6 1 3
1 0 1
<= 2
++ 2
return 2
{} 3
n1=14 N1=53 n2=10 N2=38

在此, N1 = 53, N2 = 38。程序长度N = N1 + N2 = 53 + 38 = 91

程序词汇n = n1 + n2 = 14 + 10 = 24

体积V = N * log2N = 91 x log2 24 = 417位。

程序的估计程序长度N

= 14 log214 + 10 log2)10

= 14 * 3.81+10 * 3.32

= 53.34+33.2=86.45

从概念上讲, 唯一的输入和输出参数由n2 *表示。

n2 * = 3 {x:保存要排序的整数的数组。用作输入和输出}

{N:要排序的数组的大小}

潜在体积V * = 5log25 = 11.6

由于L = V * / V

Halstead的软件指标

我们可以用另一个公式

V ^ = V x L ^ = 417 x 0.038 = 15.67

E ^ = V / L ^ = D ^ x V

Halstead的软件指标

因此, 构建该程序需要10974个基本的心理歧视。

Halstead的软件指标

这可能是制作程序的合理时间, 这非常简单。


赞(0) 打赏
未经允许不得转载:srcmini » 什么是Halstead软件指标?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏