软件设计复杂度 – 软件工程教程

上一章软件工程教程请查看:软件界面设计
复杂性这个术语表示事件或事物的状态,它们有多个相互联系的链接和高度复杂的结构。在软件编程中,随着软件设计的实现,元素的数量和它们之间的相互联系逐渐变得庞大,一下子就难以理解。
如果不使用复杂性度量和度量,软件设计复杂性是很难评估的。让我们看看三个重要的软件复杂度度量。
霍氏的复杂度的度量1977年,Maurice Howard Halstead先生引入了度量标准来度量软件复杂性。Halstead的度量标准依赖于程序的实际实现及其度量,这些度量直接从源代码的操作符和操作数以静态方式计算。它允许评估C/ c++ /Java源代码的测试时间、词汇表、大小、难度、错误和工作量。
根据Halstead的说法,“计算机程序是一种算法的实现,该算法被认为是一组令牌,可以分为操作符或操作数”。Halstead指标认为程序是操作符及其相关操作数的序列。
他定义了各种指标来检查模块的复杂度。

参数 解释
n1 唯一算子数
n2 唯一操作数的数目
N1 操作符的总出现次数
N2 操作数的总出现次数
当我们选择源文件在度量查看器中查看它的复杂性细节时,下面的结果可以在度量中看到:
度量 解释 数学表示
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.
循环复杂度每个程序都包含为了执行某些任务而需要执行的语句,以及决定需要执行哪些语句的决策语句。这些决策构造改变了程序的流程。
如果我们比较两个相同大小的程序,决策语句较多的程序会更加复杂,因为程序的控制频繁跳跃。
McCabe在1976年提出了圈复杂度度量来量化给定软件的复杂度。它是一种基于if-else、do-while、repeat-until、switch-case和goto语句等程序决策结构的图驱动模型。
流程控制图制作:
  • 在更小的块中中断程序,由决策构造来分隔。
  • 创建表示每个节点的节点。
  • 连接节点如下:
  • 如果控件可以从块i转移到块j
画一个弧
  • 从出口节点到入口节点
画一个弧。
为了计算程序模块的圈复杂度,我们使用公式-
V(G) = e – n + 2其中 e是边的总数 n是节点的总数

软件设计复杂度 – 软件工程教程

文章图片
上述模块的循环复杂度为:
e = 10 n = 8 循环复杂度 = 10 - 8 + 2 = 4

根据P. Jorgensen,模块的圈复杂度不应该超过10。
功能点它被广泛用于测量软件的大小。功能点集中于系统提供的功能。系统的特性和功能用于度量软件的复杂度。
功能点依赖于五个参数,分别是外部输入、外部输出、逻辑内部文件、外部接口文件和外部查询。为了考虑软件的复杂性,将每个参数进一步分为简单、一般或复杂。
软件设计复杂度 – 软件工程教程

文章图片
让我们看看功能点的参数:
外部输入
从外部输入到系统的每个唯一输入都被视为外部输入。测量输入的唯一性,因为没有两个输入应该具有相同的格式。这些输入可以是数据,也可以是控制参数。
  • 简单-如果输入计数低,影响较少的内部文件
  • 复杂-如果输入计数高,影响更多的内部文件
  • 平均-介于简单和复杂之间。
外部输出
系统提供的所有输出类型都计算在这个类别中。如果输出格式和/或处理是惟一的,则认为输出是惟一的。
  • 简单-如果输出计数低
  • 复杂-如果输出计数高
  • 平均-介于简单和复杂之间。
内部逻辑文件
每个软件系统都维护内部文件,以维护其功能信息和正常工作。这些文件保存着系统的逻辑数据。这个逻辑数据可以包含功能数据和控制数据。
  • 简单——如果记录类型的数量很低
  • 复杂——如果记录类型的数量很高
  • 平均——介于简单和复杂之间。
外部接口文件
软件系统可能需要与某些外部软件共享其文件,或者需要将文件作为参数传递给某些功能。所有这些文件都算作外部接口文件。
  • 简单——如果共享文件中的记录类型数量很低
  • 复杂——如果共享文件中的记录类型数量很大
  • 平均——介于简单和复杂之间。
外部查询
查询是输入和输出的组合,用户将一些数据作为输入发送查询,系统将处理的查询输出响应用户。查询的复杂性不仅仅是外部输入和外部输出。如果查询的输入和输出在格式和数据方面是惟一的,则称查询是惟一的。
  • 简单——如果查询需要低处理并产生少量输出数据
  • 复杂-如果查询需要高处理,并产生大量的输出数据
  • 平均-介于简单和复杂之间。
系统中的每个参数都根据它们的类别和复杂性赋予权重。下表列出了各参数的权重:
参数 简单 平均 复杂
输入 3 4 6
输出 4 5 7
询盘 3 4 6
文件 7 10 15
接口 5 7 10
上表给出了原始的功能点。这些功能点根据环境的复杂性进行调整。系统描述使用14个不同的特点:
  • 数据通信
  • 分布式处理
  • 性能目标
  • 操作配置负载
  • 事务率
  • 在线数据输入,
  • 终端用户效率
  • 在线更新
  • 复杂处理逻辑
  • 可重用性
  • 安装方便
  • 易操作性
  • 多个站点
  • 促成改变的愿望
这些特征因素的评分为0至5分,如下所示:
  • 没有影响
  • 偶然的
  • 温和的
  • 平均
  • 重要的
  • 至关重要的
所有的评级被总结为N。N的值范围从0到70(14种特征x 5种评级)。使用以下公式计算复杂度调整因子(复杂度调整因子):
【软件设计复杂度 – 软件工程教程】CAF = 0.65 + 0.01N
然后,
交付功能点(FP)= CAF x原始FP
该FP可用于各种指标,如:
  1. 成本= $ / FP
  2. 质量=误差/ FP
  3. 生产率= FP /人月

    推荐阅读