摘要:
1.本文的创新点
软件已经成为影响国民经济、军事、政治乃至社会生活的重要因素。然而,随着软件的规模和复杂性急剧增长,软件开发经常处于失控状态,软件产品质量无法得到保证。实践和研究表明:软件产品作为一种人工的智能化系统,其结构和质量之间存在着一定的联系,并在一定程度上影响着软件开发的成败。同样的功能需求可以通过不同的软件结构来实现,但这些结构质量指标上往往有所不同,如最终软件可靠性、健壮性等。但是,一直以来软件系统的结构与其质量之间的量化关系不清楚。本文从软件内部结构角度提出了一个量化软件结构质量的度量Software quality of structure (SQoS)。本文的创新点可归结为:
(1)在特征(即方法、属性)层次,提出加权特征依赖网络(Weighted Feature Dependency Network, WFDN),并用以抽象面向对象软件系统在该层次的拓扑结构。这与以往只考虑方法调用关系不同。从软件缺陷传播的角度出发,分析缺陷在方法、属性间的传播特点。我们认为:在类层次,一个类中的缺陷是以一定概率p传播到直接或间接依赖于该类的其它类,而不是很多文献认为的100%的传播。并根据WFDN中,方法、属性间的交互关系,给出了任一一对具有直接关联关系的类间概率p的计算公式和相应的算法,并以该p值为边权构造类层次的加权类依赖网络(Weighted Class Dependency Network, WCDN)用于抽象面向对象软件系统在类级的拓扑结构。通过分析缺陷在WCDN上的传播特点,构造了:(a)类影响力(Class Influence, CI)指标,用于量化类在一个加权软件网络中的影响能力;(b)类错误倾向性(Bug Proneness Index of Classes)指标,用于描述一个类产生错误的可能性大小。最终提出了用于度量软件结构质量的度量Software quality of structure (SQoS)。
(2)用2个Java程序作为实例对上述方法进行了验证。这两个实例,每个例子都具有两个不同的版本,这两个版本具有相同的功能,但是具有两种不同的软件结构(一种没有采用设计模式,另一种采用了设计模式)。我们提取了这几个程序的WFDN和WCDN,并计算了相应的指标。我们发现,采用设计模式的软件版本的SQoS值都比没有采用设计模式的版本的SQoS值要低。从而验证了SQoS指标的有效性。设计了相应的算法,开发了相应的工具并共享了实验数据。
2.实现方法
分析面向对象软件系统(主要是Java语言写的系统)的字节码(.class和.jar文件),提取软件方法、属性和它们之间的交互信息,然后构造Feature(方法、属性)层次软件网络拓扑WFDN(方法、属性抽象为节点,它们之间的关系抽象为有向边,边权为1)并可视化。根据WFDN,计算任一直接关联的类节点对间的概率p,并作为边权构造了WCDN(类为节点,类间的关系为有向边,边权是个概率p,表示类中的缺陷会以概率p传播到直接依赖于该类的其它类)。通过分析缺陷在WCDN网络上的传播过程,(a)构造了类影响力(Class Influence, CI)指标,并给出了相应的计算公式和算法。节点的CI可用于描述该节点产生错误时对系统造成影响的能力的度量;(b)从软件类复杂性和类错误倾向性两者关系的角度出发,比较相关文献,选取SLOC(源代码行)、WMC(类的加权方法数)、CBO(对象类间的耦合)和RFC(类的响应集合)4个复杂性度量指标,构造了类错误倾向性(Bug Proneness Index of Classes, BPIC)指标,用于刻画一个类产生错误的可能性大小。基于CI和BPIC,提出了用于度量软件结构质量的度量Software quality of structure (SQoS)。并选择了具有相同功能、不通结构的Java实例验证本文方法的有效性。开发了相应的工具用于支持SQoS以及CI和BPIC等度量值的自动计算。
3.结论及未来待解决的问题
根据实例研究的结果,我们发现,本文提出的SQoS软件结构度量,可以很好的区分采用设计模式和不采用设计模式软件系统在结构质量上的差别。设计模式可以显著的提高软件的质量,本文的指标为这一论断提供了量化的依据。 本文在特征(方法、属性)层次采用的是最坏情况分析方法,即:方法、属性的错误都会100%的传播到直接依赖于该错误方法或属性的其它方法和属性。进一步的研究工作是(1)探讨方法、属性本身的复杂性指标是否会对缺陷在WFDN网络节点间的传播具有影响,是否也需要在该层次引入概率模型;(2)在更广的范围来验证本文提出的度量的有效性;(3)将本文的WFDN和WCDN模型运用到软件回归测试用力排序中去。
4.实用价值或应用前景
本文提出的CI指标可以帮助我们识别软件系统中重要的类,为软件的变更和测试提供指导,即:(a)修改CI值大的类开销比较大;(b)要对CI值大的类重点测试,它若产生错误将对系统造成极大的破坏。BPIC指标可以帮助我们识别软件中极易引入错误的类,这些类也是我们需要重点测试的。
软件结构质量度量SQoS可以为软件质量的量化提供重要依据。为我们从功能相似、质量不同的候选软件中选择高质量的软件提供依据。同时,可以用SQoS跟踪软件演化时质量的变化,为在软件质量下降时进行重构提供指导。可以将本文提出的方法实现为集成开发环境(如Eclipse等)的插件或开发独立的软件工具,用于实际的软件开发、测试、选择和重构中,具有较好的实用前景。