什么是圈复杂度含义

中国领先的IT技术网站
51CTO旗下网站
3.2.8 圈复杂度度量(及相关的复杂度度量)(1)
《软件质量经济学》本书是软件质量经济学领域的唯一著作,也被誉为软件工程领域最重要的图书之一,由软件工程领域的泰斗撰写。全书以大量行业数据和真实案例为驱动,从经济学角度讲解了度量软件质量的各项指标和方法,从而为有效管理软件质量和项目进度提供帮助和指导,更重要的是,本书还深入讨论了软件质量的经济学影响和商业价值。本节为大家介绍圈复杂度度量(及相关的复杂度度量)。
作者:廖彬山/张永明/崔曼 译来源:机械工业出版社| 20:26
3.2.8 圈复杂度度量(及相关的复杂度度量)(1)
圈复杂度和基本复杂度都于1975年因数学家Tom McCabe而成名。两种度量都控制着软件应用程序的流程。圈复杂度度量了全部的路径,基本复杂度消除了冗余的路径。
圈复杂度是以图论为基础的,通用的公式是&边减去节点再加上未连接部分的2倍&。图3-1说明了一个简单的软件控制流图。在这个图中,没有分支,因此圈复杂度等级是1。显然,分支会增加圈复杂度的等级。
超过35年的经验数据说明,软件工程师一般认为圈复杂度低于10的软件是非常简单且很容易跟踪的。
随着圈复杂度上升到20以上,就会感知到复杂度急剧上升。潜在缺陷增多了,缺陷清除效率变低了。测试覆盖率急剧下降。将圈复杂度维持在10以下有很多实际的和经济的理由,更完美的是保持在5以下。这不总是可以实现的,但是软件界有一个常识是圈复杂度高是有害的。
复杂度仍然是一个含糊的主题,没有所有研究者一致认可的确切定义。尽管圈复杂度和基本复杂度有清楚的含义,但是还有很多其他类型的复杂度影响着软件,但是并没有被度量和作为质量预测的因素。
当我们在软件的上下文中提到复杂度时,我们讨论的是软件应用程序尝试实现的问题、应用程序所用到的代码架构或者数据项间关系的难度。换句话说,复杂度这个词语可以被用来通过一个通用的方式来讨论问题复杂度、代码复杂度和数据复杂度。圈复杂度只度量了代码复杂度。
在本书一位作者的客户之中,600家企业中的大约450家在其度量圈复杂度的软件项目中使用了某种形式的复杂度度量工具。很多执行这类计算的商业工具是可用的。
复杂度度量工具的使用在系统软件和军事软件(超过75%的项目)中是很普遍的,在管理信息系统、外包软件、Web和商业软件(少于60%)中的使用稍微少一点。
使用复杂度度量工具的有趣的一点是,表面上看来好像使用了随机的模式。我们常常能看到同一家公司里两个接近的项目中,一个可能使用了复杂度分析工具,而另一个,没有什么特别的原因,就是没有使用。
科学和工程著作介绍了复杂度不少于30种不同的特点,其中一些可能与软件应用程序是相关的。科学著作在软件的上下文中提到的复杂度种类包括下面这些。
算法复杂度关注可计算问题的算法的长度和结构。算法较长和较复杂的软件应用程序是很难设计、审查、编码、证明、调试和测试的。
代码复杂度关注开发和维护人员对所负责的代码是否复杂的主观看法。对软件人员的访谈和对其主观意见的收集是更正式的复杂度度量方法(如圈复杂度和基本复杂度)标准化中很重要的一步。除非与代码打交道的实际的软件人员断言圈复杂度20比10更难办,否则就没有什么关系。然而,代码复杂度的主观看法似乎与圈复杂度是相关联的。
组合复杂度关注可以在N个组件上构建的子集合和集合的数目。这个概念有时以软件应用程序的模块和组件的构建方式出现。
计算复杂度关注执行算法所需的机器时间和迭代数。一些问题是非常复杂的,导致它们被认为是不可计算的。其他的一些问题是可以解决的,但是需要太多的机器时间,如密码分析法或者天气模式的气象分析。
圈复杂度是从图论中派生出来的,并且是Tom McCabe博士使其变得流行的。圈复杂度用于测量软件片段的结构图的控制流程。计算控制流图圈复杂度的通用公式是&边减去节点再加上未连接部分的2倍&。圈复杂度经常被用作潜在缺陷问题的警告指示器。
数据复杂度处理与实体相关的属性数目。例如,在一个典型的医疗机构存放病人记录的数据库中,一个人相关的属性可能包括出生日期、性别、婚姻状态、孩子、兄弟姐妹、身高、体重、四肢残疾情况等。数据复杂度是处理数据质量的一个关键因素。
诊断复杂度是从医疗实践中派生出来的,在医疗实践中,诊断复杂度处理用来准确地确定疾病的症状(体温、血压、损伤等)的组合。例如,很多年来,如果表面上的症状基本相同的话,确定一个病人是患了结核病还是组织胞浆菌病还是很难的。对于软件来说,诊断复杂度会在客户报告缺陷、厂商尝试隔离相关症状并找出问题所在时出现。
熵复杂度是系统组件部分的异常状态。熵是一个重要的概念,因为随着时间的推移,所有著名的熵都会增加。也就是说,异常会逐步增加。根椐观察,这个现象会伴随着软件项目而发生,考虑很多小的变更会逐渐损害初始的架构。人们在软件项目维护模式方面进行了广泛的研究,尝试去度量熵增加的速率,以及它是否可以被代码重构等方法反转。
基本复杂度也是从图论中派生出来的,也是Tom McCabe博士使其变得流行的。软件片段的基本复杂度是从圈复杂度中派生出来的,是在应用程序的图通过清除冗余的路径而被简化后产生的。基本复杂度常常被用作潜在质量问题的警告指示器。与圈复杂度相同,一个没有任何分支的模块的基本复杂度是1。随着分支数目的增加,圈复杂度和基本复杂度都会上升。
扇复杂度是指软件模块被调用(称为&扇入&(fan in))的次数,或者软件模块调用(称为&扇出&(fan out))的模块数目。扇入数目大的模块就软件质量而言显然很关键,因为它们被很多其他模块调用。然而,扇出数目大的模块也很重要,而且很难调试,因为它们依赖于非常多的模块。扇复杂度与潜在重用的研究是相关的。
流复杂度是流体动力学和气象学研究的一个重要主题。它是处理通过渠道和跨过障碍物的流体的湍流的。数学物理学的一个称为&混沌理论&的新子领域提升了处理物理问题的流复杂度的重要性。很多概念(包括混沌理论本身)与软件是相关的,应该研究一下。例如,通过高圈复杂度的软件的控制流类似于湍流液体的流,是比较难预测的。
功能点复杂度是指计算软件项目最终调整过的功能点总数所需要的调整因子的集合。标准美国功能点,如由国际功能点用户组(IFPUG)所定义的那样,拥有14个复杂度调整因子。英国的 MarkⅡ功能点使用了19个复杂度调整因子。SPR功能点和特性点度量方法使用了3个复杂度调整因子。
图复杂度是从图论中派生出来的,处理为各种目的而创建的图中的边和节点数目。这个概念对软件来说是很重要的,因为它是圈复杂度和基本复杂度分析的一部分,而且也是几个源代码重构工具的操作的一部分。
Halstead复杂度是从已故的Maurice Halstead博士和他的同事及学生们在普渡大学的&软件科学&研究中派生出来的。Halstead软件科学对复杂度的处理是以4个单元为基础的:①单一的运算符(如动词)的数目;②单一的操作数(名词)的数目;③运算符出现的实例;④操作数出现的实例。Halstead的工作与语言学的研究有所重叠,它试图枚举出如软件项目的词汇之类的概念。
【责任编辑: TEL:(010)】&&&&&&
大家都在看猜你喜欢
热点热点头条头条热点
24H热文一周话题本月最赞
讲师:30981人学习过
讲师:133522人学习过
讲师:14916人学习过
精选博文论坛热帖下载排行
本书是全国计算机技术与软件专业技术资格(水平)考试的指定用书。按照新的网络工程师考试大纲的规定,本书包含了数据通信基础知识、网络体...
订阅51CTO邮刊圈复杂度 - Bing 词典网络 ; 1.cyclomatic complexity圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行 …|2.javaNCss...3、函数深度 (sourceMonitor) 4、圈复杂度(javaNCss) 这几项可以用工具 sonar 解决,sonar+jenkins的配置网上很多的,搜一下就可以 …|例句释义:全部,cyclomatic complexity,javaNCss类别:全部,口语,书面语,标题,技术来源:全部,字典,网络难度:全部,简单,中等,难更多例句筛选收起例句筛选1.
the CheckStyle -
2.What's more
like stepping into
where you're
about 7.The
noncommenting
9.CheckStyle
准确权威无广告下 载 手 机 版 必 应 词 典体 验 P C 版 必 应 词 典【图文】好.圈复杂度概念.重构方法及案例分析.潘洪亮_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
好.圈复杂度概念.重构方法及案例分析.潘洪亮
&&圈复杂度概念.重构方法及案例分析.潘洪亮
大小:4.40MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢一、公式:Vg=m-n+p;//&&&Vg=m-n+2p;
g:代表强连通有向图,
m:代表强连通有向图的弧数,
n:代表强连通有向图的节点数,
p:是g中分离部分的数目,(默认是1)
m和n都很清晰,当我们要用公式计算的时候p的值不固定,很难计算。为什么会出现p和2p的情况呢
如图所示,这是一个控制流图,入度是2,出度是28,。我们能从2→28,但是不能从282,所以这里就该减去2p也就是2.
若是画一条从28→2的虚线,那么这里就该减去1,就是正常的p就行。
总结:分离部分位p还是2p主要看,出度和入度有没有相连,相连为p,不相连位2p。这就是1和2 的差距。
二、判定节点数+1
判定节点数是指强连通图中需要判断的节点,就像图中的(3.7.11.15.19),一共5个,那么圈复杂度就是6
三、图中围成圈的个数,
这个要求必须是强连通有向图,意思是有一条从28→2的虚线。然后看看图中围成圈的个数。
像:(19.20.22.23),(15.16.24.23.20.19),(11.12.25.24.16.15),(7.8.26.25.12.11),(3.4.27.26.8.7),
和虚线组成的(2.28.27.4.3)(图中没有画出,请脑补。)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1094次
排名:千里之外}

我要回帖

更多关于 codedex复杂度怎么降低 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信