基于加权软件网络的计算机软件模块性和稳定性度量方法研究

论文价格:免费 论文用途:其他 编辑:硕博论文网 点击次数:
论文字数:34014 论文编号:sb2020050516463630852 日期:2020-05-08 来源:硕博论文网
本文是一篇计算机论文,本文在国家自然科学基金(No.61702378 和 61603163)以及浙江省科学技术联合计划资助下完成(LGF19F020007)。主要工作总结如下:1)基于加权软件网络的软件模块性度量方法。在软件模块性的度量研究中,现有工作主要探讨与软件模块性相关的耦合性和内聚性的度量,没有将耦合性和内聚性两者结合起来,进而从整体上度量软件的模块性。在本文的方法中,我们定义了一个新的度量指标,模块性(Q),从软件整体的角度来衡量软件模块性。本文的度量指标是基于方法和属性级别的软件结构的网络表示(即 FCN),并应用在复杂网络理论中被广泛使用的度量指标(即 Q)来计算软件模块性的值。FCN 是一个加权无向图,它考虑了方法和属性之间的耦合频率,从而在边上分配权重。我们应用著名的 Weyuker 标准从理论上验证 Q 指标的合理性,并使用开源 Java 软件进行实证评估,以揭示其作为衡量软件模块性度量指标的有效性。

第 1 章 引言

1.1 研究背景
随着软件功能和结构的日益复杂,软件开发难度日益增加,软件质量难以保证,软件的维护管理成本随之增高,如何改善这种情况迫在眉睫。软件质量的难以保证是由于缺乏合理的度量,所以需要根据提出的度量进行合理的改善。软件度量也就成为软件工程领域的研究热点。软件度量是对软件开发项目、过程及其产品进行数据定义、收集以及分析的量化过程。软件度量的过程主要包括三个方面,首先是成熟度度量,其次是管理度量,最后是生命周期度量。按照软件度量过程进行合理的度量,并根据度量结果指导软件的开发过程,软件质量就能得到明显提高,因此软件度量的意义重大。软件度量是对软件内部结构质量属性的量化。结构质量有很多方面,包括理解性、可支持性、稳定性、模块性等。软件的模块性和软件的稳定性是软件度量重要的两个方面,具有重大研究意义。
“高内聚和低耦合”被认为是实现模块性设计的主要驱动因素之一,它是面向对象(OO)设计中最重要的原则之一[1]。内聚是模块内耦合的指示,而耦合是模块之间耦合的指示。在设计软件时,通常会争取高内聚(一个内聚模块)和低耦合(模块之间的耦合应该更少),这促进了软件模块性结构的形成。模块性被认为是软件设计中最重要的属性之一,它对许多外部质量属性(如可重用性,可维护性和可理解性)具有重大影响。本文所说的模块性,它通常指的是模块内相互依赖的概念和模块之间的独立性[2]。
我们无法控制不能准确衡量的东西[3]。因此,为了控制软件模块性,需要使用定量技术来评估它。一种有效的技术是提供一些指标来表征模块性相关的贡献,例如模块耦合,内聚和接口大小[4]。然而,这其中许多指标仅关注模块性的一个方面,即耦合或内聚。它们不能兼顾软件模块性的耦合和内聚,并且无法全面描绘软件模块性。更糟糕的是,它们通常只能表征某个软件的某些局部特征,例如,一个类所拥有的类的数量,一个类具有的方法的数量等等,他们未能探索该类中的丰富信息。由于缺乏合适的工具和理论,对于特定软件系统的结构,人们很难将软件系统的模块性特征作为整体描述出来。
图 1.1 论文组织架构图
........................

