当前位置: 首页 > 专利查询>南通大学专利>正文

一种基于主动学习的无监督缺陷程序模块识别方法技术

技术编号:21298459 阅读:41 留言:0更新日期:2019-06-12 07:39
本发明专利技术涉及一种基于主动学习的无监督缺陷程序模块识别方法,属于软件质量保障领域。本发明专利技术包括:1)从待测项目中抽取程序模块进行度量,形成数据集D;2)采用聚类方法将D内的程序模块分为可能有缺陷和可能没有缺陷两类,分别随机选k1个模块标记,形成已标记数据集L,和未标记数据集U,基于L构建预测模型;3)判断缺陷模块数查全率是否达预期,若达到,终止标记过程,否则执行步骤4);4)使用两阶段标记方法从U中选出一定数量的程序模块进行标记并添加到L中;5)基于L构建缺陷预测模型,执行步骤3)。本发明专利技术方法可以在不存在历史标记数据集的情况下,花费较少的标记代价,检测到被测项目内的绝大部分有缺陷程序模块。

An Unsupervised Defect Program Module Recognition Method Based on Active Learning

The invention relates to an unsupervised defective program module identification method based on active learning, which belongs to the field of software quality assurance. The invention includes: 1) extracting program modules from the items to be tested to measure and form data set D; 2) dividing program modules in D into two categories: possible defects and possible no defects by clustering method, randomly selecting K 1 module markers to form labeled data set L and unlabeled data set U, and constructing prediction model based on L; 3) judging whether the recall rate of defect module number reaches the expectation; If it is achieved, stop the marking process or execute step 4; (4) use two-stage marking method to select a certain number of program modules from U for marking and adding them to L; (5) build a defect prediction model based on L, execute step 3). The method of the invention can detect most defective program modules in the tested items at less labeling cost without historical label data sets.

【技术实现步骤摘要】
一种基于主动学习的无监督缺陷程序模块识别方法
本专利技术属于软件质量保障领域,具体涉及一种基于主动学习的无监督缺陷程序模块识别方法。
技术介绍
软件缺陷预测通过分析软件历史仓库,构建缺陷预测模型,来预先识别出被测项目内的潜在缺陷程序模块,通过将更多测试资源优先分配到这些程序模块,可以达到优化测试资源分配,提高软件产品质量的目的。软件缺陷预测模型依赖于高质量的数据集,但是在实际的软件测试场景中,需要执行软件缺陷预测的项目大部分都是新的项目。我们可以通过一些现有的工具较为容易的抽取出程序模块并对这些程序模块进行度量,然而,由于标记这些提取的程序模块需要专业领域知识,因此,这项工作十分耗时,又容易出错。由于未标记的缺陷预测数据集较为容易搜集,而已标记的缺陷预测数据集需要花费很大的开销,主动学习方法是解决这一类问题的一种有效方法。主动学习不同于其他机器学习的地方在于采样策略的使用。采样策略的目的是在最少标记代价下获得能最大程度提高分类器的泛化性能的标记样本集。主动学习算法的迭代过程是:在标记样例集上训练分类器,使用分类器对未标记样例进行分类判断;根据分类结果,使用采样引擎选择部分无标记样例交由专家进行标记;将标记后的样例加入已标记样例集用于分类器的下一次训练。算法的终止条件是标记代价或者分类器的泛化精度达到一定标准为止。综上所述,为了帮助研究人员能尽可能早地标记出新项目中有缺陷的模块,并且主动学习算法是解决这一类问题比较好的技术之一,我们有必要设计出一种有效的基于主动学习的无监督缺陷程序模块识别方法。本专利技术由此而生。
技术实现思路
本专利技术的目的在于提供基于主动学习的无监督缺陷程序模块识别方法,一方面通过使用基于聚类的方法可以使标记人员只花费很少的代价就可以提供模型训练的初始数据集,而不需要采用传统的随机标记方法,另一方面,通过使用主动学习算法在每一轮迭代当中提升模型的性能,并且使用训练出来的模型对未标记的模块进行预测,根据预测结果帮助标记人员尽早地找出程序中的缺陷模块;具有缺陷预测模型构建时间短和模型预测性能高的优点,从而可以更为精准的预测出被测项目内的潜在缺陷程序模块,最终达到帮助标记人员花费十分少的代价就可以找出程序中绝大部分缺陷模块这一目的。为实现上述目的,本专利技术提供了一种基于主动学习的无监督缺陷程序模块识别方法,包括如下步骤:(1)挖掘待预测软件项目托管的版本控制系统和缺陷跟踪系统,从中抽取程序模块进行度量,形成缺陷预测数据集D;(2)对缺陷预测数据集D执行基于聚类的方法,将缺陷预测数据集D内的程序模块划分到两个不同的聚类中,其中一个聚类包含的程序模块可能含有缺陷,而另一个聚类包含的程序模块可能不含有缺陷,随后从这两个聚类中分别随机选出k1个程序模块进行人工标记,从而产生初始的已标记缺陷预测数据集L和剩余的未标记缺陷预测数据集U(U=D-L),最后基于已标记缺陷预测数据集L,借助支持向量机构建缺陷预测模型ef;(3)使用项目缺陷模块数预估方法估算出所述待预测软件项目内的缺陷程序模块数defectNum,已标记缺陷预测数据集L中已经标记出的缺陷程序模块数为Ldefective,计算Ldefective与defectNum的比值,如果比值大于所述预设阈值,则终止标记过程并返回所有已经标记出的缺陷程序模块,提交给测试人员进行缺陷的修复,如果比值小于或等于所述预设阈值,则继续执行步骤(4)。(4)从未标记缺陷预测数据集U中,使用两阶段标记方法选出指定数量的程序模块进行标记,具体包括以下步骤:(4-1)基于缺陷预测模型ef,从未标记缺陷预测数据集U中选出k2个最接近缺陷预测模型ef划分超平面的程序模块进行标记并将这些程序模块设置为已标记,将这些已标记程序模块添加到已标记缺陷预测数据集L中,并从未标记缺陷预测数据集U中移除这些已标记程序模块;(4-2)使用当前缺陷预测模型对未标记缺陷预测数据集U中未标记程序模块进行预测并得到每个程序模块含有缺陷的概率值,将每个程序模块的概率值从高到低进行排序,按照顺序选择前k2个程序模块进行标记并将这些程序模块设置为已标记,将这些已标记程序模块添加到已标记缺陷预测数据集L中,并从未标记缺陷预测数据集U中移除这些已标记程序模块;(5)确定已标记缺陷预测数据集L内有缺陷的程序模块数Numdefetive和无缺陷的程序模块数Numclean,如果Numdefetive<Numclean,采用随机欠采样方法解决数据集内存在的类别不平衡问题,即随机删除无缺陷的程序模块,直至Numdefetive=Numclean,随后基于上述预处理后的已标记缺陷预测数据集,借助支持向量机重新构建缺陷预测模型,并执行步骤(3)。优选地,步骤(2)中的基于聚类的方法包括如下步骤:(2-1)将缺陷预测数据集D视为矩阵normA,并计算出矩阵normA的权重邻接矩阵W,Wij代表矩阵normA中第i个模块和第j个模块的相似性,所述权重邻接矩阵W的计算公式为:W=normA×normAT,其中normAT是矩阵normA的转置矩阵;(2-2)将W矩阵中取值小于0的元素以及主对角线上的元素的取值重新设置为0,而其他元素取值保持不变;(2-3)计算权重邻接矩阵W的标准化拉普拉斯矩阵Lsym,其中矩阵I是和矩阵W维度相同的单位矩阵,矩阵G是所述标准化拉普拉斯矩阵Lsym对应的图的度矩阵,其计算方法为:依次将权重邻接矩阵W每一行的元素相加得到一组数值,然后将这些数值依次放在矩阵G的主对角线上,并且矩阵G的其他元素取值设置为0。矩阵为将矩阵G中主对角线的每个元素取值开根号并取倒数;(2-4)对所述标准化拉普拉斯矩阵Lsym执行特征分解,可以得到一组特征值和对应的特征向量,随后选出第二小的特征值对应的特征向量λ;(2-5)使用特征向量λ对缺陷预测数据集D进行聚类:首先计算随后对λ1除以它的L2范数,即令接着将λ1向量中的取值和缺陷预测数据集D中的程序模块建立对应关系;最后将λ1向量中取值大于0的元素对应的程序模块放到聚类C1中,而将取值小于或等于0的元素对应的程序模块放到聚类C2中;(2-6)将缺陷预测数据集D中每个程序模块的特征值相加,并记为该程序模块的rs值;然后计算出C1聚类和C2聚类内包含的程序模块的rs均值,分别记为mean(rs[C1])和mean(rs[C2]),如果mean(rs[C1])>mean(rs[C2]),则聚类C1包含的程序模块可能含有缺陷,反之,则聚类C2包含的程序模块可能含有缺陷;优选地,步骤(3)中的项目缺陷模块数预估方法包括如下步骤:(3-1)计算出缺陷预测数据集D中每个程序模块到缺陷预测模型ef划分超平面的距离,并存储在数组Ds中,对U中所有程序模块赋给临时标签,并将这些程序模块都临时标记为无缺陷模块,将已标记缺陷预测数据集L中的标签值和未标记缺陷预测数据集U中的临时标签值存储在数组label1中,然后将变量posNum和posNumLast的取值设置为label1数组中取值为1的元素数;(3-2)基于Ds数组和label1数组构建训练集trainingData,所述训练集trainingData包括有1个特征,所述特征对应于Ds数组,所述训练集trainingData的类特征本文档来自技高网...

