论文部分内容阅读
软件结构指的是软件内部的元素及元素之间的联系,它已经成为影响软件质量非常重要的因素。随着软件功能、结构的日益复杂,软件质量难以保证。了解一件事物,应该采取量化的方式,在软件工程领域也是如此:没有度量就没有理解和控制。因此,要控制或者改善软件的质量,就需要对软件结构进行合理的描述和有效的量化。软件度量已经成为软件工程领域的一个重要研究方向。
软件度量是对软件内部结构质量属性的量化。结构质量有很多方面,包括理解性、可支持性、稳定性、模块性等。模块性和稳定性是软件的两大重要质量属性。模块性被认为是设计成功软件的最重要特性之一,它对许多外部质量属性具有重大影响。因此,提出衡量软件模块性的指标非常有用。软件稳定性意味着抵抗软件变化的放大,它已成为影响维护成本的最重要因素之一。
尽管一些国内外学者在软件模块性和稳定性方面做出了很多贡献,取得了诸多成果,但是现有工作仍存在如下不足:1)在软件模块性的度量研究中,现有工作主要探讨与软件模块性相关的耦合性和内聚性的度量,没有将耦合性和内聚性两者结合起来,进而从整体上度量软件的模块性;2)在软件稳定性度量方面,现有工作未能充分考虑软件元素之间的多种耦合关系,也忽略了元素之间的耦合强度,仅考虑了“最坏”(元素的变更会100%影响与之相关的其它元素)情况下的软件稳定性分析。本文的工作主要是针对现有工作在软件模块性及稳定性度量方面的不足,采用复杂网络与软件工程的交叉研究,将软件的结构抽象成为类加权的复杂网络——加权软件网络,节点代表软件内部的元素(属性、方法或类),元素间的交互关系抽象为边,同时为边赋权值,从而从软件复杂网络的角度重新审视软件的模块性和稳定性。
本文的主要研究内容如下:
1)基于加权软件网络的软件模块性度量方法
我们提出了一种新的度量指标Q(模块性),将元素间的耦合性和内聚性结合起来,进而从整体上度量软件的模块性,主要包括如下步骤:首先,将软件在特征(方法和属性)粒度抽象成特征耦合网络(FCN),其中方法和属性是节点,方法和属性之间的耦合是边,边上的权重表示耦合强度;然后,将软件原始的类结构作为特征的社区,并引入复杂网络领域用于评价社区结构的模块度指标度量类的模块性;最后,我们应用著名的Weyuker标准从理论上验证Q指标的合理性,并使用开源Java软件进行实证评估,以揭示其作为衡量软件模块性度量指标的有效性。
2)基于变更传播模拟的软件稳定性度量方法
我们提出了一种基于变更传播模拟的软件稳定性度量方法,用更加准确的加权有向软件网络抽象类粒度的结构,考虑了类之间的7种耦合关系(如继承、实现等)及其强度。同时,变更在类之间以某种概率传播,而不再是100%的传播。方法主要包括如下步骤:首先,将一个类耦合网络(CCN)来抽象类粒度的软件结构,节点代表类及接口,有向边代表类之间的7种耦合关系及其方向,边权代表变更在类之间传播的概率;然后,分析类变更的不同类型,并提出了一个变更传播算法,用以模拟变更在CCN中的传播过程,进而构建了一个新的度量指标软件稳定性(SS)来量度软件的稳定性;最后,我们应用Weyuker标准从理论上验证SS度量指标的合理性,并使用一组开源Java软件进行实证评估。理论结果表明,我们的SS度量指标满足Weyuker的大多数特性(仅有两个例外),实证结果表明我们的度量指标可以有效识别软件质量的改进和关键类。同时,我们的方法能够应用于大型软件系统。
软件度量是对软件内部结构质量属性的量化。结构质量有很多方面,包括理解性、可支持性、稳定性、模块性等。模块性和稳定性是软件的两大重要质量属性。模块性被认为是设计成功软件的最重要特性之一,它对许多外部质量属性具有重大影响。因此,提出衡量软件模块性的指标非常有用。软件稳定性意味着抵抗软件变化的放大,它已成为影响维护成本的最重要因素之一。
尽管一些国内外学者在软件模块性和稳定性方面做出了很多贡献,取得了诸多成果,但是现有工作仍存在如下不足:1)在软件模块性的度量研究中,现有工作主要探讨与软件模块性相关的耦合性和内聚性的度量,没有将耦合性和内聚性两者结合起来,进而从整体上度量软件的模块性;2)在软件稳定性度量方面,现有工作未能充分考虑软件元素之间的多种耦合关系,也忽略了元素之间的耦合强度,仅考虑了“最坏”(元素的变更会100%影响与之相关的其它元素)情况下的软件稳定性分析。本文的工作主要是针对现有工作在软件模块性及稳定性度量方面的不足,采用复杂网络与软件工程的交叉研究,将软件的结构抽象成为类加权的复杂网络——加权软件网络,节点代表软件内部的元素(属性、方法或类),元素间的交互关系抽象为边,同时为边赋权值,从而从软件复杂网络的角度重新审视软件的模块性和稳定性。
本文的主要研究内容如下:
1)基于加权软件网络的软件模块性度量方法
我们提出了一种新的度量指标Q(模块性),将元素间的耦合性和内聚性结合起来,进而从整体上度量软件的模块性,主要包括如下步骤:首先,将软件在特征(方法和属性)粒度抽象成特征耦合网络(FCN),其中方法和属性是节点,方法和属性之间的耦合是边,边上的权重表示耦合强度;然后,将软件原始的类结构作为特征的社区,并引入复杂网络领域用于评价社区结构的模块度指标度量类的模块性;最后,我们应用著名的Weyuker标准从理论上验证Q指标的合理性,并使用开源Java软件进行实证评估,以揭示其作为衡量软件模块性度量指标的有效性。
2)基于变更传播模拟的软件稳定性度量方法
我们提出了一种基于变更传播模拟的软件稳定性度量方法,用更加准确的加权有向软件网络抽象类粒度的结构,考虑了类之间的7种耦合关系(如继承、实现等)及其强度。同时,变更在类之间以某种概率传播,而不再是100%的传播。方法主要包括如下步骤:首先,将一个类耦合网络(CCN)来抽象类粒度的软件结构,节点代表类及接口,有向边代表类之间的7种耦合关系及其方向,边权代表变更在类之间传播的概率;然后,分析类变更的不同类型,并提出了一个变更传播算法,用以模拟变更在CCN中的传播过程,进而构建了一个新的度量指标软件稳定性(SS)来量度软件的稳定性;最后,我们应用Weyuker标准从理论上验证SS度量指标的合理性,并使用一组开源Java软件进行实证评估。理论结果表明,我们的SS度量指标满足Weyuker的大多数特性(仅有两个例外),实证结果表明我们的度量指标可以有效识别软件质量的改进和关键类。同时,我们的方法能够应用于大型软件系统。