软件开发过程中贯穿着缺陷的引入、发现、修复和关闭的过程,包含较多缺陷的软件通常都被认为是低质量的,但是软件测试并不能找出软件中存在的所有缺陷。因此对于缺陷的研究及分析能够更好地预防缺陷的引入,对软件的正常运行和软件质量改进具有重要的意义。
缺陷和模块属性的关联性分析是软件过程度量的一种方法,在实际软件开发过程中,我们发现缺陷与其所在的模块有着密切的联系,因此本文根据缺陷数量以及其所在模块属性进行缺陷分析,多维度深入地分析缺陷,从而提供更全面的缺陷分析。
一、软件缺陷属性
缺陷属性可为两类,一类为软件缺陷的常规属性,如缺陷类型、缺陷发现阶段、缺陷严重程度、缺陷来源等。一类为与缺陷相关的软件模块属性,如表1所示。
表1 模块属性
二、缺陷分析
缺陷分析本质上是对缺陷中包含的信息项进行收集,汇总,分类之后使用统计方法得出分析结果。
本文给出了基于缺陷和软件模块关联性分析,它根据缺陷以及其所在模块属性进行缺陷分析,多维度深入地分析缺陷,从而提供更全面的缺陷分析,例如缺陷数量与模块复杂度关系分析、缺陷数量与模块扇入/扇出数关系分析、缺陷数量与模块参数数量的关系分析。
1、缺陷数量与模块复杂度分析
随着软件规模的增加,软件的复杂度也在逐步攀升,人们意识到缺陷数目不仅与规模有关,还与软件的复杂度有关,其中最著名的是McCabe复杂度量元。假设某项目有如下数据,表2为缺陷数与模块复杂度分析的一个例子,拟合曲线如图1所示。
表2 缺陷数与模块复杂度
图1 缺陷数量与模块复杂度分析图
图1为不同模块所对应的McCabe复杂度和缺陷数,可以看到随着模块复杂度的增大,缺陷数量也随之增长,模块复杂度对缺陷数量有着较为显著的影响,即通常复杂度高的模块会引起更多的缺陷数。因此缺陷数量曲线一定程度反映了软件开发过程中缺陷数量随模块复杂度变化的趋势。软件开发人员可以依据该曲线,采取措施降低模块的复杂度,以提高软件质量。
2、缺陷数量与模块参数分析
软件开发中,由于不同模块功能不同,因此模块中所含参量数目也不相同,功能复杂的模块往往需要定义更多的参量,参量在赋值与传递过程中会引起程序错误,从而产生软件缺陷。假设某项目有如下数据,表3为缺陷数量与模块参数数量分析的一个例子,拟合曲线如图2所示。
表3 缺陷数与模块参数
图2缺陷数与模块参数分析图
3、缺陷数量与模块扇入扇出系数分析
模块的扇入是指有多少个上级模块调用它,扇入越大,表示该模块被更多的上级模块共享,模块的复用程序高。模块的扇出是指模块的直属下层模块的个数,扇出过大意味着管理模块过于复杂,需要控制和协调过多的下级。缺陷数与模块扇入、扇出系数有着密切的关系,即模块扇入、扇出系数越高,模块影响范围也越大。假设某项目有如下数据,表4为缺陷数量与模块参数数量分析的一个例子,拟合曲线如图3所示。
表4缺陷数与模块扇入扇出
图3 缺陷数与模块扇入扇出系数分析图
如图3所示,我们发现缺陷数与模块扇入、扇出系数有着密切的关系,即模块扇入、扇出系数越高,模块影响范围也越大。因此在软件开发过程中,如果某个高扇入系数模块缺陷较多,我们应该优先将其解决。
在实际软件开发过程中,我们也发现软件缺陷存在着二八定律,即百分之八十的缺陷来自百分之二十的模块中,按照本文给出的缺陷分析方法如果能找到产生大量缺陷的模块,并对其进行分析改进,则可以大大提高软件开发以及测试的效率,从而使软件产品质量得到很大提高。
作者:姚璇