📅  最后修改于: 2021-01-09 14:53:15             🧑  作者: Mango
根据Halstead的说法,“计算机程序是一种算法的实现,被认为是令牌的集合,可以将其分类为运算符或操作数。”
在这些度量标准中,计算机程序被视为令牌的集合,可以将其分类为运算符或操作数。可以根据这些基本符号来定义所有软件科学指标。这些符号称为令牌。
基本措施是
n1 =唯一运算符。
n1="运算符的总出现次数。
" n2="操作数总数的计数。
就所使用的令牌总数而言,程序的大小可以表示为N = N1 + N2。
程式音量(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
已发布以下替代表达式来估计程序长度:
潜在最小体积
潜在的最小音量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语言的计数规则
示例:考虑如图所示的排序程序:列出运算符和操作数,并计算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>>