1.2 问题提出和意义
模块性设计的主要驱动因素之一是“低耦合和高内聚”。因此,现有的软件模块性度量的研究工作主要集中在量度软件元素之间的耦合和软件元素间的内聚。但是,大多数这些指标主要集中在耦合或内聚的一个方面。这些方法忽略了将耦合和内聚两者结合起来衡量软件的模块性,因此软件模块性无法被全面的了解。不仅如此,大多数的研究主要关注一个软件的某些局部特征的表征,因此需要新的度量来表征整个软件的模块性。
众所周知,任何软件系统都由一组软件元素(例如,方法,属性,类等)及其耦合(例如,方法调用,继承,扩展等)组成,它们构成了软件的拓扑结构[8]。特定软件的软件结构在软件的整个生产过程中形成,并且可以由网络(或图形)自然地表示。近年来,很多研究者已经进行了许多尝试来利用复杂网络理论将软件结构进行网络表示(通常称为软件网络),进而分析软件结构及其动态,其中软件元素是节点,并且它们的耦合是边[8,9,10,11]。从熵的角度来看,软件结构在整个生产过程中从混乱变为有序[12,13],并且已经揭示了许多类似物理学的软件网络规律,如“无标度”和“小世界”[8,9,10,11]。此外,复杂网络理论也被应用于重构软件[14],识别关键软件元素[15],并优先考虑测试用例[16],开辟了复杂网络与软件工程之间的跨学科研究。这种新颖的跨学科研究为我们提供了一个有效的软件整体分析工具,也激发了我们在复杂网络的研究中运用理论来整合软件模块性的特点,进而更好的实现软件模块性。
在分析软件的变更传播和稳定性度量方面,很多学者已经做了大量工作,但是他们的工作主要是软件变更传播的最坏情况分析。通常,在他们的假设中,一个类中的更改肯定会直接或间接影响链接到它的其他类,他们忽略了类与类之间的耦合及它们频率。因此,在软件结构中考虑类之间的耦合频率,才能更好的研究软件的稳定性。
...........................

第 2 章 相关研究

2.1 软件度量研究
随着软件的功能和复杂度的不断提高,软件的质量问题日益凸显,软件的维护监控成本日益提高,如何改善这种情况成为亟待解决的问题。没有度量就无法改善,度量软件进而改善软件的质量也就成为了软件领域关注的焦点。许多研究者在软件度量方面做出了诸多贡献。周晓聪等人对内聚度度量进行实证研究,数据包含多个度量指标在Java开源软件项目的分布情况,帮助人们更好地理解并使用内聚度度量[21]。冼伟成等人将幂律分布的研究方法用于面向对象软件度量,根据幂律分布函数规律,发现代码质量问题[22]。乐明昊通过软件度量属性的选择算法来预测软件的可靠性,为软件研发提供了可靠的保障[23]。因混源软件由开源代码、自主代码等不同来源代码组成从而具有更高的多样性和复杂性,刘启林等人根据这个特性提出混源软件质量模型,更好的控制和改善软件质量[24]。卜依凡等人利用了常见的软件度量,结合有监督深度学习提出了新的上帝类的检测方法,大大促进了软件检测方面的发展[25]。Petkov等人定义了用于评估测试效率的软件度量,该指标基于测试期间发现的错误数量和客户端发现的错误数量。该度量标准已应用于单个组织的四个项目,并且验证了度量标准的结果是否与度量标准的信息需求相关[26]。张德平等人通过研究软件度量指标和软件缺陷之间的因果关系,进而检验多变量之间在非线性上的因果关系,得出基于GMDH因果关系的软件缺陷预测模型效果好于Granger因果检验方法的结论[27]。沈国华等人通过借助软件度量知识,进行软件可信评估,取得了一定的研究成果,并开发了许多工具进行软件可信评估。在软件可信评估方面,做出了很大贡献[28]。软件测试是软件周期中必不可少的一个环节,陈文兵结合软件测试技术,针对软件度量的质量问题,设计软件质量的度量框架,确保高质量软件的开发[29]。
................................

2.2 基于复杂网络的软件度量研究
近些年来,一些研究者通过将复杂网络与软件度量领域相结合,基于复杂网络的特性,将软件系统抽象为软件网络,并根据复杂网络的特性来研究软件度量的特性。软件的系统结构与软件网络相对应,组成软件的元素对应网络中的节点,以元素之间的相互关系对应网络的边集,并将软件系统抽象为软件网络,学者们取得了众多进展。例如Gu等人,分析软件网络中特征与度的分布,提供了软件系统优化过程的新方法[30]。Liang等人基于软件网络的未知木马监测,实现以较少的资源消耗增强未知木马的检测和感知能力[31]。潘伟丰等人通过加权软件网络的Bug传播,分析量度面向对象软件的结构质量[32]。Gu等人基于八个实用的Java软件系统构建了类依赖图(CDG)网络,并运用影响最大化程序进行实证研究,最大影响特征与软件网络中度分布之间的相关性,证明了CDG网络的人工性质部分地反映在规模自由行为上;度数分布遵循幂律,外度分布是对数正态[33]。Zheng根据软件系统演化过程中软件静态结构的变化,研究了软件网络的特征及其形成机制,为软件演化过程中的软件网络建模提供指导[34]。Ren针对大规模软件分析过程中存在的难以存储和效率低的问题,提出了基于软件网络的大型软件可视化分析框架SoNet,它结合了复杂网络理论和程序[35]。Zhao利用复杂网络理论分析非相邻节点对节点重要性评估的影响,提出了一种基于效率矩阵的新型评估方法。该方法综合了局部和全局节点的重要性,克服了局限性,提高复杂网络中节点重要性评估的准确性[36]。在软件工程的研究中,关于软件包重构的软件重构研究很少,Pan等人使用软件网络来表示类及其依赖关系,提出了一种重构面向对象软件包结构的新方法[37]。Zhao利用复杂网络构建模型来预测软件的漏洞,实验表明,该模型是有效的,可以准确评估漏洞[38]。进化是软件系统的基本特征之一,了解它们的演变可以带来更好的软件工程实践。
..........................

