一种基于配置项性能期望的软件性能缺陷检测方法技术

技术编号:25479213 阅读:24 留言:0更新日期:2020-09-01 23:00
本发明专利技术公开了一种基于配置项性能期望的软件性能缺陷检测方法,目的是提供一种有效检测出配置项相关性能缺陷的方法。技术方案为:利用配置项性能期望构建由配置项期望预测模块、测试样例生成模块、性能缺陷检测模块构成的性能缺陷检测系统;对配置项期望预测模块进行训练;读入待检测软件由配置项期望预测模块预测配置项的性能期望,测试样例生成模块根据性能期望和软件测试集生成测试样例,性能缺陷检测模块执行测试样例并检测性能期望和实际性能是否相符,若不相符则输出性能缺陷。采用本发明专利技术既能有效检测出软件性能缺陷,又能为软件社区检测出新的性能缺陷,且采用本发明专利技术可有效判别无缺陷软件和有缺陷软件的性能差异。

【技术实现步骤摘要】
一种基于配置项性能期望的软件性能缺陷检测方法
本专利技术涉及大型软件中的性能缺陷检测领域,具体涉及一种基于配置项性能期望的软件性能缺陷检测方法。
技术介绍
随着社会的不断进步,软件系统已经在各个领域得到广泛应用,在现代社会中扮演着举足轻重的角色,发挥了重要的作用。随着软件系统的不断发展,人们对软件的可靠性,安全性,性能(软件运行速度)要求越来越高,导致软件规模不断增大,软件复杂度不断提升。例如,Hadoop分布式开源软件的2.8.0版本,源码文件数量超过8000,代码总行数接近千万。同时,软件系统提供更多更加灵活的配置项以使用户根据需求配置软件。例如,Apachehttpd软件中共有个1000多个配置项,MySQL中有800多个配置项。且非功能属性的所占的比例日益增加,这些配置项与计算资源(如CPU、内存等)、性能优化策略密切相关。同时,随着软件规模不断增大,提高软件性能是软件演化和维护最重要的任务之一。XueHan等人在ESEM2016发表的文章“AnEmpiricalStudyonPerformanceBugsforHighlyConfigurableSoftwareSystems(高可配置软件系统中的性能缺陷实证研究)”表明:配置项也成为引发软件性能问题的主要原因之一,比例高达59%。在对148家企业的调查中,92%的企业认为提高软件性能是软件发展过程中最重要的任务之一。近年来,软件配置项相关的代码缺陷导致的软件性能问题造成了巨大的商业损失。针对软件性能问题,现有技术主要采用两类方法对其进行检测。第一类方法,如DuShen等人在ISSTA2015发表的“AutomatingPerformanceBottleneckDetectionusingSearch-BasedApplicationProfiling(一种基于搜索和profiling的性能缺陷自动检测方法)”,主要基于profiler等性能瓶颈诊断工具生成使软件运行缓慢的测试用例,并将执行该用例耗时最长的函数作为性能缺陷报告给开发者。虽然此类方法检测性能缺陷的覆盖率较高,但会存在大量误报。原因是测试用例执行缓慢可能并非由于性能缺陷导致,而是因为测试用例本身所需的时间较长。即,该类方法缺乏有效的性能测试预言(TestOracle:Incomputing,softwareengineering,andsoftwaretesting,atestoracle(orjustoracle)isamechanismfordeterminingwhetheratesthaspassedorfailed.测试预言:在计算机、软件、软件测试领域,测试预言是判断一个测试是否通过测试的标准)。第二类方法,如AdrianNistor等人在ICSE2013发表的“Toddler:DetectingPerformanceProblemsviaSimilarMemory-AccessPatterns(通过相似的内存读写模式检测性能缺陷)”,通过总结循环结构中的性能缺陷代码模式和变量读取模式,匹配待测软件中的性能缺陷。此类方法基于缺陷代码模式构建测试预言,能够有效减少性能故障的误报。然而,循环结构中的性能缺陷仅占一般性能缺陷的少量比例,因此该类方法局限于检测某种特定类型的故障(如循环结构中的缺陷),且经验证,该类方法仅能检测出9.8%配置项相关的性能故障。综上,如何构建低误报、高覆盖的性能测试预言,并自动化生成相应的测试样例,以有效、全面地检测软件性能缺陷是本领域技术人员正在探讨的热点问题。
技术实现思路
本专利技术要解决的技术问题是提供一种基于配置项性能期望的软件性能缺陷检测方法。此方法利用软件配置项性能期望构建测试预言(即当软件实际性能与配置项性能期望不符时,则存在性能缺陷),同时自动预测待测软件的测试预言;基于测试预言,自动生成测试样例,有效检测出配置项相关的性能缺陷。为解决上述技术问题,本专利技术的技术方案为:首先,利用HeHaochen在ESEC/FSE2019发表的“Tuningbackfired?not(always)yourfault:understandinganddetectingconfiguration-relatedperformancebugs(配置调节适得其反?不总是你的错!理解并检测配置相关的性能缺陷)”所述的配置项性能期望构建由配置项期望预测模块、测试样例生成模块、性能缺陷检测模块构成的性能缺陷检测系统;然后,读入人工标记了配置项期望的训练数据集,对配置项期望预测模块进行训练;最后读入待检测软件(包括软件、软件自带测试集、软件配置项用户手册),由配置项期望预测模块预测配置项的性能期望并发送到测试样例生成模块和性能缺陷检测模块,测试样例生成模块根据性能期望和软件测试集生成测试样例并发送到性能缺陷检测模块,性能缺陷检测模块执行测试样例并检测性能期望和实际性能是否相符,若不相符则输出性能缺陷。本专利技术包括以下步骤:第一步,构建性能缺陷检测系统,性能缺陷检测系统由配置项期望预测模块、测试样例生成模块、性能缺陷检测模块构成。配置项期望预测模块是一个加权投票分类器,与测试样例生成模块、性能缺陷检测模块相连,从待检测软件的配置项用户手册读取配置项的描述、取值范围,对待预测配置项的性能期望进行预测,得到配置项的性能期望标签(用标签表示性能期望的类别),将配置项的性能期望标签发送给测试样例生成模块和性能缺陷检测模块。测试样例生成模块与配置项期望预测模块、性能缺陷检测模块相连,从配置项期望预测模块接收配置项的性能期望标签,从待检测软件的测试集读取测试命令,根据配置项的性能期望标签和待检测软件测试集生成测试样例集合T。性能缺陷检测模块与配置项期望预测模块、测试样例生成模块相连,从测试样例生成模块接收测试样例集合T,从配置项期望预测模块接收配置项的性能期望标签,执行测试样例集合T中测试样例并检测配置项的性能期望标签所对应的期望性能和实际性能是否相符,若不相符则输出待检测软件的性能缺陷。第二步:训练性能缺陷检测系统的配置项期望预测模块。读入人工标注期望的配置项和配置项的官方文档描述,训练配置项期望预测模块。2.1构建训练集,方法是:从MySQL、MariaDB、Apache-httpd、Apache-Tomcat、Apache-Derby、H2、PostgreSQL、GCC、Clang、MongoDB、RocksDB、Squid共12款软件的1万多个配置项中随机选取N(其中,N≥500)个配置项。2.2根据N个配置项的官方文档描述,对配置项人工标注其性能期望标签,方法为:根据配置项(记为c)的文档描述(记为d),如果调节该配置项的目的是为了开启优化开关(即性能期望标签的含义是开启优化开关),则该配置项的性能期望标签为Label1;如果调节该配置项的目的是为了提升性能牺牲可靠性等非功能需求,则该配置项的性能期望标签为Label2;如果调节该配置项的目是为了分配更多计算机资源,则该配置项的性能期望标签为Label3;本文档来自技高网
...

