复杂度文章 软件复杂度概述

2019-08-24 - 复杂度

20世纪60、70年代,软件系统的规模越来越大,复杂度越来越高,软件危机爆发,软件工程应运而生。如何合理有效的度量复杂度并加以控制,成为科研人员探索的主题。1976年McCabe提出并开发了McCabe Cyclomatic Metric,对软件进行结构测试。1977年Halstead提出软件标准。这两种方法是复杂度度量的开始。

复杂度文章

1976年McCabe提出圈复杂度,从提出至今,四十余年的发展中,圈复杂度在工业界和学术界都备受重视,学术界仍在有研究圈复杂度的文章,工业界中,度量软件复杂度的主流方法仍然是圈复杂度。

在阅读了关于圈复杂度2010年至今的文章,圈复杂度的文章可以分为几大类,一则结合圈复杂度本身图论的性质,例如用作UML图可理解度的度量,二是,作为众多复杂度度量方法之一,用作软件指标的测量,探究对软件属性的影响。

复杂度文章

近几年对于圈复杂度方法改进的的文章少见,一方面,圈复杂度作为一个成熟的方法,很难再有突破,另一方面,学术界对圈复杂度颇有微词。

圈复杂度仅仅考虑了软件的设计结构,并未考虑的软件的输入、输出,这是一种不全面的计算方式。圈复杂度于1976年提出,此时,面向对象编程语言尚未出现,而今,面向方法早已占据了编程语言的半壁江山,此时的圈复杂度方法是否仍然适用,是一个有待探讨的问题。

复杂度文章

针对面向对象语言的度量方法也有诸多,但是技术或者是理论的限制,这些方法并没有被工业界广泛应用,以至于工业界目前所知道的、使用的额,仍然是圈复杂度。

2000年后,认知信息学,突飞猛进,这种新的理论方法,逐渐被应用到软件工程领域,以wang为代表的研究者,提出软件是一个信息实体,理解信息的复杂度即代表着软件难于理解的复杂度,这一思想,成为之后软工领域提出、改进认知复杂度方法的基础。

复杂度文章

2002年wang提出了认知功能规模(Cognitive

Functional Size, CFS),认知复杂度的方法首次被提出,在此之后的方法都是基于CFS改进的,包括CICM、MCCM、CPCM等。Wang在CFS的论文中,总结了基础控制结构(Basic Control Structure,BCS),基础控制结构是构建软件逻辑体系结构的基本流程结构,wang通过心理实验的方法,为每一种结构分配认知权重,例如顺序的结构的权重是1,分支结构的权重是3,数字越大,即代表着理解结构越困难。

复杂度方法的验证,目前多是通过1988年weyuker提出的9种属性的验证,这种方法只能从宏观上描述一个度量方法是否有效:譬如度量两个不同的程序,值是否不同。定性的度量方法只解决了可不可以用的问题,是否可靠的问题尚未解决。

验证薄弱,论文还会通过对比和专家经验,对比方法即将提出的方法与已有的方法纵向对比,主要比较的属性是对于不同的程序的区分度,不同语言的适用性。专家经验一般专用于验证认知复杂度的方法,对比认知方法度量的值和专家的评价值,若保持一致,即认为提出的方法更有效。

引入复杂度度量方法,是希求能定量的计算出程序或软件的复杂度,从而提醒开发人员,重构代码,控制复杂度。便需要复杂度阈值的概念,即复杂度超过某个值需要控制复杂度,在哪个区间范围时合理的。一般来说,不同的度量方法,针对不同的语言,会有不同的阈值。

McCabe&Associates公司曾建议圈复杂度的阈值要控制在10以下。此阈值没有针对不同的语言,也没有说明所度量程序或者是软件的大小。这个阈值在工业界已经稍有使用,工业界目前对于何时控制一般采取经验值,或者不做控制。

复杂度是否有意义,这个问题的答案实则等价于问,软件工程是否有意义,软件的不可见性,复杂,以及人为决定了软件是一个不可控极为矛盾的实体,复杂度方法所能做的,尽可能准确、客观指导开发人员控制软件的复杂度。从人的角度来看,软件复杂度是难以理解、难以维护的程度;从软件的生命周期来看,复杂度是软件设计、实现、维护和改变的难度;从软件本身开看,复杂度是软件的固有静态属性。

软件复杂度度量方法是否有意义,软件复杂度本身研究是否有意义,也许要从软件工程发展历史之路来看,但凡能有所作用的、有所改善的,都是必要的。

相关阅读
  • 时间复杂度o(1) 时间复杂度On与空间复杂度O1是什么意思?

    时间复杂度o(1) 时间复杂度On与空间复杂度O1是什么意思?

    2019-08-24

    关于网友提出的“时间复杂度On与空间复杂度O1是什么意思?”问题疑问,本网通过在网上对“时间复杂度On与空间复杂度O1是什么意思?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:RT,谁深入浅出的讲下时间复杂度与空间复杂度,以前数据结构没学好!把输入规模看成x轴,所花时间空间看成y轴。

  • 计算复杂度 复杂度超过人类可处理规模 未来网络如何掌控?

    计算复杂度 复杂度超过人类可处理规模 未来网络如何掌控?

    2019-08-24

    quot;联接能力的每一次飞跃都能带来下一波深刻创新。5G和WiFi6代表了联接的新时代。开发者们已经开始创建下一代沉浸式无线优先体验。随着数十亿的事物联接到网络,这种增长将给IT带来前所未有的复杂性。quot;思科全球执行副总裁,网络与安全事业部总经理DavidGoeckeler表示。有数据显示,到2022年。

  • 时间复杂度o(1) 时间复杂度On与空间复杂度O1是什么意思?

    时间复杂度o(1) 时间复杂度On与空间复杂度O1是什么意思?

    2019-08-24

    关于网友提出的“时间复杂度On与空间复杂度O1是什么意思?”问题疑问,本网通过在网上对“时间复杂度On与空间复杂度O1是什么意思?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:RT,谁深入浅出的讲下时间复杂度与空间复杂度,以前数据结构没学好!把输入规模看成x轴,所花时间空间看成y轴。

  • 复杂度大小 复杂?简单?论复杂度守恒定律

    复杂度大小 复杂?简单?论复杂度守恒定律

    2019-08-24

    “Q:有什么规则,是交互设计师不可违反的?”“A:只有一个,那就是必须为用户设计。”“Q:你是怎么想到复杂度守恒定律的?”“A:当交互设计这一领域还处于非常原始的时期,我当时正在施乐PARC工作,当时(图形化用户界面刚刚诞生不久)用户界面的一致性设计还是一个全新的观点,并且具有相当的争议性。不过,我们中许多人都认为。