CN102419728A - 基于覆盖率量化指标确定软件测试过程充分性的方法 - Google Patents
基于覆盖率量化指标确定软件测试过程充分性的方法 Download PDFInfo
- Publication number
- CN102419728A CN102419728A CN201110338915XA CN201110338915A CN102419728A CN 102419728 A CN102419728 A CN 102419728A CN 201110338915X A CN201110338915X A CN 201110338915XA CN 201110338915 A CN201110338915 A CN 201110338915A CN 102419728 A CN102419728 A CN 102419728A
- Authority
- CN
- China
- Prior art keywords
- capped
- function
- file
- test
- coverage
- 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.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于覆盖率量化指标确定软件测试过程充分性的方法,包括:A、对被测程序进行预编译、词法分析和语法分析,得到程序的抽象语法树、控制流图和函数之间的调用关系图,并根据用户测试需求,自动生成被测单元;B、根据覆盖准则,从所述抽象语法树和控制流图中提取被测单元中相应的待覆盖元素集合;C、根据所述的覆盖准则,在被测单元的程序中***相应的探针函数;D、根据用户测试需求,选择***自动执行或用户手动执行的方式对***探针函数的被测单元进行动态测试;E、根据动态测试执行的返回信息,得到测试单元的被覆盖元素集合,并计算被测单元的覆盖率。应用该方法,能够提高软件评估测试的效率和准确性。
Description
技术领域
本发明涉及软件测试技术,尤其涉及一种基于覆盖率量化指标确定软件测试过程充分性的方法,即利用代码覆盖率作为量化指标来确定软件测试中的测试是否充分。
背景技术
在软件单元测试的各个阶段中,人们总是期望用一个统一的量化指标来确定测试过程和方法的充分性,并以此来指导何时结束测试。这里,覆盖率是软件单元测试中常见的量化评价标准,常见的覆盖准则包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、修改的判定条件覆盖、组合覆盖以及路径覆盖等。但,现有的传统覆盖准则,并不适用于软件测试的各个阶段。所述测试阶段,包括单元测试、集成测试和***测试。另外,传统的覆盖准则也有待进一步扩展,以解决软件测试技术发展过程中的新问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种基于覆盖率量化指标确定软件测试过程充分性的方法,扩展传统覆盖准则的使用阶段,以适用评估不同测试阶段中的多种动态测试方法;并扩展传统单元测试的覆盖准则,提出文件覆盖、方法覆盖和类覆盖等新的准则;以及能够按照给定的覆盖准则,对被测单元进行静态分析,得到待覆盖元素集合,根据用户测试需求,进行动态测试执行,统计被覆盖元素,并计算覆盖率,从而根据覆盖率量化指标来确定软件测试过程和方法的充分性,使用多种覆盖准则统计的覆盖率进行衡量,提高评估测试的效率和准确性。
为达到上述目的,本发明的技术方案是这样实现的:
一种基于覆盖率量化指标确定软件测试过程充分性的方法,该方法主要包括:
A、对被测程序进行预编译、词法分析和语法分析,得到程序的抽象语法树、控制流图和函数之间的调用关系图,并根据用户测试需求,自动生成被测单元;
B、根据覆盖准则,从所述抽象语法树和控制流图中提取被测单元中相应的待覆盖元素集合;
C、根据所述的覆盖准则,在被测单元的程序中***相应的探针函数;
D、根据用户测试需求,选择***自动执行或用户手动执行的方式对***探针函数的被测单元进行动态测试;
E、根据动态测试执行的返回信息,得到测试单元的被覆盖元素集合,并计算被测单元的覆盖率。
其中,所述步骤A包括:
根据被测程序中的函数调用关系,对被测程序进行单元划分,得到被测单元;所述被测单元为根据用户测试需求,将被测试程序划分成的独立的测试对象,其为一个或多个函数、类、文件。
所述步骤B包括:
对于语句覆盖准则,提取被测试单元的函数中每一个可达语句块作为语句覆盖元素,组成语句覆盖元素集合;
对于分支覆盖准则,提取被测试单元的函数中,每一个可达分支作为分支覆盖元素,组成分支覆盖元素集合;
对于C/DC覆盖准则,提取被测试单元的函数中,每个覆盖元素包括:可被执行的判定表达式;判定表达式中,所有取值既可以为真又可以为假的简单条件,由此遍历整个被测单元,组成C/DC覆盖元素集合;
对于MC/DC覆盖准则,提取被测试单元的函数中,每个覆盖元素包括:可被执行的判定表达式;判定表达式中,所有可以独立影响判定表达式结果的简单条件,由此遍历整个被测单元,组成MC/DC覆盖元素集合;
对于路径覆盖准则,提取被测试单元的函数中,所有可达路径作为覆盖元素,组成路径覆盖元素集合;
对于函数覆盖准则,提取被测试单元的类(对于函数直接构成类的情况)或者文件(对于函数直接构成文件的情况)中,所有可被执行的函数作为函数覆盖元素,组成函数覆盖元素集合;假设函数中只要有一条路径可被执行,就认为该函数可被执行;
对于类覆盖准则,提取被测试单元的文件中所有可被执行的类作为类覆盖元素,构成类覆盖元素集合;
对于文件覆盖准则,提取被测试单元中所有可被执行的文件作为文件覆盖元素,组成文件覆盖元素集合;对于由类直接组成文件的情况,该文件中只要有一个类可被执行,就认为该文件可被执行;对于由函数直接组成文件的情况,该文件中只要有一个函数可被执行,就认为该文件可被执行。
所述步骤C包括:
对于语句覆盖准则,在语句覆盖元素集合的每个元素中***探针函数,以便记录执行测试用例过程中语句块的被覆盖情况;
对于分支覆盖准则,在分支覆盖元素集合每个元素中***分支探针函数, 以便记录执行测试用例过程中分支的被覆盖情况;
对于C/DC覆盖准则,在C/DC覆盖元素集合的每个元素中***探针函数,即在每个可执行判定中***分支探针函数,在对应判定中所有取值既可以为真又可以为假的简单条件处***条件探针函数,以便记录执行测试用例过程中C/DC元素的被覆盖情况;
对于MC/DC覆盖准则,在MC/DC覆盖元素集合中的每个元素内***探针函数;即在每个可执行判定处***分支探针函数,在对应判定中的所有可独立影响判定的简单条件处***条件探针函数,以便记录执行测试用例过程中MC/DC元素的被覆盖情况;
对于路径覆盖准则,基于语句覆盖进行统计,所以不用额外***探针函数;
对于函数覆盖准则,基于路径覆盖进行统计,所以不用额外***探针函数;
对于类覆盖准则,基于函数覆盖进行统计,所以不用额外***探针函数;
对于文件覆盖准侧,基于类或者函数覆盖进行统计,所以不用额外***探针函数。
所述步骤D包括:
对于***自动执行,***自动生成被测单元的测试用例,生成驱动文件,逐个调用测试用例,将驱动文件和***探针函数之后的被测单元所在文件链接生成可执行文件,然后运行可执行文件,进行测试执行;
对于用户手动执行,由用户手动对预处理后的待测程序生成可能的桩函数、测试用例和驱动文件,并将驱动文件和所述的***探针函数之后的被测单元所在文件进行链接,生成可执行文件并运行,进行测试执行。
所述步骤E具体包括:
E1、利用被测试程序的探针函数的返回信息,得到被覆盖元素集合;
E2、分析覆盖结果,通过图形界面的方式标识出源代码中已覆盖元素和未覆盖元素,并计算出被测单元的语句覆盖率、分支覆盖率、C/DC覆盖率、MC/DC覆盖率、路径覆盖率、函数覆盖率、类覆盖率、文件覆盖率。
进一步地,所述步骤E1包括:
E11、对于语句覆盖准则,探针函数返回测试过程中被测单元语句覆盖集合的所有被覆盖语句块对应的数字;
E12、对于分支覆盖准则,探针函数返回测试过程中被测单元分支覆盖集合的所有被覆盖的分支对应的数字;
E13、对于C/DC覆盖准则,探针函数返回测试过程中被测单元C/DC覆盖集合的被覆盖元素(所有被覆盖的判定以及判定中所有被覆盖的简单条件)对应的数字;
E14、对于MC/DC覆盖准则,探针函数返回测试过程中被测单元MC/DC覆盖集合的被覆盖元素(所有被覆盖的判定,以及判定中所有被覆盖的可独立影响判定的简单条件)对应的数字;
E15、对于路径覆盖准则,根据步骤E11中获得的语句覆盖集合的被覆盖语句块,按照一条路径被覆盖当且仅当此路径上的所有语句块被覆盖的原则,提取出被测试单元的所有被覆盖路径;
E16、对于函数覆盖准则,根据步骤E15中获得的路径覆盖集合中被覆盖路径,按照一个函数被覆盖当且仅当此函数中至少有一条路径被覆盖的原则,提取出被测试类的所有被覆盖函数(对于文件直接由类构成的情况)或文件中的所有被覆盖函数(对于文件直接由函数构成的情况);
E17、对于类覆盖准则,根据步骤E16中获得的被覆盖函数,按照一个类被覆盖当且仅当此类中至少有一个函数被覆盖的原则,提取出被测试文件的所有被覆盖类;
E18、对于文件覆盖准则,如果文件直接由类构成,根据步骤E17中获得的被覆盖类,按照一个文件被覆盖当且仅当此文件中至少有一个类被覆盖的原则,或者根据E16中获得的被覆盖函数,按照一个文件被覆盖当且仅当此文件中至少有一个函数被覆盖的原则,提取出被测试工程的所有被覆盖文件。
本发明所提供的基于覆盖率量化指标确定软件测试过程充分性的方法,具有以下优点:
该方法一方面扩展了传统覆盖率的使用阶段,适用于评估不同测试阶段中的多种动态测试方法,测试阶段包括单元测试、集成测试和***测试;另一方面扩展了传统单元测试的覆盖准则,提出文件覆盖、方法覆盖和类覆盖等准则。并能够按照给定的覆盖准则,对被测单元进行静态分析,得到待覆盖元素集合,也能够根据用户测试需求,进行动态测试执行,统计被覆盖元素,并计算覆盖率,从而能够根据覆盖率量化指标来确定软件测试过程和方法的充分性,通过使用多种覆盖准则统计的覆盖率进行衡量,提高了评估测试的效率和准确性。
附图说明
图1为本发明基于覆盖率量化指标确定软件测试过程充分性的方法流程示意图;
图2为本发明软件测试过程进行自动单元划分的方法流程示意图;
图3为本发明软件测试过程进行自动测试执行的方法流程示意图。
具体实施方式
下面结合附图及本发明的实施例对本发明的方法作进一步详细的说明。
白盒自动化软件测试中多种覆盖率的统一计算方法可以采用不同的测试工具及测试方法动态执行被测程序,本发明提供的确定软件测试过程充分性的方法,是一种借助自动化软件测试的覆盖率作为量化指标来确定所进行的软件测试过程是否充分的手段,其基本思想是:读取待测程序,对其进行静态分析,根据用户测试需求,将被测程序划分成测试单元。其中,当选择***自动执行时,***将单个函数作为一个被测单元,当选择人工手动执行时,由用户选择需要测试的一个或多个函数、类或者文件,***将其作为一个被测单元。然后由用户选择覆盖准则,根据生成的被测单元的抽象语法树和控制流图,提取待覆盖的元素集合,对被测单元的程序***相应的探针函数,可采用自动和人工两种方式进行动态测试执行,根据执行返回结果,得到被覆盖元素,进而计算出被测单元的覆盖率。
图1为本发明基于覆盖率量化指标确定软件测试过程充分性的方法流程示意图,如图1所示,主要包括如下步骤:
步骤1、对被测程序进行预编译、词法分析和语法分析,得到程序的抽象语法树、控制流图和函数之间的调用关系图,并根据用户测试需求,自动生成被测单元。
所述步骤1,具体包括:
步骤11、根据被测程序中的函数调用关系,对被测程序进行单元划分,得到被测单元。
所述被测单元是指根据用户测试需求,将被测试程序划分成的独立的测试对象,可以是一个或多个函数、类、文件等。被测工程以被测单元为单位进行划分,采用自动划分时,单个的函数作为一个被测单元,采用人工干预划分时,由用户指定每个被测单元的组成,可以是若干个函数、类、文件,或者它们的任意组合。
所述步骤11进一步包括:
步骤111、自动划分时,***将单个的函数作为一个被测单元。
自动单元划分的流程示意图,如图2所示:
以被测程序S为例,其包含3个函数f1(type1 v1),f2(type2 v2),f3(type3 v3),type1、type2、type3为参数类型,对其进行静态分析后,得到函数调用关系,提取每个函数的输入和输出,将每一个有输入的函数作为一个被测单元,由此可知,自动划分的被测单元有3个,即{F1、F2、F3},其中被测单元F1表示为< f1(type1 v1),f1的输入输出信息>,被测单元F2表示为< f2(type2 v2),f2的输入输出信息>,被测单元F3表示为< f3(type3 v3),f3的输入输出信息>。
步骤112、人工干预划分时,由用户指定每个被测单元包括的若干个函数、类、文件,或者它们的任意组合,并循环执行,直到测试工程全部被划分完毕,得到测试工程的被测单元集合。
步骤2、根据覆盖准则(包括语句、分支、C/DC、MC/DC、路径、函数、类、文件等),从抽象语法树和控制流图中提取被测单元中相应的待覆盖元素集合。其具体包括:
步骤21、对于语句覆盖准则,提取被测试单元的函数中每一个可达语句块作为语句覆盖元素,组成语句覆盖元素集合。属于同一个块的语句若其中的某一语句被覆盖,则该块所有的语句均能被执行。
步骤22、对于分支覆盖准则,提取被测试单元的函数中,每一个可达分支(与可被执行判定的结果一一对应)作为分支覆盖元素,组成分支覆盖元素集合。
例如,对应在被测单元的控制流图上,所有有向边即为分支覆盖元素集合。
步骤23、对于C/DC覆盖准则,提取被测试单元的函数中,每个覆盖元素包括:
1)可被执行的判定表达式;
2)判定表达式中,所有取值既可以为真又可以为假的简单条件,由此遍历整个被测单元,组成C/DC覆盖元素集合。
例如:对应在被测单元的控制流图上,表示为:
1)有向边E作为一个C/DC覆盖元素;
2)当E为判断节点N的一条分支时,<v>为一个C/DC覆盖元素,其中v是N的判定表达式的一组谓词取值,它是由判定表达式满足C/DC覆盖准则的要求所确定的。
步骤24、对于MC/DC覆盖准则,提取被测试单元的函数中,每个覆盖元素包括:
1)可被执行的判定表达式;
2)判定表达式中,所有可以独立影响判定的简单条件,由此遍历整个被测单元,组成MC/DC覆盖元素集合。
例如:对应在被测单元的控制流图上,表示为:取控制流图上一条有向边E:
1)当E为非判断节点的分支时,E作为一个MC/DC覆盖元素;
2)当E为判断节点N的一条分支时,<E, v>作为一个MC/DC覆盖元素,其中v是N的判定表达式的一组谓词取值,它是由判定表达式满足MC/DC覆盖准则的要求所确定的。
步骤25、对于路径覆盖准则,提取被测试单元的函数中,所有可达路径作为覆盖元素,组成路径覆盖元素集合。
例如:对应在被测单元的控制流图上,表示为:提取控制流图上一个有序节点序列和一个有序有向边序列,使得该子图具有唯一输入节点和唯一输出节点,且输入节点为函数入口,输出节点为函数出口。
步骤26、对于函数覆盖准则,提取被测试单元的类(对于函数直接构成类的情况)或者文件(对于函数直接构成文件的情况)中,所有可被执行函数作为函数覆盖元素,组成函数覆盖元素集合。假设函数中只要有一条路径可被执行,就认为该函数可被执行。
步骤27、对于类覆盖准则,提取被测试单元的文件中所有可被执行的类作为元素,构成类覆盖元素集合。假设类中只要有一个函数被执行,就认为该类被执行。
步骤28、对于文件覆盖准则,提取被测试单元中所有可被执行文件作为元素,组成文件覆盖元素集合。对于由类直接组成文件的情况,假设文件中只要有一个类可被执行,就认为该文件可被执行。对于由函数直接组成文件的情况,假设文件中只要有一个函数可被执行,就认为该文件可被执行。
步骤3、根据上述覆盖准则,在被测单元的程序中***相应的探针函数。
下面以典型程序statistics.c具体说明如何根据不同覆盖准则***探针函数。程序功能为:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。源程序如下:
#include "stdio.h"
void statistics(char c)
{
int letters=0,space=0,digit=0,others=0;
if(c!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}.
该步骤3具体包括:
步骤31、对于语句覆盖准则,在语句覆盖元素集合的每个元素(均为可达语句块)中***语句探针函数。
语句采用以“块”为单位的语句插装,这里,所谓块就是逻辑上连续执行的相邻最大的语句集。现在在以下结点处***语句探针函数:函数的开始处、if语句块、else语句块、case语句块、default语句块、label语句块、for语句块、while语句块、do-while语句块、catch语句块、finally语句块、跳转语句前。
语句探针函数void _Block_Cov(int blockNum)表示在插装点对应的语句块的所有语句得到执行。其中blockNum唯一标识一个语句块的抽象语法树根结点,当语句块被执行时,语句块对应的标识符被记录。
语句探针函数实现如下:
void_Block_Cov(int blockNum)
{
cppTestSendData(blockNum);
}
源代码为:a=d+b;
插装后的代码为:
a=d+b;
_Block_Cov(Num);
由上述分析可得到被测程序statistics.c在语句覆盖准则下的探针函数***结果:
#include "stdio.h"
void statistics(char c)
{
int letters=0,space=0,digit=0,others=0;
_Block_Cov(0);
if(c!='\n')
{
_Block_Cov(1);{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
{
_Block_Cov(2);letters++;
}
else {
_Block_Cov(3);if(c==' ')
{
_Block_Cov(4);space++;
}
else {
_Block_Cov(5);if(c>='0'&&c<='9')
{
_Block_Cov(6);digit++;
}
else{
_Block_Cov(7);others++;
}
}
}
}
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}
记为instrument_statistics.c,其中探针函数的正负返回取值的上下限可人为设置。
步骤32、对于分支覆盖准则,在分支覆盖元素集合每个元素中***分支探针函数。
分支探针函数 bool _Bran_Cov(bool exp, Int PositiveBranchId, int negitiveBranchId) 获取运行时分支情况,并且不改变源代码的执行逻辑。在运行时根据接收到的数字是正数还是负数,来判别相应分支的取值。其中返回值PositiveBranchId和negitiveBranchId分别表示分支取值为真和假。
分支探针函数的实现如下:
bool _Bran_Cov(bool exp, Int PositiveBranchId, int negitiveBranchId)
{
if(exp)
cppTestSendData(PositiveBranchId);
else
cppTestSendData(negitiveBranchId);
return exp;//不改变程序的执行逻辑
}
源代码: if(a&&b)
插装后代码: if(_Branch_Cov(a&&b,trueNum,FalseNum))
由上述分析可得到被测程序statistics.c在分支覆盖准则下的探针函数***结果:
void statistics(char c)
{
int letters=0,space=0,digit=0,others=0;
_Block_Cov(0);
if(_Bran_Cov(c!='\n',-2147483647,1))
{
if(_Bran_Cov(c>='a'&&c<='z'||c>='A'&&c<='Z',-2147483646,2))
letters++;
else if(_Bran_Cov(c==' ',-2147483645,3))
space++;
else if(_Bran_Cov(c>='0'&&c<='9',-2147483644,4))
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
}
记为instrument_statistics.c,其中探针函数的正负返回取值的上下限可人为设置。
步骤33、对于C/DC覆盖准则,在C/DC覆盖元素集合的每个元素中***探针函数,即在每个可被执行判定中***分支探针函数,在对应判定中所有取值既可以为真又可以为假的简单条件处***条件探针函数。
条件探针函数 bool _Cond_Cov(bool exp,int positiveCondId,int negitiveCondId)获取运行阶段被执行简单条件的取值情况,并且不改变源代码的执行逻辑。在运行时根据接收到的数字是正数还是负数,来判别相应判定的取值。其中返回值positiveCondId和negitiveCondId分别表示条件取值为真和假。
条件探针的实现如下:
bool _Cond_Cov(bool exp, Int positiveCondId, int negitiveCondId)
{
if(exp)
cppTestSendData(positiveCondId);
else
cppTestSendData(negitiveCondId);
return exp;//不改变程序的执行逻辑
}
在判定表达式上***分支探针并为判定表达式内的每个条件表达式***条件探针。在动态运行时,根据接收到的插装信息,得到分支取值真假和分支内条件的取值真假。
源代码:if(a&&b),
***分支探针和条件探针后的代码:
if(_Branch_COV(if(_Cond_Cov(a,trueNum,falseNum)&&_Cond_Cov(b,trueNum,falseNum)),trueNum,FalseNum))
由上述分析可得到被测程序statistics.c在C/DC覆盖准则下的探针函数***结果:
void statistics(char c)
{
int letters=0,space=0,digit=0,others=0;
_Block_Cov(0);
if(_Bran_Cov(_Cond_Cov(c!='\n',-2147483647,1),-2147483646,2))
{
if(_Bran_Cov(_Cond_Cov(c>='a',-2147483645,3)&&_Cond_Cov(c<='z',-2147483644,4)||_Cond_Cov(c>='A',-2147483643,5)&&_Cond_Cov(c<='Z',-2147483642,6),-2147483641,7))
letters++;
else if(_Bran_Cov(_Cond_Cov(c==' ',-2147483640,8),-2147483639,9))
space++;
else if(_Bran_Cov(_Cond_Cov(c>='0',-2147483638,10)&&_Cond_Cov(c<='9',-2147483637,11),-2147483636,12))
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}
记为instrument_statistics.c,其中探针函数的正负返回取值的上下限可人为设置。
步骤34、对于MC/DC覆盖准则,在MC/DC覆盖元素集合中的每个元素内***探针函数。即在每个可被执行判定处***分支探针函数,在对应判定中的所有可独立影响判定的简单条件处***条件探针函数, 方法同步骤32和步骤33。
步骤35、对于路径覆盖准则,基于语句覆盖进行统计,所以不用额外***探针函数。
步骤36、对于函数覆盖准则,基于路径覆盖进行统计,所以不用额外***探针函数。
步骤37、对于类覆盖准则,基于函数覆盖进行统计,所以不用额外***探针函数。
步骤38、对于文件覆盖准侧,基于类或者函数覆盖进行统计,所以不用额外***探针函数。
步骤4、根据用户测试需求,选择采用***自动执行方式或用户手动执行方式对***探针函数的被测单元进行动态测试。
其中,所述步骤4具体包括:
步骤41、对于***自动执行,***自动生成被测单元的测试用例,并将其生成可执行文件,进行测试执行。自动测试执行的过程如图3所示,对于一个测试单元,生成对应的测试用例库,用来保存所有有效的测试用例。该步骤41进一步包括:
步骤411、***根据覆盖准则以及被测单元的输入参数生成相应的测试用例;
步骤412、生成驱动文件,用于逐个调用测试用例;
步骤413、将驱动文件和步骤3中***探针函数之后的被测单元所在文件链接生成可执行文件;
步骤414、运行可执行文件,同时测试结果将被记录和分析,并最终生成一个结果分析报告,将所有有效的测试用例生成测试用例库。
例如对于被测程序statistics.c,***根据其输入参数类型和范围生成一个测试用例(‘b’),并生成驱动文件driverFile_statistics.c,将driverFile_statistics.c与***探针函数之后的被测单元文件instrument_statistics.c进行链接,生成可执行文件test_statistics.exe,然后运行可执行文件,并得到测试用例库testcase_statistics.mdb。
步骤步骤42、对于用户手动执行,由用户手动对预处理后的待测程序生成可能的桩函数、测试用例和驱动文件,并将驱动文件和步骤3中***探针函数之后的被测单元所在文件进行链接,生成可执行文件并运行,进行测试执行。
以源程序statistics.c为例,预处理后用户根据函数信息,生成桩函数_STUB_statistics,进而生成桩代码,然后根据指定的测试用例(例如‘b’), 生成驱动函数_DRIVER_statistics,调用测试用例,最后将桩代码、驱动函数、***探针函数之后的被测程序进行链接,生成可执行文件test_statistics.exe,运行可执行文件,进行测试执行。
步骤5、根据动态测试执行的返回信息,得到测试单元的被覆盖元素集合,并计算被测单元的覆盖率。其具体包括:
步骤51、利用被测试程序的探针函数的返回信息,得到被覆盖元素集合。
其中步骤51进一步包括:
步骤511、对于语句覆盖准则,探针函数返回测试过程中被测单元语句覆盖集合的所有被覆盖语句块对应的数字。
例如:在步骤4中执行的测试用例(‘b’),被测单元statistics.c的探针函数返回结果为:0,1,2,由此可知探针函数_Block_Cov(0),_Block_Cov(1),_Block_Cov(2)所标识的语句块被覆盖。
步骤512、对于分支覆盖准则,探针函数返回测试过程中被测单元分支覆盖集合的所有被覆盖的分支对应的数字。
例如在步骤4中执行的测试用例(‘b’),被测单元statistics.c的探针函数返回结果为:0,-2147483647,-2147483646,由此可知探针函数_Bran_Cov (0),_Bran_Cov (-2147483647),_Bran_Cov (-2147483646)所标识的分支被覆盖。
步骤513、对于C/DC覆盖准则,探针函数返回测试过程中被测单元C/DC覆盖集合的被覆盖元素(所有被覆盖的判定,以及判定中被覆盖的所有简单条件)对应的数字。
步骤514、对于MC/DC覆盖准则,探针函数返回测试过程中被测单元MC/DC覆盖集合的被覆盖元素(所有被覆盖的判定,以及判定中所有被覆盖的可独立影响判定的简单条件)对应的数字。
步骤515、对于路径覆盖准则,根据步骤E11中获得的语句覆盖集合的被覆盖语句块,按照一条路径被覆盖当且仅当此路径上的所有语句块被覆盖的原则,提取出被测试单元的所有被覆盖路径。
步骤516、对于函数覆盖准则,根据步骤E15中获得的路径覆盖集合中被覆盖路径,按照一个函数被覆盖当且仅当此函数中至少有一条路径被覆盖的原则,提取出被测试类的所有被覆盖函数(对于文件直接由类构成的情况)或文件中的所有被覆盖函数(对于文件直接由函数构成的情况)。
步骤517、对于类覆盖准则,根据步骤E16中获得的被覆盖函数,按照一个类被覆盖当且仅当此类中至少有一个函数被覆盖的原则,提取出被测试文件的所有被覆盖类。
步骤518、对于文件覆盖准则,根据步骤E17中获得的被覆盖类(对于文件直接由类构成的情况),按照一个文件被覆盖当且仅当此文件中至少有一个类被覆盖的原则,或者根据E16中获得的被覆盖函数(对于文件直接由函数构成的情况),按照一个文件被覆盖当且仅当此文件中至少有一个函数被覆盖的原则,提取出被测试工程的所有被覆盖文件。
步骤52、分析覆盖结果,通过图形界面的方式标识出源代码中已覆盖元素和未覆盖元素,并计算出被测单元的语句覆盖率、分支覆盖率、C/DC覆盖率、MC/DC覆盖率、路径覆盖率、函数覆盖率、类覆盖率、文件覆盖率。
其中步骤52进一步包括:
步骤521、统计语句覆盖的覆盖率,首先统计步骤511中得到的语句覆盖元素集合被覆盖的语句块元素个数。通过图形界面的方式标识出源代码中已被覆盖的语句块元素和未被覆盖的语句块元素。然后统计步骤21中提取出的语句覆盖元素集合的元素总个数,用被覆盖的语句块元素个数除以语句覆盖元素集合的元素总个数,即可计算出语句覆盖率。
上述公式中变量含义如下:
步骤522、统计分支覆盖的覆盖率,首先统计步骤512中得到的分支覆盖元素集合被覆盖的分支元素个数。通过图形界面的方式标识出源代码中已被覆盖的分支元素和未被覆盖的分支元素。然后统计步骤22中提取出的分支覆盖元素集合的元素总个数,用已被覆盖的分支元素个数除以分支覆盖元素集合的总元素个数,即可计算出分支覆盖率。
上述公式中变量含义如下:
:分支覆盖元素集合中被覆盖的元素个数
步骤523、统计C/DC覆盖的覆盖率,首先统计步骤513中得到的被覆盖的简单条件和分支个数。通过图形界面的方式标识出源代码中已被覆盖的分支、简单条件及其次数,以及未被覆盖的可达分支及其对应的简单条件。然后统计所述步骤23中提取出的C/DC覆盖集合的元素总个数(C/DC覆盖集合中分支个数+取值即可为真又可为假的简单条件个数*2),用被覆盖的分支个数与简单条件不被重复取值的次数之和除以C/DC覆盖集合的元素总个数,即可计算出C/DC覆盖率。
上述公式变量含义如下:
步骤524、统计MC/DC覆盖的覆盖率,首先统计步骤514中得到的被覆盖的简单条件和分支个数。通过图形界面的方式标识出源代码中已被覆盖的分支、简单条件及其次数,以及未被覆盖的可达分支及其对应的简单条件。然后统计步骤24中提取出的MC/DC覆盖集合的元素总个数(MC/DC覆盖集合中分支个数+取值即可为真又可为假的简单条件个数*2),用简单条件不被重复取值的次数与被覆盖的分支个数之和除以MC/DC覆盖集合的元素总个数,即可计算出MC/DC覆盖率。
上述公式变量含义如下:
步骤525、统计路径覆盖的覆盖率,首先利用步骤515中得到的被覆盖语句统计出被覆盖的可达路径个数。通过图形界面的方式标识出源代码中已被覆盖路径和未被覆盖路径。然后用被覆盖路径数除以从步骤25中的路径元素集合计算出的可达路径总数,即可计算出路径覆盖率。
上述公式变量含义如下:
:路径覆盖集合中被覆盖的路径个数
步骤526、对于函数覆盖的覆盖率,首先统计步骤516中得到的函数覆盖集合被覆盖函数个数。通过图形界面的方式标识出源代码中已被覆盖函数和未被覆盖函数。然后统计步骤26中提取出的函数覆盖集合元素总个数,用被覆盖的函数个数除以函数覆盖集合中的元素总个数,即可计算出函数覆盖率。
上述公式变量含义如下:
步骤527、对于类覆盖的覆盖率,首先统计步骤517中得到的类覆盖集合被覆盖的类个数。通过图形界面的方式标识出源代码中已被覆盖类和未被覆盖类。然后统计步骤27中提取出的类覆盖元素集合的元素总个数,用被覆盖的类个数除以覆盖集合中类的总个数,即可计算出类覆盖率。
上述公式变量含义如下:
步骤528、对于文件覆盖的覆盖率,首先统计步骤518中得到的被测工程中被覆盖的可被执行文件总数。通过图形界面的方式标识出源代码中已被覆盖的可被执行文件及未被覆盖的可被执行文件。然后统计步骤28中提取出的可被执行文件总个数,用工程中被覆盖的文件个数除以工程中可被执行的文件总个数,即可计算出文件覆盖率。
上述公式变量含义如下:
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (7)
1.一种基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,该方法主要包括:
A、对被测程序进行预编译、词法分析和语法分析,得到程序的抽象语法树、控制流图和函数之间的调用关系图,并根据用户测试需求,自动生成被测单元;
B、根据覆盖准则,从所述抽象语法树和控制流图中提取被测单元中相应的待覆盖元素集合;
C、根据所述的覆盖准则,在被测单元的程序中***相应的探针函数;
D、根据用户测试需求,选择***自动执行或用户手动执行的方式对***探针函数的被测单元进行动态测试;
E、根据动态测试执行的返回信息,得到测试单元的被覆盖元素集合,并计算被测单元的覆盖率。
2.根据权利要求1所述的基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,所述步骤A包括:
根据被测程序中的函数调用关系,对被测程序进行单元划分,得到被测单元;所述被测单元为根据用户测试需求,将被测试程序划分成的独立的测试对象,其为一个或多个函数、类、文件。
3.根据权利要求1所述的基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,所述步骤B包括:
对于语句覆盖准则,提取被测试单元的函数中每一个可达语句块作为语句覆盖元素,组成语句覆盖元素集合;
对于分支覆盖准则,提取被测试单元的函数中,每一个可达分支作为分支覆盖元素,组成分支覆盖元素集合;
对于C/DC覆盖准则,提取被测试单元的函数中,每个覆盖元素包括:可被执行的判定表达式;判定表达式中,所有取值既可以为真又可以为假的简单条件,由此遍历整个被测单元,组成C/DC覆盖元素集合;
对于MC/DC覆盖准则,提取被测试单元的函数中,每个覆盖元素包括:可被执行的判定表达式;判定表达式中,所有可以独立影响判定表达式结果的简单条件,由此遍历整个被测单元,组成MC/DC覆盖元素集合;
对于路径覆盖准则,提取被测试单元的函数中,所有可达路径作为覆盖元素,组成路径覆盖元素集合;
对于函数覆盖准则,提取被测试单元的类(对于函数直接构成类的情况)或者文件(对于函数直接构成文件的情况)中,所有可被执行的函数作为函数覆盖元素,组成函数覆盖元素集合;假设函数中只要有一条路径可被执行,就认为该函数可被执行;
对于类覆盖准则,提取被测试单元的文件中所有可被执行的类作为类覆盖元素,构成类覆盖元素集合;
对于文件覆盖准则,提取被测试单元中所有可被执行的文件作为文件覆盖元素,组成文件覆盖元素集合;对于由类直接组成文件的情况,该文件中只要有一个类可被执行,就认为该文件可被执行;对于由函数直接组成文件的情况,该文件中只要有一个函数可被执行,就认为该文件可被执行。
4.根据权利要求1所述的基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,所述步骤C包括:
对于语句覆盖准则,在语句覆盖元素集合的每个元素中***探针函数,以便记录执行测试用例过程中语句块的被覆盖情况;
对于分支覆盖准则,在分支覆盖元素集合每个元素中***分支探针函数, 以便记录执行测试用例过程中分支的被覆盖情况;
对于C/DC覆盖准则,在C/DC覆盖元素集合的每个元素中***探针函数,即在每个可执行判定中***分支探针函数,在对应判定中所有取值既可以为真又可以为假的简单条件处***条件探针函数,以便记录执行测试用例过程中C/DC元素的被覆盖情况;
对于MC/DC覆盖准则,在MC/DC覆盖元素集合中的每个元素内***探针函数;即在每个可执行判定处***分支探针函数,在对应判定中的所有可独立影响判定的简单条件处***条件探针函数,以便记录执行测试用例过程中MC/DC元素的被覆盖情况;
对于路径覆盖准则,基于语句覆盖进行统计,所以不用额外***探针函数;
对于函数覆盖准则,基于路径覆盖进行统计,所以不用额外***探针函数;
对于类覆盖准则,基于函数覆盖进行统计,所以不用额外***探针函数;
对于文件覆盖准侧,基于类或者函数覆盖进行统计,所以不用额外***探针函数。
5.根据权利要求1或4所述的基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,所述步骤D包括:
对于***自动执行,***自动生成被测单元的测试用例,生成驱动文件,逐个调用测试用例,将驱动文件和***探针函数之后的被测单元所在文件链接生成可执行文件,然后运行可执行文件,进行测试执行;
对于用户手动执行,由用户手动对预处理后的待测程序生成可能的桩函数、测试用例和驱动文件,并将驱动文件和所述的***探针函数之后的被测单元所在文件进行链接,生成可执行文件并运行,进行测试执行。
6.根据权利要求1所述的基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,所述步骤E具体包括:
E1、利用被测试程序的探针函数的返回信息,得到被覆盖元素集合;
E2、分析覆盖结果,通过图形界面的方式标识出源代码中已覆盖元素和未覆盖元素,并计算出被测单元的语句覆盖率、分支覆盖率、C/DC覆盖率、MC/DC覆盖率、路径覆盖率、函数覆盖率、类覆盖率、文件覆盖率。
7.根据权利要求1所述的基于覆盖率量化指标确定软件测试过程充分性的方法,其特征在于,所述步骤E1包括:
E11、对于语句覆盖准则,探针函数返回测试过程中被测单元语句覆盖集合的所有被覆盖语句块对应的数字;
E12、对于分支覆盖准则,探针函数返回测试过程中被测单元分支覆盖集合的所有被覆盖的分支对应的数字;
E13、对于C/DC覆盖准则,探针函数返回测试过程中被测单元C/DC覆盖集合的被覆盖元素(所有被覆盖的判定以及判定中所有被覆盖的简单条件)对应的数字;
E14、对于MC/DC覆盖准则,探针函数返回测试过程中被测单元MC/DC覆盖集合的被覆盖元素(所有被覆盖的判定,以及判定中所有被覆盖的可独立影响判定的简单条件)对应的数字;
E15、对于路径覆盖准则,根据步骤E11中获得的语句覆盖集合的被覆盖语句块,按照一条路径被覆盖当且仅当此路径上的所有语句块被覆盖的原则,提取出被测试单元的所有被覆盖路径;
E16、对于函数覆盖准则,根据步骤E15中获得的路径覆盖集合中被覆盖路径,按照一个函数被覆盖当且仅当此函数中至少有一条路径被覆盖的原则,提取出被测试类的所有被覆盖函数(对于文件直接由类构成的情况)或文件中的所有被覆盖函数(对于文件直接由函数构成的情况);
E17、对于类覆盖准则,根据步骤E16中获得的被覆盖函数,按照一个类被覆盖当且仅当此类中至少有一个函数被覆盖的原则,提取出被测试文件的所有被覆盖类;
E18、对于文件覆盖准则,如果文件直接由类构成,根据步骤E17中获得的被覆盖类,按照一个文件被覆盖当且仅当此文件中至少有一个类被覆盖的原则,或者根据E16中获得的被覆盖函数,按照一个文件被覆盖当且仅当此文件中至少有一个函数被覆盖的原则,提取出被测试工程的所有被覆盖文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110338915.XA CN102419728B (zh) | 2011-11-01 | 2011-11-01 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110338915.XA CN102419728B (zh) | 2011-11-01 | 2011-11-01 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102419728A true CN102419728A (zh) | 2012-04-18 |
CN102419728B CN102419728B (zh) | 2014-10-29 |
Family
ID=45944147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110338915.XA Expired - Fee Related CN102419728B (zh) | 2011-11-01 | 2011-11-01 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102419728B (zh) |
Cited By (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019933A (zh) * | 2012-11-27 | 2013-04-03 | 网宿科技股份有限公司 | 测试用例覆盖度自动识别方法及装置 |
CN103425573A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码测试信息收集方法及*** |
CN103593291A (zh) * | 2013-11-18 | 2014-02-19 | 北京邮电大学 | 用于包括多个函数测试模块的单元测试方法及装置 |
CN103631707A (zh) * | 2012-08-27 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种获取代码覆盖率的方法及装置 |
CN104077232A (zh) * | 2014-07-21 | 2014-10-01 | 上海零一拼装信息技术有限公司 | 一种基于用例与源码双向追溯的测试装置及方法 |
CN104317710A (zh) * | 2014-10-21 | 2015-01-28 | 北京邮电大学 | 一种结构测试中的被测程序改造方法及其*** |
CN104317723A (zh) * | 2014-11-14 | 2015-01-28 | 清华大学 | 一种驱动程序运行信息的跟踪方法及*** |
CN104375943A (zh) * | 2014-12-11 | 2015-02-25 | 吴翔虎 | 一种基于静态模型的嵌入式软件黑盒测试用例生成方法 |
CN104391793A (zh) * | 2014-11-27 | 2015-03-04 | 中国联合网络通信集团有限公司 | 测试步骤及测试脚本生成方法及装置 |
CN105224460A (zh) * | 2015-10-23 | 2016-01-06 | 浪潮电子信息产业股份有限公司 | 一种基于插装技术统计测试覆盖率的方法 |
CN106155892A (zh) * | 2015-04-03 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 判断应用程序测试覆盖范围的方法及程序测试设备 |
CN106155897A (zh) * | 2015-04-16 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及装置 |
CN106569944A (zh) * | 2016-10-14 | 2017-04-19 | 上海微小卫星工程中心 | 基于约束树的星载软件测试数据分析方法 |
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN107229565A (zh) * | 2017-05-31 | 2017-10-03 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
CN107678967A (zh) * | 2017-10-09 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 单元测试覆盖率生成方法、装置、可读存储介质及设备 |
CN107870853A (zh) * | 2016-09-27 | 2018-04-03 | 北京京东尚科信息技术有限公司 | 测试程序代码路径覆盖率的方法以及装置 |
CN108197036A (zh) * | 2018-02-06 | 2018-06-22 | 百度在线网络技术(北京)有限公司 | 用于确定增量代码的覆盖率信息的方法和装置 |
CN108710575A (zh) * | 2018-05-23 | 2018-10-26 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN108804304A (zh) * | 2017-05-05 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 测试用例生成方法及装置、存储介质、电子设备 |
CN109308260A (zh) * | 2018-08-30 | 2019-02-05 | 福建天泉教育科技有限公司 | 一种自动生成单元测试代码的方法及终端 |
CN109376075A (zh) * | 2018-09-19 | 2019-02-22 | 北京奇安信科技有限公司 | 一种生成测试对象最优测试覆盖路径的处理方法及装置 |
CN109992498A (zh) * | 2017-12-29 | 2019-07-09 | 北京京东尚科信息技术有限公司 | 测试用例的生成方法及***、计算机*** |
CN110348226A (zh) * | 2019-07-12 | 2019-10-18 | 北京字节跳动网络技术有限公司 | 一种工程文件的扫描方法、装置、电子设备及存储介质 |
CN110543421A (zh) * | 2019-08-31 | 2019-12-06 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
CN110556102A (zh) * | 2018-05-30 | 2019-12-10 | 蔚来汽车有限公司 | 意图识别和执行的方法、设备、车载语音对话***以及计算机存储介质 |
CN110750459A (zh) * | 2019-10-23 | 2020-02-04 | 天津汇缘诚信科技有限公司 | 基于白盒分析的测试用例自动生成和测试进程管理方法 |
CN111858322A (zh) * | 2020-07-10 | 2020-10-30 | 中国科学技术大学 | 一种Python语言特征自动识别***和方法 |
CN111949505A (zh) * | 2019-05-14 | 2020-11-17 | 阿里巴巴集团控股有限公司 | 一种测试方法、装置及设备 |
CN112463607A (zh) * | 2020-11-26 | 2021-03-09 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN112905443A (zh) * | 2019-12-04 | 2021-06-04 | 阿里巴巴集团控股有限公司 | 一种测试用例生成方法、设备及存储介质 |
US11086759B2 (en) | 2018-09-27 | 2021-08-10 | SeaLights Technologies LTD | System and method for probe injection for code coverage |
US11093374B2 (en) | 2016-08-09 | 2021-08-17 | SeaLights Technologies LTD | System and method for continuous testing and delivery of software |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
US11573885B1 (en) | 2019-09-26 | 2023-02-07 | SeaLights Technologies LTD | System and method for test selection according to test impact analytics |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833500A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于Agent的嵌入式软件智能测试方法 |
CN101916225A (zh) * | 2010-09-02 | 2010-12-15 | 于秀山 | 图形用户界面软件功能覆盖测试方法 |
-
2011
- 2011-11-01 CN CN201110338915.XA patent/CN102419728B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833500A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于Agent的嵌入式软件智能测试方法 |
CN101916225A (zh) * | 2010-09-02 | 2010-12-15 | 于秀山 | 图形用户界面软件功能覆盖测试方法 |
Non-Patent Citations (1)
Title |
---|
杨朝红等: "基于软件缺陷模型的测试***", 《北京邮电大学学报》 * |
Cited By (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103425573A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码测试信息收集方法及*** |
CN103425573B (zh) * | 2012-05-24 | 2017-02-08 | 腾讯科技(深圳)有限公司 | 代码测试信息收集方法及*** |
CN103631707A (zh) * | 2012-08-27 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种获取代码覆盖率的方法及装置 |
CN103631707B (zh) * | 2012-08-27 | 2018-01-30 | 腾讯科技(深圳)有限公司 | 一种获取代码覆盖率的方法及装置 |
CN103019933A (zh) * | 2012-11-27 | 2013-04-03 | 网宿科技股份有限公司 | 测试用例覆盖度自动识别方法及装置 |
CN103019933B (zh) * | 2012-11-27 | 2016-01-13 | 网宿科技股份有限公司 | 测试用例覆盖度自动识别方法及装置 |
CN103593291B (zh) * | 2013-11-18 | 2016-03-09 | 北京邮电大学 | 用于包括多个函数测试模块的单元测试方法及装置 |
CN103593291A (zh) * | 2013-11-18 | 2014-02-19 | 北京邮电大学 | 用于包括多个函数测试模块的单元测试方法及装置 |
CN104077232A (zh) * | 2014-07-21 | 2014-10-01 | 上海零一拼装信息技术有限公司 | 一种基于用例与源码双向追溯的测试装置及方法 |
CN104077232B (zh) * | 2014-07-21 | 2017-02-22 | 上海零一拼装信息技术有限公司 | 一种基于用例与源码双向追溯的测试装置及方法 |
CN104317710A (zh) * | 2014-10-21 | 2015-01-28 | 北京邮电大学 | 一种结构测试中的被测程序改造方法及其*** |
CN104317723A (zh) * | 2014-11-14 | 2015-01-28 | 清华大学 | 一种驱动程序运行信息的跟踪方法及*** |
CN104317723B (zh) * | 2014-11-14 | 2017-02-22 | 清华大学 | 一种驱动程序运行信息的跟踪方法及*** |
CN104391793A (zh) * | 2014-11-27 | 2015-03-04 | 中国联合网络通信集团有限公司 | 测试步骤及测试脚本生成方法及装置 |
CN104391793B (zh) * | 2014-11-27 | 2017-07-14 | 中国联合网络通信集团有限公司 | 测试步骤及测试脚本生成方法及装置 |
CN104375943A (zh) * | 2014-12-11 | 2015-02-25 | 吴翔虎 | 一种基于静态模型的嵌入式软件黑盒测试用例生成方法 |
CN106155892A (zh) * | 2015-04-03 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 判断应用程序测试覆盖范围的方法及程序测试设备 |
CN106155897A (zh) * | 2015-04-16 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及装置 |
CN105224460A (zh) * | 2015-10-23 | 2016-01-06 | 浪潮电子信息产业股份有限公司 | 一种基于插装技术统计测试覆盖率的方法 |
US11093374B2 (en) | 2016-08-09 | 2021-08-17 | SeaLights Technologies LTD | System and method for continuous testing and delivery of software |
US11775416B2 (en) | 2016-08-09 | 2023-10-03 | SeaLights Technologies LTD | System and method for continuous testing and delivery of software |
CN107870853A (zh) * | 2016-09-27 | 2018-04-03 | 北京京东尚科信息技术有限公司 | 测试程序代码路径覆盖率的方法以及装置 |
CN106569944A (zh) * | 2016-10-14 | 2017-04-19 | 上海微小卫星工程中心 | 基于约束树的星载软件测试数据分析方法 |
CN106569944B (zh) * | 2016-10-14 | 2019-12-13 | 上海微小卫星工程中心 | 基于约束树的星载软件测试数据分析方法 |
CN106874187B (zh) * | 2016-12-29 | 2020-09-11 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN108804304A (zh) * | 2017-05-05 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 测试用例生成方法及装置、存储介质、电子设备 |
CN107229565B (zh) * | 2017-05-31 | 2020-05-01 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
CN107229565A (zh) * | 2017-05-31 | 2017-10-03 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
WO2019071929A1 (zh) * | 2017-10-09 | 2019-04-18 | 武汉斗鱼网络科技有限公司 | 单元测试覆盖率生成方法、装置、可读存储介质及设备 |
CN107678967A (zh) * | 2017-10-09 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 单元测试覆盖率生成方法、装置、可读存储介质及设备 |
CN109992498A (zh) * | 2017-12-29 | 2019-07-09 | 北京京东尚科信息技术有限公司 | 测试用例的生成方法及***、计算机*** |
CN108197036B (zh) * | 2018-02-06 | 2021-05-25 | 百度在线网络技术(北京)有限公司 | 用于确定增量代码的覆盖率信息的方法和装置 |
CN108197036A (zh) * | 2018-02-06 | 2018-06-22 | 百度在线网络技术(北京)有限公司 | 用于确定增量代码的覆盖率信息的方法和装置 |
CN108710575B (zh) * | 2018-05-23 | 2020-11-24 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN108710575A (zh) * | 2018-05-23 | 2018-10-26 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
WO2019223247A1 (zh) * | 2018-05-23 | 2019-11-28 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
US11720477B2 (en) | 2018-05-23 | 2023-08-08 | South China University Of Technology | Unit testing method based on automatic generation of path coverage test cases |
CN110556102A (zh) * | 2018-05-30 | 2019-12-10 | 蔚来汽车有限公司 | 意图识别和执行的方法、设备、车载语音对话***以及计算机存储介质 |
CN110556102B (zh) * | 2018-05-30 | 2023-09-05 | 蔚来(安徽)控股有限公司 | 意图识别和执行的方法、设备、车载语音对话***以及计算机存储介质 |
CN109308260A (zh) * | 2018-08-30 | 2019-02-05 | 福建天泉教育科技有限公司 | 一种自动生成单元测试代码的方法及终端 |
CN109308260B (zh) * | 2018-08-30 | 2021-11-05 | 福建天泉教育科技有限公司 | 一种自动生成单元测试代码的方法及终端 |
CN109376075A (zh) * | 2018-09-19 | 2019-02-22 | 北京奇安信科技有限公司 | 一种生成测试对象最优测试覆盖路径的处理方法及装置 |
US11847041B2 (en) | 2018-09-27 | 2023-12-19 | Sealights Technologies Ltd. | System and method for probe injection for code coverage |
US11086759B2 (en) | 2018-09-27 | 2021-08-10 | SeaLights Technologies LTD | System and method for probe injection for code coverage |
CN111949505B (zh) * | 2019-05-14 | 2024-05-14 | 阿里云计算有限公司 | 一种测试方法、装置及设备 |
CN111949505A (zh) * | 2019-05-14 | 2020-11-17 | 阿里巴巴集团控股有限公司 | 一种测试方法、装置及设备 |
CN110348226A (zh) * | 2019-07-12 | 2019-10-18 | 北京字节跳动网络技术有限公司 | 一种工程文件的扫描方法、装置、电子设备及存储介质 |
CN110348226B (zh) * | 2019-07-12 | 2021-06-18 | 北京字节跳动网络技术有限公司 | 一种工程文件的扫描方法、装置、电子设备及存储介质 |
CN110543421A (zh) * | 2019-08-31 | 2019-12-06 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
CN110543421B (zh) * | 2019-08-31 | 2022-03-29 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
US11573885B1 (en) | 2019-09-26 | 2023-02-07 | SeaLights Technologies LTD | System and method for test selection according to test impact analytics |
CN110750459A (zh) * | 2019-10-23 | 2020-02-04 | 天津汇缘诚信科技有限公司 | 基于白盒分析的测试用例自动生成和测试进程管理方法 |
CN110750459B (zh) * | 2019-10-23 | 2023-10-20 | 天津汇缘诚信科技有限公司 | 基于白盒分析的测试用例自动生成和测试进程管理方法 |
CN112905443A (zh) * | 2019-12-04 | 2021-06-04 | 阿里巴巴集团控股有限公司 | 一种测试用例生成方法、设备及存储介质 |
CN111858322A (zh) * | 2020-07-10 | 2020-10-30 | 中国科学技术大学 | 一种Python语言特征自动识别***和方法 |
CN112463607B (zh) * | 2020-11-26 | 2024-03-15 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN112463607A (zh) * | 2020-11-26 | 2021-03-09 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102419728B (zh) | 2014-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102419728A (zh) | 基于覆盖率量化指标确定软件测试过程充分性的方法 | |
CN105022691B (zh) | 一种基于uml图的高度自动化软件测试方法 | |
CN110147235B (zh) | 一种源代码与二进制代码间的语义比对方法和装置 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其*** | |
CN103744684B (zh) | 一种异构软硬件协同开发的方法及*** | |
CN107367686A (zh) | 一种rtl硬件木马测试向量的生成方法 | |
CN109086215A (zh) | 一种嵌入式软件单元测试用例生成方法及*** | |
Omar et al. | HOMAJ: A tool for higher order mutation testing in AspectJ and Java | |
KR20170078770A (ko) | 어플리케이션 테스팅 | |
Zhou et al. | Extracting configuration knowledge from build files with symbolic analysis | |
CN110990282B (zh) | 一种自动化单元测试方法 | |
US20180322033A1 (en) | Code Coverage Tracking For A Microcontroller Program | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测***、存储设备 | |
CN106294136B (zh) | 并行程序运行期间性能变化的在线检测方法和*** | |
CN108629124B (zh) | 一种基于活动图路径的仿真参数数据自动生成方法 | |
CN110347610B (zh) | 一种嵌入式代码调试***及方法 | |
Liu et al. | Automated pattern-directed refactoring for complex conditional statements | |
Ng et al. | What does multi-objective optimization have to do with bottleneck improvement of production systems? | |
CN107391124B (zh) | 一种基于黄金分割搜索及软件执行轨迹的条件切片方法 | |
US8954307B1 (en) | Chained programming language preprocessors for circuit simulation | |
CN106528179B (zh) | 一种Java类依赖关系的静态识别方法 | |
Priyambadha et al. | Case study on semantic clone detection based on code behavior | |
Davidson et al. | Ease: An environment for architecture study and experimentation | |
CN106815145A (zh) | 一种基于分析目标驱动的代码分析方法和*** | |
Bragaglio et al. | System-level bug explanation through program slicing and instruction clusterization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141029 Termination date: 20201101 |