【技术保护点】
1.一种基于主动学习的无监督缺陷程序模块识别方法,其特征在于包括如下步骤:(1)挖掘待预测软件项目托管的版本控制系统和缺陷跟踪系统,从中抽取程序模块进行度量,形成缺陷预测数据集D;(2)对缺陷预测数据集D执行基于聚类的方法,将缺陷预测数据集D内的程序模块划分到两个不同的聚类中,其中一个聚类包含的程序模块可能含有缺陷,而另一个聚类包含的程序模块可能不含有缺陷,随后从这两个聚类中分别随机选出k1个程序模块进行人工标记,从而产生初始的已标记缺陷预测数据集L和剩余的未标记缺陷预测数据集U,最后基于已标记缺陷预测数据集L,借助支持向量机构建缺陷预测模型ef;(3)使用项目缺陷模块数预估方法估算出所述待预测软件项目内的缺陷程序模块数defectNum,已标记缺陷预测数据集L中已经标记出的缺陷程序模块数为Ldefective,计算Ldefective与defectNum的比值,如果所述比值大于所述预设阈值,则终止标记过程并返回所有已经标记出的缺陷程序模块,提交给测试人员进行缺陷的修复,如果所述比值小于或等于所述预设阈值,则继续执行步骤(4)。(4)从未标记缺陷预测数据集U中,使用两阶段标记方法选出指定数量的程序模块进行标记,具体包括以下步骤:(4‑1)基于缺陷预测模型ef,从未标记缺陷预测数据集U中选出k2个最接近缺陷预测模型划分超平面的程序模块进行标记并将这些程序模块设置为已标记,将这些已标记程序模块添加到已标记缺陷预测数据集L中,并从未标记缺陷预测数据集U中移除这些已标记程序模块;(4‑2)使用缺陷预测模型对未标记缺陷预测数据集U中未标记程序模块进行预测并得到每个程序模块含有缺陷的概率值,将每个程序模块的所述概率值从高到低进行排序,按照顺序选择前k2个程序模块进行标记并将这些程序模块设置为已标记,将这些已标记程序模块添加到已标记缺陷预测数据集L中,并从未标记缺陷预测数据集U中移除这些已标记程序模块;(5)确定已标记缺陷预测数据集L内有缺陷的程序模块数Numdefetive和无缺陷的程序模块数Numclean,如果Numdefetive<Numclean,采用随机欠采样方法解决数据集内存在的类别不平衡问题,即随机删除无缺陷的程序模块,直至Numdefetive=Numclean,随后基于上述预处理后的已标记缺陷预测数据集,借助支持向量机重新构建缺陷预测模型ef,并执行步骤(3)。...

