信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。
随着软件规模的不断扩大,复杂程度的不断提高,以及面向对象程序设计方法和工具的使用,软件测试的难度也进一步提高。实际的软件开发经验表明,软件测试在整个软件开发周期中,约占去1/3的时间,以及大约50%的总费用。令人遗憾的是目前的大部分软件测试还是采用人工测试的方式,有效的软件测试工具都比较昂贵。但事实上,测试却是在整个软件开发过程中极有可能应用计算机进行自动化的工作,原因是测试的许多操作是重复性的、非智力创造性的,只需要细致注意力就能完成的工作,而计算机的特点就决定了它最适合代替人类去完成这些任务。
本文对软件测试的方法做了详细的归纳和总结,分别介绍了动态测试、静态测试、白盒测试和黑盒测试等测试方法。最后总结了近年来测试数据的各种生成技术,并且根据对各种方法和技术进行了系统地总结,提炼出了本文使用的方法和技术。
本文对各种测试数据生成算法进行了研究,采用遗传算法为本文的核心算法,对遗传算法在软件测试环境下的优缺点进行了分析,并且针对实际应用对其缺点进行了改进。首先,将遗传算法和模拟退火算法相结合,并对“退火”机制进行了改进,使其解决了邻域构造问题。其次,设计了自适应变异概率,保证了最优个体在进化过程中不被破坏,减少了进化过程中的“抖动”现象。再次,适应度缩放法的使用,不仅进一步解决了“早熟”问题,而且加快了算法的收敛速度,提高了搜索效率。改进后的算法称为自适应遗传模拟退火算法,简称AGSA。在性能上,AGSA较先前的算法有了很大的提高。
最后,本文以新算法AGSA为核心算法,设计和实现了基于指定路径的测试数据自动生成系统。该系统由三大部分组成,分别是程序分析器,路径选择器和数据生成器。该系统能够准确地生成满足指定路径的测试数据,收敛性很高,并且通过实验证明了该系统的优越性。