【技术保护点】
1.一种基于配置项性能期望的软件性能缺陷检测方法,其特征在于包括以下步骤:/n第一步,构建性能缺陷检测系统,性能缺陷检测系统由配置项期望预测模块、测试样例生成模块、性能缺陷检测模块构成;/n配置项期望预测模块是一个加权投票分类器,与测试样例生成模块、性能缺陷检测模块相连,从待检测软件的配置项用户手册读取配置项的描述、取值范围,对待预测配置项的性能期望进行预测,得到配置项的性能期望标签,将配置项的性能期望标签发送给测试样例生成模块和性能缺陷检测模块;/n测试样例生成模块与配置项期望预测模块、性能缺陷检测模块相连,从配置项期望预测模块接收配置项的性能期望标签,从待检测软件的测试集读取测试命令,根据配置项的性能期望标签和待检测软件测试集生成测试样例集合T;/n性能缺陷检测模块与配置项期望预测模块、测试样例生成模块相连,从测试样例生成模块接收测试样例集合T,从配置项期望预测模块接收配置项的性能期望标签,执行测试样例集合T中测试样例并检测配置项的性能期望标签所对应的期望性能和实际性能是否相符,若不相符则输出待检测软件的性能缺陷;/n第二步:读入人工标注期望的配置项和配置项的官方文档描述,训练性能缺陷检测系统的配置项期望预测模块,方法是:/n2.1构建训练集,令训练集中共N个配置项,N≥500;/n2.2根据N个配置项的官方文档描述,对配置项人工标注其性能期望标签,方法为:根据配置项c的文档描述d,如果调节该配置项的目的是为了开启优化开关,则该配置项的性能期望标签为Label...

