论文部分内容阅读
软件开发者对于日趋复杂的软件系统的理解和控制越来越困难,传统软件工程正接近其复杂性和可扩展性的极限.复杂性使软件开发困难,质量难以保证。以较低的代价、在规定的时间内生产出高质量的软件产品是所有软件工程方法努力实现的目标。经过长期的工程实践,软件开发者认识到对于大规模的复杂软件系统而言,软件的结构与其功能、质量之间的关系十分密切。因此,系统设计时如何构建软件良好的结构、系统维护时如何对软件的结构进行优化,一直都是软件工程领域研究的重要问题。复杂系统和复杂网络研究的成果为探索大规模软件系统的结构特性和行为特征提供了有力支持。通过软件工程与复杂系统的学科交叉研究,从复杂系统和复杂网络的角度来重新审视软件,形成软件网络的概念:复杂软件系统可以分解成一系列软件实体(组成元素)的集合,如类、子程序、构件等。通过这些实体的交互,实现需要(预期)的计算功能。如果将系统中类、子程序、构件等元素视为节点,元素间的相互关系表示为节点间的(有向)边,软件结构实质上表现为一种内容互连的复杂网络拓扑的形态。将软件系统抽象为一类(人工)复杂网络来进行研究,从整体和全局的角度来探索和发现复杂软件系统的结构特性、演化规律和由此产生的行为特征,将有助于科学、工程地认识和理解软件的本质特征;同时,随着规模的剧增,软件的“网络化”趋势越来越明显(即软件系统可以表示为抽象的复杂网络模型),如何分析和探索其独有的网络结构特性和(演化)规律成为研究人员关注的焦点。目前,国内外关于软件网络的拓扑结构分析研究还刚刚起步,相关工作已经通过建立软件网络模型,揭示了软件网络的一些普遍的拓扑特性。但是现有的软件网络模型也存在着一些问题,比如忽略了软件组成元素之间的一些重要关系,因此无法提供软件的完整视图。例如,面向对象软件中类之间的依赖关系的差别就没有包含在已有的软件模型中,而依赖关系是软件重用的重要指标,应当考虑使用加权有向网络来描述面向对象软件系统的拓扑结构。另外,在现有的研究中,软件系统通常使用无向或者无权有向网络模型表示,网络中节点的属性往往被忽视,而单个类自身的属性、动力学行为对整个系统结构的影响是不容忽视的。在这种研究背景下,本文针对现有的java面向对象软件系统源码,通过扫描编译后的中间结果(.class或jar文件),并解析这些中间结果来获得软件的网络模型。借鉴复杂网络的相关理论和方法,以软件系统结构的特征分析为切入点,借助一整套流程,开展一系列的关于软件系统结构的研究,并结合软件工程中的相关原理进行阐述,希望能对软件网络的拓扑结构分析研究有所贡献。具体的研究工作在以下几个方面取得结果:(1)通过工具DependecyFinder,抽取出各面向对象软件系统中类间的关系(建立面向对象软件系统的类层次有向网络模型)。在所建立的网络模型上计算反映网络拓扑特征的参数,验证了面向对象软件系统的类级网络具有“小世界”和“无尺度”的复杂网络特性,分析主要围绕类级软件网络的平均最短路径长度、聚集系数和度分布展开。并从对象软件系统开发的过程模型来解释面向对象软件系统的结构特征产生的原因,认为面向对象软件构造过程所遵循的鼓励重用原则、以及必须考虑的功能约束是面向对象软件系统最终体现出“小世界”和“无尺度”的复杂网络特性的原因。(2)通过工具Pajek绘制出了4个开源系统的类粒度的全局软件网络结构图,从视觉的角度直观的分析整个软件系统的结构网络。并罗列出每个软件网络中的用于内部交互的核心节点。软件依赖网络中存在较高的聚类系数和较小的平均距离(即小世界特性),说明软件在设计实现时存在大量团体,它们遵循高内聚低耦合的原则,团体内部成员之间联系紧密,而团体之间的联系比较松散。连接不同团体的节点作为软件内部交互的核心,很可能就是软件的骨架,即软件体系结构的核心实现。从拓扑结构出发,寻找并分析这样的节点以及节点所在的团体,有助于我们抽取软件系统的体系结构,理解软件的运行机理。(3)通过工具Mfinder,根据复杂网络中网络motif的发现和研究方法,分析软件网络3-4个节点的连通子图,研究类级软件网络的组织结构特征。发现软件系统中大量出现的子结构拥有简单的交互方式,从而认为软件系统倾向于以简单的交互方式实现功能。另外,4个软件系统拥有一些共同的小型结构,这些小型结构在这些系统中出现的频率远大于它们在随机网络中出现的频率,可认为是类级软件网络的网络典型连接方式。这些典型连接方式以系统中大量存在的结构为基础,它们可能代表某种普遍使用的设计模式。研究小型结构有助于我们充分地理解软件系统的复杂性,对定量地分析软件具有重要意义。(4)对4个软件系统的类节点的WMC分布进行了统计,发现面向对象软件网络不仅在结构上具有“无尺度”的特性,而且功能分布体现出异质性(类的WMC分布也大致遵循幂律分布),但是对统计结果产生的原因还有待进一步研究。