软件缺陷预测技术综述

(整期优先)网络出版时间:2024-04-17
/ 2

软件缺陷预测技术综述

蒋也  徐智慧  袁启航

西南民族大学 四川省 成都市 610000

姓名:蒋也(1998.01--);性别:女,民族:侗族,籍贯:贵州省铜仁市学历:硕士在读,就读于西南民族大学,研究方向:软件缺陷

摘要:由于软件规模的不断扩大以及复杂度的升高,对软件质量的要求也越来越高,软件缺陷预测技术对于软件质量的保证有着非常大的作用,能够使得软件的可靠性得到提升。软件缺陷预测将会通过对于缺陷数据的挖掘,设计出相关的度量元,然后再根据多种方法来实现预测模型的构建,以达到预测软件缺陷的目的,可以更加合理有效的分配开发资源。本文对于软件缺陷预测技术近年来的一些论文进行了整理,同时对缺陷的产生进行了探讨。

关键字软件缺陷;软件缺陷预测;软件质量保证

1.绪论

随着软件规模的不断增大以及相关复杂性的升高,软件质量以及软件缺陷预测问题至今仍然是非常值得关注的焦点研究问题。软件缺陷与软件质量是水火不容的两面,软件质量一直被软件缺陷所钳制,缺陷对于质量而言是需要努力克服的重要关键点。所以,在软件开发的早期阶段要对软件缺陷及时发现并处理,以此提高软件开发质量。那么,软件缺陷预测技术即就是在软件开发的早期可以挖掘出潜在的缺陷模块,从而更为合理的分配现有资源来进行开发,以保证软件质量。

上述提到的缺陷,并不单单是指在代码中出现的一些bug等。到目前为止,学术界以及产业界有很多的相关术语,比如缺陷、错误、失误,失败等。在早期,缺陷被定义为不能够达到预期或者规约的相关要求。除此之外,还有一个重要的概念,那就是失效,即为当系统或者软件运行时,出现不正确的输出,则称之为失效。但是失效的发生并不能说是完全由于缺陷导致的,也有可能是另外的事件所引导,例如被人为因素导致,或者是计算机自身硬件被损坏等等,失效的出现为我们发现缺陷起到了极大的作用,一次失效或许能够引发多个缺陷的出现,那么,当这些缺陷被我们解决以后就可以避免重复失效的发生。

2.软件缺陷产生的原因以及国内外研究现状

在软件开发的过程中,由于软件系统越来越复杂,不管是在软件的需求分析阶段还是设计编码阶段,与以往比较起来更为繁琐,并且在各个阶段不同开发人员理解上的困难也在日益增加,不论是开发人员的主观局限,还是系统本身所带有的复杂特点都决定了在开发时造成的缺陷是注定存在的。目前,造成软件缺陷产生的主要原因如下所述。

2.1开发人员的技术问题

(1)在需求分析时对于某些需求的实现性没有进行研究调查,导致了需求无法实现问题。

(2)由于在设计阶段逻辑结构设计得较为复杂,在问题出现时很难快速解决。

(3)对于软件整体设计不太合理或者里面的存有的算法不太科学,都会增加系统的性能或者功能出现下降或者犯错的概率。

(4)开发人员自身技术的限制,以及在软件设计阶段考虑不够全面,使得软件的功能以及性能方面有所欠缺。

(5)对于一些新技术的使用不够熟练,导致了解决以及处理问题的时间较为急迫。

(6)如若系统存有崩溃或者数据丢失的情况,但是在开发阶段开发人员并没有考虑,则会出现灾难性问题。

2.2软件本身所存在的问题

(1)软件开发流程不标准或者开发流程不完善。

(2)开发所需文档错误,内容有误等。

(3)没有考虑到一些使用场合,使得在大量数据适用场合引起系统崩溃。

(4)对于一些实时应用系统,缺乏整体考虑和精心设计,忽视了时间的同步要求,从而引起了系统各个单元之间不协调或者不一致等问题。

(5)若使用第三方接口,存有的依赖性为考虑进来。

2.3开发团队间存在的问题

(1)团队文化的建设问题,例如团队内部是否能够提起对于软件质量的重视问题。

(2)系统分析时对于客户需求不是很明确,对需求的获取存有偏差以及与客户之间存有沟通等问题。

