CN116126698B - 一种基于蜕变测试的运行时配置更新缺陷检测方法 - Google Patents

一种基于蜕变测试的运行时配置更新缺陷检测方法 Download PDF

Info

Publication number
CN116126698B
CN116126698B CN202211700469.7A CN202211700469A CN116126698B CN 116126698 B CN116126698 B CN 116126698B CN 202211700469 A CN202211700469 A CN 202211700469A CN 116126698 B CN116126698 B CN 116126698B
Authority
CN
China
Prior art keywords
software
configuration item
test
metamorphic
test case
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211700469.7A
Other languages
English (en)
Other versions
CN116126698A (zh
Inventor
李姗姗
王腾
郑思
贾周阳
董威
陈振邦
陈立前
张元良
刘浩然
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202211700469.7A priority Critical patent/CN116126698B/zh
Publication of CN116126698A publication Critical patent/CN116126698A/zh
Application granted granted Critical
Publication of CN116126698B publication Critical patent/CN116126698B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于蜕变测试的运行时配置更新缺陷检测方法,目的是有效检测出运行时配置更新缺陷。技术方案为:构建由配置项分析与插桩模块、测试样例生成模块、缺陷检测模块构成的运行时配置更新缺陷检测系统;配置项分析与插桩模块根据目标配置项影响范围对软件源码进行插桩,将插桩后的软件发送到测试样例生成模块和缺陷检测模块;测试样例生成模块根据目标配置项和软件测试用例集生成蜕变测试用例,并发送到缺陷检测模块;缺陷检测模块执行蜕变测试并检查两种蜕变关系是否满足,若任意一种蜕变关系不满足则表示目标配置项存在运行时配置更新缺陷,并输出运行时配置更新缺陷集合。采用本发明能有效检测出软件运行时配置更新缺陷。

Description

一种基于蜕变测试的运行时配置更新缺陷检测方法
技术领域
本发明涉及大型软件中的缺陷检测领域,具体涉及一种基于蜕变测试的运行时配置更新缺陷检测方法。
背景技术
随着信息化水平的不断提高,大规模基础软件不断发展和完善,在现代社会中扮演着举足轻重的角色,发挥了重要的作用。软件系统通过引入不同类型的配置选项从而为用户使用提供灵活性。用户通常在软件启动前修改配置文件中配置项的值。软件系统在启动阶段加载这些配置项,并使之生效。然而,修改配置项的值需要重新启动软件。对于提供持久服务的软件系统,例如数据库服务器和Web服务器,重启软件系统是不切实际的。为了解决这个问题,现代软件系统支持在运行时更新配置项,而无需重新启动,也称运行时配置更新,如在最新版本的MySQL中64%的配置项支持运行时更新、Redis中84%的配置项支持运行时更新等。
由于开发人员缺乏对配置生命周期的全面理解,支持运行时配置更新也引入了一些新的问题和挑战,如陈旧的配置值未及时更新、配置更新引发的数据竞争等,引发了一系列功能失败和软件崩溃等问题。因此,研究运行时配置更新缺陷的检测方法十分必要。然而,运行时配置更新引发的故障并未引起开发人员的足够重视,在现有的软件测试集中缺乏对配置运行时更新的完整测试。另一方面,目前尚未有研究针对配置运行时更新缺陷进行系统调研,开发人员难以全面理解此类缺陷的出错根源和触发条件,这对检测和修复此类缺陷带来了困难。
针对配置相关的缺陷检测工作,现有技术主要采用两类方法对其进行检测。第一类方法,如Rui Zhong等人在CCS2020发表的“SQUIRREL:Testing Database ManagementSystems with Language Validity and Coverage Feedback(一种基于语言有效性和覆盖率反馈方法的数据库管理系统测试方法,以下简称背景技术一)”,主要基于Fuzzing测试用例自动生成方法,利用执行测试后的覆盖率反馈生成多种测试用例,并结合sanitizer技术检测软件系统的崩溃缺陷或特定类型的内存缺陷。虽然此类方法测试软件的代码覆盖率较高,但由于缺乏识别和检测软件功能性缺陷的能力,从而难以检测大部分运行时配置更新缺陷。即,该类方法缺乏有效的功能性测试预言(Test Oracle:In computing,softwareengineering,and software testing,a test oracle(or just oracle)is a mechanismfor determining whether a test has passed or failed.测试预言:在计算机、软件、软件测试领域,测试预言是判断一个测试是否通过测试的标准)。由于背景技术一在检测功能性缺陷的能力较差,而超过半数的运行时配置更新缺陷通常表现为功能性错误,因此通常采用其他技术检测运行时配置更新缺陷。
第二类方法,如John Toman等人在ECOOP 2016发表的“Staccato:Abug finderfor dynamic configuration updates(基于动态监控方法的运行时配置更新缺陷检测方法,以下简称背景技术二)”,通过动态监控配置项相关变量及其传播变量的值,并检查配置更新后监控变量的值是否变化,从而检测是否存在运行时配置更新缺陷。此类方法可以检测由于配置传播错误导致的运行时配置更新缺陷,但无法检测由于配置使用错误导致的运行时配置更新缺陷。因此,此类方法同样难以检测到大部分运行时配置更新缺陷。
综上,如何自动化生成配置更新的测试用例,构建针对配置更新的功能性测试预言,以有效、全面地检测配置运行时更新缺陷是本领域技术人员正在探讨的热点问题。
发明内容
本发明要解决的技术问题是针对目前配置相关的缺陷检测方法难以检测大部分运行时配置更新缺陷的问题,提供一种基于蜕变测试的运行时配置更新缺陷检测方法。此方法利用已提供的测试用例集,基于启发式方法生成蜕变测试用例,执行蜕变测试并检查两种蜕变关系是否满足,从而有效检测出运行时配置更新缺陷。
为解决上述技术问题,本发明的技术方案为:首先,构建运行时配置更新缺陷检测系统,运行时配置更新缺陷检测系统由配置项分析与插桩模块、测试用例生成模块、缺陷检测模块构成;然后,配置项分析与插桩模块读入待检测软件源码和目标配置项,根据目标配置项影响范围对软件源码进行插桩,并将插桩后的软件S发送给测试用例生成模块和缺陷检测模块;测试用例生成模块读入目标配置项和软件测试用例集,利用插桩后的软件S筛选测试用例并生成蜕变测试集合T,将T发送给缺陷检测模块;最后,缺陷检测模块在插桩后的软件S上执行蜕变测试集合T中的测试用例,并检查两种蜕变关系是否满足,若任意一种蜕变关系不满足则检测到运行时配置更新缺陷,待全部蜕变测试用例检查完成则输出缺陷集合。
本发明包括以下步骤:
第一步,构建运行时配置更新缺陷检测系统,运行时配置更新缺陷检测系统由配置项分析与插桩模块、测试用例生成模块、缺陷检测模块构成。
配置项分析与插桩模块与测试用例生成模块、缺陷检测模块相连,从待检测软件中读取软件源码和目标配置项(用户关心的软件的配置参数集合中的单个配置参数),利用软件源码对目标配置项进行污点分析,得到目标配置项的影响范围,并对软件源码中目标配置项影响的相关程序语句进行插桩,得到插桩后的软件S,将插桩后的软件S发送给测试用例生成模块和缺陷检测模块。
测试用例生成模块和配置项分析与插桩模块、缺陷检测模块相连,从配置项分析与插桩模块接收插桩后的软件S,读取软件测试用例集,利用软件S从软件测试用例集筛选合适的测试用例作为测试用例子集,根据插桩后的软件S和测试用例子集生成蜕变测试集合T。
缺陷检测模块和配置项分析与插桩模块、测试用例生成模块相连,从配置项分析与插桩模块接收插桩后的软件S,从测试用例生成模块接收蜕变测试集合T,在插桩后的软件S上执行蜕变测试集合T中测试用例并检查两种蜕变关系是否均满足,若任意一种蜕变关系不满足则表示目标配置项存在运行时配置更新缺陷,根据当前测试用例和测试输出,得到运行时配置更新缺陷集合D。
第二步:配置项分析与插桩模块利用软件源码对目标配置项进行污点分析,得到目标配置项的影响范围,并对软件源码中目标配置项影响的相关程序语句进行插桩,将插桩后的软件S发送给测试用例生成模块和缺陷检测模块,方法是:
2.1配置项分析与插桩模块读入待检测软件源码S0和目标配置项c;
2.2配置项分析与插桩模块使用Shulin Zhou等人在QRS-C 2016发表的文章“Confmapper:Automated variable finding for configuration items in source code(一种从软件源码中自动发现配置项初始变量的方法)”的Confmapper算法分析目标配置项c的初始程序变量,得到一个程序变量vc;
2.3配置项分析与插桩模块使用Marek Chalupa等人在ATVA 2020发表的文章“DG:analysis and slicing of LLVM bitcode(一种基于LLVM的程序分析和切片方法)”的DG(constructing dependence graphs for program analysis,基于构建依赖图的程序分析)算法,对程序变量vc进行污点分析,得到目标配置项c的影响范围集合P={p1,p2,…,pz,…,pM},其中pz为一个二元组,pz=[vz,lz],vz为目标配置项c的污点传播变量,lz为vz在源代码中位置,M为影响范围集合P中元素的个数;
2.4配置项分析与插桩模块利用目标配置项c的影响范围集合P,对软件源码进行插桩,得到插桩后的软件S。方法为:
2.4.1初始化S为软件源码S0
2.4.2初始化变量z=1;
2.4.3在S的代码位置lz处,插入打印程序变量vz的值的日志语句,简称日志打印语句lsz,即针对目标配置项c的插桩日志语句;
2.4.4若z=M,插桩结束,得到插桩后的软件S,转2.5;否则,令z=z+1,转2.4.3;
2.5将插桩后的软件S发送给测试用例生成模块和缺陷检测模块;
第三步,测试用例生成模块为待检测软件生成蜕变测试集合T,将T发送给缺陷检测模块,方法是:
3.1测试用例生成模块读入软件测试用例集T0,其中T0={t1,t2,…,tn,…,tN},N为软件测试用例集T0中测试用例个数,tn为T0中第n个测试用例,1≤n≤N;
3.2测试用例生成模块利用插桩后的软件S,根据执行测试用例后软件输出日志是否包含插桩日志,对T0进行筛选,得到用于生成蜕变测试的软件测试用例子集Ts,Ts={t1',t2',…,tn',…,tN'},其中N'为测试用例子集Ts中测试用例的个数,N'≤N,tn'为Ts中第n′个测试用例,1≤n′≤N'。筛选方法为:
3.2.1初始化软件测试用例子集
3.2.2初始化n=1,初始化n′=0;
3.2.3在S上执行测试用例tn,记录S的软件输出日志Ln
3.2.4若Ln包含针对目标配置项c的插桩日志语句,则令n′=n′+1,令tn'=tn,将tn'插入Ts
3.2.5若n=N,说明已筛选完T0中所有测试用例,得到Ts,此时的n′即为Ts中测试用例的个数,令N'=n′,转3.3;否则,令n=n+1,转3.2.3;
3.3测试用例生成模块使用Tianyin Xu等人在SOSP 2013发表的文章“Do NotBlame Users for Misconfigurations(不要责备用户的配置错误)”的Spex算法,对目标配置项c的语法类型、取值范围和语法格式进行提取。提取出的四类语法类型包括:布尔类型(bool)、枚举类型(enum)、字符串类型(string)、数值类型(int);提取出c的取值范围,即c的全部可能取值,将c的全部可能取值放入c的全部可能取值集合VC中,VC={p1,p2…,pt…,pT},p是c的第t个可能取值;提取出c的语法格式包括:路径格式、IP格式(互联网协议地址格式)、URL格式(统一资源定位符格式)和ID格式(身份识别码格式)。
3.4测试用例生成模块为目标配置项c生成待测合法值集合V1,V1={v1,v2,…,vk…,vK},vk为目标配置项c的第k个合法取值,K为测试用例生成模块为目标配置项c生成的合法值的个数。方法为:
3.4.1若c为布尔类型(bool),则令V1={0,1},转3.5;
3.4.2若c为枚举类型(enum),则令V1=VC,转3.5;
3.4.3若c为字符串类型(string),则令V1={sv1,sv2},其中sv1,sv2为满足c的语法格式的2个随机值,转3.5;
3.4.4若c为数值类型(int),则对c的值进行抽样,方法为:记3.3步Spex算法提取到的c的最小取值为Min,c的最大取值为Max,令V1={Min,10·Min,102·Min,10-2·Max,10-1·Max,Max},转3.5;
3.5测试用例生成模块为目标配置项生成待测非法值集合V2,其中V2={vv1,vv2…,vvk′…,vvK′},vvk′为目标配置项c的第k′个非法取值,K′为测试用例生成模块为目标配置项c生成的非法值的个数。方法为:
3.5.1若c为布尔类型(bool),则令V2={-1,2},转3.6;
3.5.2若c为枚举类型(enum),则令V2={nv1,nv2},其中nv1,nv2为不属于VC的2个随机值,转3.6;
3.5.3若c为字符串类型(string),则令V2={fv1,fv2},其中fv1,fv2为不满足c的语法格式的2个随机值,转3.6;
3.5.4若c为数值类型(int),则令V2={iv1,iv2},其中iv1,iv2为不属于c的合法取值范围的2个随机值,转3.6;
3.6测试用例生成模块为目标配置项c生成待测值集合V,V=V1∪V2,令集合V中元素个数为NV;
3.7测试用例生成模块为目标配置项c生成蜕变测试集合T,方法是:
3.7.1初始化蜕变测试集合初始化变量a=1;
3.7.2初始化变量y=1;
3.7.3初始化变量u1=1;
3.7.4初始化变量u2=1;
3.7.5若u1=u2,转3.7.7;若u1≠u2,转3.7.6;
3.7.6令将[mta,mt′a]插入到集合T中;令a=a+1;[mta,mt′a]为一组蜕变测试用例,mta为对目标配置项c执行非运行时更新的测试用例,mta为二元组,ty为Ts的第y个元素,1≤y≤N′,/>的含义是:在软件运行阶段将c的取值更新为/>为c的第u1个待测值,1≤u1≤NV;mt′a为对目标配置项c执行运行时更新的测试用例,mt′a为三元组,/>的含义是:在软件启动阶段c的取值为为c的第u2个待测值,1≤u2≤NV;
3.7.7若u2=NV,说明对c的运行阶段更新采样已遍历c的所有待测值,转3.7.8;否则,令u2=u2+1,转3.7.5;
3.7.8若u1=NV,说明对c的启动阶段采样已遍历c的所有待测值,转3.7.9;否则,令u1=u1+1,转3.7.4;
3.7.9若y=N′,说明已遍历完测试用例子集Ts,并得到蜕变测试集合T,此时的a即为T中元素个数,令蜕变测试集合T中蜕变测试用例组数W=a,T={[mt1,mt′1],[mt2,mt′2],[mt3,mt′3],…,[mta,mt′a],…,[mtw,mt′w]},1≤a≤W,转3.8;否则,令y=y+1,转3.7.3;
3.8将蜕变测试集合T发送给缺陷检测模块;
第四步:缺陷检测模块在插桩后的软件S上执行蜕变测试集合T,并检测目标软件的运行时配置更新缺陷:
4.1缺陷检测模块遍历执行T中的测试用例,得到蜕变测试集合的输出结果,方法是:
4.1.1初始化变量a=1;
4.1.2重新启动软件S,缺陷检测模块将mta输入插桩后的软件S,运行插桩后的软件S,记录输入mta后软件S的插桩日志输出rla和测试输出rta
4.1.3重新启动软件S,缺陷检测模块将mt′a输入软件S,运行插桩后的软件S,记录输入mt′a后软件S的插桩日志输出rl′a和测试输出rt′a
4.1.4判定a是否等于W,若是,记W次输出为蜕变测试集合的输出集合Out,Out={[rl1,rt1,rl′1,rt′1],…,[rla,rta,rl′a,rt′a],…,[rlW,rtW,rl′W,rt′W]},转4.2;否则令a=a+1,转4.1.2;
4.2缺陷检测模块根据Out检查T两种蜕变关系是否均满足,若任意一种蜕变关系不满足则表示目标配置项c存在运行时配置更新缺陷;并将目标配置项c与触发该缺陷的蜕变测试用例组合得到运行时配置更新缺陷集合D。其中D={[c,mt1',mt′1'],[c,mt2',mt′2'],…,[c,mth',mt′h'],…,[c,mtH',mt′H']},1≤h′≤H′,H′为集合D中元素个数,H′≤W。
蜕变关系1:对于第a组蜕变测试用例[mta,mt′a],执行非运行时更新的测试用例mta和运行时更新的测试用例mt′a时,配置项相关的程序变量的值(插桩日志输出)应当相同,即,rla等于rl′a
蜕变关系2:对于第a组蜕变测试用例[mta,mt′a],执行非运行时更新的测试用例mta和运行时更新的测试用例mt′a时,相同测试语句的测试输出应当相同,即,rta等于rt′a
检查蜕变关系的方法为:
4.2.1初始化集合初始化变量a=1,初始化变量h′=1;
4.2.2检查蜕变关系1是否满足:若rla等于rl′a,转4.2.3;否则,蜕变关系1不满足,转4.2.4;
4.2.3检查蜕变关系2是否满足:若rta等于rt′a,转4.2.5;否则,蜕变关系2不满足,转4.2.4;
4.2.4此时蜕变关系1或蜕变关系2不满足,表明软件存在一个与目标配置项c有关的运行时配置更新缺陷,且触发该缺陷的蜕变测试用例为[mta,mt′a],令mth'=mta,令mt′h=mt′a将[c,mth',mt′h']插入集合D中,转4.2.5;
4.2.5若a=W,说明已检查完T中全部蜕变测试用例,得到运行时配置更新缺陷集合D,此时D中元素个数H′=h′,D={[c,mt1',mt′1'],[c,mt2',mt′2'],…,[c,mth',mt′h'],…,[c,mtH',mt′H']},1≤h′≤H′,H′为集合D中元素个数,H′≤W;转4.3;否则令a=a+1,h′=h′+1,转4.2.2。
4.3如果集合D为空,则表示目标配置项c不存在运行时配置更新缺陷;如果D不为空,说明目标配置项c存在运行时配置更新缺陷,用户可以利用D中触发该缺陷的蜕变测试用例复现并分析此缺陷。对运行时配置更新缺陷检测完毕。
与现有技术相比,采用本发明能达到以下有益效果:
1、采用本发明能有效检测出历史的运行时配置更新缺陷。采用本发明在7款大型开源软件MySQL、MariaDB、PostgreSQL、Redis、Apache-httpd、Nginx、Squid中的56个历史的运行时配置更新缺陷中,成功检测出42个运行时配置更新缺陷。而已有工作(John Toman等人在ECOOP 2016发表的“Staccato:A bug finder for dynamic configuration updates”一种动态配置更新缺陷检测方法)仅能检测出15个运行时配置更新缺陷。
2、采用本发明能为软件社区(MySQL、Redis、PostgreSQL、MariaDB、Squid)检测出13个新的缺陷,并上报软件社区反馈给开发者确认,防止了潜在的因运行时配置更新缺陷可能导致的经济、用户损失。其中,为MySQL社区检测出7个新缺陷(缺陷ID为MySQL-105933,MySQL-105957,MySQL-105964,MySQL-105978,MySQL-106675,MySQL-106676,MySQL-106684);为Redis社区检测出1个新缺陷(缺陷ID为Redis-10119);为PostgreSQL社区检测出1个新缺陷(缺陷ID为PostgreSQL-17538);为MariaDB社区检测出2个新缺陷(缺陷ID为MariaDB-29076,MariaDB-29077);为Squid社区检测出2个新缺陷(缺陷ID为Squid-5224,Squid-5225)。
3、本发明基于蜕变测试的两种蜕变关系,可在软件发布前有效判别目标配置项是否存在运行时配置更新缺陷,具有良好的应用前景。
附图说明
图1是本发明的总体流程图;
图2是本发明第一步构建的运行时配置更新缺陷检测系统的逻辑结构图。
具体实施方式
下面结合附图对本发明进行说明。
如图1所示,本发明包括以下步骤:
第一步,构建运行时配置更新缺陷检测系统,运行时配置更新缺陷检测系统如图2所示,由配置项分析与插桩模块、测试用例生成模块、缺陷检测模块构成。
配置项分析与插桩模块与测试用例生成模块、缺陷检测模块相连,从待检测软件中读取软件源码和目标配置项(软件的配置参数集合中用户关心的单个配置参数简称为目标配置项),利用软件源码对目标配置项进行污点分析,得到目标配置项的影响范围,并对软件源码中目标配置项影响的相关程序语句进行插桩,得到插桩后的软件S,将插桩后的软件S发送给测试用例生成模块和缺陷检测模块。
测试用例生成模块和配置项分析与插桩模块、缺陷检测模块相连,从配置项分析与插桩模块接收插桩后的软件S,读取软件测试用例集,利用软件S从软件测试用例集筛选合适的测试用例作为测试用例子集,根据插桩后的软件S和软件测试用例子集生成蜕变测试集合T。
缺陷检测模块和配置项分析与插桩模块、测试用例生成模块相连,从配置项分析与插桩模块接收插桩后的软件S,从测试用例生成模块接收蜕变测试集合T,在插桩后的软件S上执行蜕变测试集合T中测试用例并检查两种蜕变关系是否均满足,若任意一种蜕变关系不满足则表示目标配置项存在运行时配置更新缺陷,根据当前测试用例和测试输出,得到运行时配置更新缺陷集合D。
第二步:配置项分析与插桩模块利用软件源码对目标配置项进行污点分析,得到目标配置项的影响范围,并对软件源码中目标配置项影响的相关程序语句进行插桩,将插桩后的软件S发送给测试用例生成模块和缺陷检测模块,方法是:
2.1配置项分析与插桩模块读入待检测软件源码S0和目标配置项c;
2.2配置项分析与插桩模块使用Shulin Zhou等人在QRS-C 2016发表的文章“Confmapper:Automated variable finding for configuration items in source code(一种从软件源码中自动发现配置项初始变量的方法)”的Confmapper算法分析目标配置项c的初始程序变量,得到一个程序变量vc;
2.3配置项分析与插桩模块使用Marek Chalupa等人在ATVA2020发表的文章“DG:analysis and slicing of LLVM bitcode(一种基于LLVM的程序分析和切片方法)”的DG(constructing dependence graphs for program analysis,基于构建依赖图的程序分析)算法,对程序变量vc进行污点分析,得到目标配置项c的影响范围集合P={p1,p2,…,pz,…,pM},其中pz为一个二元组,pz=[vz,lz],vz为目标配置项c的污点传播变量,lz为vz在源代码中位置,M为影响范围集合P中元素的个数;
2.4配置项分析与插桩模块利用目标配置项c的影响范围集合P,对软件源码进行插桩,得到插桩后的软件S。方法为:
2.4.1初始化S为软件源码S0
2.4.2初始化变量z=1;
2.4.3在S的代码位置lz处,插入打印程序变量vz的值的日志语句,简称日志打印语句lsz,即针对目标配置项c的插桩日志语句;
2.4.4若z=M,转2.5;否则,令z=z+1,转2.4.3;
2.5将插桩后的软件S发送给测试用例生成模块和缺陷检测模块;
第三步,测试用例生成模块为待检测软件生成蜕变测试集合T,将T发送给缺陷检测模块,方法是:
3.1测试用例生成模块读入软件测试用例集T0,其中T0={t1,t2,…,tn,…,tN},N为软件测试用例集T0中测试用例个数,tn为T0中第n个测试用例,1≤n≤N;
3.2测试用例生成模块利用插桩后的软件S,根据执行测试用例后软件输出日志是否包含插桩日志,对T0进行筛选,得到用于生成蜕变测试的软件测试用例子集Ts,Ts={t1',t2',…,tn',…,tN'},其中N'为测试用例子集Ts中测试用例的个数,N'≤N,tn'为Ts中第n′个测试用例,1≤n′≤N'。筛选方法为:
3.2.1初始化软件测试用例子集
3.2.2初始化n=1,初始化n′=0,;
3.2.3在S上执行测试用例tn,记录S的软件输出日志Ln
3.2.4若Ln包含针对目标配置项c的插桩日志语句,则令n′=n′+1,令tn'=tn,将tn'插入Ts;令n′=n′+1;
3.2.5若n=N,说明已筛选完T0中所有测试用例,得到Ts,此时的n′即为Ts中测试用例的个数,令N'=n′,转3.3;否则,令n=n+1,转3.2.3;
3.3测试用例生成模块使用Tianyin Xu等人在SOSP 2013发表的文章“Do NotBlame Users for Misconfigurations(不要责备用户的配置错误)”的Spex算法,对目标配置项c的语法类型、取值范围和语法格式进行提取。提取出的四类语法类型包括:布尔类型(bool)、枚举类型(enum)、字符串类型(string)、数值类型(int);提取出c的取值范围,即c的全部可能取值,将c的全部可能取值放入c的全部可能取值集合VC中,VC={p1,p2…,pt…,pT},pt是c的第t个可能取值;提取出c的语法格式包括:路径格式、IP格式(互联网协议地址格式)、URL格式(统一资源定位符格式)和ID格式(身份识别码格式)。
3.4测试用例生成模块为目标配置项c生成待测合法值集合V1,V1={v1,v2,…,vk…,vK},vk为目标配置项c的第k个合法取值,K为测试用例生成模块为目标配置项c生成的合法值的个数。方法为:
3.4.1若c为布尔类型(bool),则令V1={0,1},转3.5;
3.4.2若c为枚举类型(enum),则令V1=VC,转3.5;
3.4.3若c为字符串类型(string),则令V1={sv1,sv2},其中sv1,sv2为满足c的语法格式的2个随机值,转3.5;
3.4.4若c为数值类型(int),则对c的值进行抽样,方法为:记Spex算法提取到的c的最小取值为Min,c的最大取值为Max,令V1={Min,10·Min,102·Min,10-2·Max,10-1·Max,Max},转3.5;
3.5测试用例生成模块为目标配置项生成待测非法值集合V2,其中V2={vv1,vv2…,vvk′…,vvK′},vvk′为目标配置项的第k′个非法取值,K′为测试用例生成模块为目标配置项生成的非法值的个数。方法为:
3.5.1若c为布尔类型(bool),则令V2={-1,2},转3.6;
3.5.2若c为枚举类型(enum),则令V2={nv1,nv2},其中nv1,nv2为不属于VC的2个随机值,转3.6;
3.5.3若c为字符串类型(string),则令V2={fv1,fv2},其中fv1,fv2为不满足c的语法格式的2个随机值,转3.6;
3.5.4若c为数值类型(int),则令V2={iv1,iv2},其中iv1,iv2为不属于的c的合法取值范围的2个随机值,转3.6;
3.6测试用例生成模块为目标配置项c生成待测值集合V,V=V1∪V2,令集合V中元素个数为NV;
3.7测试用例生成模块为目标配置项c生成蜕变测试集合T,方法为:
3.7.1初始化蜕变测试集合初始化变量a=1;
3.7.2初始化变量y=1;
3.7.3初始化变量u1=1;
3.7.4初始化变量u2=1;
3.7.5若u1=u2,转3.7.7;若u1≠u2,转3.7.6;
3.7.6令将[mta,mt′a]插入到集合T中,令a=a+1;[mta,mt′a]为一组蜕变测试用例,mta为对目标配置项c执行非运行时更新的测试用例,mta为二元组,ty为Ts的第y个元素,1≤y≤N′,/>的含义是:在软件运行阶段将c的取值更新为/>为c的第u1个待测值,1≤u1≤NV;mt′a为对目标配置项c执行运行时更新的测试用例,mt′a为三元组,/>的含义是:在软件启动阶段c的取值为为c的第u2个待测值,1≤u2≤NV;
3.7.7若u2=NV,说明对c的运行阶段更新采样已遍历c的所有待测值,转3.7.8;否则,令u2=u2+1,转3.7.5;
3.7.8若u1=NV,说明对c的启动阶段采样已遍历c的所有待测值,转3.7.9;否则,令u1=u1+1,转3.7.4;
3.7.9若y=N′,说明已遍历完测试用例子集Ts,并得到蜕变测试集合T,此时的a即为T中元素个数,令蜕变测试集合T中蜕变测试用例组数W=a,T={[mt1,mt′1],[mt2,mt′2],[mt3,mt′3],…,[mta,mt′a],…,[mtw,mt′w]},1≤a≤W,转3.8;否则,令y=y+1,转3.7.3;
3.8将蜕变测试集合T发送给缺陷检测模块;
第四步:缺陷检测模块在插桩后的软件S上执行蜕变测试集合T,并检测目标软件的运行时配置更新缺陷:
4.1缺陷检测模块遍历执行T中的测试用例,得到蜕变测试集合的输出结果,方法是:
4.1.1初始化变量a=1;
4.1.2重新启动软件S,缺陷检测模块将mta输入插桩后的软件S,运行插桩后的软件S,记录输入mta后软件S的插桩日志输出rla和测试输出rta
4.1.3重新启动软件S,缺陷检测模块将mt′a输入软件S,运行插桩后的软件S,记录输入mt′a后软件S的插桩日志输出rl′a和测试输出rt′a
4.1.4判定a是否等于W,若是,记W次输出为蜕变测试集合的输出集合Out,Out={[rl1,rt1,rl′1,rt′1],…,[rla,rta,rl′a,rt′a],…,[rlW,rtW,rl′W,rt′W]},转4.2;否则令a=a+1,转4.1.2;
4.2缺陷检测模块根据Out检查T两种蜕变关系是否均满足,若任意一种蜕变关系不满足则表示目标配置项c存在运行时配置更新缺陷;并将目标配置项c与触发该缺陷的蜕变测试用例组合得到运行时配置更新缺陷集合D。其中D={[c,mt1',mt′1'],[c,mt2',mt′2'],…,[c,mth',mt′h'],…,[c,mtH',mt′H']},1≤h′≤H′,H′为集合D中元素个数,H′≤W。
蜕变关系1:对于第a组蜕变测试用例[mta,mt′a],执行非运行时更新的测试用例mta和运行时更新的测试用例mt′a时,配置项相关的程序变量的值(插桩日志输出)应当相同,即,rla等于rl′a
蜕变关系2:对于第a组蜕变测试用例[mta,mt′a],执行非运行时更新的测试用例mta和运行时更新的测试用例mt′a时,相同测试语句的测试输出应当相同,即,rta等于rt′a
检查蜕变关系的方法为:
4.2.1初始化集合初始化变量a=1,初始化变量h′=1;
4.2.2检查蜕变关系1是否满足:若rla等于rl′a,转4.2.3;否则,蜕变关系1不满足,转4.2.4;
4.2.3检查蜕变关系2是否满足:若rta等于rt′a,转4.2.5;否则,蜕变关系2不满足,转4.2.4;
4.2.4此时蜕变关系1或蜕变关系2不满足,表明软件存在一个与目标配置项c有关的运行时配置更新缺陷,且触发该缺陷的蜕变测试用例为[mta,mt′a],令mth'=mta,令mt′h=mt′a将[c,mth',mt′h']插入集合D中,转4.2.5;
4.2.5若a=W,说明已检查完T中全部蜕变测试用例,得到运行时配置更新缺陷集合D,此时D中元素个数H′=h′,D={[c,mt1',mt′1'],[c,mt2',mt′2'],…,[c,mth',mt′h'],…,[c,mtH',mt′H']},1≤h′≤H′,H′为集合D中元素个数,H′≤W;转4.3;否则令a=a+1,h′=h′+1,转4.2.2。
4.3如果集合D为空,则表示目标配置项c不存在运行时配置更新缺陷;如果D不为空,说明目标配置项c存在运行时配置更新缺陷,用户可以利用D中触发该缺陷的蜕变测试用例复现并分析此缺陷。对运行时配置更新缺陷检测完毕。
为了验证本发明的效果,在一台Ubuntu18.04操作系统,搭载8核Intel Core i7-9700K,32GB内存的计算机上开展本发明与背景技术的对比实验。主要编码语言为Python2.7和C语言。实验选择MySQL、MariaDB、PostgreSQL、Redis、Apache-httpd、Nginx、Squid七款软件作为目标软件进行评估。为验证本发明检测历史缺陷能力,本实验从七款软件的缺陷追踪网站中,使用关键词搜索得到56个历史的运行时配置更新缺陷作为评估范围。由于背景技术一在检测运行时配置更新缺陷效果上远不及背景技术二,因此仅和背景技术二进行比较。结果如表1所示,实验证明,本发明与背景技术二相比,在执行相同的运行时间下,可检测出更多的运行时配置更新缺陷。其中本发明检测出42个缺陷,背景技术二仅检测出15个缺陷,说明本发明比背景技术二的检测准确性和检测效率更高。
表1.本发明与背景技术二的检测历史缺陷能力对比
目标软件 历史缺陷数量 本发明检测缺陷数量 背景技术二检测缺陷数量
MySQL 15 12 7
Redis 13 13 1
PostgreSQL 5 3 1
MariaDB 14 10 4
Nginx 3 1 0
Squid 2 1 2
Apache-httpd 4 2 0
执行时间 - 471小时 471小时
总和 56 42 15
为了验证本发明检测未知缺陷(即历史上从未被发现的缺陷)的能力,在上述实验环境下,从七款软件的官网获取软件的最新版本,对MySQL-v5.7.30、MariaDB-v10.9.1、PostgreSQL-14.2、Redis-6.0、Apache-httpd-v 2.4.54、Nginx-v1.21.5、Squid-5.6进行评估。结果如表2所示,采用本发明能为软件社区(MySQL、Redis、PostgreSQL、MariaDB、Squid)检测出13个新的缺陷,并已上报软件社区反馈给开发者,除Squid还在确认之外,其它4款软件均已得到确认,有些已根据发现的缺陷进行了修复,防止了潜在的因运行时配置更新缺陷可能导致的经济、用户损失。
表2.本发明检测未知缺陷能力
BugID 受影响的软件版本 缺陷状态
MySQL-105933 v5.7-最新版本 已确认
MySQL-105957 v5.7-最新版本 已确认
MySQL-105964 v5.7-最新版本 已确认
MySQL-105978 v5.7-最新版本 已确认
MySQL-106675 v5.7 已确认
MySQL-106676 v5.7 已确认
MySQL-106684 v5.7 已确认
Redis-10119 v6.2-v7.0 已修复
PostgreSQL-17538 v14.2-最新版本 已确认
MariaDB-29076 v10.3-最新版本 修复中
MariaDB-29077 v10.3-最新版本 修复中
Squid-5224 v5.0-最新版本 未确认
Squid-5225 v5.0-最新版本 未确认

Claims (9)

1.一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于包括以下步骤:
第一步,构建运行时配置更新缺陷检测系统,运行时配置更新缺陷检测系统由配置项分析与插桩模块、测试用例生成模块、缺陷检测模块构成;
配置项分析与插桩模块与测试用例生成模块、缺陷检测模块相连,从待检测软件中读取软件源码和目标配置项,利用软件源码对目标配置项进行污点分析,得到目标配置项的影响范围,并对软件源码中目标配置项影响的相关程序语句进行插桩,得到插桩后的软件S,将插桩后的软件S发送给测试用例生成模块和缺陷检测模块;所述目标配置项指用户关心的软件的配置参数集合中的单个配置参数;
测试用例生成模块和配置项分析与插桩模块、缺陷检测模块相连,从配置项分析与插桩模块接收插桩后的软件S,读取软件测试用例集,利用软件S从软件测试用例集筛选合适的测试用例作为测试用例子集,根据插桩后的软件S和测试用例子集生成蜕变测试集合T;
缺陷检测模块和配置项分析与插桩模块、测试用例生成模块相连,从配置项分析与插桩模块接收插桩后的软件S,从测试用例生成模块接收蜕变测试集合T,在插桩后的软件S上执行蜕变测试集合T中测试用例并检查两种蜕变关系是否均满足,若任意一种蜕变关系不满足则表示目标配置项存在运行时配置更新缺陷,根据当前测试用例和测试输出得到运行时配置更新缺陷集合D;
第二步:配置项分析与插桩模块利用软件源码对目标配置项进行污点分析,得到目标配置项的影响范围,并对软件源码中目标配置项影响的相关程序语句进行插桩,将插桩后的软件S发送给测试用例生成模块和缺陷检测模块,方法是:
2.1配置项分析与插桩模块读入待检测软件源码S0和目标配置项c;
2.2配置项分析与插桩模块分析目标配置项c的初始程序变量,得到一个程序变量vc;
2.3配置项分析与插桩模块对程序变量vc进行污点分析,得到目标配置项c的影响范围集合P,P={p1,p2,…,pz,…,pM},其中pz为一个二元组,pz=[vz,lz],vz为目标配置项c的污点传播变量,lz为vz在源代码中位置,M为影响范围集合P中元素的个数;
2.4配置项分析与插桩模块利用目标配置项c的影响范围集合P,对软件源码进行插桩,得到插桩后的软件S;
2.5将插桩后的软件S发送给测试用例生成模块和缺陷检测模块;
第三步,测试用例生成模块为待检测软件生成蜕变测试集合T,将T发送给缺陷检测模块,方法是:
3.1测试用例生成模块读入软件测试用例集T0,其中T0={t1,t2…,tn,…,tN},N为软件测试用例集T0中测试用例个数,tn为T0中第n个测试用例,1≤n≤N;
3.2测试用例生成模块利用插桩后的软件S,根据执行测试用例后软件输出日志是否包含插桩日志,对T0进行筛选,得到用于生成蜕变测试的软件测试用例子集Ts,Ts={t1′,t2′,…,tn′,…,tN′},其中N′为Ts中测试用例的个数,N′≤N,tn′为Ts中第n′个测试用例,1≤n′≤N′;
3.3测试用例生成模块对目标配置项c的语法类型、取值范围和语法格式进行提取;提取出的四类语法类型包括:布尔类型、枚举类型、字符串类型、数值类型;提取出c的全部可能取值,将c的全部可能取值放入c的全部可能取值集合VC中,VC={p1,p2…,pt…,pT},pt是c的第t个可能取值;提取出c的语法格式包括:路径格式、IP格式、URL格式和ID格式;
3.4测试用例生成模块为目标配置项c生成待测合法值集合V1,V1={v1,v2,...,vk...,vK},vk为目标配置项c的第k个合法取值,K为测试用例生成模块为目标配置项c生成的合法值的个数;
3.5测试用例生成模块为目标配置项生成待测非法值集合V2,其中V2={vv1,vv2...,vvk,...,vvK′},vvk′为目标配置项c的第k′个非法取值,K′为测试用例生成模块为目标配置项c生成的非法值的个数;
3.6测试用例生成模块为目标配置项c生成待测值集合V,V=V1∪V2,令集合V中元素个数为NV;
3.7测试用例生成模块为目标配置项c生成蜕变测试集合T,方法是:
3.7.1初始化蜕变测试集合初始化变量a=1;
3.7.2初始化变量y=1;
3.7.3初始化变量u1=1;
3.7.4初始化变量u2=1;
3.7.5若u1=u2,转3.7.7;若u1≠u2,转3.7.6;
3.7.6令将[mta,mt′a]插入到集合T中,令a=a+1;[mta,mt′a]为一组蜕变测试用例,mta为对目标配置项c执行非运行时更新的测试用例,mta为二元组,ty为Ts的第y个元素,1≤y≤N′,/>的含义是:在软件运行阶段将c的取值更新为/>为c的第u1个待测值,1≤u1≤NV;mt′a为对目标配置项c执行运行时更新的测试用例,mt′a为三元组,/>的含义是:在软件启动阶段c的取值为/>为c的第u2个待测值,1≤u2≤NV;
3.7.7若u2=NV,转3.7.8;否则,令u2=u2+1,转3.7.5;
3.7.8若u1=NV,转3.7.9;否则,令u1=u1+1,转3.7.4;
3.7.9若y=N′,说明已遍历完测试用例子集Ts,并得到蜕变测试集合T,此时的a即为T中元素个数,令蜕变测试集合T中蜕变测试用例组数W=a,T={[mt1,mt′1],[mt2,mt′2],[mt3,mt′3],...,[mta,mt′a],...,[mtw,mt′w]},1≤a≤W,转3.8;否则,令y=y+1,转3.7.3;
3.8将蜕变测试集合T发送给缺陷检测模块;
第四步:缺陷检测模块在插桩后的软件S上执行蜕变测试集合T,并检测目标软件的运行时配置更新缺陷:
4.1缺陷检测模块遍历执行T中的测试用例,得到蜕变测试集合的输出结果,方法是:
4.1.1初始化变量a=1;
4.1.2重新启动软件S,缺陷检测模块将mta输入插桩后的软件S,运行插桩后的软件S,记录输入mta后软件S的插桩日志输出rla和测试输出rta
4.1.3重新启动软件S,缺陷检测模块将mt′a输入软件S,运行插桩后的软件S,记录输入mt′a后软件S的插桩日志输出rl′a和测试输出rt′a
4.1.4判定a是否等于W,若是,记W次输出为蜕变测试集合的输出集合Out,Out={[rl1,rt1,rl′1,rt′1],…,[rla,rta,rl′a,rt′a],…,[rlW,rtW,rl′W,rt′W]},转4.2;否则令a=a+1,转4.1.2;
4.2缺陷检测模块根据Out检查T两种蜕变关系是否均满足,若任意一种蜕变关系不满足则表示目标配置项c存在运行时配置更新缺陷;并将目标配置项c与触发该缺陷的蜕变测试用例组合得到运行时配置更新缺陷集合D;其中D={[c,mt1′,mt′1′],[c,mt2′,mt′2′],...,[c,mth′,mt′h′],...,[c,mtH′,mt′H′]},1≤h′≤H′,H′为集合D中元素个数,H′≤W;两种蜕变关系包括:蜕变关系1:对于第a组蜕变测试用例[mta,mt′a],执行mta和mt′a时,配置项相关的程序变量的值应当相同,即rla等于rl′a;蜕变关系2:对于第a组蜕变测试用例[mta,mt′a],执行mta和mt′a时,相同测试语句的测试输出应当相同,即rta等于rt′a
4.3如果D为空,表示目标配置项c不存在运行时配置更新缺陷;如果D不为空,说明目标配置项c存在运行时配置更新缺陷;对运行时配置更新缺陷检测完毕。
2.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于2.2步所述配置项分析与插桩模块分析目标配置项c的初始程序变量时使用的是Confmapper算法。
3.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于2.3步所述配置项分析与插桩模块对程序变量vc进行污点分析时使用的是DG算法。
4.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于2.4步所述配置项分析与插桩模块利用目标配置项c的影响范围集合P,对软件源码进行插桩,得到插桩后的软件S的方法为:
2.4.1初始化S为软件源码S0
2.4.2初始化变量z=1;
2.4.3在S的代码位置lz处,插入打印程序变量vz的值的日志语句,简称日志打印语句lsz,即针对目标配置项c的插桩日志语句;
2.4.4若z=M,插桩结束,得到插桩后的软件S;否则,令z=z+1,转2.4.3。
5.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于3.2步所述测试用例生成模块利用插桩后的软件S,根据执行测试用例后软件输出日志是否包含插桩日志,对T0进行筛选的方法是:
3.2.1初始化软件测试用例子集
3.2.2初始化n=1,初始化n′=0;
3.2.3在S上执行测试用例tn,记录S的软件输出日志Ln
3.2.4若Ln包含针对目标配置项c的插桩日志语句,则令n′=n′+1,令tn′=tn,将tn′插入Ts
3.2.5若n=N,说明已筛选完T0中所有测试用例,得到Ts,令N′=n′,结束;否则,令n=n+1,转3.2.3。
6.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于3.3步所述测试用例生成模块对目标配置项c的语法类型、取值范围和语法格式进行提取时是采用Spex算法。
7.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于3.4步测试用例生成模块为目标配置项c生成待测合法值集合V1的方法是:
3.4.1若c为布尔类型,则令V1={0,1},结束;
3.4.2若c为枚举类型,则令V1=VC,结束;
3.4.3若c为字符串类型,则令V1={sv1,sv2},其中sv1,sv2为满足c的语法格式的2个随机值,结束;
3.4.4若c为数值类型,则对c的值进行抽样,方法为:记3.3步提取到的c的最小取值为Min,c的最大取值为Max,令V1={Min,10·Min,102·Min,10-2·Max,10-1·Max,Max},结束。
8.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于3.5步测试用例生成模块为目标配置项生成待测非法值集合V2的方法是:
3.5.1若c为布尔类型,则令V2={-1,2},结束;
3.5.2若c为枚举类型,则令V2={nv1,nv2},其中nv1,nv2为不属于VC的2个随机值,结束;
3.5.3若c为字符串类型,则令V2={fv1,fv2},其中fv1,fv2为不满足c的语法格式的2个随机值,结束;
3.5.4若c为数值类型,则令V2={iv1,iv2},其中iv1,iv2为不属于c的合法取值范围的2个随机值,结束。
9.如权利要求1所述的一种基于蜕变测试的运行时配置更新缺陷检测方法,其特征在于4.2步所述缺陷检测模块根据Out检查T两种蜕变关系是否均满足,将目标配置项c与触发该缺陷的蜕变测试用例组合得到运行时配置更新缺陷集合D的方法是:
4.2.1初始化集合初始化变量a=1,初始化变量h′=1;
4.2.2检查蜕变关系1是否满足:若rla等于rl′a,转4.2.3;否则,蜕变关系1不满足,转4.2.4;
4.2.3检查蜕变关系2是否满足:若rta等于rt′a,转4.2.5;否则,蜕变关系2不满足,转4.2.4;
4.2.4此时蜕变关系1或蜕变关系2不满足,表明软件存在一个与目标配置项c有关的运行时配置更新缺陷,且触发该缺陷的蜕变测试用例为[mta,mt′a],令mth′=mta,令mt′h=mt′a将[c,mth′,mt′h′]插入集合D中,转4.2.5;
4.2.5若a=W,说明已检查完T中全部蜕变测试用例,得到运行时配置更新缺陷集合D,此时D中元素个数H′=h′,D={[c,mt1′,mt′1′],[c,mt2′,mt′2′],...,[c,mth′,mt′h′],...,[c,mtH′,mt′H′]},1≤h′≤H′,H′为集合D中元素个数,H′≤W,结束;否则令a=a+1,h′=h′+1,转4.2.2。
CN202211700469.7A 2022-12-29 2022-12-29 一种基于蜕变测试的运行时配置更新缺陷检测方法 Active CN116126698B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211700469.7A CN116126698B (zh) 2022-12-29 2022-12-29 一种基于蜕变测试的运行时配置更新缺陷检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211700469.7A CN116126698B (zh) 2022-12-29 2022-12-29 一种基于蜕变测试的运行时配置更新缺陷检测方法

Publications (2)

Publication Number Publication Date
CN116126698A CN116126698A (zh) 2023-05-16
CN116126698B true CN116126698B (zh) 2023-08-01

Family

ID=86302117

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211700469.7A Active CN116126698B (zh) 2022-12-29 2022-12-29 一种基于蜕变测试的运行时配置更新缺陷检测方法

Country Status (1)

Country Link
CN (1) CN116126698B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116841886B (zh) * 2023-07-03 2023-11-17 中国人民解放军国防科技大学 一种面向配置缺陷的定向模糊测试方法
CN116909884B (zh) * 2023-07-03 2024-01-26 中国人民解放军国防科技大学 一种面向配置缺陷的数据库模糊测试方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000215225A (ja) * 1999-01-25 2000-08-04 Nec Ic Microcomput Syst Ltd テスト容易化検証システム
CN103885876A (zh) * 2012-12-21 2014-06-25 百度在线网络技术(北京)有限公司 测试方法及设备
CN105843744A (zh) * 2016-04-22 2016-08-10 中国矿业大学 用于并行程序蜕变测试的蜕变关系优先级排序方法
EP3467662A1 (en) * 2017-10-09 2019-04-10 Accenture Global Solutions Limited Verification of applications that utilize artificial intelligence
CN109766259A (zh) * 2018-12-03 2019-05-17 北京信息科技大学 一种基于复合蜕变关系的分类器测试方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589736B2 (en) * 2011-08-12 2013-11-19 Tata Consultancy Services Limited System and method for automatic test data generation for relational testing
CN103713999B (zh) * 2013-11-27 2016-07-27 中国人民解放军理工大学 基于定量度量的蜕变关系测试优先级排序方法
US9547579B1 (en) * 2014-12-30 2017-01-17 Ca, Inc. Method and apparatus for automatically detecting defects
US10204034B2 (en) * 2017-04-06 2019-02-12 At&T Intellectual Property I, L.P. System and method for testing software applications in a software defined network
US10642726B2 (en) * 2018-08-31 2020-05-05 Devfactory Fz-Llc Method, apparatus, and system for blaming a test case/class for a survived mutation
US10642723B1 (en) * 2019-02-05 2020-05-05 Bank Of America Corporation System for metamorphic relationship based code testing using mutant generators
CN113934631A (zh) * 2021-10-14 2022-01-14 南京大学 一种基于蜕变关系匹配的组合测试方法
CN115470138A (zh) * 2022-09-22 2022-12-13 南京大学 一种基于不同调试级别交叉验证的调试器缺陷检测方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000215225A (ja) * 1999-01-25 2000-08-04 Nec Ic Microcomput Syst Ltd テスト容易化検証システム
CN103885876A (zh) * 2012-12-21 2014-06-25 百度在线网络技术(北京)有限公司 测试方法及设备
CN105843744A (zh) * 2016-04-22 2016-08-10 中国矿业大学 用于并行程序蜕变测试的蜕变关系优先级排序方法
EP3467662A1 (en) * 2017-10-09 2019-04-10 Accenture Global Solutions Limited Verification of applications that utilize artificial intelligence
CN109766259A (zh) * 2018-12-03 2019-05-17 北京信息科技大学 一种基于复合蜕变关系的分类器测试方法及系统

Also Published As

Publication number Publication date
CN116126698A (zh) 2023-05-16

Similar Documents

Publication Publication Date Title
CN116126698B (zh) 一种基于蜕变测试的运行时配置更新缺陷检测方法
Mesbah et al. Deepdelta: learning to repair compilation errors
CN110399300B (zh) 一种基于动态类型感知的Python软件模糊测试方法
US7712087B2 (en) Methods and systems for identifying intermittent errors in a distributed code development environment
US20090241096A1 (en) Dynamic Software Tracing
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
CN114510722B (zh) 增量代码的静态检测方法及检测系统
CN112214399B (zh) 基于序列模式匹配的api误用缺陷检测系统
JP2019096292A (ja) 自動化されたソフトウェアプログラム修復候補の選択
Reichelt et al. How to detect performance changes in software history: Performance analysis of software system versions
CN112115053A (zh) 基于序列模式匹配的api误用缺陷检测方法
Akimova et al. Pytracebugs: A large python code dataset for supervised machine learning in software defect prediction
Briem et al. Using distributed representation of code for bug detection
CN112905370A (zh) 拓扑图生成方法、异常检测方法、装置、设备及存储介质
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
CN115640155A (zh) 基于语句依赖和补丁相似性的程序自动修复方法与系统
CN113377675A (zh) 基于反馈的smt求解器性能测试用例约简方法
CN112231212B (zh) 一种检测程序代码语法错误的方法
Chu et al. FAST: a framework for automating statistics-based testing
Li et al. Ares: Inferring error specifications through static analysis
Zhao et al. How to Manage Change-Induced Incidents? Lessons from the Study of Incident Life Cycle
CN111831541B (zh) 一种基于风险轨迹的软件缺陷定位方法
CN113971042A (zh) 自动化软件程序修复
Kamlesh et al. Metrics to Improve Software Reliability Based on an Object-Oriented Perspective
CN116501606A (zh) Flobbi三方库不兼容故障定位

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant