一种针对跨版本软件缺陷预测的数据噪声处理方法与流程

文档序号:21362243发布日期:2020-07-04 04:36阅读:247来源:国知局
一种针对跨版本软件缺陷预测的数据噪声处理方法与流程

本发明涉及软件工程领域,特别涉及一种针对跨版本软件缺陷预测的数据噪声处理方法。



背景技术:

软件缺陷是指计算机软件程序中存在的某种破坏系统正常运行能力,或导致系统预期属性发生偏离的问题、错误,通常又被称为bug。软件缺陷不仅会给用户带来使用上的不便,甚至会导致重大的财产损失和安全事故。因此及时检测出软件程序中存在的缺陷,并进行有效的处理具有极大的重要性。在如今的软件行业中,软件测试、代码评审等方法被广泛用于排查软件代码中的缺陷,但随着软件系统日益复杂化、大型化,这些方法在时间和人力有限的情况下往往显得十分低效。

软件缺陷预测技术是软件工程领域近年来的一大研究热点,它通过挖掘软件历史数据,结合机器学习分类(或回归)方法,预测出软件代码中最可能存在缺陷的代码模块,从而使得测试人员重点关注可能存在缺陷的代码模块,以达到提高软件测试效率,保证软件安全性的目的。具体来讲,如图一所示,软件缺陷预测技术的基本流程分为以下几个步骤,如图2:

1、数据的收集与标注。软件缺陷预测中,通常是以代码模块(文件、函数或软件包)为单位,来预测每个单位中是否有缺陷。首先,应该将每个代码模块通过提取特征和人工标注来转化为一个样本,以构成数据集。特征提取是从各个角度提取代码模块的属性,如代码行数、圈复杂度等,通过特征提取可用一个数值向量来表示一个代码模块。而人工标注则是通过版本控制系统(如git)或缺陷追踪系统(如bugzilla)中的缺陷信息,将代码模块标注为有缺陷(buggy)或无缺陷(clean)两个类别。经过此步骤得到的数据集可用一个矩阵来表示,其中每一行代表一个软件模块对应的样本,而每一列代码一个特征,最后一列代表样本的标签。

2、数据处理。得到的原始数据集往往需要进行一些数据处理才能用以训练模型。如软件中等的缺陷往往是少量的,这使得第一步得到的数据集中大部分样本标签都为clean,只有少部分为buggy。故数据集中往往是类别不均衡的。在此步骤中可采用一些采样方法来进行解决。在软件缺陷预测的数据集收集过程中,常见的数据标注方式是通过对版本控制系统中数据的挖掘来得到缺陷信息。如,开发人员修复缺陷后,在向版本控制系统中提交代码时会留下类似“fixbug…”的备注信息。故可通过搜索“fix”或“bug”等关键字的方法来得到修复缺陷的代码改动,在将对应修改前的代码模块标记为有缺陷。此类方法虽然大体上可行,但存在很大的不精确性。一方面开发人员可能很有可能在修复缺陷后未留下相关信息,使得部分有缺陷代码未得到标注。另一方面开发人员可能在修复缺陷的同时也可能进行了其他功能性改动,使得一些无缺陷代码被错误标记为有缺陷。因此缺陷预测中的数据集中往往存在一定错误标注带来的噪声,这对训练得到模型的预测效果有较大影响。特别地,在跨版本缺陷预测场景下,数据集往往由多个版本的数据构成。而噪声的存在使得同一代码模块在不同版本中被标注上不同的标签,但他们之间的代码差异往往很小、特征极为相似,因此进一步导致数据集中存在许多样本特征相似或相同,但标签相反的情况,即类别重叠的问题。这使得跨版本缺陷预测下预测模型受噪声影响更加明显。但在现有软件缺陷预测方法中,还未有针对跨版本缺陷预测的数据噪声处理方法被提出。