【技术特征摘要】
1.一种基于配置项性能期望的软件性能缺陷检测方法,其特征在于包括以下步骤:
第一步,构建性能缺陷检测系统,性能缺陷检测系统由配置项期望预测模块、测试样例生成模块、性能缺陷检测模块构成;
配置项期望预测模块是一个加权投票分类器,与测试样例生成模块、性能缺陷检测模块相连,从待检测软件的配置项用户手册读取配置项的描述、取值范围,对待预测配置项的性能期望进行预测,得到配置项的性能期望标签,将配置项的性能期望标签发送给测试样例生成模块和性能缺陷检测模块;
测试样例生成模块与配置项期望预测模块、性能缺陷检测模块相连,从配置项期望预测模块接收配置项的性能期望标签,从待检测软件的测试集读取测试命令,根据配置项的性能期望标签和待检测软件测试集生成测试样例集合T;
性能缺陷检测模块与配置项期望预测模块、测试样例生成模块相连,从测试样例生成模块接收测试样例集合T,从配置项期望预测模块接收配置项的性能期望标签,执行测试样例集合T中测试样例并检测配置项的性能期望标签所对应的期望性能和实际性能是否相符,若不相符则输出待检测软件的性能缺陷;
第二步:读入人工标注期望的配置项和配置项的官方文档描述,训练性能缺陷检测系统的配置项期望预测模块,方法是:
2.1构建训练集,令训练集中共N个配置项,N≥500;
2.2根据N个配置项的官方文档描述,对配置项人工标注其性能期望标签,方法为:根据配置项c的文档描述d,如果调节该配置项的目的是为了开启优化开关,则该配置项的性能期望标签为Label1;如果调节该配置项的目的是为了提升性能牺牲可靠性等非功能需求,则该配置项的性能期望标签为Label2;如果调节该配置项的目是为了分配更多计算机资源,则该配置项的性能期望标签为Label3;如果调节该配置项的目的是为了开启软件额外功能,则该配置项的性能期望标签为Label4;如果调节该配置项与软件性能无关,则该配置项的性能期望标签为Label5;最终得到训练集,记为N1+N2+N3+N4+N5=N;N1、N2、N3、N4、N5分别为性能期望标签为Label1,Label2,Label3,Label4,Label5的配置项文档描述的个数;是训练集中性能期望标签为Labell的第il个配置项,是的文档描述,由单词组成,1≤l≤5,1≤il≤Nl;令中的单词总数为记为(单词1,单词2,…,单词…,单词);
2.3配置项期望预测模块预处理训练集,方法是:
2.3.1初始化变量l=1;
2.3.2初始化变量il=1;
2.3.3对进行预处理,方法是:
2.3.3.1令变量
2.3.3.2将单词转化为为单词的词性标签,为计算机领域同义词;
2.3.3.3若令转2.3.3.2;若则得到预处理后的为如下形式:(简记为转2.3.4;
2.3.4判断il是否等于Nl,若是,转2.3.5,否则令il=il+1,转2.3.3;
2.3.5判断l是否等于5,若是,转2.4,否则令l=l+1,转2.3.2;
2.4配置项期望预测模块挖掘频繁子序列,使用PrefixSpan算法分别对集合进行频繁子序列挖掘,得到5个频繁子序列集合:其中Q1,Q2,…,Ql,…,Q5为正整数,表示当l=1,2,…,5时,PrefixSpan算法从集合挖掘出的频繁子序列的个数;1≤q≤Ql;
2.5对P1,P2,…,P5中的所有频繁子序列计算置信度Confidence,方法是:
2.5.1初始化变量l=1;
2.5.2初始化变量q=1;
2.5.3计算频繁子序列p(l,q)的置信度Confidence(l,q):
Confidence(l,q)=(p(l,q)在集合中的匹配次数)/(p(l,q)在五个集合中的匹配次数之和),其中,若p(l,q)是的一个子序列,则判定p(l,q)与一次匹配;
2.5.4判断q是否等于Ql,若是,转2.5.5;若否,令q=q+1,转2.5.3;
2.5.5判断l是否等于5,若是,表示得到了P1,P2,…,P5中的所有频繁子序列的置信度,转2.6;若否,令l=l+1,转2.5.2;
2.6根据P1,P2,…,P5中的频繁子序列的置信度Confidence,对P1,P2,…,P5中的频繁子序列进行筛选,得到筛选后的频繁子序列集合P1',P2',P3',P4',P5';
2.7采用P1',P2',P3',P4',P5'对配置项期望预测模块进行训练,方法是:
2.7.1初始化:从P1',P2',P3',P4',P5'中分别随机选出100个频繁子序列,构成随机选出频繁子序列集合P1”,P2”,P3”,P4”,P5”;P1”,P2”,P3”,P4”,P5”中共包含500个频繁子序列,即:
{p(1,1),p(1,2),…,p(1,r),…,p(1,100)},…,{p(l,1),p(l,2),…,p(l,r),…,p(l,100)},…,{p(5,1),p(5,2),…,p(5,r),…,p(5,133)},1≤r≤100;
2.7.2分别计算P1”,P2”,P3”,P4”,P5”在训练数据集上的准确率Precision、召
回率Recall、准确率和召回率的调和平均数F-score:









2.7.3判断F-score最大值的估计累积分布函数值是否大于阈值δ,若大于,转2.8;若小于等于阈值δ,转2.7.1;
2.8配置项期望预测模块选取F-score最大时对应的P1”,P2”,P3”,P4”,P5”构建加权投票分类器,转第三步;
第三步,利用训练后的配置项期望预测模块为待检测软件生成性能期望标签集合L,将L发送给测试样例生成模块和性能缺陷检测模块,方法是:
训练后的配置项期望预测模块从待检测软件的配置项用户手册读取配置项描述,加权投票分类器对所有待测配置项C={c1,c2,…,cz,…,cN'}的性能期望进行预测,得到性能期望标签集合L=[Lab1,Lab2,…,Labz,…,LabN′],其中,1≤z≤N′,Labz∈{Label1,Label2,Label3,Label4,Label5,null},N′为配置项用户手册中配置项的个数;将L发送给测试样例生成模块和性能缺陷检测模块;
第四步,测试样例生成模块为待检测软件生成测试样例集合T,并将T发送给性能缺陷检测模块,方法是:
4.1测试样例生成模块对C中的软件配置项的语法类型和取值范围进行提取,提取出的语法类型分为四类:数值类型、布尔类型、枚举类型、字符串类型;
4.2测试样例生成模块为配置项集合C={c1,c2,…,cz,…,cN'}生成待测值集合V,V={V1,V2,…,Vz,…,VN'},其中为配置项cz的一个取值,Kz为测试样例生成模块为cz生成的值的个数;
4.3对V1,V2,…,Vz,…,VN'取笛卡尔积,得到笛卡尔积VCartesian=V1×V2×…×VN';
4.4测试样例生成模块基于性能测试工具生成测试命令,方法为:采用pair-wise方法对性能测试工具的参数进行抽样,然后将参数输入性能测试工具,输出测试命令,得到测试命令集合B={b1,b2,b3,…,by,…,bY},1≤y≤Y,Y为B中测试命令的个数;
4.5测试样例生成模块生成测试样例集合T,T=B×VCartesian={t1,t2,t3,…,ta,…,tW},1≤a≤W,ta为一个二元组,其中,的含义是:cz的取值为W为T中测试样例的个数,为c1的第u个可能取值,为cz的第h个可能取值,为c8′的第j个可能取值,1≤u≤K1,1≤h≤Kz,1≤j≤KN′,K1、Kz、KN′分别为Spex算法提取到的配置项c1、cz、cN′的可能取值的个数,且均为正整数;将测试样例集合T发送给性能缺陷检测模块;
第五步:性能缺陷检测模块根据T和L检测待测软件可执行文件的性能缺陷:
5.1性能缺陷检测模块执行T中的测试样例,得到测试样例的性能值,方法是:
5.1.1初始化变量a=1;
5.1.2性能缺陷检测模块重复执行每个测试样例A次,令变量repeat=1,A为正整数;
5.1.3性能缺陷检测模块将测试样例ta输入待检测软件,运行待检测软件,记录第repeat次输入ta运行得到的性能值设定检测性能值的默认性能指标为软件数据吞吐量;
5.1.4判定rep...

【专利技术属性】
技术研发人员:李姗姗廖湘科王戟董威何浩辰陈振邦陈立前贾周阳王腾
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:湖南;43

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

1