前 言
随着计算机技术的飞速发展,计算机已经应用到国民经济和社会生活的方方面面,随之而来的是计算机系统的规模和复杂性急剧增加。软件作为计算机系统的灵魂,其规模和复杂性也以惊人的速度发生着变化。软件质量问题已成为制约计算机发展的主要因素之一。许多计算机科学家在展望计算机科学发展方向和策略时,都把提高软件质量放在优先于提高软件功能和性能的地位。
一些常见操作系统的代码达到百万行乃至上千万行,而大规模软件中的缺陷更是难以避免。据统计,在编译和传统的软件测试之后,平均每千行软件代码中包含10~20个缺陷。由软件缺陷引起的失效和故障轻则给用户带来不便,重则造成巨大的经济损失,甚至生命财产损失。
虽然已经出现了实用的形式化方法和程序正确性证明技术,但软件测试在今后较长时间内仍将是保障软件质量的重要手段。软件测试在整个软件开发周期中所占比重很大,据统计,软件测试的开销占所有开发成本的50%,甚至更多。单元测试作为软件测试中的重要环节,是指对软件中的基本组成单位进行测试,其目的就是完整检测代码单元的功能逻辑,找出代码单元本身的所有功能逻辑错误。单纯的人工单元测试通常会花费大量的人力和时间,且不能保证准确性。对于上述提到的大规模软件来说,人工测试几乎是不可能的。而测试用例自动生成技术可以节省测试时间,拓展测试人员的能力,降低开发成本,在软件测试领域发挥着不可替代的作用。
在软件测试开始时,测试用例生成器可能会自动生成大量测试用例。同时,在开发的过程中,软件的代码会不断改进和增加,因此需要执行其测试用例来检查新代码中是否产生了错误。软件开发人员可以通过删除冗余测试用例来减小测试用例集大小,或者通过排序的方法将检测出故障可能性大的测试用例率先运行,同时仍然确保满足所有测试要求,这样测试效率可能会更高,并且测试的有效性也不会受到损害。
本书作者及其团队一直致力于软件测试方面的研究,在本书所涉及的软件测试和人工智能相关方面做了大量研究,为本书研究工作的开展奠定了扎实的学术研究基础。作者之前曾经出版过关注程序分析的专著《源代码分析》(科学出版社,2018年出版)。比较而言,《源代码分析》更加侧重程序分析和软件工程本身,而本书更加偏重各种人工智能技术在其中的应用,即关注学科交叉的内容。而在此学科交叉领域,本书是国内外第一本如此细致地介绍测试用例相关内容的书籍,因而具有创新性和启发性。(https://www.daowen.com)
感谢王兴德和王启明在本书撰写过程中给予的大力支持,感谢张旭舟、张博、白玉、徐健豪、李晋忠等对本书内容所作的贡献。
限于作者水平,书中难免存在不足之处,敬请读者批评指正。
作 者
2022年2月