本文概述
- 令牌计数
- Halstead指标
令牌计数 在这些度量标准中, 计算机程序被视为令牌的集合, 可以将其分类为运算符或操作数。可以根据这些基本符号定义所有软件科学指标。这些符号称为令牌。
基本措施是
n1 =唯一运算符的数量。
n2 =唯一操作数的计数。
N1 =运算符的总出现次数。
N2 =操作数总数的计数。
就所使用的令牌总数而言, 程序的大小可以表示为N = N1 + N2。
Halstead指标 音量程序(V)
体积的度量单位是大小” 位” 的标准单位。如果对词汇表使用统一的二进制编码, 则它是程序的实际大小。
V = N * log2n
程序级别(L)
L的值在零和一之间, 其中L = 1表示以尽可能高的级别(即, 具有最小的大小)编写的程序。
L = V * / V
程序难度
程序的难度或易错性(D)与程序中唯一运算符的数量成正比。
【什么是Halstead软件指标()】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 |
- 不考虑评论。
- 不考虑标识符和函数声明
- 所有变量和常量都被视为操作数。
- 在同一程序的不同模块中使用的全局变量被计为同一变量的多次出现。
- 在不同函数中具有相同名称的局部变量计为唯一操作数。
- 函数调用被视为运算符。
- 所有循环语句, 例如, 对于(){… }, {{}}, 而(){… }, 而(){… }, 则所有控制语句, 例如if(){… }, if() {… }其他{… }等被视为运算符。
- 在控制构造switch(){case:… }中, switch以及所有case语句均被视为运算符。
- 保留字(例如return, default, continue, break, sizeof等)被视为运算符。
- 所有方括号, 逗号和终止符均视为运算符。
- GOTO被计为运算符, 标签被计为操作数。
- ” +” 和” -“ 的一元和二进制出现分别处理。同样, ” *” (乘法运算符)也分开处理。
- 在数组变量中, 例如” array-name [index]” , ” array-name” 和” index” 被视为操作数, 而[]被视为运算符。
- 在诸如” 结构名称, 成员名称” 或” 结构名称-> 成员名称” 的结构变量中, 将结构名称, 成员名称视为操作数, 并以’ 。’ , ‘ -> ’ 作为操作员。不同结构变量中成员元素的某些名称被视为唯一操作数。
- 所有的hash指令都将被忽略。
解决方案:下表给出了运算符和操作数的列表
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 |
程序词汇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
文章图片
我们可以用另一个公式
V ^ = V x L ^ = 417 x 0.038 = 15.67
E ^ = V / L ^ = D ^ x V
文章图片
因此, 构建该程序需要10974个基本的心理歧视。
文章图片
这可能是制作程序的合理时间, 这非常简单。
推荐阅读
- 一分钟了解什么是信息流指标
- 功能点(FP)分析详细解释
- 扩展功能点(EFP)指标详细解释
- 微信漂流瓶在啥地方?_微信
- 微信语音没声音怎样回事?微信语音没声音的处理办法_微信
- 微信头像无法更改怎样办?微信个人资料啥时候可以更改?_微信
- 微信开发用啥语言?微信公众平台开发需要啥语言?_微信
- 我的微信不见了怎样办?微信不见了的处理办法_微信
- 如何下载微信里的收藏?下载微信收藏内容的办法_微信