CN108536585B - 数据变更影响域分析方法 - Google Patents

数据变更影响域分析方法 Download PDF

Info

Publication number
CN108536585B
CN108536585B CN201810225165.7A CN201810225165A CN108536585B CN 108536585 B CN108536585 B CN 108536585B CN 201810225165 A CN201810225165 A CN 201810225165A CN 108536585 B CN108536585 B CN 108536585B
Authority
CN
China
Prior art keywords
function
change
data
statement
key
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.)
Expired - Fee Related
Application number
CN201810225165.7A
Other languages
English (en)
Other versions
CN108536585A (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.)
Beijing Information Science and Technology University
Original Assignee
Beijing Information Science and Technology University
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 Beijing Information Science and Technology University filed Critical Beijing Information Science and Technology University
Priority to CN201810225165.7A priority Critical patent/CN108536585B/zh
Publication of CN108536585A publication Critical patent/CN108536585A/zh
Application granted granted Critical
Publication of CN108536585B publication Critical patent/CN108536585B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • 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

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

本发明提供一种数据变更影响域分析方法,包括如下步骤:S1,比较变更前后的程序,提取变化函数以及变化函数内的变化数据;S2,根据变化数据,获得关键函数集合;S3,根据关键函数集合,提取变更函数调用路径;S4,根据变更函数调用路径,提取影响基本路径集,获得数据变更影响域。本发明的目的在于提供一种数据变更影响域分析方法,以完整准确的提取程序影响基本路径集,定位数据变更影响域,提高回归测试的效率。

Description

数据变更影响域分析方法
技术领域
本发明属于软件测试领域,具体涉及一种数据变更影响域分析方法。
背景技术
软件测试是软件开发过程中至关重要的一步,代码测试工作在软件研发中的所占比重逐渐增大,在大中型软件的研发中已达到投入成本的60%以上。因此如何设计出高质量的测试用例集,以最小的代价达到最好的测试效果,一直是软件测试人员追求的目标。在软件的生命周期中,会不断地对软件进行更新和维护,软件的变更势必是会带来一些问题,而数据又是程序的核心部分,所以不可避免的会出现由于数据发生改变而引发的程序错误问题,要检测这些错误就必须进行回归测试。为了提高回归测试的效率,需要确定数据变更影响域。
但是,目前对变更影响域范围的研究大部分都是直接从语句级别进行分析,分析效率会由于巨大的工作量而受到影响。
发明内容
针对相关技术中存在的问题,本发明的目的在于提供一种数据变更影响域分析方法,以完整准确的提取程序影响基本路径集,定位数据变更影响域,提高回归测试的效率。
本发明提供一种数据变更影响域分析方法,包括如下步骤:
S1,比较变更前后的程序,提取变化函数以及变化函数内的变化数据;
S2,根据变化数据,获得关键函数集合;
S3,根据关键函数集合,提取变更函数调用路径;
S4,根据变更函数调用路径,提取影响基本路径集,获得数据变更影响域。
根据本发明,通过文本比较工具Beyound Compare进行步骤S1。
根据本发明,关键函数集合包括变化函数和受变化函数影响的函数。
根据本发明,步骤S2包括如下步骤:
S21,根据变化数据,通过数据信息流规则得到受变化数据影响的数据;
S22,根据受变化数据影响的数据,得到受变化函数影响的函数。
根据本发明,步骤S21的具体步骤如下:
数据信息流是所要识别的对象集中数据的二元关系,将识别对象集重新划分为赋值语句、分支语句、循环语句和函数调用语句,这些语句假设为stmt;则数据信息流规则DIFR的表达式为:
DIFR={<v0→v1>|v0∈stmt,v1∈stmt}
表示语句stmt中的变量v1受变量v0的影响;
赋值语句:
规则1:v0=v1;(v0和v1不是指针变量){<v1→v0>}
规则2:v0=v1;(v0和v1是指针变量){<v0→v1>,<v1→v0>}
规则3:v0=&v1;{<v0→v1>,<v1→v0>}
规则4:v0=⊙(v1,v2…vn);{<v1→v0>,<v2→v0>...<vn→v0>}
分支语句:
规则5:if(v0==m){v1=a};
else{v2=b};{<v0→v1>,<v0→v2>}
规则6:switch(v0){case a:v1=c;…},{<v0→v1>}
循环语句:
规则7:while(v0==n){v1=d;},{<v0→v1>}
函数调用语句:
规则8:v0=fun(v1,v2…vn);{<v1→v0>,<v2→v0>...<vn→v0>}。
根据本发明,步骤S22包括:
关键函数的提取需要分析变化函数内部程序语句;分两种情况进行分析:
1)简单语句:简单的函数调用语句,提取被调用函数的参数集PS(ParameterSet),若
Figure GDA0003030970060000021
其中,
Figure GDA0003030970060000022
表示空集;则把此函数添加到变化函数的影响函数集合中;
2)复杂语句:即包括选择结构或循环结构的程序基本块,首先提取分支条件或循环条件中的变量集VS,若此复杂语句中包含函数调用,且
Figure GDA0003030970060000031
其中,
Figure GDA0003030970060000032
表示空集;则把此函数添加到变化函数的影响函数集合中;
受变化函数影响的函数集AFS(Affected Function Set)的提取算法描述如下所示:
Figure GDA0003030970060000033
所有变化函数和受变化函数影响的函数组成关键函数集合KFS={<CF1,AFS1>,<CF2,AFS2>…<CFn,AFSn>},CFi变化函数,AFSi为受变化函数影响的函数集。
根据本发明,步骤S3包括:在关键函数集合的基础上,根据程序函数调用路径图提取变更函数调用路径。
根据本发明,变更函数调用路径集的提取方法描述如下所示:
Figure GDA0003030970060000041
其中,关键函数集合KFS中的对象都是List集合,每一个List中的第一个元素是变化函数,其他元素均为受此函数影响的函数。
根据本发明,变更函数调用路径上的函数包括关键函数和变更无关性函数,对关键函数的局部影响基本路径集和变更无关性函数的处理语句进行拼接处理,生成程序的全局影响基本路径集,全局影响基本路径集即为数据变更影响域。
根据本发明,对关键函数进行如下处理,以获得关键函数的局部影响基本路径集:
根据控制流图自动生成算法生成关键函数的控制流图;
优先遍历关键函数的控制流图,生成关键函数的基本路径集;
对关键函数的基本路径集进行处理,提取覆盖变化数据和受变化数据影响的数据的基本路径集,即局部影响基本路径集。
根据本发明,使用一条语句“int函数名_v=常量;”来代替变更无关性函数,以形成变更无关性函数的处理语句。
本发明的有益技术效果在于:
本发明的数据变更影响域分析方法先在函数粒度(即函数级别)上进行展开,即比较变更前后的程序提取变化函数以及变化函数内的变化数据;再根据变化数据获得关键函数集合,然后根据关键函数集合提取变更函数调用路径,从而从宏观的角度完整准确地提取变更函数调用路径,一定程度上提高了提取影响基本路径集的效率;再从语句粒度(即语句级别)上分析,根据变更函数调用路径,提取影响基本路径集,获得数据变更影响域,从而微观的角度最终定位数据变更影响域,提高回归测试的效率。
附图说明
图1是本发明的数据变更影响域分析方法的流程图。
图2是本发明的函数调用路径关系图。
图3是本发明的变更函数调用路径图。
图4是本发明的影响基本路径集的处理图。
图5是本发明的邻接矩阵的示意图。
图6是本发明的控制流图。
图7是本发明的控制流图生成流程图。
图8是本发明的控制流图获取分析示意图。
图9是本发明的测试程序函数调用路径关系图。
图10是本发明的回归测试效率分析图。
具体实施方式
首先,对本申请与函数调用路径和基本路径集分析有关,相关概念和定义介绍如下:
定义1函数调用路径:是指以函数为基本单位,把程序的一次执行轨迹描述为一条函数调用路径。函数调用路径的提取是通过遍历函数调用关系图Gf={V(Gf),E(Gf)}获得的,其中V(Gf)={F0,F1…Fn}(n为程序中函数个数)是非空集合,集合中的元素为函数调用关系图中的结点,E(Gf)={(Fi,Fj)|Fi,Fj∈V(Gf)},函数调用路径表示为FCP(FunctionCall Path)={(Fa0,Fa1…Fai)|Fai∈V(Gf)},相邻的两个函数例如Fa0与Fa1,在函数调用路径中表示函数Fa0调用了函数Fa1或者是Fa0执行结束后顺序执行Fa1。函数调用路径上的每个结点即为一个函数的映射,函数调用路径主要是反映程序中函数间的关联关系和执行序列,在软件测试与维护有着广泛应用。
定义2变更函数调用路径:由于数据变化,导致一些函数调用路径中的函数内部发生变化或函数调用路径执行时序发生变化,这些发生变化的函数调用路径,称之为变更函数调用路径。
定义3关键函数:变更函数调用路径集中的每条函数调用路径中有部分特定函数是必定包含的,这些函数被称之为变更函数调用路径的关键函数。关键函数集合是由变化函数和受变化函数影响的函数组成的。
定义4基本路径集:基本路径集是程序的部分路径的集合,覆盖了程序中所有的语句和分支。其满足如下性质:
1)每条路径都至少包含一条其他路径未包含的边;
2)程序中所有的边都被基本路径集中的路径访问;
3)程序中的所有的、不属于基本路径集的路径都可以由基本路径集中的路径经过线性运算得到。
现参照附图详细描述本发明的实施例。
参照图1,在一个实施例中,本发明提供一种数据变更影响域分析方法,包括如下步骤:
S1,比较变更前后的程序,提取变化函数以及变化函数内的变化数据;
S2,根据变化数据,获得关键函数集合;
S3,根据关键函数集合,提取变更函数调用路径;
S4,根据变更函数调用路径,获得数据变更影响域。
本发明的数据变更影响域分析方法先在函数粒度(即函数级别)上进行展开,即比较变更前后的程序提取变化函数以及变化函数内的变化数据;再根据变化数据获得关键函数集合,然后根据关键函数集合提取变更函数调用路径,从而从宏观的角度完整准确地提取变更函数调用路径,一定程度上提高了提取影响基本路径集的效率;再从语句粒度(即语句级别)上分析,根据变更函数调用路径,获得数据变更影响域,从而微观的角度最终定位数据变更影响域,提高回归测试的效率。也就是说,本发明是从函数粒度和语句粒度来讨论数据变更影响域。从函数粒度分析数据变更影响域得到:变更函数调用路径;从语句粒度分析数据变更影响域得到:影响基本路径集。函数粒度粗,语句粒度细,从语句分析得到的影响域比从函数分析得到的范围更精确,而且语句分析是在函数分析得到的结果(即变更函数调用路径)基础上进行的。
优选地,通过文本比较工具Beyound Compare进行步骤S1,即通过文本比较工具Beyound Compare比较变更前后的程序,提取变化函数以及变化函数内的变化数据。
优选地,关键函数集合包括变化函数和受变化函数影响的函数。确定关键函数是提取变更函数调用路径的前提。在提取关键函数之前,需要分析发生变化的变量以及受变化变量(直接或间接)影响的变量。
优选地,步骤S2包括步骤S21和S22,具体如下:
S21,根据变化数据,通过数据信息流规则得到受变化数据影响的数据;具体而言,利用数据信息流规则分析变化函数内的源码,结合变化的变量,提取受变化变量影响的变量。例如变量x,y,z,变量x发生变化,若有<x→y>,<y→z>,则称变量y为变量x直接影响的变量,变量z为变量x间接影响的变量。变化的变量和受影响的变量统称为变更变量集CVS(Change Variable Set)。
优选地,步骤S21的具体步骤如下:
数据信息流是所要识别的对象集中数据的二元关系,将识别对象集重新划分为赋值语句、分支语句、循环语句和函数调用语句,这些语句假设为stmt;则数据信息流规则DIFR的表达式为:
DIFR={<v0→v1>|v0∈stmt,v1∈stmt}
表示语句stmt中的变量v1受变量v0的影响;
赋值语句:
规则1:v0=v1;(v0和v1不是指针变量){<v1→v0>}
规则2:v0=v1;(v0和v1是指针变量){<v0→v1>,<v1→v0>}
规则3:v0=&v1;{<v0→v1>,<v1→v0>}
规则4:v0=⊙(v1,v2…vn);{<v1→v0>,<v2→v0>...<vn→v0>}
分支语句:
规则5:if(v0==m){v1=a};
else{v2=b};{<v0→v1>,<v0→v2>}
规则6:switch(v0){case a:v1=c;…},{<v0→v1>}
循环语句:
规则7:while(v0==n){v1=d;},{<v0→v1>}
函数调用语句:
规则8:v0=fun(v1,v2…vn);{<v1→v0>,<v2→v0>...<vn→v0>}。
S22,根据受变化数据影响的数据,得到受变化函数影响的函数。优选地,步骤S22包括:
关键函数的提取需要分析变化函数内部程序语句;分两种情况进行分析:
1)简单语句:简单的函数调用语句,提取被调用函数的参数集PS(ParameterSet),若
Figure GDA0003030970060000081
其中,
Figure GDA0003030970060000082
表示空集;则把此函数添加到变化函数的影响函数集合中;即PS(参数集)和变更变量集(CVS)的交集不为空集。
2)复杂语句:即包括选择结构或循环结构的程序基本块,首先提取分支条件或循环条件中的变量集VS,若此复杂语句中包含函数调用,且
Figure GDA0003030970060000083
其中,
Figure GDA0003030970060000084
表示空集;则把此函数添加到变化函数的影响函数集合中;
受变化函数影响的函数集AFS(Affected Function Set)的提取算法描述如下所示:
Figure GDA0003030970060000085
Figure GDA0003030970060000091
所有变化函数和受变化函数影响的函数组成关键函数集合KFS={<CF1,AFS1>,<CF2,AFS2>…<CFn,AFSn>},CFi变化函数,AFSi为受变化函数影响的函数集。
参照图2和图3,优选地,步骤S3包括:在关键函数集合的基础上,根据程序函数调用路径图(参见图2)提取变更函数调用路径(参见图3)。
进一步,变更函数调用路径集的提取方法描述如下所示:
Figure GDA0003030970060000092
其中,关键函数集合KFS中的对象都是List集合,每一个List中的第一个元素是变化函数,其他元素均为受此函数影响的函数。
参照图4,优选地,变更函数调用路径上的函数包括关键函数和变更无关性函数,对关键函数的局部影响基本路径集和变更无关性函数的处理语句进行拼接处理,生成程序的全局影响基本路径集,全局影响基本路径集即为数据变更影响域。优选地,使用一条语句“int函数名_v=常量;”来代替变更无关性函数,以形成变更无关性函数的处理语句。在一个具体实施例中,函数f0、f1、f2、f4中的虚线表示函数局部影响基本路径集,函数f6和函数f7为变更无关性函数,分别用语句“int f6_v=1;”和“int f7_v=1;”来代替,将局部影响基本路径集和变更无关性函数的处理语句进行拼接,生成程序的全局影响基本路径集。
也就是说,影响基本路径集的提取是基于关键函数和变更函数调用路径的,变更函数调用路径上的函数分为两种,分别是关键函数和变更无关性函数。对关键函数和变更无关性函数的处理如下:
优选地,对关键函数进行如下处理,以获得关键函数的局部影响基本路径集:
根据控制流图自动生成算法生成关键函数的控制流图;
优先遍历关键函数的控制流图,生成关键函数的基本路径集;
对关键函数的基本路径集进行处理,提取覆盖变化数据和受变化数据影响的数据的基本路径集,即局部影响基本路径集。
具体地,控制流图是具有唯一入口和出口的有向图G=(V(G),E(G)),其中V(G)是一个非空集合,集合元素为控制流图的结点,E(G)是控制流图中边的集合,反映了程序内的控制流关系。
在提取影响路径集时,可以使用邻接矩阵(参见图5)来表示控制流图(参见图6),控制流图的结点用数字表示,边的连接用最简单的权值(0或1)来标识。用一个一维数组存放控制流图中所有结点数据V(G),用一个二维数组存放控制流图中所有边E(G)的信息,称此二维数组为邻接矩阵,邻接矩阵和控制流图的表示分别如图5和图6所示。
控制流图的邻接矩阵C=(c[i][j])的表达式为:
Figure GDA0003030970060000101
控制流图生成流程图7所示。其中,gcc包含了大量的功能选项用于控制编译链接的过程,其中-fdump-tree选项可以获取gcc对代码的预处理信息,cfg子选项可以生成类控制流图的中间代码。选择其中合适的子选项,gcc可以dump出格式合适、准确的中间调试信息。为方便阐述,以图8左侧简单代码片段已经对应的中间文件为例进行说明。
从图8中可以看出程序中间代码分为两部分:函数声明和函数体,将此格式代码称为GCC-CFG中间代码。函数声明部分包含了gcc内部的函数索引号信息;函数体部分是对源代码进行预处理后的结果,是对源代码的分块表示方法,将整个代码分为简单的代码块,代码块内部代码顺序执行,或者根据goto语句跳到另外一个代码块。其中<bb>模块表示基本代码块basic block,同时gcc在分析代码的过程中可能会合并一部分代码,导致一部分代码块存在两个或更多的名字。基本代码块中的goto语句反映了代码块之间的执行顺序,根据goto语句可以将代码块之间的关系表示出来。
图7中GCC-CFG中间代码反映了代码块之间的关系,但是无法直观反应源程序中语句之间的关系,需要对中间代码做进一步的处理,处理过程如下:
1)找出行号和块之间的对应关系,用Dictionary<string,string>dict字典进行存储,key是块信息,value是对应的行号信息。
2)把块之间的关系,转换成行号之间的关系,并把结果输出到一个.dot文件中。
3)利用WinGraphviz的COM组件,把最终结果以控制流图的形式展示出来。
实验与评测
为了检验数据变更影响域分析方法的有效性,使用VS开发了一个基于C语言提取影响基本路径集的测试工具。此方法在提取路径时是在变更函数调用路径的基础上,程序中包含的函数调用关系越多越能突出此方法的优势,因此实验1中选取了包含多层函数调用的测试程序进行详细分析,实验2中选取了规模不同的几个C程序进行测试。
实验1
测试程序如下所示:
Figure GDA0003030970060000121
图4.1测试程序
此测试程序中函数minus()、divi()与test()均为空函数,程序中第5行变量z和第7行变量y发生变化。此程序对应的函数调用路径关系图如图9所示。
关键函数集合KFS={<add,test,multi>},变化函数为add(),受影响的函数为test,multi。程序的变更函数调用路径为:
Figure GDA0003030970060000122
在变更函数调用路径中,函数mod()为变更无关性函数,因此在影响基本路径集中将函数mod()用语句“intmod_v=1;”来代替,分析函数add()、multi()、test()中的影响基本路径集,最终得到程序全局影响基本路径集为:
Figure GDA0003030970060000131
实验2
此次实验中选取了7个不同规模的经典数据结构算法的C语言实现程序,假设程序随机变更数据数为5,分析了被测程序代码行数、函数个数、变更函数调用路径数、基本路径数、影响基本路径数。由于基本路径数在数值上等于环形复杂度,因此测试程序的基本路径数是根据环形复杂度得到的。测试结果如表1所示:
Figure GDA0003030970060000132
表1影响基本路径集测试结果
根据表1中实验数据,可以计算回归测试效率的提高度,回归测试效率的提高度等于回归测试中减少的测试路径数与程序的基本路径数之比。绘制回归测试效率提高度分布图,如图10所示。
根据测试结果表1和图10可知,随着程序代码行数和函数个数的增加,变更函数调用路径、基本路径数与影响基本路径数也在增加。由于此算法是在函数调用路径基础上提出的,因此在程序函数个数增加时,回归测试效率提高度增长趋势更加明显,在一定程度上提高了测试效率,降低了测试成本。
综上,软件变更使得系统程序出现错误的几率大大增加,加大了测试消耗的时间和成本。由于基本路径测试方法是白盒测试中使用最广泛的测试方法,因此在函数调用路径的基础上提出了一种定位有关基本路径的数据变化影响域的方法。由于研究前期内容的分析粒度是函数,因此在一定程度上提高了提取影响基本路径集的效率,并且此定位影响域的方法更适合于程序内函数数量多、环形复杂度高的测试程序。通过实验表明,该方法能准确定位有关基本路集的数据变化的影响域,在一定程度内提高回归测试的效率。但是论文在分析程序时只是限定于单文件,且由于算法复杂度的限制,在分析关键函数时未考虑函数返回值的数据影响,今后进一步研究工作的重点是更深层次的提高影响域定位分析的精度。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (3)

1.一种数据变更影响域分析方法,其特征在于,包括如下步骤:
S1,比较变更前后的程序,提取变化函数以及所述变化函数内的变化数据;
S2,根据所述变化数据,获得关键函数集合,其中,所述关键函数集合包括所述变化函数和受所述变化函数影响的函数;
S3,根据所述关键函数集合,提取变更函数调用路径;
S4,根据所述变更函数调用路径,提取全局影响基本路径集,获得数据变更影响域,其中,所述变更函数调用路径上的函数包括关键函数和变更无关性函数,对所述关键函数的局部影响基本路径集和所述变更无关性函数的处理语句进行拼接处理,生成程序的全局影响基本路径集,所述全局影响基本路径集即为所述数据变更影响域,基本路径集满足以下性质:每条路径都至少包含一条其他路径未包含的边;程序中所有的边都被基本路径集中的路径访问;程序中的所有的、不属于基本路径集的路径都能够由基本路径集中的路径经过线性运算得到;
对所述关键函数进行如下处理,以获得所述关键函数的局部影响基本路径集:
根据控制流图自动生成算法生成所述关键函数的控制流图;
优先遍历所述关键函数的所述控制流图,生成关键函数的基本路径集;
对所述关键函数的基本路径集进行处理,提取覆盖所述变化数据和受所述变化数据影响的数据的基本路径集,即所述局部影响基本路径集;其中,所述步骤S2包括如下步骤:
S21,根据所述变化数据,通过数据信息流规则得到受变化数据影响的数据,所述步骤S21的具体步骤如下:
数据信息流是所要识别的对象集中数据的二元关系,将识别对象集重新划分为赋值语句、分支语句、循环语句和函数调用语句,这些语句假设为stmt;则所述数据信息流规则DIFR的表达式为:
DIFR={<v0→v1>|v0∈stmt,v1∈stmt}
表示语句stmt中的变量v1受变量v0的影响;
赋值语句:
规则1:v0=v1;(v0和v1不是指针变量){<v1→v0>}
规则2:v0=v1;(v0和v1是指针变量){<v0→v1>,<v1→v0>}
规则3:v0=&v1;{<v0→v1>,<v1→v0>}
规则4:v0=⊙(v1,v2…vn);{<v1→v0>,<v2→v0>...<vn→v0>}
分支语句:
规则5:if(v0==m){v1=a};
else{v2=b};{<v0→v1>,<v0→v2>}
规则6:switch(v0){case a:v1=c;…},{<v0→v1>}
循环语句:
规则7:while(v0==n){v1=d;},{<v0→v1>}
函数调用语句:
规则8:v0=fun(v1,v2…vn);{<v1→v0>,<v2→v0>...<vn→v0>};
S22,根据受变化数据影响的数据,得到受所述变化函数影响的函数,所述步骤S22包括:
关键函数的提取需要分析变化函数内部程序语句;分两种情况进行分析:
1)简单语句:简单的函数调用语句,提取被调用函数的参数集PS(Parameter Set),若
Figure FDA0003364286460000021
其中,
Figure FDA0003364286460000022
表示空集,CVS表示变更变量集;则把此函数添加到变化函数的影响函数集合中;
2)复杂语句:即包括选择结构或循环结构的程序基本块,首先提取分支条件或循环条件中的变量集VS,若此复杂语句中包含函数调用,且
Figure FDA0003364286460000023
其中,
Figure FDA0003364286460000024
表示空集;则把此函数添加到变化函数的影响函数集合中;
所述步骤S3包括:在所述关键函数集合的基础上,根据程序函数调用路径图提取所述变更函数调用路径。
2.根据权利要求1所述的数据变更影响域分析方法,其特征在于,通过文本比较工具Beyound Compare进行所述步骤S1。
3.根据权利要求1所述的数据变更影响域分析方法,其特征在于,使用一条语句“int函数名_v=常量;”来代替所述变更无关性函数,以形成所述变更无关性函数的处理语句。
CN201810225165.7A 2018-03-19 2018-03-19 数据变更影响域分析方法 Expired - Fee Related CN108536585B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810225165.7A CN108536585B (zh) 2018-03-19 2018-03-19 数据变更影响域分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810225165.7A CN108536585B (zh) 2018-03-19 2018-03-19 数据变更影响域分析方法

