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

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

软件复杂性

软件复杂性的基本概念

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

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

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

软件复杂性的度量方法

代码行度量法

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

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行的顺序程序与一行语句的复杂性相同。
目录
相关文章
|
监控 项目管理
MP项目特性详解
当今世界,项目管理已成为企业成功的关键因素之一。在众多项目管理方法和认证中,PMP(Project Management Professional)无疑是最受认可的之一。PMP认证代表着高水平的项目管理能力,而了解PMP项目特性则是掌握这一领域的重要一步。本文将深入探讨PMP项目特性,帮助您更好地理解和应用项目管理的最佳实践。
|
11月前
|
人工智能 达摩院 搜索推荐
通义大模型:解码中国AI的"通"与"义"
“通义”取自中国传统文化中“通晓大义”,寓意技术与人文的结合。作为阿里巴巴旗下的超大规模语言模型,通义在知识蒸馏、动态稀疏激活和文化感知模块上实现三大突破,大幅提升效率与适切性。其已在医疗、司法、文化传播等领域落地,如辅助病历处理、法律文书生成及文物解说等。测试显示,通义在中文诗歌创作、商业报告生成等方面表现优异。同时,开放的开发者生态已吸引5万+创新者。未来,通义将探索长期记忆、自我反思及多智能体协作,向AGI迈进,成为智能本质的载体。其对中文语境情感的精准把握,更是中国AI“通情达义”的典范。
3553 22
|
存储 数据采集 数据可视化
大数据处理技术
【4月更文挑战第10天】大数据处理涵盖采集、预处理、存储、分析挖掘、展现和应用等关键步骤。采集涉及多种类型数据,预处理确保数据质量,存储管理关注规模、速度和安全,分析挖掘利用机器学习发现价值,展现和应用则通过可视化和检索实现数据价值。云计算和AI强化了大数据处理能力,整体目标是提取数据中的价值,驱动企业和社会进步。
1112 4
大数据处理技术
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2作图展示基因和转座子的相对位置
跟着Nature学作图:R语言ggplot2作图展示基因和转座子的相对位置
|
前端开发 Java API
SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate
SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate
488 2
|
SpringCloudAlibaba 监控 Java
【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明
SpringCloud分布式应用微服务系统组件列表: • 微服务框架组件:Spring Boot2 + SpringCloud Hoxton.SR8 + SpringCloud Alibaba • Spring Boot Admin: 管理和监控SpringBoot应用程序的微服务健康状态 • 数据持久化组件:MySql + Druid + MyBatis + MyBatis-Plus
1618 57
【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明
|
存储 自然语言处理 算法
【软件设计师—基础精讲笔记6】第六章 结构化开发方法
【软件设计师—基础精讲笔记6】第六章 结构化开发方法
1246 0
|
NoSQL Redis
Redis6入门到实战------ 五、Redis的发布和订阅
这篇文章介绍了Redis的发布和订阅机制,包括其基本概念、客户端如何订阅频道以及如何发布消息给订阅者。
|
机器学习/深度学习 存储 算法
基于CNN+LSTM深度学习网络的时间序列预测matlab仿真,并对比CNN+GRU网络
该文介绍了使用MATLAB2022A进行时间序列预测的算法,结合CNN和RNN(LSTM或GRU)处理数据。CNN提取局部特征,RNN处理序列依赖。LSTM通过门控机制擅长长序列,GRU则更为简洁、高效。程序展示了训练损失、精度随epoch变化的曲线,并对训练及测试数据进行预测,评估预测误差。
|
机器学习/深度学习 搜索推荐 算法
降维·预测·救命:PCA、随机森林与乳腺癌
降维·预测·救命:PCA、随机森林与乳腺癌
401 1