技术领域
[0001] 本
发明涉及一种
软件缺陷报告分类方法,属于计算机软件开发领域。
背景技术
[0002] 软件缺陷是衡量软件
质量的重要指标,缺陷的及时修复对提高用户满意度相当重要。为了有效的管理软件缺陷,通常使用缺陷
跟踪系统(BTS)来管理软件缺陷以及需求。当一个软件发布以后,相应的BTS就负责收集程序测试人员或者终端用户提交的对软件缺陷的描述报告,软件的开发人员可以通过这些报告对软件进行适当的维护和完善。
[0003] 软件开发人员最需要维护的是修正性缺陷(bug),这些缺陷涉及到代码的
修改,对系统的运行至关重要。相对而言,那些对系统功能的期望,即提高型或者完善型的缺陷(non-bug)可缓一步进行或者可不需维护。然而,提交缺陷报告人员的软件知识
水平参差不齐,大多数非软件行业的终端用户对于任何使用过程中出现的不尽如人意的地方都会认为是修正性缺陷,这就向BTS里添加了很多维护的噪声,同时也为基于软件缺陷报告的科学研究引入了偏差。
[0004] 过去的缺陷预测重点在于模型的建立,通过改良模型不断的提高预测的精确度,却忽视了数据源本身的优良。缺陷预测所使用的大多数的
数据库都是由BTS等提供源数据。由上述可知,数据库里存在可观的噪声。众所周知,软件缺陷预测的关键就是训练集和测试集,数据库里的噪声必然引入误差。为了减少误差,数据源的降噪处理变得尤为重要。
[0005] 近年,缺陷预测开始涉及到对数据的处理上。目前通过人工标记和监督式学习,已经可以高效的预测缺陷报告是否为修正型缺陷。一般地,软件缺陷报告的特征属性分为结构型属性,如编号ID、优先级(priority)、严重性(severity)等和非结构型或者是半结构型属性,如小结(summary)、描述(description)、讨论(discussion)。一般对于它的预测要么是基于结构型的属性,利用
机器学习的方法进行预测;要么是基于非结构型属性,利用
文本挖掘的技术进行预测;或者是将结构性的属性与非结构型的属性处理成文本信息,在进行文本挖掘。
发明内容
[0006] 本发明的目的在于提供一个组合式缺陷报告分类方法,通过滤除非修正性缺陷报告,达到降低缺陷数据库的噪声、提高缺陷预测研究精确度的目的。
[0007] 为了达到上述目的,本发明组合式软件缺陷报告分类方法包括以下步骤:
[0008] 1)提取该软件缺陷报告的非结构型特征属性,并进行预处理而得到特征词集合;
[0009] 2)利用监督式的文本挖掘技术预测所述特征词集合所描述的内容倾向于修正性缺陷报告的程度等级;
[0010] 3)将所述程度等级的预测结果与该软件缺陷报告的编号与有用的结构型特征属性相结合,生成一新的软件缺陷报告;
[0011] 4)利用
数据挖掘的方法预测新的软件缺陷报告是否为修正性缺陷报告。
[0012] 进一步的,步骤1)中仅提取非结构型特征属性的小结。
[0013] 进一步的,对所述小结进行分词、去停用词和提取词干的处理,且停用词根据文本特性自由添加。
[0014] 进一步的,利用贝叶斯多项式预测非结构型属性偏向于修正性缺陷的程度等级,并使用十倍交叉验证。而且,在所述十倍交叉验证中,每次
迭代都有九份数据是人工标引的实例,且所述人工标引的实例由相应特征词集合和对应的程度等级标引组成。
[0015] 进一步的,所述非结构型属性的十倍交叉验证的十份数据由编写的代码完成分割,从而便于对对应的软件缺陷报告编号ID进行追踪。
[0016] 进一步的,在步骤4)中利用
贝叶斯网络对缺陷报告进行预测,并使用十倍交叉验证,且所述十倍交叉由机器学习工具完成。且在该十倍交叉验证中,每次迭代都有九份数据是人工标引的实例,且所述人工标引的实例是由相应新的软件缺陷报告的有用的结构型特征属性以及新的缺陷报告是否为修正性缺陷的分类组成。
[0017] 由上可知,本发明通过分析软件缺陷报告来判断缺陷的类型是否为修正性缺陷,通过滤除非修正性的缺陷,降低缺陷数据库的噪声,从而提高基于缺陷报告数据库的缺陷预测研究的精确度。
附图说明
[0018] 图1是本发明组合式软件缺陷报告分类方法的
流程图;
[0019] 图2是图1
实施例的数据嫁接
算法的伪代码实现;
[0020] 图3是图1实施例中合成新软件缺陷报告的示意图。
具体实施方式
[0021] 下面结合附图对本发明作更进一步的说明。
[0022] 以下将结合附图1,对本发明的技术方案进行详细说明。
[0023] 1、第一阶段
[0024] 从软件缺陷报告追踪器中提取历史缺陷报告数据。提取软件缺陷报告里非结构型特征属性,并对非结构型特征属性进行预处理。预处理包括分词、去停用词和提取词干,停用词可根据文本特性自由添加。经预处理后得到特征词集合。
[0025] 正如前述内容所提及的,软件缺陷报告中的非结构型特征属性通常包括小结(summary)、描述(description)、讨论(discussion)等内容,本实施例优选小结进行预处理。“小结”通常用于概要性地描述软件缺陷内容或者发生问题时的现象,“描述”则用来描述缺陷的详细信息,通常描述缺陷的重现步骤,供修改缺陷时查看。
[0026] 得到特征词集合之后,再通过
文本分类器,采用监督式的文本挖掘技术,如贝叶斯多项式预测该非结构型特征属性倾向于修正性缺陷的程度等级分类,分类结果被分成不同等级(high、middle或low),并采用十倍交叉验证(10-fold cross-validation)。
[0027] 在此,十倍交叉验证的十份数据由编写的代码完成分割,而不是依靠挖掘工具,这样可以对小结对应的软件缺陷报告编号ID进行追踪。
[0028] 在本阶段的十倍交叉验证中,每次迭代都有九份数据是被人工标记的实例。已标记实例是由相应小结summary所得到的特征词集合以及程度等级标记组成,目的是为了实现监督式文本分类。
[0029] 2、数据嫁接
[0030] 将第一阶段的等级预测结果依据软件缺陷报告的编号ID与原始有用的结构型特征属性相结合生成新的软件缺陷报告。图2是数据嫁接算法实现的伪代码,数据嫁接依据软件缺陷报告编号ID来实现第一阶段预测结果和原始的有用结构型特征属性一一对应的嫁接。
[0031] 图3所示第一阶段数据集为小结的特征词集合和分类预测结果。第二阶段将小结的分类预测结果possibility一一对应与原软件缺陷报告有用的结构型特性属性相结合生成新的软件缺陷报告。
[0032] 3、第二阶段
[0033] 根据新生成的软件缺陷报告的描述,利用数据挖掘的方法,如贝叶斯网络和十倍交叉验证预测该缺陷报告是否为修正性缺陷,并将整个新的软件缺陷报告人工标记为bug或non-bug,从而达到预测原软件缺陷报告分类的目的。在此,十倍交叉可有机器学习工具完成。
[0034] 在本阶段的十倍交叉验证中,每次迭代都有九份数据是被人工标记的实例。已标记实例是由相应新缺陷报告的所有有用的结构型特征属性以及该缺陷报告是否为修正性缺陷的分类组成,目的是为了实现监督式分类。
[0035] 以下结合试验数据说明本发明的方法相对于单一的内部分类器而言,提高分类的准确度。本试验所采用的三组验证数据集如下表所示:
[0036]
[0037]
[0038] 在验证数据的
基础上,下表列出了单一的内部分类器预测缺陷报告是否为修正性缺陷的准确率(Precision)、召回率(Recall)和综合评价指标(F-Measure),其中MNB是贝叶斯多项式文本分类器,依靠缺陷报告的非结构特征属性进行缺陷报告分类预测,BN是贝叶斯网络分类器,依靠缺陷报告的结构型特征属性进行缺陷报告分类预测,预测结果如下表。
[0039]
[0040] 下表列出了根据本发明分类方法进行测试的试验结果:
[0041]
[0042] 对比上述试验数据可以看出,相对于单一的内部分类器,本发明所提供的方法的综合评价指标在Mozilla试验中由单一分类器最好结果73.8%上升到81.7%,在Eclipse试验中由76.6%上升到80.2%,在JBoss的试验中由85.8%上升到93.7%,平均上升3.6%到7.9%。这就进一步证明本发明可以提高缺陷预测的精确度。
[0043] 综上所述,本发明通过两个阶段,既在第一阶段利用文本挖掘技术将非结构型数据转化为与其他结构型属性息息相关的结构型属性,且在第二阶段充分利用机器学习的方法达到更好的预测。随着两阶段精确的提高,整个系统也具有很好的提升空间。
[0044] 以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。