English 中文(简体)
软件设计复杂性
  • 时间:2024-12-22

Software Design Complexity


Previous Page Next Page  

复杂性这个术语代表有多个相互关联的链接和高度复杂结构的事件或事物的状态。在软件编程中,随着软件设计的实现,元素数量及其相互关系逐渐变得巨大,一次理解变得太困难了。

软件设计的复杂性没有使用复杂性指标和度量是很难评估的。让我们来看看三个重要的软件复杂性度量。

Halstead s Complexity Measures

1977年,Maurice Howard Halstead先生引入了度量软件复杂度的方法。Halstead的度量方法取决于程序的实际实现及其度量,直接从源代码的运算符和操作数计算得到,在静态的方式下进行。它可以评估C/C++/Java源代码的测试时间、词汇量、大小、难度、错误和努力。

根据Halstead的理论,“计算机程序是算法的实现,被视为可以被分为运算符或操作数的标记集合。”Halstead度量认为程序是运算符及其相关操作数的序列。

他定义了多种指标来检查模块的复杂性。

Parameter Meaning
n1 Number of unique operators
n2 Number of unique operands
N1 Number of total occurrence of operators
N2 Number of total occurrence of operands

当我们选择源文件在度量查看器中查看其复杂度详情时,度量报告中将显示以下结果:

Metric Meaning Mathematical Representation
n Vocabulary n1 + n2
N Size N1 + N2
V Volume Length * Log2 Vocabulary
D Difficulty (n1/2) * (N1/n2)
E Efforts Difficulty * Volume
B Errors Volume / 3000
T Testing time Time = Efforts / S, where S=18 seconds.

Cyclomatic Complexity Measures

每个程序都包含要执行的语句以执行某些任务和其他决策语句,以决定要执行哪些语句。这些决策构造改变了程序的流程。

如果我们比较两个大小相同的程序,那个有更多决策语句的程序会更复杂,因为程序的控制频繁跳转。

1976年,McCabe提出了循环复杂度度量法来量化给定软件的复杂度。 它是基于程序的决策构造如if-else,do-while,repeat-until,switch-case和goto语句的图形驱动模型。

制作流程控制图的过程:

    Break program in smaller blocks, depmited by decision-making constructs.

    Create nodes representing each of these nodes.

    Connect nodes as follows:

      如果控制可以从块i分支到块j

      画一个弧线

      从退出节点到入口节点

      画一个弧线.

计算程序模块的圆形复杂度,我们使用以下公式 -

V(G) = e – n + 2

Where
e is total number of edges
n is total number of nodes
Cyclomatic Complexity Measures

以上模块的圈复杂度为:

e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
                      = 4

根据P. Jorgensen, 模块的圈复杂度不应超过10。

Function Point

它被广泛用于测量软件的规模。功能点集中在系统提供的功能上。系统的特性和功能用于衡量软件的复杂性。

功能点计数包括五个参数,分别命名为外部输入、外部输出、逻辑内部文件、外部接口文件和外部查询。为了考虑软件的复杂性,每个参数都进一步分类为简单、一般或复杂。

Function Point

让我们看一下功能点的参数:

External Input

系统接收到的每个独特的来自外部的输入都视为外部输入。输入的独特性是通过测量其格式是否相同来衡量的。这些输入可以是数据或控制参数。

    简单-如果输入计数少且影响内部文件较少

    复杂 - 如果输入数量很高并影响更多内部文件。

    平均 - 介于简单和复杂之间。

External Output

系统提供的所有输出类型都被归类到这个类别中。如果输出的格式和/或处理方法是独特的,则视为独特输出。

    简单 - 如果输出计数低

    复杂 - 如果输出数量很高

    平均 - 简单和复杂之间。

Logical Internal Files

每个软件系统都会维护内部文件以维护其功能信息并正常运行。这些文件持有系统的逻辑数据,包括功能数据和控制数据。

    Simple - if number of record types are low

    复杂 - 如果记录类型数量较高

    平均 - 简单和复杂之间。

External Interface Files

软件系统可能需要与一些外部软件共享其文件,或者可能需要将文件传递给某些函数进行处理或作为参数。所有这些文件都被视为外部接口文件。

    简单-如果共享文件中的记录类型数量较少

    复杂-如果共享文件中的记录类型数量很高。

    平均 - 简单和复杂之间。

External Inquiry

查询是输入和输出的组合,其中用户发送某些数据作为输入进行查询,系统则通过查询处理响应用户的输出。查询的复杂性超过了外部输入和外部输出。如果查询的输入和输出在格式和数据方面是唯一的,则称其为唯一查询。

    简单 - 如果查询需要较低的处理量并产生小量的输出数据

    复杂 - 如果查询需要高处理并产生大量输出数据

    平均 - 简单和复杂之间。

系统中的每个参数根据其类别和复杂程度被赋予权重。下表列出了每个参数的权重:

Parameter Simple Average Complex
Inputs 3 4 6
Outputs 4 5 7
Enquiry 3 4 6
Files 7 10 15
Interfaces 5 7 10

上述表格提供原始的功能点数。这些功能点数将根据环境复杂度进行调整。系统使用十四种不同的特征进行描述:

    Data communications

    Distributed processing

    Performance objectives

    Operation configuration load

    Transaction rate

    Onpne data entry,

    End user efficiency

    Onpne update

    Complex processing logic

    Re-usabipty

    Installation ease

    Operational ease

    Multiple sites

    Desire to faciptate changes

这些特征因素将从0到5进行评分,如下所述:

    No influence

    Incidental

    Moderate

    Average

    Significant

    Essential

所有评级都被总结为N。N的值范围从0到70(14种特性x 5种评级)。使用以下公式计算复杂度调整因子(CAF):

CAF = 0.65 + 0.01N

那么,

Depvered Function Points (FP)= CAF x Raw FP

此FP可以用于各种度量标准,例如:

    成本 = $ / FP

    质量 = 错误数 / 假阳数

    生产力 = FP / 人月

Advertisements