ad

阅读《基于Python语言的软件测试技术》_打开新的知识大门_3.4.2 Halstead度量法

admin 212 2023-10-25

【摘要】 本书摘自《基于Python语言的软件测试技术》一书中第3章,第4节,由张民编著。

3.4.2 Halstead度量法

Halstead度量方法不仅仅度量了程序长度,还描述了程序的最小实现和实际实现 之间的关系,并根据这一点来阐释程序语言的等级高低。该方法认为程序是一组记 号,由两种基本的元素组成运算对象(变量、常量、地址、空间)和运算符编程语 言中定义的操作,以程序中出现的运算符和运算对象为计数对象,并以其出现次数 作为计数目标来测算程序容量和工作量。 Halstead方法采用以下一组基本的度量值, 这些度量值通常在程序产生之后得出,或者在设计完成之后估算出。

1.程序长度H

即预测的Halstead长度。令n₁ 表示程序中不同运算符(包括保留字)的个数, n₂ 表示程序中不同运算对象的个数, H 表示程序长度,则有:

H=n₁ ·log₂n₁+n₂ ·log₂n₂

其中,H 是程序长度的预测值,它不等于程序中的语句个数。在定义中,运算符 包括:算术运算符、赋值符(“=”或“:=”)、数组操作符、逻辑运算符、分界符 (“,”或“;”或“:”)、子程序调用符、关系运算符、括号运算符和循环操作符 等。这里需要注意的是,成对的运算符,例如 “BEGIN…END”"FOR…TO”“RE-PEAT …UNTIL""WHILE …DO”"IF …THEN …ELSE”“( …)" 符。运算对象包括变量名和常数。

阅读《基于Python语言的软件测试技术》_打开新的知识大门_3.4.2 Halstead度量法

等都视为单一运算

2.实际的Halstead 长度N

设N, 为程序中实际出现的运算符总个数, N₂为程序中实际出现的运算对象总个 数,N 为实际的Halstead 长度,则有:

N=N+N₂

3.程序的词汇表n

Halstead 定义程序的词汇表为不同的运算符种类数和不同的运算对象种类数的总 和。若令n 为程序的词汇表,则有:

n=n+n₂

举一个例子:

SUBROUTINE SORT(X,N)

DIMENSION X(N)

IF(N.LT.2)RETURN

DO 20I=2,N

DO 10J=1,I

IF(X(I).GE.X(J))

GOTO 10

SAVE=X(I)

X(I)=X(J)

X(J)=SAVE

10 CONTINUE

20 CONTINUE

RETURN

END

以上是一个使用FORTRAN 写出的交换排序程序,观察代码可以得出, n=10, n₂=7,N=28,N₂=22 。 因此,预测的词汇量为52.87,而实际的词汇量为50。实验 表明:预测的Halstead 长度H 与实际的Halstead 长度N 非常接近。

4.程序量V

程序量V, 可用下式算得

V=(N₁+N₂) ·log₂(n₁+n₂)

V表明了程序在“词汇上的复杂性”。需要说明的是V会随着编程语言的变化而 变化,它代表了写一个程序所需要的信息量(以bit 计)。对于之前的例子,利用n,

N,n2,N₂, 可以计算得V=(28+22) ·log₂(10+7)=204 。 等效的汇编语言程序的

V=328, 因此这表明了汇编语言比FORTRAN 语言需要更多的信息量。

5.程序量比率(语言的抽象级别) L

L=V'/v或L=(2/n) · (n₂/N₂)

这里, N₂=n₂ · log2n。L是指一个程序的最紧凑形式的程序量与实际程序量之 比,反映了程序的效率,它的倒数D=1/L 表明了实现算法的困难程度。有时会使用 L表达语言的抽象级别,即用L衡量在表达程序过程时的抽象程度。对于高级语言, L 的值接近于1,而对于低级语言, L 的值为0~1。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:学习《零基础Java从入门到精通》_5.2 循环控制语句
下一篇:打开《Java语言程序设计与应用》_从基础向熟练进发_3.5 数组查找
相关文章
×