发布信息

一种基于基因表达式编程算法的软件缺陷预测方法

作者:admin      2022-08-31 16:22:15     403



计算;推算;计数设备的制造及其应用技术1.本发明涉及软件缺陷技术领域,尤其涉及一种基于基因表达式编程算法的软件缺陷预测方法。背景技术:2.随着软件规模的不断扩大和复杂度的不断提高,软件的质量也成为了关注的焦点。而隐含缺陷的软件在部署后可能会产生一些意料之外的结果或行为,严重的时候会给企业带来巨额的经济损失。软件的缺陷威胁着软件的质量,如何在软件开发的早期检测出软件的缺陷也成为了研究的重点。软件缺陷预测技术能够在软件开发过程中使用软件模块的度量元数据来提前发现与锁定缺陷模块,从而合理地分配有限的资源,为软件质量提供保障。可以参见有关文献:nam j.survey on software defect prediction[j].department of computer science and engineering,the hong kong university of science and technology,tech.rep,2014.[0003]软件的隐含缺陷被检测出的时间越晚,修复这些缺陷的代价也越高,尤其在软件部署后,修复和检测的代价也急剧增加。因此,如果能在项目开发的早期阶段,预先识别出项目内的潜在缺陷程序模块,就能对这类程序模块分配足够的测试资源以确保可以进行重复的代码审查或单元测试,最终达到提高软件产品质量的目的。可以参见有关文献:宫丽娜,姜淑娟,姜丽.软件缺陷预测技术研究进展[j].软件学报,2019,30(10):3090-3114.[0004]目前,在软件缺陷预测技术中,对于预测模型的建立,许多经典算法被用来作为软件缺陷预测的分类器,如支持向量机、决策表、贝叶斯网络。此外,软件缺陷预测还采用了许多智能优化算法来提高预测精度,包括经典的粒子群优化算法、差分进化算法、萤火虫算法等。可以参见有关文献:li z,jing x y,zhu x.progress on approaches to software defect prediction[j].iet software,2018,12(3):161-175.[0005]基因表达式编程算法是ferreira在2001年提出的,是一种基于基因型和表现型的新型演化算法。它即保留了遗传算法的基因编码方式,又结合了遗传编程独特的树状结构。因此,基因表达式编程算法具有简单便捷和灵活多变的特点,并被广泛地应用于回归问题、数据挖掘和实际问题的识别当中。然而,标准的基因表达式编程算法也存在着收敛速率低、早熟和泛化能力差等诸多不足。这容易导致基因表达式编程算法应用于复杂的实际问题时,求解精度差且计算时间长。技术实现要素:[0006]本发明主要是针对现有技术的不足,提出一种基于领域变异的基因表达式编程算法的软件缺陷预测方法。该方法可以很好地解决上述问题。[0007]本发明使用基于领域变异的基因表达式编程算法对软件缺陷预测模型的构建问题进行优化设计。通过提高标准基因表达式编程算法的收敛速度和精度,从而提高对软件缺陷预测的精度。演化计算过程中,通过将领域空间的概念引入到基因表达式编程算法中,使得算法中的种群多样性增加,从而提高算法的泛化能力。[0008]本发明的上述技术问题主要是通过下述技术方案得以解决的:[0009]一种基于领域变异的基因表达式编程算法的软件缺陷预测方法,包括如下步骤:[0010]步骤1,用户自定义初始化参数,包括种群大小np,目标函数最大评价次数maxfes,头部长度h,尾部长度l=h*(n-1)+1(n为函数集中所有函数的最大操作数),变异概率pm,is插串概率pis,ris插串概率pris,基因变换概率pgt,单点重组概率p1r,两点重组概率p2r,基因重组概率pgr。此外,还需设置基因的个数gsize,is插串和ris插串最小长度,函数符号集f,终止符号集t,连接符号,领域大小k;[0011]步骤2,将软件缺陷数据集分成训练数据集和测试数据集;[0012]步骤3,令当前目标函数评价次数fes=0;[0013]步骤4,随机产生字符编码的初始化种群p{x1,x2…xnp},其中xi是1行gsize*(h+l)列的矩阵,矩阵中每一个基因的头部取值范围可以是函数符号集f和终止符号集t中的任意符号,而每一个基因的尾部取值范围只能是终止符号集t中的符号;[0014]步骤5,通过树状结构对种群p中的所有个体xi进行编码,由字符串转变成表达式树;[0015]步骤6,通过中序遍历对种群p中的所有个体xi的表达式树进行解码,表达出每个个体xi所对应的程序模型;[0016]步骤7,计算每个个体xi的适应度值f(xi);[0017]步骤8,通过轮盘赌选择机制,从种群p中选择出优生个体xi构建成优生种群p*,每个个体xi被选中的概率pi计算公式如下:[0018][0019]步骤9,把种群p替换成优生种群p*;[0020]步骤10,执行基于领域变异策略的基因表达式编程算法对种群p进行演化计算,产生新的种群p;[0021]步骤11,重复步骤5至步骤10直至评价次数fes达到max_fes后结束,计算结束得到的最优个体即为软件缺陷预测的模型;[0022]步骤12,通过测试集对模型进行测试,得到最终预测模型;[0023]步骤13,将获取到的实况软件缺陷数据资料输入到最终预测模型中进行预测。[0024]在上述的一种基于基因表达式编程算法的软件缺陷预测方法,所述步骤7的具体操作步骤如下:[0025]步骤7.1,将训练集的数据输入到个体xi对应的模型中,得到一个计算值“y”。如果计算值“y”大于或等于舍入阈值,则被分类为“1”,否则为“0”。其中,软件有缺陷被标记为“1”,软件无缺陷被标记为“0”;[0026]步骤7.2,将预测结果和真实结果进行比对,统计出真阴性(tni)、真阳性(tpi)、假阴性(fni)、假阳性(fpi)的数量;[0027]步骤7.3,计算适应度值,适应度值函数sspni定义如下:[0028]sspni=sni×spi×ppvi×npvi[0029]其中,sni、spi、ppvi、npvi分别为敏感性、特异性、阳性识别值、阴性识别值,定义公式如下:[0030][0031][0032][0033][0034]步骤7.4,评估次数fes=fes+1;[0035]步骤7.5,转到步骤8。[0036]在上述的一种基于基因表达式编程算法的软件缺陷预测方法,所述步骤10的具体操作步骤如下:[0037]步骤10.1,计数器i=1,其中i表示当前个体下标;[0038]步骤10.2,如果i大于种群数np,则转到步骤10.6,否则执行以下步骤;[0039]步骤10.3,令j为当前领域内个体的下标,取值范围为[i-k,i+k],如果j等于0,则令j等于np,如果j《1或者j》np,则用以下公式对j进行取值:[0040]j=(j+np)%np[0041]步骤10.4,从当前领域ki中随机选择一个个体xi;[0042]步骤10.5,通过变异概率pm选择出变异的基因位;[0043]步骤10.6,如果变异的基因位是头部,则从函数符号集f或终止符号集t中随机选择一个符号将之替换,如果是尾部,则只从终止符号集t中选择;[0044]步骤10.7,依据各遗传操作的概率,依次进行以下操作:①插串,包括非根插串、根插串和基因变换;②重组,包括单点重组、两点重组和基因重组;[0045]步骤10.8,转到步骤11。[0046]由于采用了上述技术方案,本发明提供的一种基于基因表达式编程算法的软件缺陷预测方法,该方法主要解决标准的基因表达式编程算法上的性能较差的缺点,从而提高算法对软件缺陷预测的精度,可用于缺陷预测技术领域中软件缺陷的预测。附图说明[0047]为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0048]图1是本发明基于领域变异的基因表达式编程算法流程图。[0049]图2是本发明领域概念模型图。具体实施方式[0050]为使本发明的技术方案和优点更加清楚,下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚完整的描述:[0051]如图1所示的一种基于基因表达式编程算法的软件缺陷预测方法,具体采用如下实施例,本实施例以文献(iqbal a,aftab s,ali u,et al.performance analysis of machine learning techniques on software defect prediction using nasa datasets[j].int.j.adv.comput.sci.appl,2019,10(5):300-308.)中描述的nasa软件缺陷数据集为例,该问题描述如下:[0052]决策变量:[0053]tp,真阳性的数量;[0054]tn,真阴性的数量;[0055]fn,假阴性的数量;[0056]fp,假阳性的数量;[0057]目标函数:[0058][0059][0060][0061][0062][0063]其中,i表示的是当前个体;fitness为适应度值函数;precision为查准率;recall是召回率;f-measurei为召回率和精确度之间的权衡;mcci表示实际分类与预测分类之间的相关系数。[0064]根据以上nasa软件缺陷数据集的描述,如图2所示,本发明的具体实施步骤如下:[0065]步骤1,初始化各类参数:种群大小np=100,基因个数gsize=5,头部长度h=8,尾部长度l=9,最大迭代次数gmax=200,变异概率pm=0.044,is插串概率pis=0.1,ris插串概率pris=0.1,基因变换概率pgt=0.1,单点重组概率p1r=0.3,两点重组概率p2r=0.3,基因重组概率pgr=0.1,函数符号集f设置为{+-*/exp sqrt log logi inv},终止符号集t设置为{ai},ai为每个数据集对应的度量元,连接符号设置为{+},领域大小k=3;[0066]步骤2,将软件缺陷数据集分成训练数据集和测试数据集;[0067]步骤3,令当前目标函数评价次数fes=0;[0068]步骤4,随机产生字符编码的初始化种群p{x1,x2…xnp},其中xi是1行85列的矩阵,矩阵中每一个基因的头部取值范围可以是函数符号集f{+-*/exp sqrt log logi inv}和终止符号集t设置为{ai}中的任意符号,而每一个基因的尾部取值范围只能是终止符号集t中的符号;[0069]步骤5,通过树状结构对种群p{x1,x2…xnp}中的所有个体xi进行编码,由字符串转变成表达式树;[0070]步骤6,通过中序遍历对种群p{x1,x2…xnp}中的所有个体xi的表达式树进行解码,表达出每个个体xi所对应的程序模型;[0071]步骤7,计算每个个体xi的适应度值f(xi),详细步骤描述如下:[0072]步骤7.1,将训练集的数据输入到个体xi对应的模型中,得到一个计算值“y”。如果计算值“y”大于或等于舍入阈值,则被分类为“1”,否则为“0”。其中,软件有缺陷被标记为“1”,软件无缺陷被标记为“0”;[0073]步骤7.2,将预测结果和真实结果进行比对,统计出真阴性(tni)、真阳性(tpi)、假阴性(fni)、假阳性(fpi)的数量;[0074]步骤7.3,根据上述问题的目标函数,计算适应度值函数fitness(i);[0075]步骤7.4,评估次数fes=fes+1;[0076]步骤8,通过轮盘赌选择机制,从种群p{x1,x2…xnp}中选择出优生个体xi构建成优生种群p*;[0077]步骤9,把种群p{x1,x2…xnp}替换成优生种群p*;[0078]步骤10,执行基于领域变异策略的基因表达式编程算法对种群p进行演化计算,产生新的种群p,详细步骤如下:[0079]步骤10.1,计数器i=1,其中i表示当前个体下标;[0080]步骤10.2,如果i大于种群数np,则转到步骤10.7,否则执行以下步骤;[0081]步骤10.3,令j为当前领域内个体的下标,取值范围为[i-3,i+3],如果j等于0,则令j等于np,如果j《1或者j》np,则用以下公式对j进行取值:[0082]j=(j+np)%np[0083]步骤10.4,从当前领域ki中随机选择一个个体xj;[0084]步骤10.5,通过变异概率pm选择出变异的基因位;[0085]步骤10.6,如果变异的基因位是头部,则从函数符号集f或终止符号集t中随机选择一个符号将之替换,如果是尾部,则只从终止符号集t中进行选择;[0086]步骤10.7,依据各遗传操作的概率,依次进行以下操作:①插串,包括非根插串、根插串和基因变换;②重组,包括单点重组、两点重组和基因重组;[0087]步骤11,重复步骤5至步骤10直至评价次数fes达到max_fes后结束,计算结束得到的最优个体即为对软件缺陷预测的模型;[0088]步骤12,通过测试集对模型进行测试,得到最终预测模型;[0089]步骤13,将获取到的实况软件缺陷数据输入到最终预测模型中进行预测,得到预测结果。[0090]本发明所采用的基因表达式编程算法为现有的技术,更详细的内容可参考基因表达式编程算法作者candida ferreira的原著《gene expression programming:a new adaptive algorithm for solving problems》,以及彭昱忠等人所编著的《基因表达式编程算法原理与应用》。[0091]以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部