CN113778876A - 一种源代码层面的程序变异的生成方法和装置 - Google Patents
一种源代码层面的程序变异的生成方法和装置 Download PDFInfo
- Publication number
- CN113778876A CN113778876A CN202111056352.5A CN202111056352A CN113778876A CN 113778876 A CN113778876 A CN 113778876A CN 202111056352 A CN202111056352 A CN 202111056352A CN 113778876 A CN113778876 A CN 113778876A
- Authority
- CN
- China
- Prior art keywords
- variable
- mutation
- information
- variation
- function
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 230000035772 mutation Effects 0.000 claims abstract description 99
- 230000004044 response Effects 0.000 claims abstract description 14
- 230000006870 function Effects 0.000 claims description 83
- 230000002159 abnormal effect Effects 0.000 claims description 5
- 238000012360 testing method Methods 0.000 abstract description 16
- 238000013522 software testing Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (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
本发明公开了一种源代码层面的程序变异的生成方法和装置。本发明获取待变异函数,构建抽象语法树,并通过抽象语法树的分析提取字面常量和可供变异调用的对象类方法。然后遍历待变异函数的抽象语法子树,若节点为变量,则判断变量是否具备可变异条件,若具备可变异条件时,构建相应的变异信息组成变异集合。变异信息中包括变异语句。变异语句分基本类变量的字面常量赋值语句和对象类的调用可供变异调用的对象类方法的语句。最后为每个变异信息构建相应的变异函数,并在原待变异的函数中插入变异响应代码。变异响应代码通过外部获取的变异ID调用相应的变异函数。由此进行测试时,通过外部配置决定调用哪个变异函数。
Description
技术领域
本发明涉及软件测试,尤其涉及软件源代码层面的变异测试。
背景技术
评价软件程序的测试过程是否完善是软件测试的一个重要指标。在软件测试中,一个良好的测试过程应当能够感知到被测程序细微的变化。若测试过程不能感知到被测程序细微的变化,说明测试过程是存在缺陷的,或者是测试不够完善。
变异测试正是基于上述原理的一种测试过程评价技术。该技术的原理就是对原程序产生细微变异,然后通过测试过程进行测试,判断测试过程是否能够感知这种细微的变异。
现有的程序变异工具,比如PIT、Major,都在中间码阶段注入变异。这样的变异无法被开发人员阅读和理解,也无助于缺陷问题的定位。
发明内容
本发明所要解决的问题:中间码阶段注入变异无法被开发人员阅读和理解,无助于缺陷问题的定位。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种源代码层面的程序变异的生成方法,包括如下步骤:
S1:获取源代码和变异范围定义信息;所述变异范围定义信息是待变异函数信息的集合;
S2:根据所述变异范围定义信息从所述源代码中提取待变异的源代码的上下文;
S3:对所述上下文进行词法和语法解析,从而构建所述上下文的抽象语法树;
S4:根据所述变异范围定义信息从所述抽象语法树中提取所述待变异函数信息所对应的部分,得到待变异函数的抽象语法树;
S5:对所述待变异函数的抽象语法树的节点进行变量遍历,对所遍历的变量,分析其是否具备变异条件;若具备变异条件则构建关于该变量的变异信息,加入至变异集合;所述变异信息包括变异ID、变异变量信息、变异位置信息和变异语句;
S6:为变异集合中的每个变异信息构建其对应的源代码层面的变异函数;
S7:从源代码层面,在所述待变异函数信息所对应函数源代码的最前面插入变异响应代码;所述变异响应代码用于获取变异ID,根据所获取的变异ID调用变异ID对应的变异函数。
进一步,根据本发明的源代码层面的程序变异的生成方法,所述步骤S3还包括通过遍历上下文的抽象语法树提取字面常量的步骤;
所述步骤S5分析变量是否具备变异条件时,首先判断该变量是否为基本类型的变量,然后再判断该变量是否为变量声明中的变量以及该变量是否可以被赋值;
所述步骤S5构建变量的变异信息时,若该变量为基本类型变量,则从所提取的字面常量中随机选择一个类型与该变量类型一致的常量值,生成将该变量赋值为所选择的常量值作为该变异信息中的变异语句;
进一步,根据本发明的源代码层面的程序变异的生成方法,所述源代码为面向对象语言所编写的源代码;所述待变异函数信息中所对应的待变异函数包括对象类的方法;所述步骤S3还包括通过遍历上下文的抽象语法树提取各个对象类的可供变异调用的方法;所述可供变异调用的方法为无返回值、无参数、无异常抛出的方法;
所述步骤S5分析变量是否具备变异条件时,首先判断该变量是否为类实例变量,然后在再判断该变量是否为声明中的变量以及该变量是否可以调用所述可供变异调用的方法;
所述步骤S5构建变量的变异信息时,若该变量为类实例变量,则从该变量所对应的对象类中随机选取一个可供变异调用的方法,生成该类实例调用所选择的可供变异调用的方法作为该变异信息中的变异语句。
根据本发明的一种源代码层面的程序变异的生成装置,包括如下模块:
M1,用于:获取源代码和变异范围定义信息;所述变异范围定义信息是待变异函数信息的集合;
M2,用于:根据所述变异范围定义信息从所述源代码中提取待变异的源代码的上下文;
M3,用于:对所述上下文进行词法和语法解析,从而构建所述上下文的抽象语法树;
M4,用于:根据所述变异范围定义信息从所述抽象语法树中提取所述待变异函数信息所对应的部分,得到待变异函数的抽象语法树;
M5,用于:对所述待变异函数的抽象语法树的节点进行变量遍历,对所遍历的的变量,分析其是否具备变异条件;若具备变异条件则构建关于该变量的变异信息,加入至变异集合;所述变异信息包括待变异函数信息、变异ID、变异变量信息、变异位置信息和变异语句;
M6,用于:为变异集合中的每个变异信息构建其对应的源代码层面的变异函数;
M7,用于:从源代码层面,在所述待变异函数信息所对应函数源代码的最前面插入变异响应代码;所述变异响应代码用于获取变异ID,根据所获取的变异ID调用变异ID对应的变异函数。
进一步,根据本发明的源代码层面的程序变异的生成装置,所述模块M3还包括通过遍历上下文的抽象语法树提取字面常量的模块;
所述模块M5分析变量是否具备变异条件时,首先判断该变量是否为基本类型的变量,然后再判断该变量是否为变量声明中的变量以及该变量是否可以被赋值;
所述模块M5构建变量的变异信息时,若该变量为基本类型变量,则从所提取的字面常量中随机选择一个类型与该变量类型一致的常量值,生成将该变量赋值为所选择的常量值作为该变异信息中的变异语句;
进一步,根据本发明的源代码层面的程序变异的生成装置,所述源代码为面向对象语言所编写的源代码;所述待变异函数信息中所对应的待变异函数包括对象类的方法;所述模块M3还包括通过遍历上下文的抽象语法树提取各个对象类的可供变异调用的方法;所述可供变异调用的方法为无返回值、无参数、无异常抛出的方法;
所述模块M5分析变量是否具备变异条件时,首先判断该变量是否为类实例变量,然后在再判断该变量是否为声明中的变量以及该变量是否可以调用所述可供变异调用的方法;
所述模块M5构建变量的变异信息时,若该变量为类实例变量,则从该变量所对应的对象类中随机选取一个可供变异调用的方法,生成该类实例调用所选择的可供变异调用的方法作为该变异信息中的变异语句。
本发明的技术效果如下:
1、实现了源代码层面的程序变异。
2、在变异测试时,可通过外部配置决定调用哪个变异函数,从而便于开发人员定位。
3、本发明的方法不限于某种具体编程语言所编写的源代码。
附图说明
图1是本发明实施例的流程图。
图2是本发明实施例所实现的程序变异插桩代码示例。
具体实施方式
下面结合附图对本发明做进一步详细说明。
如图1所示,本发明的一种源代码层面的程序变异的生成方法包括如下步骤:数据获取步骤、初始化步骤、变异信息集构建步骤和代码插桩注入步骤。
其中,数据获取步骤即为前述的步骤S1,获取源代码和变异范围定义信息。变异范围定义信息用于定义准备在源代码中哪些地方发生变异,本实施例中,采用待变异函数信息描述。具体来说,变异范围定义信息是待变异函数信息的集合。每个待变异函数信息对应于一个待变异的函数,通常包括模块名、函数名等信息,在某些情况下,待变异函数信息还包括文件名。当然若源代码是面向对象语言所编写的源代码,待变异函数也可能是某个对象类的方法,此时,待变异函数信息包括对象类和方法名,用以表示待变异的对象类中的指定的方法。也就是说,根据本发明的方法,所输入的源代码采用何种语言所编写不限。此外,本实施例中,变异范围定义信息采用XML格式的配置文件定义。也就是变异范围定义信息以配置文件的方式输入。但本领域技术人员理解,数据获取步骤表示源代码和变异范围定义信息作为本发明的输入,至于如何输入无需赘述,也不应成为限定。
初始化步骤的第一个任务是通过对源代码的词法和语法解析,构建抽象语法树。本领域技术人员理解,现代软件工程中,软件源代码规模往往非常庞大。而变异范围定义信息所涉及的源代码通常是整个源代码中的一小部分。为此,本实施例将初始化步骤分成了两个步骤,也就是前述的步骤S2和步骤S3。步骤S2中,根据变异范围定义信息从源代码中提取待变异的源代码的上下文。步骤S3中,对上下文进行词法和语法解析,从而构建上下文的抽象语法树。通过步骤S2和步骤S3的分解,使得所构建的抽象语法树是仅仅是所输入源代码的一小部分,由此减少计算量并减少内存资源的占用。抽象语法树为本领域技术人员所熟悉,本说明书不再赘述。
初始化步骤的第二个任务是通过遍历所构建的抽象语法树提取其中的字面常量。这里所构建的抽象语法树,也就是前述的上下文抽象语法树。提取字面常量时通常与源代码所编程的语言相关,比如在C++中,字面常量通常是指关键词const和#define所限定的常量。但在一些脚本语言中,可能缺少这样的关键词,此时,可以将抽象语法树节点上的数值和字符串提取出来作为字面常量。当然,在比如C++的编程语言中,虽然有关键词限定的字面常量,本领域技术人员理解,也可以将抽象语法树节点上的数值和字符串提取出来作为字面常量。抽取字面常量后得到字面常量的集合。
对于面向对象语言所编写的源代码,初始化步骤还有第三个任务,也就是,通过遍历上下文的抽象语法树提取各个对象类的可供变异调用的方法。可供变异调用的方法为无返回值、无参数、无异常抛出的方法。每个对象类提取可供变异调用的方法组成该对象类的可供变异调用的方法集合,进而组成对象类可供变异调用的方法集合的集合。
变异信息集构建步骤是一个对变异范围定义信息中的待变异的函数遍历的步骤。图1的步骤T0是一个循环结束条件的判断步骤。其中,“各函数是否都得到处理”中的“函数”是指变异范围定义信息中的待变异的函数,与待变异函数信息对应。对变异范围定义信息中的每个待变异的函数做如下处理:
S4:根据变异范围定义信息从抽象语法树中提取待变异函数信息所对应的部分,得到待变异函数的抽象语法树;
S5:对待变异函数的抽象语法树的节点进行变量遍历,对所遍历的变量,分析其是否具备变异条件;若具备变异条件则构建关于该变量的变异信息,加入至变异集合。
待变异函数的抽象语法树是上下文的抽象语法树的子树。在本实施例的实际处理中,找到待变异函数对应的抽象语法子树根节点即可,因此步骤S4中“提取待变异函数信息所对应的部分”可以理解为找到待变异函数对应的抽象语法子树根节点。步骤S5中“对待变异函数的抽象语法树的节点进行变量遍历”也就是对抽象语法子树根节点下的各子节点进行遍历。若所遍历到的节点为变量,则分析该变量是否具备变异条件;若具备变异条件则构建关于该变量的变异信息,加入至变异集合。变异信息包括变异ID、变异变量信息、变异位置信息和变异语句。其中,变异ID可以简单为序号,也可以结合序号和所变异的变量名所组成的字符串。比如变异ID为“A_2”表示变量A第二个序号上的变异。变异语句是待插入待变异函数体内的程序代码,变异位置信息是变异语句插入至待变异函数体内的位置。变异变量信息用以指代待变异的变量,通常以变量名表示。
判断变量是否具体变异条件以及构建变量的变异信息,本领域技术人员理解,均与源代码所编写的编程语言相关。一般的高级编程语言的变量都分成基本类型的变量、结构体的变量、数组变量等概念。基本类型的变量主要包括整型数、浮点数、布尔量、字符串等类型的变量。而面向对象的编程语言中,除了上述类型的变量还包括对象类的类实例变量。尤其在一些高级编程语言中,比如在Java语言中,对象类的类实例变量实质是对象类的引用。比如,Java语言的代码:String s = “Hello World!”,其中所定义的String类型的类实例变量s是一个对Sring类型对象的引用,该语句实质上等价于:String s = new String(“Hello World!”);另一方面,Java语言中实质不存在字符串类型的变量,都是String类型对象的引用。另一方面,Java语言的String类型对象的引用也可以作为基本类型的变量。因为字符串类型的字面常量可以直接赋值给String类型对象的引用。
虽然不同编程语言所编写的源代码在对判断变量是否具体变异条件以及构建变量的变异信息有所差异,但以下两个条件是一致的:
第一条:对于任何变量,不可能在其定义前进行操作。
第二条:常量变量,不能进行非常量操作。
对于第一条,也就是,变量在定义时,不具备变异条件,这是显而易见地。
对于第二条,也就是,常量变量不具备变异条件。这种情形主要考虑到某些编程语言中的const限定。比如C++语言中定义的语句:
const double Pi=3.1415926;
其中定义的double类型的浮点数变量Pi被const关键词所限定,因此该变量在任何时候都不能进行变异,而不具备变异条件,若强行进行变异赋值,变异代码将出现编译错误。
再比如C++语句中:
int ClassTest:methodA() const
{
…
}
其中,ClassTest类的方法methodA被const所限定,因此其中只要涉及ClassTest类成员的变量都是不可能进行变异的,而不具备变异条件;若强行进行变异赋值,变异代码将出现编译错误。
本实施例中,变异语句分成两类:
第一类是对变量进行赋值的语句,所赋的变量值来自于前述步骤S3所提取的字面常量。具体来说,也就是,若遍历到的变量是基本类型的可直接赋值的变量,包括Java语言中的String类型变量,从所提取的字面常量中随机选择一个类型与该变量类型一致的常量值,生成将该变量赋值为所选择的常量值作为该变异信息中的变异语句。
第二类是对变量进行方法调用的语句,所调用的方法来自于前述S3所提取的对象类的可供变异调用的方法。具体来说,若遍历到的变量一个对象类的类实例变量,则从该变量所对应的对象类中随机选取一个可供变异调用的方法,生成该类实例调用所选择的可供变异调用的方法作为该变异信息中的变异语句。
此外,对于Java语言中的String类的对象类实例变量,也可以调用其String类中可供变异调用的方法作为该变异信息中的变异语句。也就是说,对于Java语言中的String类的对象类实例变量,可以同时作为字面常量赋值的基本类变量,也可以作为对象类的类实例变量。
变异信息集构建步骤最终的输出是变异信息集,也就是前述的变异集合,或者变异信息的集合。所输出的每个变异信息集对应于一个待变异函数和待变异函数信息。此时,源代码还是保持原有状态。代码插桩注入步骤各个待变异函数所对应的变异信息集中各变异信息的变异语句在源代码层面以插桩方式注入至源代码形成变异测试源代码,具体包括如下步骤:
S6:为变异集合中的每个变异信息构建其对应的源代码层面的变异函数;
S7:从源代码层面,在所述待变异函数信息所对应函数源代码的最前面插入变异响应代码;所述变异响应代码用于获取变异ID,根据所获取的变异ID调用变异ID对应的变异函数。
以图2中的代码为例。图2原始的源代码所定义的classTest的MethodA方法如下:
int classTest::MethodA(const int a,const int b) const
{
int A,B;
A = a*a*a;
B = b*b*m_P;
return (A-B);
}
其中,变量a和b被const关键词所限定,因此不可以变异。classTest的成员m_P被方法MehothA的关键词const所限定,因此不可以变异。故此,方法MethodA可以被变异的变量为A和B。其中变量A有两个可变异之处:第一个是语句“A=a*a*a;”之前;第二个是语句“return (A-B);”之前。变量B有两个可变异之处:第一个是局域“B = b*b*m_P;”之前;第二个是语句“return (A-B);”之前。由此体现在变异信息集构建步骤输出的变异信息集中包括了四个变异信息。四个变异信息通过步骤S6可以分别构建四个变异函数:
int classTest::MethodA_A_1(const int a,const int b) const;
int classTest::MethodA_A_2(const int a,const int b) const;
int classTest::MethodA_B_1(const int a,const int b) const;
int classTest::MethodA_B_2(const int a,const int b) const。
上述四个函数中A_1,A_2,B_1,B_2为变异ID,分别表示变量A的两个可变异之处的变异和变量B的两个可变异之处的变异,变异函数的形式形如:
int classTest::MethodA_A_1 (const int a,const int b) const
{
int A,B;
A = 32;
A = a*a*a;
B = b*b*m_P;
return (A-B);
}
其中,语句“A = 32;”为插入源代码的变异语句。其中32为来自步骤S3所提取的字面常量。
然后通过步骤S7对待变异函数插入变异响应代码,如图2所示,图2中的变异响应代码定义为:
String idVariation = GetMethodVariationIDFromTestConfig("classTest_MethodA");
if (idVariation=="A_1")
{
int retValue = MethodA_A_1(a,b);
return retValue;
} else if (idVariation=="A_2")
{
int retValue = MethodA_A_2(a,b);
return retValue;
} else if (idVariation=="B_1")
{
int retValue = MethodA_B_1(a,b);
return retValue;
} else if (idVariation=="B_2")
{
int retValue = MethodA_B_2(a,b);
return retValue;
}
其中,函数GetMethodVariationIDFromTestConfig用于获取变异ID,然后通过所获取的变异ID,也就是idVariation的值决定调用哪一个变异函数,调用后直接返回。若函数GetMethodVariationIDFromTestConfig提取不到变异ID,则调用原函数体。函数GetMethodVariationIDFromTestConfig的调用可能是通过UI界面获取用户输入的变异ID,也可能是通过读取测试配置文件获取变异ID。具体情况需要实际软件测试环境而定。
Claims (6)
1.一种源代码层面的程序变异的生成方法,其特征在于,包括如下步骤:
S1:获取源代码和变异范围定义信息;所述变异范围定义信息是待变异函数信息的集合;
S2:根据所述变异范围定义信息从所述源代码中提取待变异的源代码的上下文;
S3:对所述上下文进行词法和语法解析,从而构建所述上下文的抽象语法树;
S4:根据所述变异范围定义信息从所述抽象语法树中提取所述待变异函数信息所对应的部分,得到待变异函数的抽象语法树;
S5:对所述待变异函数的抽象语法树的节点进行变量遍历,对所遍历的变量,分析其是否具备变异条件;若具备变异条件则构建关于该变量的变异信息,加入至变异集合;所述变异信息包括变异ID、变异变量信息、变异位置信息和变异语句;
S6:为变异集合中的每个变异信息构建其对应的源代码层面的变异函数;
S7:从源代码层面,在所述待变异函数信息所对应函数源代码的最前面插入变异响应代码;所述变异响应代码用于获取变异ID,根据所获取的变异ID调用变异ID对应的变异函数。
2.如权利要求1所述的源代码层面的程序变异的生成方法,其特征在于,所述步骤S3还包括通过遍历上下文的抽象语法树提取字面常量的步骤;
所述步骤S5分析变量是否具备变异条件时,首先判断该变量是否为基本类型的变量,然后再判断该变量是否为变量声明中的变量以及该变量是否可以被赋值;
所述步骤S5构建变量的变异信息时,若该变量为基本类型变量,则从所提取的字面常量中随机选择一个类型与该变量类型一致的常量值,生成将该变量赋值为所选择的常量值作为该变异信息中的变异语句。
3.如权利要求1所述的源代码层面的程序变异的生成方法,其特征在于,所述源代码为面向对象语言所编写的源代码;所述待变异函数信息中所对应的待变异函数包括对象类的方法;所述步骤S3还包括通过遍历上下文的抽象语法树提取各个对象类的可供变异调用的方法;所述可供变异调用的方法为无返回值、无参数、无异常抛出的方法;
所述步骤S5分析变量是否具备变异条件时,首先判断该变量是否为类实例变量,然后在再判断该变量是否为声明中的变量以及该变量是否可以调用所述可供变异调用的方法;
所述步骤S5构建变量的变异信息时,若该变量为类实例变量,则从该变量所对应的对象类中随机选取一个可供变异调用的方法,生成该类实例调用所选择的可供变异调用的方法作为该变异信息中的变异语句。
4.一种源代码层面的程序变异的生成装置,其特征在于,包括如下模块:
M1,用于:获取源代码和变异范围定义信息;所述变异范围定义信息是待变异函数信息的集合;
M2,用于:根据所述变异范围定义信息从所述源代码中提取待变异的源代码的上下文;
M3,用于:对所述上下文进行词法和语法解析,从而构建所述上下文的抽象语法树;
M4,用于:根据所述变异范围定义信息从所述抽象语法树中提取所述待变异函数信息所对应的部分,得到待变异函数的抽象语法树;
M5,用于:对所述待变异函数的抽象语法树的节点进行变量遍历,对所遍历的的变量,分析其是否具备变异条件;若具备变异条件则构建关于该变量的变异信息,加入至变异集合;所述变异信息包括待变异函数信息、变异ID、变异变量信息、变异位置信息和变异语句;
M6,用于:为变异集合中的每个变异信息构建其对应的源代码层面的变异函数;
M7,用于:从源代码层面,在所述待变异函数信息所对应函数源代码的最前面插入变异响应代码;所述变异响应代码用于获取变异ID,根据所获取的变异ID调用变异ID对应的变异函数。
5.如权利要求4所述的源代码层面的程序变异的生成装置,其特征在于,所述模块M3还包括通过遍历上下文的抽象语法树提取字面常量的模块;
所述模块M5分析变量是否具备变异条件时,首先判断该变量是否为基本类型的变量,然后再判断该变量是否为变量声明中的变量以及该变量是否可以被赋值;
所述模块M5构建变量的变异信息时,若该变量为基本类型变量,则从所提取的字面常量中随机选择一个类型与该变量类型一致的常量值,生成将该变量赋值为所选择的常量值作为该变异信息中的变异语句。
6.如权利要求4所述的源代码层面的程序变异的生成装置,其特征在于,所述源代码为面向对象语言所编写的源代码;所述待变异函数信息中所对应的待变异函数包括对象类的方法;所述模块M3还包括通过遍历上下文的抽象语法树提取各个对象类的可供变异调用的方法;所述可供变异调用的方法为无返回值、无参数、无异常抛出的方法;
所述模块M5分析变量是否具备变异条件时,首先判断该变量是否为类实例变量,然后在再判断该变量是否为声明中的变量以及该变量是否可以调用所述可供变异调用的方法;
所述模块M5构建变量的变异信息时,若该变量为类实例变量,则从该变量所对应的对象类中随机选取一个可供变异调用的方法,生成该类实例调用所选择的可供变异调用的方法作为该变异信息中的变异语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111056352.5A CN113778876A (zh) | 2021-09-09 | 2021-09-09 | 一种源代码层面的程序变异的生成方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111056352.5A CN113778876A (zh) | 2021-09-09 | 2021-09-09 | 一种源代码层面的程序变异的生成方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113778876A true CN113778876A (zh) | 2021-12-10 |
Family
ID=78842070
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111056352.5A Pending CN113778876A (zh) | 2021-09-09 | 2021-09-09 | 一种源代码层面的程序变异的生成方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113778876A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323906A (zh) * | 2011-09-08 | 2012-01-18 | 哈尔滨工程大学 | 一种基于遗传算法的mc/dc测试数据自动生成方法 |
CN103294595A (zh) * | 2013-05-23 | 2013-09-11 | 西安电子科技大学 | 一种基于遗传算法的软件修复方法 |
CN103605605A (zh) * | 2013-11-21 | 2014-02-26 | 中国矿业大学 | 基于语句占优关系和两阶段遗传算法的高阶变异测试方法 |
CN108664391A (zh) * | 2018-03-13 | 2018-10-16 | 北京邮电大学 | 一种面向程序状态的故障分类方法、变异测试方法及设备 |
CN109213677A (zh) * | 2018-07-06 | 2019-01-15 | 华东师范大学 | 基于Android多线程数据依赖的变异测试方法 |
WO2019222551A1 (en) * | 2018-05-16 | 2019-11-21 | Forma Therapeutics, Inc. | Solid forms of ((s)-5-((1-(6-chloro-2-oxo-1,2-dihydroquinolin-3-yl)ethyl)amino)-1-methyl-6-oxo-1,6-dihydropyridine-2-carbonitrile |
-
2021
- 2021-09-09 CN CN202111056352.5A patent/CN113778876A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323906A (zh) * | 2011-09-08 | 2012-01-18 | 哈尔滨工程大学 | 一种基于遗传算法的mc/dc测试数据自动生成方法 |
CN103294595A (zh) * | 2013-05-23 | 2013-09-11 | 西安电子科技大学 | 一种基于遗传算法的软件修复方法 |
CN103605605A (zh) * | 2013-11-21 | 2014-02-26 | 中国矿业大学 | 基于语句占优关系和两阶段遗传算法的高阶变异测试方法 |
CN108664391A (zh) * | 2018-03-13 | 2018-10-16 | 北京邮电大学 | 一种面向程序状态的故障分类方法、变异测试方法及设备 |
WO2019222551A1 (en) * | 2018-05-16 | 2019-11-21 | Forma Therapeutics, Inc. | Solid forms of ((s)-5-((1-(6-chloro-2-oxo-1,2-dihydroquinolin-3-yl)ethyl)amino)-1-methyl-6-oxo-1,6-dihydropyridine-2-carbonitrile |
CN109213677A (zh) * | 2018-07-06 | 2019-01-15 | 华东师范大学 | 基于Android多线程数据依赖的变异测试方法 |
Non-Patent Citations (1)
Title |
---|
MENG2180: "变异测试", pages 1 - 2, Retrieved from the Internet <URL:《https://blog.csdn.net/qq_37983000/article/details/103191053》> * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108614707B (zh) | 静态代码检查方法、装置、存储介质和计算机设备 | |
US5870590A (en) | Method and apparatus for generating an extended finite state machine architecture for a software specification | |
CN110543421B (zh) | 基于测试用例自动生成算法的单元测试自动执行方法 | |
CN111460450B (zh) | 一种基于图卷积网络的源代码漏洞检测方法 | |
US10831456B1 (en) | External code integrations within a computing environment | |
Bernardi et al. | Design pattern detection using a DSL‐driven graph matching approach | |
US20010037492A1 (en) | Method and apparatus for automatically extracting verification models | |
US20070061641A1 (en) | Apparatus and method for generating test driver | |
CN112328226B (zh) | 一种嵌入式系统自动化测试代码生成方法及装置 | |
CN111694746A (zh) | 面向编译型语言AS3的Flash缺陷模糊测评工具 | |
US10915302B2 (en) | Identification and visualization of associations among code generated from a model and sources that affect code generation | |
CN108563561A (zh) | 一种程序隐性约束提取方法及系统 | |
Kreutzer et al. | Language-agnostic generation of compilable test programs | |
CN113254024A (zh) | 代码继承关系优化方法、装置、设备及存储介质 | |
CN117113347A (zh) | 一种大规模代码数据特征提取方法及系统 | |
Rahman et al. | A DSL for importing models in a requirements management system | |
CN114153447B (zh) | 一种自动化生成ai训练代码的方法 | |
CN113778876A (zh) | 一种源代码层面的程序变异的生成方法和装置 | |
KR100777103B1 (ko) | 테스트 드라이버 생성 장치 및 방법 | |
CN115310095A (zh) | 一种区块链智能合约混合形式化验证方法及系统 | |
Miceli et al. | A metric based technique for design flaws detection and correction | |
CN114816356A (zh) | 基于接口文档生成http请求代码的系统及方法 | |
CN113434430A (zh) | 一种sql查询语句性能检测方法和装置 | |
CN112764788A (zh) | 基于程序源码切片重组的软件动态更新热补丁合成方法 | |
CN113282495A (zh) | 一种基于轨迹监控的Java软件故障定位方法 |
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 |