缺陷报告 开源软件系统缺陷报告如何管理和分析( 三 )


4.重新打开缺陷预测报告
在软件缺陷生命周期中,有时一个“关闭的”缺陷会被“重新打开”。“重新开放”的缺陷会延长修复时间。希哈布等人研究了Eclipse社区中的缺陷重新打开现象,提取了四类特征,并应用机器学习相关算法预测缺陷是否会重新打开。考虑到重新打开的缺陷数量相对较少,希哈布等人提出使用不平衡数据挖掘算法。之后,他们进一步研究了在Apache Http和OpenOffice上“重新打开”的缺陷。一些人将希哈布等人提出的特征与缺陷报告的文本特征相结合,开发了一种称为重新手术预测器的预测器。有人分析了微软Windows操作系统中的缺陷“重新打开”,并提出了一种逻辑方法来预测缺陷是否会被重新打开。这部分缺陷报告的难点在于如何提取与重新打开缺陷报告相关的特征。目前的研究主要基于缺陷报告本身的特征挖掘。未来,重新打开缺陷报告的预测应该考虑更多的补丁文件和每个缺陷报告对应的其他材料,并从中提取更多的特征,进一步提高预测精度。
5.缺陷修复时间的预测
缺陷修复时间预测主要是预测某一给定缺陷将在何时修复,有助于项目经理掌握项目进度,制定合适的项目计划。有人调查过ArgoUML和PostgresQL的缺陷生命周期,发现缺陷的修复时间中位数为200天。为了有效预测缺陷的修复时间,有人使用机器学习模型;有人在NASA 空的数据集上使用过人工神经网络。有人把缺陷报告的修复时间分为两类,并据此建立分类器。该算法的预测准确率为65%;有人提出了一种基于关联规则挖掘的算法。有些人已经了解了缺陷的生命周期,并在JBoss项目上使用k-近邻算法来预测缺陷的修复时间。有人利用马尔可夫模型预测一定时间内修复的缺陷数量,提出了基于蒙特卡罗抽样的缺陷修复时间预测模型。目前,关于缺陷修复时间预测的研究工作并不多,主要是因为很难得到花费在缺陷修复上的真实时间。如何自动识别缺陷修复参与者的行为以及这些行为所占用的时间将是一个值得研究的问题。
6.缺陷位置
缺陷位置是指定位与缺陷报告相关的源代码位置。缺陷定位是软件工程中的核心问题。准确的缺陷定位工具可以大大节省开发人员的调试时间,提高工作效率。目前,相关算法主要基于信息检索和机器学习。提出了PROMESIR算法,利用隐藏语义电缆和基于概率的排序技术对源代码文件进行排序。已经提出使用潜在的狄利克雷分配算法来定位相关的源代码文件。有人用不同的信息检索技术验证缺陷定位的效果,发现UM和ⅴ SM对iBUgs的缺陷定位效果最好。有人提出了BugLocator算法,主要考虑基于相似源代码文件的排序和基于相似缺陷报告的排序。有些人利用缺陷报告和源代码文件的结构信息来帮助提高缺陷报告定位的性能。有人利用常规排序算法来提高缺陷定位算法的效果。
目前缺陷定位的算法精度有待进一步提高,相关算法只能定位与缺陷相关的源代码文件级,属于粗粒度定位,影响了相关算法的工程实用性。未来可以考虑结合深度学习提出更高效的算法。此外,还应考虑与编程语言分析和模型检查的相关技术相结合,使缺陷定位技术能够精确到代码片段的粒度。
7.缺陷分类
缺陷分类是指自动识别给定缺陷报告的类别。通过分析项目中存在的缺陷类型,可以更好地理解和总结项目开发和测试中存在的问题,对以后的项目具有指导意义。但是在实践中,由于开发团队资源有限,项目发布时间紧,很少有项目团队对缺陷进行总结,因此自动缺陷分类技术非常必要。有些人使用机器学习算法根据缺陷报告的影响对其进行分类;有人提出了一种基于文本挖掘的算法来识别安全相关的缺陷报告。有人通过缺陷报告摘要和描述字段的语言特征来论证缺陷报告和需求的区别;有人提出了一种自动识别缺陷报告和需求的方法。基于正交缺陷分类,有人基于数据和控制流、结构缺陷和非功能缺陷定义缺陷,通过提取缺陷报告和源代码的特征,对缺陷报告进行自动分类;有人利用集成学习的相关算法,提出了一种自动识别和定位缺陷的算法。

推荐阅读