论文部分内容阅读
随着软件规模和业务逻辑越来越复杂,传统手工测试已经很难满足软件开发的需求。因此,自动化测试应运而生,以此代替手工测试。随着大量演化算法的提出,许多学者试着将这些演化算法引入到自动化测试中,用以取代手工测试,并取得了卓著的成绩。其中应用最广泛的遗传算法受到大量学者的青睐,因此针对遗传算法应用和改进的方法最为多见。由于遗传算法容易陷入局部最优解,本文旨在进一步改良遗传算法,从测试出发,提出了一种改进的基于遗传算法的测试用例自动生成方法。本文做了以下的工作:(1)提出了碰撞域算法,通过给各个测试用例定义一个碰撞域,以过滤掉碰撞域范围中生成的测试用例,减少遗传算法在测试后期总是持续选择同一个最优解,即选择同一个测试用例。碰撞域的大小由测试用例的覆盖率确定,高覆盖率测试用例的碰撞域半径越小,周围能生成的测试用例更多,以鼓励新生成的测试用例出现在高覆盖率测试用例的周围,以覆盖之前未覆盖过的路径。同时,碰撞半径会在测试迭代过程中依据当前测试用例生成情况自动调整。(2)引入指导生成的思想,针对碰撞域算法迭代过慢的问题,通过已产生的测试用例对新产生的测试用例做出指导,在测试初期,加大高覆盖率测试用例对新生成测试用例的影响,以此加快测试初期的迭代速率。而在测试末期,则计算测试用例周围出现的测试用例数目,减少周围出现过多的测试用例,以避免陷入遗传算法最优解,即持续产生同一块区域中的测试用例。(3)通过大量实验的验证,引入碰撞域算法后,随着参数范围的扩大、被测程序覆盖度的增加,算法效果与随机法相比愈发明显,但在要求覆盖度100%的情况下,效果不稳定,主要原因在于会重复生成无效的高覆盖率测试用例。通过引入指导生成算法,减少重复生成的测试用例,与碰撞域算法相比大大减少了测试用例的生成次数,从而减少了测试所花费的时间。本文主要是通过引入碰撞域,提出了一种改进的测试用例生成算法,以解决遗传算法容易陷入局部最优解的问题,同时加入指导生成算法,减少测试后期产生的重复测试用例,加速测试迭代过程,从而提升测试用例生成效率。