陈大剩博客

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

  • 陈大剩
  • 2022-10-04 00:11:24
  • 502

软件复杂性

软件复杂性的基本概念

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

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

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

软件复杂性的度量方法

代码行度量法

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

McCabe度量法

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

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

McCabe度量法使用例题

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

例子

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

V(G)=m-n+2p

其中(1)公式含义:

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

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

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

V(G)=13-11+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行的顺序程序与一行语句的复杂性相同。
分享到:
0

说点儿什么吧

头像

表情

本站由陈大剩博客程序搭建 | 湘ICP备2023000975号| Copyright © 2017 - 陈大剩博客 | 本站采用创作共用版权:CC BY-NC 4.0

站长统计| 文章总数[109]| 评论总数[9]| 登录用户[22]| 时间点[112]

logo

登入

社交账号登录