3、模型训练。此步骤在处理后的数据集上,利用机器学习算法(如逻辑回归、支持向量机、朴素贝叶斯等)进行模型训练。机器学习算法在训练过程中会不断挖掘数据中的规律,利用数学模型对真实数据进行表达。训练得到的模型可用于预测未标注的样本的标签。

4、使用模型预测。当有新开发完成的代码模块时(即测试数据集),可以提取其特征得到对应样本,再使用上一步骤中得到的模型对其标签进行预测。对于预测结果为有缺陷的代码模块,应推荐软件测试人员重点测试,以达到保证软件质量、提高测试效率的目的。

而跨版本缺陷预测是指在同一软件系统上,利用过往版本的代码和缺陷信息构建训练数据集、训练模型,用以预测当前或将来版本的代码模块中是否存在缺陷。相比于训练和测试在同一版本内的同版本缺陷预测,此类方法在工业生产中更加实用。同时,相比于在不同软件项目上训练和测试的跨项目缺陷预测,他又能取得更好的预测效果。故近年来引起广泛的研究兴趣。

现有的缺陷预测技术中,尽管在特征提取技术和机器学习算法两个步骤中均有大量的有效方法被提出。但在数据处理阶段,大部分现有工作都集中于对类别不均衡问题的处理上。事实上,软件缺陷预测数据集收集的过程中往往会引入大量噪声(如错误标记),噪声的存在往往会使得训练模型大大受到影响。因此,处理软件缺陷预测技术中的数据噪声问题对提高预测效果有极大的重要性。



技术实现要素:

本发明的主要目的是提出一种针对跨版本软件缺陷预测的数据噪声处理方法,旨在解决软件缺陷预测技术中的数据噪声问题。特别是,在跨版本缺陷预测场景下,噪声造成的类别重叠问题。

为实现上述目的,一种针对跨版本软件缺陷预测的数据噪声处理方法,包括如下步骤:

s10通过余弦相似度计算数据集中样本件的相似性;

s20基于样本件的相似性归类数据集中簇集合c;

s30从簇集合c中对每簇判断其内部样本标签是否一致;

s40若不一致,则提取簇集合c的样本容量;

s50根据簇集合c的样本容量情况分别确定簇的本簇标签;

s60采用本簇标签对样本的噪声重标记。

优选地,所述s50具体为:

s501若簇的样本容量大于阈值β,采用投票方式基于多数原则确定为本簇标签;

s502若簇的样本容量小于阈值β,基于最近原则通过计算簇的集合c中各种类别的样本中心距离选择本簇标签。

优选地,所述s10具体为:

将一个大小为n的缺陷预则数据集表示为x={x1,x2,...,xn},其中xi=(fi1,fi2,...,fim)表示数据集中第i个样本,而fij表示第i个样本的第j维特征,采用余弦相似度计算数据集中样本件的相似性矩阵其中si,j=cos(xi,xj)表示样本xi与xj之间的余弦相似度,其计算公式如下:

优选地,所述s20具体为:

s201定义c=φ表示样本簇的集合,初始为空集;v=φ表示已被访问过的样本集合,初始为空集;参数相似性阈值为α;

s202依次遍历数据集x中的每一个样本,对于任一样本xi,若它已在集合v中则直接跳过;否则从该样本出发搜索其所在的簇ci,将簇ci加入到集合c中,并将ci包含的所有样本都加入到v中,再接着遍历下一样本,直至所有样本都被遍历完。

优选地,所述s202中从该样本出发搜索其所在的簇ci采用广度优先的方法,具体为:

初始化ci=φ,通过相似性矩阵s找出所有与xi相似性大于阈值α的样本,称为xi的一阶邻居n1(xi),即si,j>α,将一阶邻居n1(xi)中所有样本都加入到ci中;在数据集剩余样本中找出满足与n1(xi)中有至少一个样本的相似度大于α的样本,称为xi的二阶邻居n2(xi),即sj,k>α且n1(xi)∩n2(xi)=φ,将二阶邻居n2(xi)中所有样本都加入到ci中。以此类推,直到不能再找到下一阶邻居,通过此过程得到的簇ci中,对于任意一个样本,都能在簇中至少能找到另一个样本与其特征相似度大于α。