【技术特征摘要】
1.一种基于主动学习的无监督缺陷程序模块识别方法,其特征在于包括如下步骤:(1)挖掘待预测软件项目托管的版本控制系统和缺陷跟踪系统,从中抽取程序模块进行度量,形成缺陷预测数据集D;(2)对缺陷预测数据集D执行基于聚类的方法,将缺陷预测数据集D内的程序模块划分到两个不同的聚类中,其中一个聚类包含的程序模块可能含有缺陷,而另一个聚类包含的程序模块可能不含有缺陷,随后从这两个聚类中分别随机选出k1个程序模块进行人工标记,从而产生初始的已标记缺陷预测数据集L和剩余的未标记缺陷预测数据集U,最后基于已标记缺陷预测数据集L,借助支持向量机构建缺陷预测模型ef;(3)使用项目缺陷模块数预估方法估算出所述待预测软件项目内的缺陷程序模块数defectNum,已标记缺陷预测数据集L中已经标记出的缺陷程序模块数为Ldefective,计算Ldefective与defectNum的比值,如果所述比值大于所述预设阈值,则终止标记过程并返回所有已经标记出的缺陷程序模块,提交给测试人员进行缺陷的修复,如果所述比值小于或等于所述预设阈值,则继续执行步骤(4)。(4)从未标记缺陷预测数据集U中,使用两阶段标记方法选出指定数量的程序模块进行标记,具体包括以下步骤:(4-1)基于缺陷预测模型ef,从未标记缺陷预测数据集U中选出k2个最接近缺陷预测模型划分超平面的程序模块进行标记并将这些程序模块设置为已标记,将这些已标记程序模块添加到已标记缺陷预测数据集L中,并从未标记缺陷预测数据集U中移除这些已标记程序模块;(4-2)使用缺陷预测模型对未标记缺陷预测数据集U中未标记程序模块进行预测并得到每个程序模块含有缺陷的概率值,将每个程序模块的所述概率值从高到低进行排序,按照顺序选择前k2个程序模块进行标记并将这些程序模块设置为已标记,将这些已标记程序模块添加到已标记缺陷预测数据集L中,并从未标记缺陷预测数据集U中移除这些已标记程序模块;(5)确定已标记缺陷预测数据集L内有缺陷的程序模块数Numdefetive和无缺陷的程序模块数Numclean,如果Numdefetive<Numclean,采用随机欠采样方法解决数据集内存在的类别不平衡问题,即随机删除无缺陷的程序模块,直至Numdefetive=Numclean,随后基于上述预处理后的已标记缺陷预测数据集,借助支持向量机重新构建缺陷预测模型ef,并执行步骤(3)。2.根据权利要求1所述的基于主动学习的无监督缺陷程序模块识别方法,其特征在于,步骤(2)中的基于聚类的方法包括如下步骤:(2-1)将缺陷预测数据集D视为矩阵normA,并计算出矩阵normA的权重邻接矩阵W,Wij代表矩阵normA中第i个模块和第j个模块的相似性,所述权重邻接矩阵W的计算公式为:W=normA×normAT,其中normAT是矩阵normA的转置矩阵;(2-2)将W矩阵中取值小于0的元素以及主对角线上的元素的取值重新设置为0,而其他元素取值保持不变;(2-3)计算权重邻接矩阵W的标准化拉普拉斯矩阵Lsym,其中矩阵I是和矩阵W维度相同的单位矩阵,矩阵G是所述标准化拉普拉斯矩阵Lsym对应的图的度矩阵,其计算方法为:依次将权重邻接矩阵W每一行的元素相加得到一组数值,然后将这些数值依次放...

【专利技术属性】
技术研发人员:陈翔袁智丹田丹张蹲鞠小林文万志
申请(专利权)人:南通大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1