论文部分内容阅读
随着计算机技术的发展,计算机软件的作用越来越重要,涉及人类社会的各行各业,用于解决复杂的实际问题。为了不断满足用户的新需求以及不断适应应用环境的改变,构成软件系统的软件实体及实体间的交互关系呈数量级的增长,软件系统的规模在不断增大,其复杂性也在日趋增长,软件开发者对于复杂软件系统的理解和控制越来越困难。软件的复杂性极大地影响了软件系统的开发和质量,是导致软件危机的主要因素。系统的整体性能取决于系统的结构,影响软件系统性能的往往是整个系统的结构特征和性质,软件的结构与其功能、质量之间的关系十分密切。解决软件质量危机的关键所在就是研究软件系统结构特征进而达到控制软件复杂性的目的。复杂系统和复杂性科学是二十一世纪科学发展的前沿,复杂网络的研究从整体和全局的角度为研究复杂系统的结构和行为提供了一种有力的工具。通过软件工程与复杂系统的学科交叉研究,用网络的观点来审视软件系统,将软件系统抽象为一种人工复杂网络来进行研究。软件系统可以被看成是由类、子程序、构件等软件实体以及它们之间的相互联系构成的复杂网络。将软件实体视为节点,软件实体之间的相互关系视为边,软件系统就被抽象为网络拓扑的形态。本文借鉴复杂网络的相关理论和方法,利用大型工具DependencyFinder对面向对象软件系统JDK源代码进行分析,将面向对象软件系统抽象为网络的形式,在分析前人研究成果的基础上,引入边权的概念,并赋予其特殊的表征意义,开展一系列关于软件系统网络结构的研究。本文所做的主要工作是在抽象出的加权软件依赖网络的基础之上分析其全局拓扑特性,证明软件网络具有复杂网络特性,并在边权的基础上提出依赖度和影响指数的概念,用来度量两个类节点之间的依赖程度和不同类节点对整个软件网络的影响程度。通过分析软件实体间的复杂交互关系,进一步揭示软件系统中软件实体间依赖关系的重要性。然后根据面向对象软件开发的指导原则,解释了软件系统中这些复杂网络特性的形成原因。最后基于软件系统结构的研究,在局域世界的基础之上提出一个演化模型,模拟面向对象软件系统结构的演化过程,揭示了面向对象软件系统的演化规律。本文的主要工作具体分为以下三个部分:首先分析加权软件依赖网络的全局拓扑特性。软件网络的定义是将面向对象软件系统中的类抽象为节点,把相关分析工具抽取的类之间的依赖关系抽象为边,类之间依赖的次数定义为边权。实验表明加权JDK软件网络的度分布服从幂律分布,并且具有小的平均路径长度和大平均聚集系数,这表明加权面向对象软件系统网络拥有“小世界特性”和“无标度特性”。同时发现节点的影响指数分布也服从幂律分布,并且软件网络中存在多个局域世界,每一个局域世界是由JDK库中一组功能相关的类组成的,多个局域世界间的相互作用构成了整个软件网络。其次分析复杂网络特性的形成机理。基于面向对象软件开发的指导原则,解释了软件系统中存在这些复杂网络特性的原因。面向对象软件网络中,如果类之间的距离较大,将会增加程序的复杂性,容易隐藏潜在的危害,并且导致程序可读性下降,不利于程序的编码、修改和测试。大的聚集系数表明了在局部区域存在大量的连边,正好符合软件开发所要求的模块化原则。面向对象软件系统出现无标度特性的原因在于提倡重用。为了降低开发成本,系统中存在一些重用程度高,且实现功能较简单的类。节点影响指数分布呈现幂律特性,表明极少数节点的重用程度较高。节点的影响指数揭示了软件开发过程的一些指导性原则,如果节点影响指数高的类节点设计有缺陷,或者对于这些类的更改不合理,将会影响到大多数的类,导致该类可重用性下降。这些研究成果对于软件开发和测试中软件模块化和重用性的改进有着量化和指导作用。最后基于局域世界提出一个演化模型,用来模拟面向对象软件系统的演化过程。实验结果表明演化之后的系统仍然保持其复杂网络特性,并且该模型能够真实的反映软件网络统计特性的演化。该模型有助于开发人员更好地理解大规模面向对象软件系统的特征及演化,对于面向对象软件系统的进一步演化升级具有重要的指导意义。