论文部分内容阅读
随着人们对软件功能的需求越来越多,软件系统的结构规模不断增长,不同软件间的交互方式日益复杂,这使得软件系统的复杂性与日俱增,进而极大地影响到软件系统的运行可靠性以及管理、维护等工作。而通过将复杂网络引入到软件网络的研究中,合理的描述软件系统结构,识别出软件系统中的关键关键部分,可以有效地从整体与局部角度来探索软件系统内在的结构特征,对提高软件系统可靠性、维护软件系统,预防漏洞、错误定位等有着重要的意义。为此,论文通过研究不同的网络模型,提出相应的建模方法,并以此为基础进行必要的分析,主要包括以下研究工作:首先在软件系统网络化建模方面,一方面,选取适当数量的子系统作为构件,从较大粒度层次来建立宏观网络模型,以研究软件系统的整体特性;另一方面,以类作为基本粒度单元,通过考虑类之间的多重影响对网络边进行相应赋权,改进类层次网络的加权方法,建立相应的微观网络模型,以分析软件系统的代码细节。然后在关键节点识别方面,从不同的侧重点出发,设计不同的关键节点识别方法:一方面,从优化评价节点排序指标的角度出发,用结构赋权的方式重构了鲁棒性测度函数,并且引入交换子概念实现离散化的萤火虫算法,通过增加基于佳点集初始解构造、分区搜索、可变全局吸引力和自适应随机项使得优化搜索能够准确收敛,从而实现了对网络关键节点的准确识别。另一方面,从综合不同度量指标的角度出发,将ListNet引入到节点排序中来融合不同的度量指标,并且基于AdaBoost算法将多个ListNet基学习器集成起来,以进一步提高ListNet的泛化性能,使得整体关键节点识别有着较高准确性。最后为验证所提方法的有效性,通过分析实际软件网络系统16000与三个典型的软件的相关特性,分别建立了宏观与微观网络化模型,并在这四个网络模型的基础上,对所提关键节点识别方法进行了仿真实验对比。实验结果表明,所建立的不同层次网络化模型从全局与局部有效地刻画了软件系统的结构特征,符合软件的实际情况,为后续研究提供了准确的网络模型;两种不同侧重点的关键节点识别方法相较于同类型方法,有着较高的准确性,可以在实际的工作中根据情况选取相应的方法,以应对不同的应用场景。