1.一种基于fuzzing测试的测试用例生成方法,其特征在于:包括以下步骤:步骤1:对被测程序进行插桩,通过随机数标记被测程序中的每个基本块;
步骤2:将测试样例集中所有的测试样例送入被测程序中进行测试,并用随机数记录每个测试样例在被测程序中的执行路径;
步骤3:筛选出测试样例集中最优的测试样例,记作第一代测试样例,并计算出该测试样例在被测程序中执行路径的具体值;其中:所述最优的测试样例是指在测试样例集中经过计算得到的评估值最小的测试样例;所述具体值是指每个测试样例在被测程序中的执行路径经过处理后得到的数值;
步骤4:对第一代测试样例进行变异操作,生成新的测试样例,并将第一代测试样例从测试样例集中移除;
步骤5:将所有新的测试样例送入被测程序中,用随机数记录所有新的测试样例在被测程序中的执行路径,并计算出所有新的测试样例在被测程序中的执行路径的具体值;
步骤6:在新的测试样例中,将与第一代测试样例在被测程序中的执行路径的具体值不同的测试样例筛选出来,记作第二代测试样例,并加入测试样例集中;
步骤7:对测试样例集中的测试样例重复步骤2至步骤6,直到新生成的所有测试样例在被测程序中的执行路径的具体值均与上一代测试样例在被测程序中的程序的执行路径的具体值相同,停止重复;其中,由第一代测试样例生成的新的测试样例记作第二代测试样例,由第二代测试样例生成的新的测试样例记作第三代测试样例,以此类推。
2.根据权利要求1所述一种基于fuzzing测试的测试用例生成方法,其特征在于:所述步骤3中,所述具体值的算法为:用tb表示第一代测试样例,用表示tb在被测程序中的执行路
径,用key代表执行路径的具体值,用 表示 的具体值,
其中i=1,2,3,…,m;(Pbi<<1)表示将Pbi左移一位, 表示将Pbi左移一位后再与Pb(i+1)异或。
3.根据权利要求1所述一种基于fuzzing测试的测试用例生成方法,其特征在于:所述步骤3中评估值的计算方法为:P=Etime×Fsize,
其中,P表示评估值,Fsize表示测试样例的文件大小,Etime表示测试样例在被测程序中测试执行的时间。
4.根据权利要求1所述一种基于fuzzing测试的测试用例生成方法,其特征在于:在所述步骤4中变异操作包括以下步骤:步骤a:将第一代测试样例进行位翻转,区分第一代测试样例的元数据和数据;
步骤b:用不同概率的对元数据部分和数据部分进行加减运算、替换、插入、随机变异和铰接处理,生成新的测试样例;其中,对元数据处理的概率高,对数据处理的概率低。
5.根据权利要求4所述一种基于fuzzing测试的测试用例生成方法,其特征在于:所述步骤a中区分元数据和数据方法为:对第一代测试样例的每一位逐一进行翻转操作,若翻转后的测试样例在被测程序中的执行路径没有发生变化,或者翻转后的测试样例在被测程序中的执行路径与前一位翻转后在被测程序中的执行路径相同,则认为该位属于数据;
若翻转后的测试样例在被测程序中的执行路径与其前一位翻转后在被测程序中的执行路径发生变化,则认为该位属于元数据。
6.根据权利要求2所述一种基于fuzzing测试的测试用例生成方法,其特征在于:所述步骤6中筛选第二代测试样例的步骤如下:步骤(1):用tb表示第一代测试样例,用Ts={t1,t2,…ti…,tn}表示tb生成的所有新的测试样例步骤(2):从Ts={t1,t2,…ti…,tn}选出一个新的测试样例ti;用 表示tb在被测程序中的执行路径,用 表示ti在被测程序中的执行路径,计算 和 的具体值;
步骤(3):比较 和 的具体值,若不相同,对 和 进行哈希处理,然后存储,并将新的测试样例记作第二代测试样例,加入到测试样例集中;反之,则不做任何处理;
步骤(4):对Ts={t1,t2,…ti…,tn}中剩余的新的测试样例重复步骤(2)和步骤(3)。
7.根据权利要求6所述,其特征在于:所述哈希处理由哈希函数完成,具体算法为:用key代表执行路径的具体值,n表示key的总的位数,i表示key中的第i位。