Publications (2)

Publication Number Publication Date
CN108536585A CN108536585A (zh) 2018-09-14
CN108536585B true CN108536585B (zh) 2022-01-11

Family

ID=63484859

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810225165.7A Expired - Fee Related CN108536585B (zh) 2018-03-19 2018-03-19 数据变更影响域分析方法

Country Status (1)

Country Link
CN (1) CN108536585B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111008139A (zh) * 2019-12-06 2020-04-14 北京京航计算通讯研究所 软件更改影响域分析辅助方法
CN111061634A (zh) * 2019-12-06 2020-04-24 北京京航计算通讯研究所 软件更改影响域分析辅助系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103473171A (zh) * 2013-08-28 2013-12-25 北京信息科技大学 一种基于函数调用路径的覆盖率动态跟踪方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101075208B (zh) * 2007-07-19 2011-04-06 中兴通讯股份有限公司 应用于白盒路径测试的测试用例生成方法
CN104503917B (zh) * 2015-01-04 2017-07-07 牟永敏 基于数据流函数调用路径的变更影响域分析方法及系统
CN104834603B (zh) * 2015-05-26 2017-12-01 牟永敏 一种面向回归测试的控制流变更影响域分析方法和系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103473171A (zh) * 2013-08-28 2013-12-25 北京信息科技大学 一种基于函数调用路径的覆盖率动态跟踪方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于FCP的测试用例复用方法研究;郑锦勤;《中国优秀硕士学位论文全文数据库_信息科技辑》;20160815;正文第1-39页 *

