一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于类关联规则的软件缺陷预测方法及系统

2023-01-15 08:44:50 来源:中国专利 TAG:


1.本发明涉及软件缺陷预测技术领域,尤其涉及一种基于类关联规则的软件缺陷预测方法及系统。


背景技术:

2.软件缺陷以一种静态形式存在于软件内部,是软件开发过程中人为错误的结果。软件作为思维的产物不可避免地受到开发人员自身、所使用的编程语言特点及软件运行环境等多方面的影响。但是,由于人所具有的思维定势以及编程语言自身的特性,使得软件缺陷出现具有一定的统计规律。
3.软件缺陷预测技术通过各种分类器模型判断软件模块的缺陷倾向,基于关联规则算法的缺陷预测技术目前已用于软件缺陷预测领域。关联规则挖掘是从事务集合中挖掘出满足支持度和置信度最低要求的所有规则,这类规则也称强关联规则。
4.大多数经典关联分类算法采用单支持度和置信度挖掘规则以降低算法的复杂度、规则数和整体准确度为目标,未考虑类不平衡对关联分类算法的影响。而且,由于关联规则通过使用者人为设置支持度阈值与置信度阈值,这使得中间生成了大量的频繁项集生成导致大量冗余关联规则的生成,这对于关联规则算法在运行时的效率与性能都带来了很大负面影响。传统的关联规则置信度指标主要关注关联规则前件与后件之间的正相关关联关系,而忽略了关联规则中的负相关关系。


技术实现要素:

5.鉴于上述的分析,本发明实施例旨在提供一种基于类关联规则的软件缺陷预测方法及系统,用以解决现有软件缺陷特征选择复杂且预测指标不准确的问题。
6.一方面,本发明实施例提供了一种基于类关联规则的软件缺陷预测方法,包括如下步骤:获取历史软件缺陷数据,构建样本集;基于样本集进行迭代训练和测试后,取分类性能指标最优时的类关联规则,作为软件缺陷预测规则;迭代训练和测试包括:将样本集划分为训练集和测试集;基于关联规则算法,根据三个支持度阈值从当前训练集中生成频繁项集,根据不同长度的频繁项集的提升度阈值,筛选出频繁项集并转化为关联规则,得到关联规则集合;从关联规则集合中提取类关联规则,根据类关联规则的双置信度,对当前测试集进行预测,根据预测结果计算分类性能指标;获取待预测的软件缺陷度量元数据,与软件缺陷预测规则进行匹配,根据匹配的软件缺陷预测规则的双置信度,得到预测结果。
7.基于上述方法的进一步改进,根据类关联规则的双置信度,对当前测试集进行预测前,还包括:根据类关联规则的长度和双置信度,去除冗余的类关联规则。
8.基于上述方法的进一步改进,样本集中每条样本包括多个软件缺陷度量元和1个
缺陷标签;三个支持度阈值分别对含有有缺陷标签的频繁项集、含有无缺陷标签的频繁项集和仅有软件缺陷度量元的频繁项集进行设置。
9.基于上述方法的进一步改进,不同长度的频繁项集的提升度阈值,通过下式计算得到:其中,θ
ipv
表示提升度阈值递增步长,n表示频繁项集的长度,setn表示长度为n的频繁项集,n》1。
10.基于上述方法的进一步改进,从关联规则集合中提取类关联规则是从关联规则集合中获取后件是缺陷标签的关联规则;类关联规则的双置信度是根据类关联规则中前件发生的前提下后件也发生的概率,减去前件不发生的前提下后件发生的概率而得到。
11.基于上述方法的进一步改进,根据类关联规则的长度和双置信度,去除冗余的类关联规则包括:根据类关联规则的长度和双置信度对类关联规则进行排序,得到类关联规则集合;依次从排序后的类关联规则集合中取出类关联规则,获取当前类关联规则的前件的所有子集,如果任一子集存在于类关联规则集合中其它类关联规则的前件中且后件相同,则从类关联规则集合中去除当前类关联规则。
12.基于上述方法的进一步改进,根据类关联规则的长度和双置信度对类关联规则进行排序,包括:计算每个类关联规则的前件长度,及类关联规则的双置信度;根据前件长度从大到小对类关联规则进行排序,如果前件长度相等但双置信度不相等,则根据双置信度从高到低进行排序,如果前件长度相等且双置信度相等,则根据字典顺序进行排序。
13.基于上述方法的进一步改进,获取待预测的软件缺陷度量元数据,与软件缺陷预测规则进行匹配,根据匹配的软件缺陷预测规则的双置信度,得到预测结果,包括:根据缺陷标签,将软件缺陷预测规则划分为预测有缺陷的关联规则和预测无缺陷的关联规则;以双置信度为预测指标,将待预测的软件缺陷度量元数据,分别与预测有缺陷的关联规则和预测无缺陷的关联规则的前件进行匹配,根据被匹配的关联规则的双置信度,将该双置信度累加入对应的预测有缺陷或无缺陷决策器;根据最大值对应的决策器,得到预测结果。
14.基于上述方法的进一步改进,分类性能指标是auc值,通过下式计算得到:其中,tpr为真阳性率,fpr为假阳性率。
15.另一方面,本发明实施例提供了一种基于类关联规则的软件缺陷预测系统,包括:样本获取模块,用于获取历史软件缺陷数据,构建样本集;规则训练模块,用于基于样本集进行迭代训练和测试后,取分类性能指标最优时的类关联规则,作为软件缺陷预测规则;迭代训练和测试包括:将样本集划分为训练集和测
试集;基于关联规则算法,根据三个支持度阈值从当前训练集中生成频繁项集,根据不同长度的频繁项集的提升度阈值,筛选出频繁项集并转化为关联规则,得到关联规则集合;从关联规则集合中提取类关联规则,根据类关联规则的双置信度,对当前测试集进行预测,根据预测结果计算分类性能指标;缺陷预测模块,用于获取待预测的软件缺陷度量元数据,与软件缺陷预测规则进行匹配,根据匹配的软件缺陷预测规则的双置信度,得到预测结果。
16.与现有技术相比,本发明至少可实现如下有益效果之一:1、根据软件缺陷度量元和缺陷标签,对不同种类的频繁项集设置多支持度对频繁项集进行挖掘,利用其中的软件度量元之间的支持度进行软件缺陷特征选择,提升了软件缺陷预测中软件缺陷度量元的质量,使软件缺陷度量元在生成带有缺陷标签的关联规则时更准确,而且不需要额外进行人为特征选择,提升了关联规则算法的效率与性能。
17.2、同时支持度阈值和提升度阈值,并根据频繁项集的长度逐渐增加提升度的阈值,使得大量负相关性的频繁项集被剔除的同时提升了预测关联规则的生成效率与性能。
18.3、使用双置信度同时考虑关联规则中前件与后件之间的正相关关系与负相关关系,并根据关联规则的长度和双置信度进行冗余规则剪枝,以双置信度作为预测指标,提高预测结果的准确性。
19.本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。
附图说明
20.附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件;图1为本发明实施例1中一种基于类关联规则的软件缺陷预测方法流程图。
具体实施方式
21.下面结合附图来具体描述本发明的优选实施例,其中,附图构成本技术一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
22.本发明的一个具体实施例,公开了一种基于类关联规则的软件缺陷预测方法,如图1所示,包括如下步骤:s11:获取历史软件缺陷数据,构建样本集。
23.需要说明的是,历史软件缺陷数据可以根据定义的软件缺陷的度量指标,使用现有静态软件代码分析工具对项目下的各软件模块扫描来获取各度量指标值,并根据实际软件模块是否存在缺陷,打上缺陷标签,从而以每个模块的多个度量指标值(即软件缺陷度量元)和1个缺陷标签作为一条样本,构建成样本集;也可以直接使用开源软件缺陷领域的公开数据集,比如promise库的ant项目的软件缺陷数据集,其中软件缺陷的度量指标包括:代码行数(loc)、类的加权方法数(wmc)、继承树的深度(dit)、缺陷数量等,根据缺陷数量可以获取有无缺陷标签,从而构建出样本集。
24.根据缺陷标签将样本集划分为有缺陷数据集和无缺陷数据集。
25.s12:基于样本集进行迭代训练和测试后,取分类性能指标最优时的类关联规则,作为软件缺陷预测规则;迭代训练和测试包括:将样本集划分为训练集和测试集;基于关联规则算法,根据三个支持度阈值从当前训练集中生成频繁项集,根据不同长度的频繁项集的提升度阈值,筛选出频繁项集并转化为关联规则,得到关联规则集合;从关联规则集合中提取类关联规则,根据类关联规则的双置信度,对当前测试集进行预测,根据预测结果计算分类性能指标;需要说明的是,为了减小采样误差,增强算法的泛化能力,本步骤中采用多次迭代训练和测试,并在每次迭代中随机划分新的训练集和测试集,下面通过步骤s121-步骤s123详细说明训练和测试过程。
26.s121:将样本集划分为训练集和测试集。
27.需要说明的是,本实施例采用m次k折交叉验证方法,进行m
×
k次迭代训练和测试,每次训练和测试过程中,分别将有缺陷数据集和无缺陷数据集划分为k折,训练集包括k-1折有缺陷数据集和k-1折无缺陷数据集,测试集中包括1折有缺陷数据集和1折无缺陷数据集。
28.优选地,采用10次5折交叉验证方法,迭代50 次,每次运行时采用不同的随机种子将有缺陷数据集和无缺陷数据集划分为5折,其中4折有缺陷数据集和4折无缺陷数据集组成训练集,1折有缺陷数据集和1折无缺陷数据集组成测试集。
29.需要说明的是,本步骤中构建的训练集和测试集中同时包含有缺陷标签的样本和无缺陷标签样本,最大化保留了原始数据特征分布,解决了因数据不平衡导致的测试集缺失某类数据,更有利于软件缺陷规则模型的学习。
30.s122:基于关联规则算法,根据三个支持度阈值从当前训练集中生成频繁项集,根据不同长度的频繁项集的提升度阈值,筛选出频繁项集并转化为关联规则,得到关联规则集合。
31.需要说明的是,关联规则中的支持度反映了项集出现的概率,也就是项集与总事务数的比例。然而针对软件缺陷数据的不平衡问题,即软件有缺陷数据与软件无缺陷数据服从二八分布,仅仅依靠单一支持度无法处理类不平衡数据。因此,本实施例分别对含有有缺陷标签的频繁项集、含有无缺陷标签的频繁项集和仅有软件缺陷度量元的频繁项集设置各自的支持度阈值,保证了不同类的频繁项集的数量与质量。
32.值得注意的是,虽然最终用于预测的关联规则是带有缺陷标签的关联规则,但是通过对仅有软件缺陷度量元的频繁项集设置支持度,可以剔除掉一部分支持度较低的特征(软件缺陷度量元),从而使剩下的软件缺陷度量元质量更高,即:用于软件缺陷预测的软件特征质量更高,使软件缺陷度量元在生成带有缺陷标签的关联规则时更准确。而且,该过程不需要额外进行人为特征选择,提升了关联规则算法的效率与性能。
33.需要说明的是,由于软件缺陷数据集中数据是连续数据,但关联规则处理的是离散数据,因此对训练集中的数据进行五阶等频离散化,以便关联规则算法可以更好地处理软件缺陷数据。
34.优选地,通过python pandas库中的qcut等频划分函数对软件缺陷训练集中的每条数据进行五阶等频离散化。
35.将训练集中每条数据等频离散化并转换为一条事务性数据,将其中的软件缺陷度量元和缺陷标签作为项,根据三个最小支持度阈值,采用关联规则算法,生成频繁项集。优选地,采用apriori算法。
36.为了避免生成过多冗余的频繁项集,对生成的频繁项集再根据提升度进行筛选。提升度用于表示关联规则中前件和后件之间的相关性,当提示度大于1表示前件和后件之间是正相关关系,前件x与后件y之间的提升度定义如下:其中,p(xy)表示前件x与后件y同时发生的概率,p(x)表示前件x发生的概率,p(y)表示后件y发生的概率。
37.通过提升度的公式(1)可以看出,提升度至少针对长度大于1的频繁项集才可以使用。同时随着频繁项集的长度不断增加,虽然频繁项集所包含的信息越来越多,但是这会使得生成的关联规则容易出现过拟合的情况。所以本实施例根据频繁项集长度设置对应的提升度阈值。
38.具体来说,不同长度的频繁项集的提升度阈值,通过下式计算得到:其中,θ
ipv
表示提升度阈值递增步长,n表示频繁项集的长度,setn表示长度为n的频繁项集,n》1。
39.需要说明的是,筛选出频繁项集是当频繁项集的提升度大于等于公式(2)计算得到提升度阈值时,保留该频繁项集。最后,根据最小置信度阈值,将筛选出来的频繁项集转化为关联规则,得到关联规则集合。
40.示例性地,对promise库的ant1.3项目的软件缺陷数据集划分出训练集后,有缺陷的频繁项集的支持度支设置为0.06,无缺陷的频繁项集的支持度设置为0.21,仅有软件缺陷度量元的频繁项集的支持度设置为0.2,提升度阈值递增步长设置为0.04,置信度阈值设置为0.14,生成的关联规则的部分结果如下所示:rule= rfc=(41.4, inf] =》 defects=true support=: 0.0805 confidence=: 0.4,其中,defects是缺陷标签,defects=true表示有缺陷,inf表示无穷大,该规则表示如果软件模块出现类的响应度(rfc)在(41.4, inf]这个范围时,软件模块倾向于发生缺陷,该规则的支持度为0.0805,置信度为0.4;rule= ca=(0.0, 1.0] =》 defects=false support=: 0.4161 confidence=: 0.9688,其中,defects是缺陷标签,defects=false表示无缺陷,该规则表示如果软件模块出现传出耦合度(ca)在(0.0, 1.0]这个范围时,软件模块倾向于不会发生缺陷,该规则的支持度为0.4161,置信度为0.9688;rule= mfa=(-inf, 0.0] =》 cbm=(-inf, 0.0],dit=(-inf, 1.0] support=: 0.3243 confidence=: 0.6857,其中,-inf表示负无穷大,该规则仅有软件缺陷度量元,表示如果软件模块出现功能抽象的度量(mfa)在(-inf, 0.0]这个范围时,软件模块倾向于出现方法间的耦合度(cbm)在(-inf, 0.0]范围内,及继承树的深度(dit)在(-inf, 1.0]范围内,该规则的支持度为0.3243,置信度为0.6857。
41.与现有技术相比,本实施例根据频繁项集的长度逐渐增加提升度的阈值,使得大量负相关性的频繁项集被剔除的同时提升了预测关联规则的生成效率与性能。
42.s123:从关联规则集合中提取类关联规则,根据类关联规则的双置信度,对当前测试集进行预测,根据预测结果计算分类性能指标。
43.需要说明的是,从关联规则集合中提取类关联规则是从关联规则集合中获取后件是缺陷标签的关联规则。
44.优选地,为了提升预测效率,本实施例通过考虑类关联规则中前件与后件的关联关系的紧密性,对步骤s122最后得到的关联规则集合进一步根据类关联规则的长度和双置信度,去除冗余的类关联规则。
45.需要说明的是,在关联规则算法中根据最小置信度阈值提取的关联规则主要关注关联规则前件与后件之间的正相关关联关系,而忽略了关联规则中的负相关关系。形如的关联规则表示如果前件a发生则后件b也将发生,这就表示前件a与后件b之间存在正相关关系,而关联规则则表示如果前件a不发生则后件b发生,这就表示前件a与后件b之间存在负相关关系。因此,本实施例使用双置信度同时考虑关联规则中前件与后件之间的正相关关系与负相关关系,从而去除紧密性不强的类关联规则。
46.具体来说,双置信度是根据前件发生的前提下后件也发生的概率,减去前件不发生的前提下后件发生的概率而得到,定义如下:其中,表示前件x发生的前提下后件y也发生的概率,表示前件x不发生的前提下而后件y发生的概率。
47.根据公式(3)可以看出:针对关联规则的前件x与后件y,当x发生的前提下y也发生的概率尽可能高,同时x不发生的前提下而y发生的概率尽可能低,这样的前件x与后件y之间的相关关系更加紧密。
48.需要说明的是,长度越长的类关联规则虽然所含信息多但是可能会造成过拟合,长度越短的类关联规则虽然所含信息少但是泛化性更好。因此,本实施例根据类关联规则的长度和双置信度对类关联规则进行排序后,再根据长度进行剪枝,确保两者达到平衡。
49.具体来说,根据类关联规则的长度和双置信度,去除冗余的类关联规则包括:

根据类关联规则的长度和双置信度对类关联规则进行排序,得到类关联规则集合;需要说明的是,排序方法包括:计算每个类关联规则的前件长度,及类关联规则的双置信度;根据前件长度从大到小对类关联规则进行排序,如果前件长度相等但双置信度不相等,则根据双置信度从高到低进行排序,如果前件长度相等且双置信度相等,则根据字典顺序进行排序。其中,字典顺序即按字母顺序排列的方法。
50.②
依次从排序后的类关联规则集合中取出类关联规则,获取当前类关联规则的前件的所有子集,如果任一子集存在于类关联规则集合中其它类关联规则的前件中且后件相同,则从类关联规则集合中去除当前类关联规则。
51.示例性地,对于规则r1:x1,x2,x3=》y1的前件的所有子集包括:{x1},{x2},{x3},{x1,x2},{x1,x3},{x2,x3},{x1,x2,x3},如果类关联规则集合中还存在规则r2:x1,x3=》y1,则去除规则r1。
52.去除冗余的类关联规则后,得到用于预测的类关联规则。在对当前测试集进行预测时,依次从测试集中取出每条测试样本,将当前测试样本中软件缺陷度量元数据,分别与用于预测的类关联规则的前件进行匹配,根据被匹配的类关联规则的缺陷标签和双置信度,将该双置信度累加入对应的预测有缺陷或无缺陷决策器;根据最大值对应的决策器,得到当前测试样本的缺陷预测结果。
53.根据预测结果计算分类性能指标,包括:

将测试集的预测结果与测试样本实际的缺陷标签进行比对,计算出真阳性tp、假阴性fn、假阳性fp和真阴性tn。
54.需要说明的是,tp是将有缺陷的测试样本分类为有缺陷的个数,fn是将有缺陷的测试样本分类为无缺陷的个数,fp是将无缺陷的测试样本分类为有缺陷类的个数,tn是将无缺陷的测试样本分类为无缺陷类的个数。
55.②
根据真阳性tp、假阴性fn、假阳性fp和真阴性tn,通过下式计算真阳性率tpr和假阳性率fpr。假阳性率fpr。
56.③
根据真阳性率tpr和假阳性率fpr,通过下式计算得到分类性能指标auc值。
57.需要说明的是,根据真阳性率tpr和假阳性率fpr,还可以计算出g-mean指标和balance指标,其中,g-mean指标是缺陷检测率和缺陷误报率的几何平均值,balance指标是从理想点(1,0)到实际点(tpr,1-fpr)的欧氏距离。
58.示例性地,获取公开的软件缺陷数据集promise的ant1.3数据集构建样本集,在相同的参数和运行环境下,分别采用本实施例中的方法与传统的apriori算法进行50次迭代,结果对比情况如下:

本实施例在运行时间、用于预测的关联规则的数量,以及分类性能auc指标上都有显著提升。具体结果如表1所示。
59.②
本实施例以双置信度作为预测指标进行预测,与经典的支持度,置信度进行对
比,在auc、balance和g-mean三个性能指标上都有提升,说明了以双置信度作为预测指标在软件缺陷预测领域的有效性。具体结果如表2所示:根据上述步骤s121-步骤s123,迭代多次后,取分类性能指标auc最优时的类关联规则,作为软件缺陷预测规则。也可以根据实际情况,同时考虑g-mean指标和balance指标。
60.s13:获取待预测的软件缺陷度量元数据,与软件缺陷预测规则进行匹配,根据匹配的软件缺陷预测规则的双置信度,得到预测结果。
61.需要说明的是,待预测的软件缺陷度量元数据与历史软件缺陷数据属于同一个项目,对待预测的软件模块按相同的软件缺陷度量指标,获取软件缺陷度量元数据。进行预测时,根据缺陷标签,将步骤s12中最后选出的软件缺陷预测规则划分为预测有缺陷的关联规则与预测无缺陷的关联规则;以双置信度为预测指标,构造预测有缺陷决策器和无缺陷决策器;将待预测的软件缺陷度量元数据,分别与预测有缺陷的关联规则与预测无缺陷的关联规则的前件进行匹配,根据被匹配的关联规则的双置信度,将该双置信度累加入对应的预测有缺陷或无缺陷决策器;根据最大值对应的决策器,得到预测结果。
62.也就是说,最终判断预测有缺陷决策器与预测无缺陷决策器中累加的双置信度值哪个最大,如果有缺陷决策器的值最大,则预测结果是有缺陷,否则预测结果是无缺陷。
63.与现有技术相比,本实施例提供的一种基于类关联规则的软件缺陷预测方法,根据软件缺陷度量元和缺陷标签,对不同种类的频繁项集设置多支持度对频繁项集进行挖掘,利用其中的软件度量元之间的支持度进行软件缺陷特征选择,提升了软件缺陷预测中软件缺陷度量元的质量,使软件缺陷度量元在生成带有缺陷标签的关联规则时更准确,而且不需要额外进行人为特征选择,提升了关联规则算法的效率与性能;同时支持度阈值和提升度阈值,并根据频繁项集的长度逐渐增加提升度的阈值,使得大量负相关性的频繁项集被剔除的同时提升了预测关联规则的生成效率与性能;使用双置信度同时考虑关联规则中前件与后件之间的正相关关系与负相关关系,并根据关联规则的长度和双置信度进行冗余规则剪枝,以双置信度作为预测指标,提高预测结果的准确性。
64.实施例2本发明的另一个实施例,公开了一种基于类关联规则的软件缺陷预测系统,从而实现实施例1中的基于类关联规则的软件缺陷预测方法。各模块的具体实现方式参照实施例1中的相应描述。该系统包括:样本获取模块,用于获取历史软件缺陷数据,构建样本集;规则训练模块,用于基于样本集进行迭代训练和测试后,取分类性能指标最优时的类关联规则,作为软件缺陷预测规则;迭代训练和测试包括:将样本集划分为训练集和测试集;基于关联规则算法,根据三个支持度阈值从当前训练集中生成频繁项集,根据不同长度的频繁项集的的提升度阈值,筛选出频繁项集并转化为关联规则,得到关联规则集合;从关联规则集合中提取类关联规则,根据类关联规则的双置信度,对当前测试集进行预测,根
据预测结果计算分类性能指标;缺陷预测模块,用于获取待预测的软件缺陷度量元数据,与软件缺陷预测规则进行匹配,根据匹配的软件缺陷预测规则的双置信度,得到预测结果。
65.进一步地,根据类关联规则的双置信度,对当前测试集进行预测前,还包括:根据类关联规则的长度和双置信度,去除冗余的类关联规则。
66.由于本实施例一种基于类关联规则的软件缺陷预测系统与前述一种基于类关联规则的软件缺陷预测方法相关之处可相互借鉴,此处为重复描述,故这里不再赘述。由于本系统实施例与上述方法实施例原理相同,所以本系统实施例也具有上述方法实施例相应的技术效果。
67.本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
68.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献