第 3 章 基于加权软件网络的软件模块性度量方法...........................11
3.1 引言.......................................11
3.2 整体框架.................................11
3.3 软件信息提取..........................12
第 4 章 基于变更传播模拟的软件稳定性度量方法......................25
4.1 引言........................................25
4.2 整体框架.......................................25
4.3 软件信息提取..................................26
第 5 章 总结与展望.................................50
5.1 本文总结.........................................50
5.2 展望...................................50

第 4 章 基于变更传播模拟的软件稳定性度量方法

4.1 引言
随着软件的发展,软件结构和功能越来越复杂,软件质量日益难控,软件的维护成本随之提高。有数据显示,软件的维护成本占整个软件成本的 60%以上,没有度量就没有控制,因此通过软件度量提高软件质量,降低软件维护成本成为了研究重点。软件稳定性是影响维护成本的最重要因素之一,为了控制维护成本,研究者们已经提出了许多方案来度量软件的稳定性。但评估软件的稳定性仍然是一项非常困难的任务。
模块性和稳定性是软件的两大重要质量属性。在第三章中,我们就软件模块性进行了详细的介绍。在本章中,我们将就软件稳定性进行介绍:提出通过变更传播模拟来表征软件的稳定性。首先,我们提出了一个类耦合网络(CCN)来模拟类级别的软件结构。然后,使用仿真方法分析 CCN 中的变更传播过程,并开发了一种新的度量标准软件稳定性(SS)来量度软件的稳定性。我们的 SS 度量指标在理论上使用著名的 Weyuker 特性进行验证,并使用开源 Java 软件系统进行实验。理论结果表明,我们的 SS 度量指标满足 Weyuker 的大多数特性,只有两个例外,实证结果表明我们的度量指标可以有效识别软件质量的改进和关键类。同时,我们的方法能够应用于大型软件系统。
图4.1 方法的总体框架
.....................

第 5 章 总结与展望

5.1 本文总结
本文在国家自然科学基金(No.61702378 和 61603163)以及浙江省科学技术联合计划资助下完成(LGF19F020007)。主要工作总结如下:
1)基于加权软件网络的软件模块性度量方法。在软件模块性的度量研究中,现有工作主要探讨与软件模块性相关的耦合性和内聚性的度量,没有将耦合性和内聚性两者结合起来,进而从整体上度量软件的模块性。在本文的方法中,我们定义了一个新的度量指标,模块性(Q),从软件整体的角度来衡量软件模块性。本文的度量指标是基于方法和属性级别的软件结构的网络表示(即 FCN),并应用在复杂网络理论中被广泛使用的度量指标(即 Q)来计算软件模块性的值。FCN 是一个加权无向图,它考虑了方法和属性之间的耦合频率,从而在边上分配权重。我们应用著名的 Weyuker 标准从理论上验证 Q 指标的合理性,并使用开源 Java 软件进行实证评估,以揭示其作为衡量软件模块性度量指标的有效性.
2)基于变更传播模拟的软件稳定性度量方法。在软件稳定性度量方面,现有工作未能充分考虑软件元素之间的多种耦合关系,也忽略了元素之间的耦合强度,仅考虑了“最坏”(元素的变更会100%影响与之相关的其它元素)情况下的软件稳定性分析。本文中方法是一种以控制软件维护成本为目的、描述软件稳定性的新方法。它是基于一种新的软件结构类耦合网络(即CCN)的软件网络表示,运用变更传播的模拟算法,开发了一种新的度量指标软件稳定性(即SS)来度量软件的稳定性。我们应用Weyuker标准从理论上验证SS度量指标的合理性,并使用一组开源Java软件进行实证评估。理论结果表明,我们的SS度量指标满足Weyuker的大多数特性(仅有两个例外),实证结果表明我们的度量指标可以有效识别软件质量的改进和关键类。同时,我们的方法能够应用于大型软件系统。
参考文献(略)
如果您有论文相关需求,可以通过下面的方式联系我们
点击联系客服
QQ 1429724474 电话 18964107217