Also Published As

Publication number Publication date
CN108536585A (zh) 2018-09-14

Similar Documents

Publication Publication Date Title
JP5874891B2 (ja) プログラムテスト装置、プログラムテスト方法、およびプログラム
CN105138335B (zh) 一种基于控制流图的函数调用路径提取方法及装置
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
WO2019201225A1 (en) Deep learning for software defect identification
CN101071378A (zh) 源代码生成方法、设备和程序
US20090249307A1 (en) Program analysis apparatus, program analysis method, and program storage medium
CN108763064B (zh) 一种基于黑盒函数与机器学习的代码测试生成方法和装置
CN108536585B (zh) 数据变更影响域分析方法
CN101576850B (zh) 一种改进的面向宿主的嵌入式软件白盒测试方法
CN107515739A (zh) 提高代码执行性能的方法及装置
CN116166236A (zh) 代码推荐方法、装置、计算机设备及存储介质
CN108563561A (zh) 一种程序隐性约束提取方法及系统
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
KR101503620B1 (ko) 지능형 아키텍처 생성기
CN108228232B (zh) 一种针对程序中循环问题的自动修复方法
CN106919403B (zh) 云环境下基于Java字节码的多粒度代码克隆检测方法
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
Zhou et al. Deeptle: Learning code-level features to predict code performance before it runs
CN110659200A (zh) 航空机载软件的源码和目标码对比分析方法及系统
CN111078548B (zh) 测试用例解析方法、装置、存储介质及验证平台
Chen et al. Evaluating the effectiveness of deep learning models for foundational program analysis tasks
CN114610320B (zh) 一种基于llvm的变量类型信息修复与比较方法及系统
CN118069200B (zh) 多语言编程方法以及系统
CN113568662B (zh) 一种基于调用关系的代码变更影响范围分析方法及系统
CN116627426B (zh) 一种硬件描述语言增量编译方法及装置

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20220111

CF01 Termination of patent right due to non-payment of annual fee