软件复杂性表现,如何计算?

简介: 软件复杂性度量的参数很多,主要有:• 规模,即总共的指令数,或源程序行数。• 难度,通常由程序中出现的操作数的数目所决定的量来表示。• 结构,通常用于程序结构有关的度量来表示。• 智能度,即算法的难易程度。

软件复杂性

软件复杂性的基本概念

软件复杂性度量的参数很多,主要有:

  • 规模,即总共的指令数,或源程序行数。
  • 难度,通常由程序中出现的操作数的数目所决定的量来表示。
  • 结构,通常用于程序结构有关的度量来表示。
  • 智能度,即算法的难易程度。

软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。

软件复杂性的度量方法

代码行度量法

度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法的基本考虑是统计一个程序的源代码行数,并以代码行数作为程序复杂性的质量。

McCabe度量法

McCabe度量法是由Thomas McCabe提出的一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量它认为程序的复杂性很大程度上取决于程序的复杂性。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂

这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。程序图是退化的程序流程图。也就是说,把程序流程图的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图

McCabe度量法使用例题

程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作分支和循环的具体条件。

例子

强连通的有向图G中,环的个数V(G)由以下公式给出:

                                                             V(G)=mn+2p

其中(1)公式含义:

  • V(G)是有向图G中环路数
  • m是图G中弧数
  • n是图G中结点数
  • p是图G中强连通分量个数

强连通图的p=1;也就是说2P=2;

在程序图G中,从程序图G的入口点总能到达图中任何一个结点,因此,程序总是连通的,但不是强连通的。为了使图成为强连通图,从图的入口点到出口点加一条用虚线【不计入计算的边数】表示的有向边,使图成为强连通图。

                                                               V(G)=1311+2=4

可算出McCabe环复杂度度量值为4。这里选择的4个线形无关环路,其他任何环路都是这4个环路的线形组合。

利用McCabe环复杂度度量值时,有几点说明。
  • 环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目时其复杂度也增加。环路复杂度与程序中覆盖的路径条数有关。
  • 环路复杂度是可增加的。例如,模块A的复杂度为3,模块B的复杂度为4,则模块A与模块B的复杂度是7。
  • McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。
  • 这种度量的缺点是:
  1. 对于不同种类的控制流的复杂度不能区分
  2. 简单IF语句与循环语句的复杂性同等看待。
  3. 嵌套IF语句与简单CASE的复杂性是一样的。
  4. 模块间接口当成一个简单分支一样处理。
  5. 一个具有1000行的顺序程序与一行语句的复杂性相同。
目录
相关文章
|
9天前
|
机器学习/深度学习 数据采集 人工智能
《大模型训练成本高,如何在不牺牲性能的前提下破局》
在人工智能领域,大模型训练成本高昂,主要源于硬件设备、数据处理和算法优化的需求。降低训练成本的关键在于合理配置硬件资源、改进数据处理方法、优化算法和模型结构,以及采用分布式训练技术。通过这些措施,企业可以在不影响模型性能的前提下,显著减少计算资源、人力和时间的投入,实现更高效的模型训练。实践证明,综合运用这些方法能够有效降低成本,推动人工智能技术的可持续发展。
70 18
|
6月前
|
存储 自然语言处理 开发者
通用性与灵活性对大模型的影响
通用性与灵活性对大模型的影响
|
6月前
|
开发框架 Cloud Native Devops
对抗软件复杂度问题之软件复杂度的增加会导致研发效率降低,如何解决
对抗软件复杂度问题之软件复杂度的增加会导致研发效率降低,如何解决
|
6月前
|
定位技术 UED 开发者
对抗软件复杂度问题之软件的复杂度增长会带来什么问题,如何解决
对抗软件复杂度问题之软件的复杂度增长会带来什么问题,如何解决
|
6月前
|
测试技术 开发者
对抗软件复杂度问题之系统架构对软件复杂度的有什么影响,如何解决
对抗软件复杂度问题之系统架构对软件复杂度的有什么影响,如何解决
|
6月前
|
开发者
对抗软件复杂度问题之软件的复杂度会不断上升,如何解决
对抗软件复杂度问题之软件的复杂度会不断上升,如何解决
|
编解码 监控 算法
文档管理软件中的精度优化:蝶行算法的崭露头角
蝶行算法是一种基于蝴蝶飞行的优化算法,其主要思想是模拟蝴蝶在寻找食物时的飞行路径,通过不断调整飞行方向和速度,最终找到最优解。
242 1
|
8月前
|
存储 程序员 API
LabVIEW评估代码复杂度
LabVIEW评估代码复杂度
57 0
|
机器学习/深度学习 存储 监控
转:排列组合算法在监控软件中的优势、复杂性与应用场景
排列组合算法在监控软件中可能用于处理一些组合与排列问题,例如处理多个元素的组合方式或排列顺序。它在一些特定场景下具有一定的优势和适用性,但也要注意其复杂性。
109 0
|
机器学习/深度学习 算法 Windows
算法的复杂性分析
算法的复杂性分析
350 0
算法的复杂性分析