内部产品属性



内部产品属性以仅依赖于产品本身的方式描述软件产品。衡量内部产品属性的主要原因是,它有助于在开发过程中监控和控制产品。

测量内部产品属性

主要的内部产品属性包括**大小**和**结构**。大小可以在无需执行的情况下静态测量。产品的大小告诉我们创建它所需的工作量。同样,产品的结构在设计产品的维护方面也起着重要作用。

测量大小

软件大小可以用三个属性来描述:

  • **长度** - 它是产品的物理大小。

  • **功能** - 它描述了产品提供给用户的函数。

  • **复杂度** - 复杂度有不同类型,例如:

    • **问题复杂度** - 衡量底层问题的复杂度。

    • **算法复杂度** - 衡量用于解决问题的算法的复杂度。

    • **结构复杂度** - 衡量用于实现算法的软件的结构。

    • **认知复杂度** - 衡量理解软件所需的工作量。

这三个属性的测量可以描述如下:

长度

有三个开发产品的尺寸测量对预测预测所需的工作量很有用。它们是规格说明、设计和代码。

规格说明和设计

这些文档通常结合文本、图形和特殊的数学图表和符号。规格说明测量可用于预测设计的长度,而设计长度又是代码长度的预测指标。

文档中的图表具有统一的语法,例如带标签的有向图、数据流图或 Z 模式。由于规格说明和设计文档由文本和图表组成,因此其长度可以用表示文本长度和图表长度的一对数字来衡量。

对于这些测量,需要为不同类型的图表和符号定义原子对象。

数据流图的原子对象是过程、外部实体、数据存储和数据流。代数规格说明的原子实体是排序、函数、操作和公理。Z 模式的原子实体是规范中出现的各种行。

代码

代码可以通过多种方式生成,例如过程语言、面向对象和可视化编程。最常用的传统源代码程序长度度量是代码行数 (LOC)。

总长度,

LOC = NCLOC + CLOC

即,

LOC = 未注释代码行数 + 已注释代码行数

除了代码行数之外,Maurice Halstead 提出的其他替代方案,例如大小和复杂度,也可以用于测量长度。

Halstead 的软件科学试图捕捉程序的不同属性。他提出了三个内部程序属性,例如长度、词汇量和体积,它们反映了尺寸的不同视图。

他首先将程序**P**定义为标记的集合,按运算符或操作数分类。这些标记的基本度量是:

  • **μ1** = 唯一运算符的数量

  • **μ2** = 唯一操作数的数量

  • **N1** = 运算符的总出现次数

  • **N2** = 唯一运算符的数量

长度**P**可以定义为

$$N = N_{1}+ N_{2}$$

**P**的词汇量为

$$\mu =\mu _{1}+\mu _{2}$$

程序的体积 = 编写长度为**N**的程序所需的思维比较次数,为

$$V = N\times {log_{2}} \mu$$

体积为**V**的程序**P**的程序级别为:

$$L = \frac{V^\ast}{V}$$

其中,$V^\ast$ 是潜在体积,即**P**的最小尺寸实现的体积。

级别的倒数是难度 -

$$D = 1\diagup L$$

根据 Halstead 理论,我们可以计算估计值**L**为

$${L}' = 1\diagup D = \frac{2}{\mu_{1}} \times \frac{\mu_{2}}{N_{2}}$$

类似地,估计的程序长度为 $\mu_{1}\times log_{2}\mu_{1}+\mu_{2}\times log_{2}\mu_{2}$

生成**P**所需的工作量由下式给出:

$$E = V\diagup L = \frac{\mu_{1}N_{2}Nlog_{2}\mu}{2\mu_{2}}$$

其中度量单位**E**是理解**P**所需的初级心理辨别次数。

测量长度的其他替代方案为:

  • 根据程序文本所需的计算机存储字节数。

  • 根据程序文本中的字符数。

面向对象开发提出了新的测量长度的方法。Pfleeger 等人发现,对象和方法的数量计数比使用代码行数获得更准确的生产力估计。

功能

产品中固有的功能量提供了产品大小的度量。有许多不同的方法来衡量软件产品的功能。我们将在下一章中讨论一种这样的方法——阿尔布雷希特的功能点方法。

广告