关键词:
深度学习
缺陷预测
脆弱分支
模糊测试
测试用例自动生成
摘要:
软件测试用例自动生成对于提高软件测试的效率来说意义重大,通过测试用例自动生成可以降低软件测试过程中时间和人力资源的消耗,从而提高测试效率。模糊测试作为一种高效的软件测试方法,在漏洞挖掘领域中得到了广泛的应用。在模糊测试用例生成的过程中,测试用例的调度和突变是影响模糊测试用例生成质量的关键。近年来,基于覆盖率引导的模糊测试方法因其可以成功挖掘软件漏洞而备受关注,这种方法主要是利用测试用例的覆盖率信息来指导模糊测试用例生成过程中的测试用例调度和突变。然而这种方法在生成测试用例时仍然存在着一些不足。首先是过度追求代码覆盖率。其次是生成的测试用例随机性较大和无效性较高。针对当前方法在测试用例的调度和突变方式上存在的问题,本文借助于深度学习技术来解决上述问题,本文的贡献在于:
针对过度追求代码覆盖率这一问题,本文对当前模糊测试方法的测试用例调度方式进行了改进,提出了基于程序缺陷预测的测试用例优先调度方法。具体来说,首先提出了基于GTDAPool的程序缺陷预测模型,通过预测模型对测试程序进行分析以便后续根据测试用例的执行路径来获取测试用例的适应度分数。适应度分数用来刻画测试用例执行路径的脆弱情况。基于适应度分数划分测试用例的优先级,根据测试用例的优先级进行测试用例调度,并且设计了基于测试用例优先级的能量调度方式,进一步提高测试用例生成的质量。最后,本文分别对提出的预测模型和调度方法进行了实验评估,评估结果表明本文提出的预测模型和调度方法是有效的。
针对生成的测试用例随机性大和无效性高问题,本文提出了面向脆弱分支的测试用例自动生成方法。具体来说,现有的模糊测试方法在突变生成用例时缺少方向性,因此为了指明突变的方向,引入了脆弱分支的概念,将脆弱分支作为指导用例突变的方向。进一步提出了基于脆弱分支导向的用例突变算法,通过将大多数测试用例集中于覆盖程序中的脆弱区域以提高漏洞挖掘的可能性。将上述测试用例调度方法和基于脆弱分支导向的测试用例突变算法进行结合,提出了基于脆弱分支导向的测试用例自动生成方法。最后,本文对测试用例自动生成方法进行了实验评估,评估结果表明提出的测试用例自动生成方法是有效的。