论文摘要
软件是当今人们解决现实复杂问题的有效工具,随着问题域的深入和扩展,软件的规模和复杂度与日俱增,使得开发者越来越难以理解所开发的软件系统,开发的风险逐渐加大,而软件产品质量又没有像工业产品那样严格的评价标准,因而难以得到有效控制和根本保障。传统软件工程理论在大规模软件的开发、评价、维护等方面表现出极大的局限性,正在接近其复杂性的极限。因此如何理解和量化软件日益增长的复杂性,构建适应维护的良好架构,合理评价软件系统是软件度量学要解决的关键问题,也是软件工程面临的一个极大的挑战。软件系统是由大量的底层元素及它们之间错综复杂的交互关系构成的一种复杂系统,其结构蕴含着软件所有的拓扑信息并呈现网络化的表征,软件的结构决定着其功能和质量。传统的软件工程设计方法通常过分的关注软件底层的局部结构特征,而忽略了更为重要的反映整体特性的全局结构,使得开发人员难以把握大规模软件系统的设计使用和研究,导致他们对整个软件科学和工程的基本结构和本质特征缺乏清晰的宏观认识,而这又妨碍了他们理解、复用已有系统进行新的高效、高质量开发。近年来,研究人员发现,软件的内部结构表现出了明显的复杂网络特征,因此利用复杂系统和软件工程的学科交叉研究,从复杂网络和复杂系统的视域来重新审视软件系统,将其抽象为人工复杂网络进行研究,从整体探索软件结构的复杂性本质、进化规律和行为特征并给出量化评价,形成一种新的软件网络观来指导大规模软件系统设计,突破了软件的传统思维方式,有助于从源头控制和提高软件质量,确保软件性能,降低维护成本。本文首先分析了传统度量方法在大规模软件应用上的不足,从复杂网络这一新的视域来观察评价软件系统。以分析和度量软件结构的整体特性为着眼点,以质量控制和结构优化为目标,通过开发软件解析工具,实现软件拓扑结构解析与可视化,构建软件静态结构的网络模型,对软件系统整体进行直观粗略评价;同时构建软件样本档案库,为后续研究提供支撑;经过大样本多维度的软件结构特征量及相关性的统计分析,阐述了它们在软件结构的复杂性、稳定性及可靠性等方面的影响作用,并结合新定义的依赖度、影响度和热力学熵的概念从不同的角度构造了两种系统复杂性的定量描述,初步确定软件节点和结构不同维度的参考度量参数。随后,本文从软件的基础结构入手,定义了软件网络核的概念,通过对软件结构核的提取和扩展,利用核数和k核分解分析大规模软件的潜在结构特性,结合软件设计思想,对核数在软件系统层级性、中心性、连接趋势、进化趋势等方面的重要地位和影响进行了量化分析研究,初步形成软件设计合理的判据,为简化理解大规模软件系统,有针对性的重点测试和度量提供指导性建议。其次,在比较传统度量方法优缺点的基础上,提出了一个基于复杂网络的二维的软件度量方法体系(BCN测度体系)并加以评价。总结度分布,平均最短路径、聚集系数,介数,结构熵,核数等特征量在软件网络分析中的功能和用途,根据大样本优秀开源软件统计分析结果,确定结构设计良好软件的统计学判据作为质量评估的参考;从微观构成和宏观拓扑两个维度定义8个测度来全方位的度量软件系统的重要单元和结构特性,进一步量化了软件质量的评价,并通过实际的水电仿真系统验证该体系的合理性、可行性和有效性。再次,基于度量方法体系从时间维对软件系统的进化规律进行研究,重点对软件网络平均节点度、平均介数、核数、簇度相关性、匹配系数等重要特征量进行随大样本版本变化的跟踪统计分析,研究其变化特性,揭示软件进化的模式、形态以及基本规律,为了解软件生态特征,预测软件进化趋势,指导软件项目开发提供可靠依据。最后,在软件生态系统中,通过标准结构熵考察软件网络进化整体体现的有序性,进一步说明软件进化的方向是有序性增强,复杂性增加,而拓扑结构趋于稳定性;揭示软件系统是一种耗散结构,进化使软件具有显著的代谢、组织化、有序和突变的生态特征,进化的最终趋势是获得适应性稳定;通过定义进化速率和灰色理论给出进化快慢的量化判别方法;提出利用逻辑斯谛方程对软件复杂度进化预测的新方法,为软件开发和质量控制提供参考。