优选地,所述s502的方法具体为:

首先由数据集中所有标签为“有缺陷”的样本集合xb,通过取均值的方式计算得到其中心点xi∈xb;由数据集中所有标签为“无缺陷”的样本集合xc,通过取均值的方式计算得到其中心点xi∈xc;

分别计算簇c中所有样本与两个中心的平均距离:

其中为欧式距离,若distb>distc,则说明本簇中样本离“无缺陷”类的中心距离较近,故将本簇所有样本标签重新标注为“无缺陷”标签,反之,则应重新标注为“有缺陷”。

优选地,所述s10之前还包括:

s01从与软件仓库中收集获得由软件模块特征及缺陷标签构成的数据集。

优选地,所述s40之后还包括:

s50将处理后的数据集结合机器学习算法训练得到预测模型。

优选地,所述s10还可以采用欧式距离或曼哈顿距离方法计算数据集中样本件的相似性。

优选地,所述s202中从该样本出发搜索其所在的簇ci采用深度优先搜索方法。

本发明技术方案的有益效果是:本发明解决了软件缺陷预测技术中数据噪声的问题,特别是,在跨版本缺陷预测场景下,对于噪声造成的类别重叠问题,提升数据集质量,处理后的数据集直接提供给现有的缺陷预测模型使用能使其达到更好的预测效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。

图1为本发明一实施例的方法流程图;

图2为软件缺陷预测的方法流程图;

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

如图1所示,本发明提出的一种针对跨版本软件缺陷预测的数据噪声处理方法,包括如下步骤:

s10通过余弦相似度计算数据集中样本件的相似性;

s20基于样本件的相似性归类数据集中簇集合c;

s30从簇集合c中对每簇判断其内部样本标签是否一致;

s40若不一致,则提取簇集合c的样本容量;

s50根据簇集合c的样本容量情况分别确定簇的本簇标签;

s60采用本簇标签对样本的噪声重标记。

在本发明实施例中,在软件缺陷预测的数据集收集过程中,常见的数据标注方式是通过对版本控制系统中数据的挖掘来得到缺陷信息。如,开发人员修复缺陷后,在向版本控制系统中提交代码时会留下类似“fixbug...”的备注信息。故可通过搜索“fix”或“bug”等关键字的方法来得到修复缺陷的代码改动,在将对应修改前的代码模块标记为有缺陷。此类方法虽然大体上可行,但存在很大的不精确性。一方面开发人员可能很有可能在修复缺陷后留下相关信息,使得部分有缺陷代码未得到标注。另一方面开发人员可能在修复缺陷的同时也可以进行了其他功能性改动,使得一些无缺陷代码被错误标记为有缺陷。因此缺陷预测中的数据集中往往存在一定错误标注带来的噪声,这对训练得到模型的预测效果有较大影响。特别墅,在跨版本缺陷预测场景下,数据集往往由多个版本的数据构成。而噪声的存在使得同一代码模块在不同版本中被标注上不同的标签,但他们之间的代码差异往往很小,特征极为相似,因此进一步导致数据集中存在许多样本特征相似或相同,但标签相反的情况,即类别重叠的问题。这使得跨版本缺陷预测下预测模型受噪声影响更加明显。本发明考虑到一个簇内的样本在特征上都有高度相似,在正常情况下应当被标注为同一类别。但由于数据标注阶段往往会存在错误标注,导致数据集存在噪声,使得同一簇中部分噪声样本与其他样本标签不同。特别是在跨版本缺陷预测的场景下,噪声引起的类重叠问题使得这个现象更为明显。所以为使得每簇中每个样本的标签一致,需要为一个簇选择统一标签。本发明弥补现有软件缺陷预测方法在面对数据噪声问题上的不足,提高这些方法的预测效果。