(3)对于软件开发的不同阶段,该阶段的人员对于每个设计阶段以及相关的文档了解程度不一样,同时如果编程人员对于系统的设计说明有误解并没有及时沟通则会出现一些问题。

2.4发展现状

早在上世纪80年代,就Barbara Kutchenha首次提出了缺陷预测以及相关的模型构建以及度量。经过了多年的发展,世界上各个国家的软件工程师以及相关的学者们已经越来越关注这个问题,并且在大多数的研究者们提出了非常的软件缺陷的预测模型。

在早期的21世纪初对于回归和分类这两种技术就早已经被研究者们投入到该领域中广泛使用,构建出来的模型虽不及现在,但是为后来的发展奠定了良好的研究基础。在回归领域的方向上有提出并采用的多标量回归分析和零膨胀泊松回归。除此之外,在高纬度数据的领域方向上,还提出了逐步回归的方法。

到了21世纪10年代左右,基于分类方法的软件缺陷预测模型更加广泛使用,由于机器学习方法的进展,也拉动了缺陷预测模型的性能发展。机器学习在本质上是对于数据进行驱动的,通过对于数据的观测以及分析进行挖掘,在数据中得出意想不到的一些隐藏信息,万事万物都是相互联系的,规律往往就隐藏在了这些肉眼所看不到的数据信息中,再利用由数据信息而来的一些规律进行学习分析达到目的。

直至现在,目前对于软件缺陷预测的模型构建已经较前几年更为成熟,有了更好的预测性能,大量的研究者开始从深度学习方面来构建软件缺陷预测模型,以求达到更好的效果。

2.5现存不足

截止目前,国内外研究者们依然致力于软件缺陷预测方向,也提出了大量的软件缺陷预测模型,但是各路模型得出的效果并不都是非常理想,现下软件缺陷预测模型存有的问题大致可分为两方面。

(1)预测精度较低。大多数构建出来的模型大多数只能在特定的软件项目上或者一些工程项目上使用,但是对于其他项目或者是在一些通常的情况下,模型的预测能力并没有达到研究者的预期,并且存在着失真现象,容易给一些项目造成不必要的缺陷误判,反而带来一些意外的麻烦,这也就对于模型的推广使用有了一定限制。

(2)软件缺陷度量元的提取问题。度量元,体现了软件缺陷模块内部以及外部表现的一些相关性。软件缺陷预测就是利用这样的相关性才能够对于软件之中有缺陷的模块进行预测,以达到理想的效果。但是在目前研究中,研究者们并没有对各种软件度量属性进行综合判定分析(对于软件缺陷的影响),度量元的提取还需要进一步的发展。

3.软件缺陷预测模型框架

软件缺陷预测技术是利用缺陷度量元来预测有缺陷的软件模块。一般情况下通过对各模块的缺陷倾向性、缺陷数或者缺陷严重度等进行预测。预测过程首先需挖据项目中所需度量元[1],可以通过分析代码以及软件的整个开发周期进行度量元设计。然后需要构建缺陷预测模型所需的预测数据集,其利用对软件历史仓库的挖掘进行创建。通过数据集的创建,预测模型的构建,最后达到找出有缺陷潜伏的软件模块,使得软件质量得以提升以及测试资源得到合理使用。

将上述的缺陷模型构建流程化,如图1所示。

图1. 软件缺陷预测模型框架

分析过程如下:

(1)从软件历史仓库中收集到所有的缺陷数据,即挖掘软件历史仓库;

(2)提取相关度量元。同时对于软件模块进行标记,图1中红色、绿色、等颜色即为标记。例如绿色的无缺陷,红色的为有缺陷;

(3)数据集提取完成后,需要进行相关数据处理,然后利用建模方法构建所需的缺陷预测模型;

(4)最后通过性能指标对模型评价,看模型是否具有预测效果。

4.总结

直至目前,软件缺陷技术仍然是研究的热点问题。本文总结了该领域目前的发展现状、缺陷产生的原因以及目前存在的不足,并介绍了该领域中的模型框架。

参考文献: 

[1]Halstead MH. Elements of Software Science (Operating and Programming Systems Series). New York: Elsevierence, 1977.