本发明涉及分类方法技术领域,具体涉及一种基于流形对齐的软件缺陷预测方法及系统。
背景技术:
软件缺陷预测是当前软件工程质量评估领域中的一个研究热点,随着科技和互联网的发展,各种各样的应用软件层出不穷,极大地方便了我们生活,但是也因此而产生了一个不容忽视的问题,应用软件并不是完美的,经常会有一定的缺陷,这些缺陷会大大影响用户的使用体验,严重的话,甚至关系到企业的发展。
历史上已经有多次因软件存在缺陷而造成了严重后果,因此在软件正式发布之前,对软件进行质量评估是不可或缺的。软件缺陷预测技术的思想是在项目开发的早期阶段,利用相关技术,判断项目内的程序模块是否包含缺陷,并修复其中的缺陷模块,最终达到提高软件产品质量的目的。
现有的软件缺陷预测工作大多是基于机器学习的方法来构建预测模型,根据预测模型是否使用外来软件项目的缺陷数据大致可分为项目内缺陷预测(wpdp)、跨项目缺陷预测(cpdp)以及两大类。
项目内缺陷预测的代表性工作有:代价敏感的鉴别字典学习方法、基于协作表示分类的缺陷预测方法、多核集成学习的软件缺陷预测方法等,通过在12个nasa项目上进行实验,结果表明多核集成学习优于其他两种先进的缺陷预测方法。
跨项目缺陷预测的代表性工作有:(1)迁移贝叶斯模型(tnb),根据目标项目中的数据采用数据引力定律来加权源项目中的训练数据。实验基于nasa和softlab数据集,结果表明tnb可以获得较好的预测性能;基于特征迁移的迁移成分分析方法,在aeeem和relink数据集上,该方法展现了较好的缺陷预测性能;(2)基于典型相关性分析方法(cca+),基于来自promise库中的10个项目,实验结果表明多目标缺陷预测器方法优于单目标预测器,同时也优于其他对比的跨项目缺陷预测方法。
除此之外,当前已有多个软件缺陷预测的技术公开与发表,它们都或多或少地解决了软件缺陷预测领域的一部分挑战,但是仍有一些亟待解决的问题,比如这些预测技术都没有考虑到如何利用源数据和目标数据之间差异,从而导致预测准确性不高。
技术实现要素:
本发明提出一种基于流形对齐的软件缺陷预测方法及系统,用于解决或者至少部分解决现有技术中的方法存在的预测准确性不高的技术问题。
为了解决上述技术问题,本发明第一方面提供了一种基于流形对齐的软件缺陷预测方法,包括:
s1:获取源项目数据和待测项目数据;
s2:对源项目数据和待测项目数据进行预处理,并将预处理后的源项目数据划分为训练集和验证集;
s3:将预处理后的待测项目数据和训练集嵌入到流形中,执行流形特征学习,得到流形特征转换核,其中,流形特征转换核用以使源项目数据与待测项目数据的分布更接近;
s4:分析嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异,并得到分布对齐函数,其中,分布对齐函数用以对嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据执行对齐操作;
s5:对流形特征转换核与分布对齐函数进行整合,构建基于流形对齐的软件缺陷预测分类器f;
s6:对分类器f进行训练,直至收敛,得到训练好的分类器;
s7:利用训练好的分类器进行软件缺陷预测。
在一种实施方式中,s1包括:
s1.1:从给定的项目中提取项目的模块,并根据提出的模块获得待测试项目数据:
s1.2:判断待测试项目数据中是否具有包含标签的历史缺陷数据,如果具有,则将历史缺陷数据作为源项目数据,否则,选用公开的缺陷数据集作为源项目数据。
在一种实施方式中,s1.1中提取出的模块的粒度包括但不限于类、文件和函数。
在一种实施方式中,s2对源项目数据和待测项目数据进行预处理,包括:
对源项目数据和待测项目数据采用zscore方法进行归一化;
对归一化处理后的源项目数据和待测项目数据,采用pca降维方法执行数据降维操作。
在一种实施方式中,s3中采用的流形为格拉斯曼流形,并采用测地线核进行流形特征学习,得到流形特征转换核。
在一种实施方式中,s4中采用最大平均差异mmd来分析和评估嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异。
在一种实施方式中,s5中构建的基于流形对齐的软件缺陷预测分类器f为:
其中,g(xi)表示流形特征转换核,yi表示源项目数据的标签,
基于同样的发明构思,本发明第二方面提供了一种基于流形对齐的软件缺陷预测系统,包括:
数据获取模块,用于获取源项目数据和待测项目数据;
预处理模块,用于对源项目数据和待测项目数据进行预处理,并将预处理后的源项目数据划分为训练集和验证集;
嵌入模块,用于将预处理后的待测项目数据和训练集嵌入到流形中,执行流形特征学习,得到流形特征转换核,其中,流形特征转换核用以使源项目数据与待测项目数据的分布更接近;
差异分布分析模块,用于分析嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异,并得到分布对齐函数,其中,分布对齐函数用以对嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据执行对齐操作;
分类器构建模块,用于对流形特征转换核与分布对齐函数进行整合,构建基于流形对齐的软件缺陷预测分类器f;
训练模块,用于对分类器f进行训练,直至收敛,得到训练好的分类器;
预测模块,用于利用训练好的分类器进行软件缺陷预测。
基于同样的发明构思,本发明第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现第一方面所述的方法。
基于同样的发明构思,本发明第四方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
本发明提供了一种基于流形对齐的软件缺陷预测方法,通过将预处理后的待测项目数据和训练集嵌入到流形中,执行流形特征学习,可以学习到源项目数据和待测项目数据的流形特征并将它们投影到同一子空间中,然后通过计算源项目数据和待测项目数据的差异性,来对它们执行动态分布对齐,充分挖掘并利用了源数据集和目标数据集的几何特性,并且通过差异度算法解决了两者的分布对齐问题,从而有效地提高了模型的预测效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的一种基于流形对齐的软件缺陷预测方法的整体流程图。
图2位本发明的方法与现有方法的对比试验结果数据示意图。
具体实施方式
针对现有技术所未解决的问题,本发明提出了一种基于流形对齐的软件缺陷预测方法,该方法能够学习到源数据和目标数据(即源项目数据和待测项目数据)的流形特征并将它们投影到同一子空间中,通过计算源和目标数据的差异性,来对它们执行动态分布对齐,通过该方法能够显著地提高预测的准确性。
本发明的方案包括:
将获取到的源项目数据和待测项目数据经过归一化以及数据降维操作投影到统一的子空间,再将经过预处理后的数据嵌入到格拉斯曼流形中来,在格拉斯曼流形中习得一个流形特征转换的公式(流形特征转换核);与此同时,通过在新的特征空间中计算源项目数据和待测项目数据的差异程度,来定量评估其执行边缘分布对齐和条件分布对齐的重要性,最后经过一定的整合得到一个基于流形对齐的分类器模型。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供了一种基于流形对齐的软件缺陷预测方法,该方法包括:
s1:获取源项目数据和待测项目数据;
s2:对源项目数据和待测项目数据进行预处理,并将预处理后的源项目数据划分为训练集和验证集;
s3:将预处理后的待测项目数据和训练集嵌入到流形中,执行流形特征学习,得到流形特征转换核,其中,流形特征转换核用以使源项目数据与待测项目数据的分布更接近;
s4:分析嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异,并得到分布对齐函数,其中,分布对齐函数用以对嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据执行对齐操作;
s5:对流形特征转换核与分布对齐函数进行整合,构建基于流形对齐的软件缺陷预测分类器f;
s6:对分类器f进行训练,直至收敛,得到训练好的分类器;
s7:利用训练好的分类器进行软件缺陷预测。
具体来说,源项目数据和待测项目数据分别作为源数据和目标数据。s3中训练集嵌入到流形中,也就是将从预处理后的源项目数据中划分出的训练部分数据进行嵌入。然后在新的特征空间(流形)中进行特征学习,从而捕获到数据的几何结构,并保护其不受到退化,使得源项目数据靠近待测项目数据。
s4是在流形对应的特征空间中分析源项目数据和待测项目数据的分布差异,并得到分布对齐函数,分布对齐函数的作用是将源项目数据和待测项目数据做对齐操作,这是因为将两种数据投影到同一特征空间之后,它们之间仍会有分布不同的问题,因此通过执行对齐操作使得它们之间的分布差异减小。
在一种实施方式中,s1包括:
s1.1:从给定的项目中提取项目的模块,并根据提出的模块获得待测试项目数据:
s1.2:判断待测试项目数据中是否具有包含标签的历史缺陷数据,如果具有,则将历史缺陷数据作为源项目数据,否则,选用公开的缺陷数据集作为源项目数据。
具体来说,对于一个给定的项目,根据特定需求可以提取项目的模块,按规则整理好,从而可以得到待测试项目数据。
公开的缺陷数据集可以为:promise、nasa、softlab、aeeem和relink数据集,这些是软件工程质量保障领域研究者所免费公开的数据集,其具体获取网址如下表所示:
在一种实施方式中,s1.1中提取出的模块的粒度包括但不限于类、文件和函数。
具体来说,s1.1中提取出的模块的粒度可以根据需要确定。
在一种实施方式中,s2对源项目数据和待测项目数据进行预处理,包括:
对源项目数据和待测项目数据采用zscore方法进行归一化;
对归一化处理后的源项目数据和待测项目数据,采用pca降维方法执行数据降维操作。
具体来说,zscore方法即z分数标准化方法,pca降维方法为主成分分析方法,由于源项目数据的实例数目不固定,所以训练集和验证集的比例也不是固定的,具体根据源项目数据的规模确定,具体地,若源项目数据的实例数目为5000以下,则其比例为90%:10%,若实例数目为5000-10000,则其比例为95%:5%,若实例数目大于5000,则固定验证集实例数为500,其余为训练集。
在一种实施方式中,s3中采用的流形为格拉斯曼流形,并采用测地线核进行流形特征学习,得到流形特征转换核。
具体来说,流形
假设ss和st分别表源项目数据和待测项目数据的经pca降维后得到的子空间,
具体地,特征zi和zj的内积会产生一个测地线核:
因此,利用
在一种实施方式中,s4中采用最大平均差异mmd来分析和评估嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异。
具体来说,s4需要评估源项目数据和待测项目数据的差异程度,并且使用的是最大平均差异(maximummeandiscrepancy,mmd),它是一种非参数评估方法,已经有文献验证了其理论的有效性。得到的差异度是用来定量评估其条件分布对齐和边缘分布对齐的重要性。
在一种实施方式中,s5中构建的基于流形对齐的软件缺陷预测分类器f为:
其中,g(xi)表示流形特征转换核,yi表示源项目数据的标签,
引入则化参数λ的目的是通过交叉验证来调整其值,以达到更好的效果。
与现有技术相比,本发明的有益效果和优点如下:
通过提供一种基于流形对齐的软件缺陷预测方法,可以充分挖掘并利用源项目数据和待测项目数据的几何特性,并且通过差异度算法解决了两者的分布对齐问题,有效地提高了模型的预测效果。
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明进行进一步详细说明。如附图1所示,本发明提出了基于流形对齐的软件缺陷预测方法,包括以下步骤:
步骤1,数据集选用promise、nasa、softlab、aeeem和relink数据集,每次实验将其中一个作为待测项目数据,其它作为源项目数据;
步骤3,对源项目数据和待测项目数据执行数据归一化,再执行数据降维;然后将源项目数据分成两部分,一部分用作训练集,一部分用作验证集;
步骤4,对训练集执行流形特征学习,得到其流形特征转换核g(·),并得到转换后的特征;
步骤5,分析嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异,并得到分布对齐函数df(·,·),对源项目数据和待测项目数据执行数据对齐操作;
步骤6,整合g(·)和df(·,·),构建基于流形对齐的软件缺陷预测分类器f。
步骤7,训练分类器f待其收敛,然后在验证集上观察性能,通过多次调参验证,使用最优超参λ,最后在待测项目数据上进行测试,并计算性能指标。
为验证本发明提出的一种基于流形对齐的软件缺陷预测方法能够高效地预测项目中是否有缺陷,实验依次选择promise、nasa、softlab、aeeem和relink作为待测项目,并且每次实验重复20次,其预测性能指标取平均值,最终得到5组结果,并将其与现有的非流形对齐方法作比较,结果如图2所示,其中加粗的数字表示该方法的性能是最好的。
通过图2中的结果表明,本发明中的方法在总体上显著优于其它方法,虽然并不是所有的指标都领先其他方法,但在g-measure指标上,本发明在5个数据集上都有最好的表现。总的来说,大多数现有的软件缺陷预测模型的预测性能是差于本发明,充分证明了本发明所提出的基于流形对齐的软件缺陷预测技术的性能优越。
实施例二
基于同样的发明构思,本实施例提供了一种基于流形对齐的软件缺陷预测系统,该系统包括:
数据获取模块,用于获取源项目数据和待测项目数据;
预处理模块,用于对源项目数据和待测项目数据进行预处理,并将预处理后的源项目数据划分为训练集和验证集;
嵌入模块,用于将预处理后的待测项目数据和训练集嵌入到流形中,执行流形特征学习,得到流形特征转换核,其中,流形特征转换核用以使源项目数据与待测项目数据的分布更接近;
差异分布分析模块,用于分析嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据的分布差异,并得到分布对齐函数,其中,分布对齐函数用以对嵌入到流形后的源项目数据和嵌入到流形后的待测项目数据执行对齐操作;
分类器构建模块,用于对流形特征转换核与分布对齐函数进行整合,构建基于流形对齐的软件缺陷预测分类器f;
训练模块,用于对分类器f进行训练,直至收敛,得到训练好的分类器;
预测模块,用于利用训练好的分类器进行软件缺陷预测。
由于本发明实施例二所介绍的系统,为实施本发明实施例一中基于流形对齐的软件缺陷预测方法所采用的系统,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该系统的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的系统都属于本发明所欲保护的范围。
实施例三
基于同一发明构思,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现如实施例一中所述的方法。
由于本发明实施例三所介绍的计算机可读存储介质为实施本发明实施例一中基于流形对齐的软件缺陷预测方法所采用的计算机可读存储介质,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机可读存储介质的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的计算机可读存储介质都属于本发明所欲保护的范围。
实施例四
基于同一发明构思,本申请还提供了一种计算机设备,包括存储、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述程序时实现实施例一中的方法。
由于本发明实施例四所介绍的计算机设备为实施本发明实施例一中基于流形对齐的软件缺陷预测方法所采用的计算机设备,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机设备的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的计算机设备都属于本发明所欲保护的范围。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。