📜  软件工程| Halstead的软件指标

📅  最后修改于: 2021-01-09 14:53:15             🧑  作者: Mango

Halstead的软件指标

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

代币计数

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

基本措施是

n1 =唯一运算符。
n1="运算符的总出现次数。
" n2="操作数总数的计数。

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

Halstead指标为:

程式音量(V)

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

V = N * log 2 n

程序级别(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 ^ = n1log 2 n1 + n2log 2 n2

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

  • N J =日志2 (n1!)+日志2 (n2!)
  • N B = n1 * log 2 n2 + n2 * log2n1
  • N C = n1 * sqrt(n1)+ n2 * sqrt(n2)
  • N S =(n * log 2 n)/ 2

潜在最小体积

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

V * =(2 + n2 *)*对数2 (2 + n2 *)

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

词汇量(n)

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

n = n1 + n2

哪里

n =程序词汇
n1 =唯一运算符的数量
n2="唯一操作数

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

语言水平

Language Language level λ 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语言的计数规则

  • 不考虑评论。
  • 不考虑标识符和函数声明
  • 所有变量和常量均被视为操作数。
  • 在同一程序的不同模块中使用的全局变量被计为同一变量的多次出现。
  • 在不同函数中具有相同名称的局部变量计为唯一操作数。
  • 函数调用被视为运算符。
  • 所有循环语句,例如,对于(){…},执行{…} while(),while(){…},所有控制语句,例如,if(){…},if() {…}其他{…}等被视为运算符。
  • 在控制结构switch(){case:…}中,switch以及所有case语句都被视为运算符。
  • 保留字(例如return,default,continue,break,sizeof等)被视为运算符。
  • 所有方括号,逗号和终止符均视为运算符。
  • GOTO被视为运算符,而标签被视为操作数。
  • “ +”和“-”的一元和二进制出现分别处理。同样,“ *”(乘法运算符)也分开处理。
  • 在数组变量中,例如“ array-name [index]”,“ array-name”和“ index”被视为操作数,而[]被视为运算符。
  • 在诸如“结构名称,成员名称”或“结构名称->成员名称”的结构变量中,将结构名称,成员名称视为操作数,并以'。','->'作为运算符。不同结构变量中成员元素的某些名称被计为唯一操作数。
  • 所有的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 * log 2 N = 91 x log 2 24 = 417位。

程序的估计程序长度N

= 14 log 2 14 + 10 log 2 )10
= 14 * 3.81 + 10 * 3.32
= 53.34 + 33.2 = 86.45

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

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

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

潜在体积V * = 5log 2 5 = 11.6

由于L = V * / V

我们可以用另一个公式

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

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


n1>


>