1.一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,所述方法包含如下步骤:获取初始定位序列;包括:
获取程序语句编号序列S:S1,S2,S3,…,Sj,…,Sn;
获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列Zrough:Z1,Z2,Z3,…,Zj,…,Zn,其中Zj表示第j条语句的可疑度值;
根据Zrough中可疑度值进行降序排列;
根据已排序的Zrough序列,匹配对应的程序语句编号,对S:S1,S2,S3,…,Sj,…,Sn进行排序,排序后的S即为缺陷定位序列,记为Srough;
测试用例增量执行;包括:
增加一组测试用例并执行;
选取下一组测试用例;
可疑度修正;
获取执行完上一组测试用例获得语句Sj的
将ef,ep,nf,np统称为ev,利用公式(2)分别计算ef,ep,nf,np再次发生的概率p(ef),p(ep),p(nf),p(np);
根据公式3分别计算ef,ep,nf,np再次发生后所提供的信息量H(ef),H(ep),H(nf),H(np);
根据公式4分别计算ef,ep,nf,np的增量权重αef,αep,αnf,αnp;
其中,k为测试用例组数,1/k即为选定执行的测试用例条数占测试用例总条数的百分比;
获取执行完本选定组测试用例获得的语句Sj的
根据公式1重新计算语句可疑度
将 记入zslight中,zslight表示修正后的可疑度值序列;
判断所有语句是否均获得修正后的可疑度值;
获得语句可疑度值序列zslight;
定位序列修正;
获取语句编号序列S:S1,S2,S3,…,Sj,…,Sn;
获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列zslight:z1,z2,z3,…,zj,…,zn,其中zj表示修正后的第j条语句的可疑度值;
根据zslight中可疑度值进行降序排列;
根据已排序的zslight序列,匹配对应的程序语句编号,对S:S1,S2,S3,…,Sj,…,Sn进行排序,将排序后的S序列即为修正后定位序列,记为Sslight;
定位序列判定;
根据定位序列进行缺陷语句定位。
2.根据权利要求1所述的一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,所述方法包括:步骤1:获取可执行的待测程序以及测试用例集,测试用例分组;
步骤1-1:获取待测的可执行程序P;
步骤1-2:将程序P的每条语句进行编号,按序编为S1,S2,S3,…,Sj,…,Sn,将编号集合记为S,其中Sj表示程序P的第j条语句,n为程序语句的总条数;
步骤1-3:获取测试用例集,记为Listsuites;
步骤1-4:将测试用例集Listsuites中的测试用例进行等量随机分组,共分成k组,并对组进行编号,依次编为Group1,Group2,Group3,...,Groupk。
3.根据权利要求1所述的一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,所述方法包括:步骤2:运行测试用例,获取覆盖信息表;
步骤2-1:选取一组测试用例;
步骤2-2:对选择的测试用例集中的测试用例进行编号,按序编为test1,test2,test3,…,testi,…,testm,其中testi表示选定测试用例组中的第i条测试用例,m为选定测试用例组中测试用例的总条数;
步骤2-3:从选定的测试用例集按序读取测试用例testi;
步骤2-4:运行当前读取的测试用例testi;
步骤2-5:标记语句覆盖情况;
步骤2-5-1:判定程序P的语句Sj是否被测试用例覆盖,如果“是”,则转步骤2-5-2,否则转步骤2-5-3;
步骤2-5-2:将语句标记为1;
步骤2-5-3:将语句标记为0;
步骤2-5-4:判定程序P是否执行结束,如果“是”,则转步骤2.5.5,否则转步骤2-5-1,直到程序P的n条语句均被判定覆盖情况;
步骤2-5-5:收集执行完当前测试用例获得的频谱信息T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),其中T(Sj)表示程序P的第j条语句被当前运行测试用例覆盖的情况;
步骤2-6:判定测试用例运行结果;
步骤2-6-1:获取当前测试用例testi在程序中的实际运行结果;
步骤2-6-2:获取当前测试用例testi的预期运行结果;
步骤2-6-3:判断testi的实际运行结果与预期结果是否相同,如果“是”,转步骤2.6.4,否则转步骤2.6.5;
步骤2-6-4:运行结果记为0,记入Ri中,Ri表示测试用例运行结果情况;
步骤2-6-5:运行结果记为1,记入Ri中,Ri表示测试用例运行结果情况;
步骤2-7:收集测试用例testi的运行情况,记为F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri},其中:T(Sj)表示语句Sj被当前测试用例覆盖的情况,即频谱信息;Ri表示当前测试用例的运行通过情况,即结果信息;
步骤2.8:将F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}按行存入如图1所示的覆盖信息表G中,G由F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}累积生成;
步骤2.9:判断选定的测试用例集中的所有的测试用例是否均被执行,如果“是”,转步骤2-10,否则转步骤2-3;
步骤2-10:获取包含选定测试用例集中所有测试用例的频谱信息以及结果信息的覆盖信息表G。
4.根据权利要求1所述的一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,所述方法包括:步骤3:可疑度计算;
步骤3-1:针对Sj语句,收集执行完选定测试用例集所提供的
ep表示某测试用i例执行语句Sj,且执行实际结果与预期结果一致;
nf表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果不一致;
np表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果一致;
表示语句Sj被测试用例覆盖且测试用例失败的次数,Gi,j表示覆盖信息表G的第i行第j列的元素值,Ri表示覆盖信息G中R列的第i行元素值,即:表示语句Sj被测试用例覆盖且测试用例通过的次数;
表示语句Sj没有被测试用例覆盖且测试用例失败的次数;
表示语句Sj没有被测试用例覆盖且测试用例通过的次数;
步骤3-2:令
步骤3-3:根据公式1计算语句Sj的可疑度步骤3-4:将 记入Zrough中,Zrough表示可疑度值序列;
步骤3-5:判断所有语句是否均获得可疑度值,如果“是”,转步骤3-6,否则转步骤3-1;
步骤3-6:获得语句可疑度值序列Zrough。
5.根据权利要求1所述的一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,所述定位序列判定包括:步骤6-1:检验所有测试用例是否均执行完毕,如果“是”,转步骤6-8;
步骤6-2:获取定位序列Srough;
步骤6-3:获取定位序列Sslight;
步骤6-4:将Sslight与Srough进行比较,检验Sslight相对于Srough是否稳定,如果“是”,转步骤
6-8,否则转步骤6-5;
步骤6-5:令Srough=Sslight;
步骤6-6:Sslight清空;
步骤6-7:转步骤5-1;
步骤6-8:Sslight判定为最终定位序列。
6.根据权利要求1所述的一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,根据定位序列进行缺陷语句定位包括:步骤7-1:获取最终定位序列Sslight;
步骤7-2:读取Sslight中的编号Sj;
步骤7-3:查看程序P的语句Sj是否含有缺陷,如果“是”,转步骤7-4,否则转步骤7-2;
步骤7-4:确定程序语句Sj为缺陷语句;
步骤7-5:检验程序P所有缺陷是否均被定位,如果“是”,转步骤7-6,否则转步骤7-2;
步骤7-6:缺陷定位结束。
7.根据权利要求1所述的一种频谱信息去冗余优化的软件缺陷测试方法,其特征在于,所述方法是对采集的所有测试用例集进行等量随机分组,选择其中一组测试用例执行,收集本组测试用例的执行信息以及结果信息,生成覆盖信息表,对覆盖信息表进行统计分析,进行语句可疑度计算,根据可疑度值的大小获得定位序列,重新选择一组新的测试用例执行,原组测试用例的频谱信息与结果信息与新组测试用例执行信息进行动态加权对原可疑度进行修正,获得新的定位序列,新的定位序列与原定位序列进行比较,若序列趋于稳定或测试用例均执行完毕,则终止测试用例的执行,根据获得的最新定位序列逐个进行排错,直到找到引发程序异常的语句。