前言 一位学者曾经明确提出,计算已经变成如此广泛的概念,它泛指一切可按程序或按逻辑运行的活动和行为,以致计算机的概念也得到更加广泛的推广,它泛指一切可由内部软件驱动的设备。在这个意义上,时至今日,我们在人类社会中各个领域再也找不到一个角落,在那里人们根本不需要使用任何由软件驱动的计算机设备。毫不夸张地说,我们的生活和工作已经由计算机支配,或者说由其内部运行的软件支配,至少受到它们的重大影响。 由于软件是非物质存在的,它看不见、摸不着,它的运行并不严格遵循“物理定律”。随着社会的发展和计算机的广泛应用,软件越来越复杂,导致软件本身原本存在的不可避免的“缺陷”越来越难以被觉察。有缺陷的软件在运行时带有不确定性,会随机地产生出乎人们意料的结果,而其结果往往带来巨大伤害。注意到软件缺陷在人类社会中的潜在危险,软件测试成为人们关注的技术和研究课题。自计算机问世以来,无论从技术方面还是理论方面,软件测试都得到迅猛发展。 目前,国内外都出版了大量高质量的有关软件测试的专著。这些专著大都侧重具体技术层面,软件测试的思想原理并未受到专著作者的重视。鉴于此,我想从思想原理方面对软件测试的理论和实践做一些工作。J.Myers认为: “人们对软件测试的看法决定了其对软件测试的方式,例如可以影响到测试用例的选取工作。”大体上说,对于软件测试,基本上可以分为两种“态度”,一种是竭力证明开发的软件的正确性; 另一种是不相信软件是正确的,并想方设法找出它的毛病。在哲学上,前一种态度称为证明论,后一种态度称为证伪论。实际上,不仅在软件测试领域,在人类所有科学领域,对于研究的课题都是根据证明论和证伪论两种观念发展的。一般来说,在很长的历史阶段,证明论一直是主导观念。反映在计算机科学发展早期,许多大师都在软件正确性证明方向做过努力。完全证明软件的正确性(如果说它不是不可能的话),在技术上是非常困难的,这是因为它通常要求艰深的数学工具。所以,后来软件界放弃了(或者说不再偏重)软件正确性的演绎证明,而是把精力放在现在我们所熟知的软件测试技术上。不过,在软件测试技术的选取和发展上,人们仍然持有不同的观念。我们认为,无论基于什么样观念发展软件测试理论,都会丰富软件测试工作,且对软件测试技术的发展会有极大帮助。因此,本书主要从软件测试思想原理方面着手,即基于证明论和证伪论两种理论取向,对现有的软件测试工作进行梳理。虽然我们试图尽可能清晰地介绍一些软件测试的工作,但重点并不完全是讨论软件测试的技术细节,只关注怎样把软件测试的实践和它所依据的原理统一在一个完整的框架下进行研究,对于此项工作,还从模型和验证两种角度进行了阐述。特别地,在各种理论取向下,提出了一些有代表性的技术模型和理论模型,如使用Walsh函数模型的检验技术、随机模糊软件缺陷定位技术、软件拓扑空间和测试原理之间的关系模型等,借以表示思想原理对于软件测试的研究是有指导意义的。“思想上的突破往往是决定一切的”,现在已经成为人们的共识。如果本书能引起人们对软件测试思想原理的重视,那么我的目的就算达到了。 本书的出版要感谢国家自然科学基金项目(No.617720214)的大力支持和资助。感谢江苏省软件测试工程实验室项目的大力支持和帮助。感谢所有一直关心和帮助我的恩师、学者和同事。感谢清华大学出版社的大力支持和帮助。 王蓁蓁2021年9月于金陵科技学院