优选地,所述s50具体为:

s501若簇的样本容量大于阈值β,采用投票方式基于多数原则确定为本簇标签;

s502若簇的样本容量小于阈值β,基于最近原则通过计算簇的集合c中各种类别的样本中心距离选择本簇标签。

在本发明实施例中,本发明考虑到样本数量较少,如果仍然采用s501中的投票方式基于多数原则确定的本簇标签,会存在较大偶然性。故本发明根据簇集合c的样本容量大小分两种情况来确定簇的本簇标签。特别是,对于簇的样本容量小于阈值β的情况,采用了最近原则通过计算簇的集合c中各种类别的样本中心距离选择本簇标签。

优选地,所述s10具体为:

将一个大小为n的缺陷预则数据集表示为x={x1,x2,...,xn},其中xi=(fi1,fi2,...,fim)表示数据集中第i个样本,而fij表示第i个样本的第j维特征,采用余弦相似度计算数据集中样本件的相似性矩阵其中si,j=cos(xi,xj)表示样本xi与xj之间的余弦相似度,其计算公式如下:

优选地,所述s20具体为:

s201定义c=φ表示样本簇的集合,初始为空集;v=φ表示已被访问过的样本集合,初始为空集;参数相似性阈值为α;

s202依次遍历数据集x中的每一个样本,对于任一样本xi,若它已在集合v中则直接跳过;否则从该样本出发搜索其所在的簇ci,将簇ci加入到集合c中,并将ci包含的所有样本都加入到v中,再接着遍历下一样本,直至所有样本都被遍历完。

在本发明实施中,由于同一簇中的样本特征十分相似,本发明将数据集里一组在特征空间中距离接的的样本集归为同一簇,而不同簇的样本间特征相差较大基于相似性矩阵s提取数据集中存在的样本簇。

优选地,所述s202中从该样本出发搜索其所在的簇ci采用广度优先的方法,具体为:

初始化ci=φ,通过相似性矩阵s找出所有与xi相似性大于阈值α的样本,称为xi的一阶邻居n1(xi),即si,j>α,将一阶邻居n1(xi)中所有样本都加入到ci中;在数据集剩余样本中找出满足与n1(xi)中有至少一个样本的相似度大于α的样本,称为xi的二阶邻居n2(xi),即sj,k>α且n1(xi)∩n2(xi)=φ,将二阶邻居n2(xi)中所有样本都加入到ci中。以此类推,直到不能再找到下一阶邻居,通过此过程得到的簇ci中,对于任意一个样本,都能在簇中至少能找到另一个样本与其特征相似度大于α。

在本发明实施例中,本发明在实际使用中,参数α通常设置得较高,如0.999,这保证了簇中的样本都在特征上高度相似。

优选地,所述s502的方法具体为:

首先由数据集中所有标签为“有缺陷”的样本集合xb,通过取均值的方式计算得到其中心点xi∈xb;由数据集中所有标签为“无缺陷”的样本集合xc,通过取均值的方式计算得到其中心点xi∈xc;

分别计算簇c中所有样本与两个中心的平均距离:

其中为欧式距离,若distb>distc,则说明本簇中样本离“无缺陷”类的中心距离较近,故将本簇所有样本标签重新标注为“无缺陷”标签,反之,则应重新标注为“有缺陷”。

在本发明实施例中,本发明将数据集样本中的噪声重新标记上更为精准的标签,提升数据集质量。

优选地,所述s10之前还包括:

s01从与软件仓库中收集获得由软件模块特征及缺陷标签构成的数据集。

优选地,所述s40之后还包括:

s50将处理后的数据集结合机器学习算法训练得到预测模型。

优选地,所述s10还可以采用欧式距离或曼哈顿距离方法计算数据集中样本件的相似性。

优选地,所述s202中从该样本出发搜索其所在的簇ci采用深度优先搜索方法。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1