利索能及
我要发布
收藏
专利号: 2023104619240
申请人: 南通大学
专利类型:发明专利
专利状态:已下证
更新日期:2025-11-13
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种基于可疑语句变异的错误定位方法,其特征在于,包括以下步骤:S1、测试目标程序P:对给定的程序P执行测试套件TS,获得覆盖率信息和测试用例执行结果,即通过PASS或失败FAIL;

S2、生成可疑语句S:借助SBFL技术中的错误定位公式计算程序语句的可疑度值,生成可疑语句排序列表;

S3、生成变异体m:选择合适的变异算子mo,借助Proteum变异工具为可疑语句S的每个变异点生成变异体;

S4、测试变异体m:使用同一个测试套件TS测试所有生成的变异体并记录测试用例的执行结果:测试结果从通过变为失败的测试用例数和从失败变为通过的测试用例数;

S5、计算可疑度指标R:将TS对P的测试结果与TS对所有变异体m的测试结果进行比较,计算可疑度指标R,报告错误语句;

所述步骤S1包括以下步骤:

S1.1、通过插桩技术获取源程序P在给定测试用例集TS下的覆盖信息和执行结果;

S1.2、覆盖信息表示在各个测试用例执行过程中对程序语句的覆盖情况;

S1.3、执行结果表示TS中覆盖程序语句的失败测试用例数和通过测试用例数;

所述步骤S2包括以下步骤:

S2.1、根据步骤S1.1中的覆盖信息构建测试覆盖矩阵;

S2.2、通过步骤S1.1中的执行结果构建执行结果向量;

S2.3、统计分析覆盖信息,借助SBFL的错误定位公式计算程序语句的可疑度;

S2.4、根据可疑度计算结果由高到低的顺序排列程序语句;

S2.5、将排名靠前的那些程序语句作为可疑语句S;

S2.6、统计覆盖可疑语句S并在P上失败的测试用例数fP(S)以及覆盖可疑语句S并在P上通过的测试用例数Pp(S);

所述步骤S3包括以下步骤:

S3.1、将利用SBFL技术得到的可疑语句排序列表中的前K个可疑语句S作为候选语句进行变异;

S3.2、为了避免变异体规模的爆炸式增长,借助Proteum变异工具为可疑语句的每个变异点生成相应的变异体;

S3.3、选择需要的变异算子mo,mo表示的是从原有程序生成差别极小程序的转换规则;

S3.4、构建AST,遍历每一个节点,判断是否符合mo的类型,看成一种分类;

S3.5、根据分类结果,执行变异算子mo生成变异体m;

所述S3.3中,从mo选择角度出发,在不影响变异评分的前提下,采取高阶变异体优化法,通过对mo进行约简来缩小变异体m规模,从而减小变异测试和分析开销;

所述步骤S3.5包括以下步骤:

S3.5.1、通过编译得到字节码文件BcFile,检查字节码文件BcFile;去掉与检验性质无关和与状态迁移无关的语句,在字节码文件BcFile中多个字节码指令对应内存中的一个状态改变;

S3.5.2、通过新的AST构建新的源文件,在原有被测程序上执行变异算子mo生成大量变异体m;

S3.5.3、不同的mo会生成不同数量的变异体m,为了统一每条可疑语句S的变异体数量,采用随机选择法从生成的大量变异体中随机选择出部分变异体m,为每条可疑语句S选择两个变异体;

所述步骤S4包括以下步骤:

S4.1、对步骤S3中获取的变异体m执行同一个测试套件TS;

S4.2、统计覆盖可疑语句S并在变异体m上测试套件的执行结果;

S4.3、计算覆盖S并在m上失败的测试用例数fm(S)以及在m上通过的测试用例数Pm(S);

所述步骤S5包括以下步骤:

S5.1、观察在P上执行TS和在m上执行TS的两次测试结果,发现在P上失败的测试用例在m上更可能通过,在P上通过的测试用例在m上更可能失败;

S5.2、基于上述的观察,计算覆盖语句S的P的所有变异体之前和之后测试结果从失败到通过的测试用例数ftp以及从通过到失败的测试用例数ptf;

S5.3、利用公式(1)计算可疑度指标R;其中,公式(1)为:其中,fP表示在P上失败的测试用例数,PP表示在P上成功的测试用例数,Pm表示在变异体m上通过的测试用例数,fm表示在变异体m上失败的测试用例数;

S5.4、由于在P上通过的测试用例在m上失败的的可能性比在P上失败的测试用例在m上通过的可能性更大,设置权重 平衡公式(1)中的两项,其中 利用公式(2)计算;其中,公式(2)为:其中,m(P)表示变异体m的总数量;

S5.5、计算出P的可疑语句的可疑度,可疑度高的语句,错误的可能性就更大,报告错误位置。