实践证明,尽管人们在软件的过程中使用了许多保证软件的方法和技术,但开发出的软件中还会隐藏许多错误和。这对于规模大、复杂性高的软件更是如此。所以,严格的软件测试对于保证软件质量具有重要作用。
测试的根本目的就是为了发现尽可能多的缺陷。这里的缺陷是一种泛称,它可以指功能的错误,也可以指低 下,易用性差等等。因此,测试是一种“破坏性”行为。测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错。即软件测试是为了“证伪” 而非“证真”。把证明程序无错当作测试目的不仅是不正确的, 完全做不到的,而且对做好测试没有任何益处,甚至是十分有害的。要设法使软件发生故障,暴露软件错误, 能够发现错误的测试是成功的测试,否则是失败的测试。
软件测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。
测试阶段的基本任务应该是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组“高产”的(一组输入数据和与之对应的预期的输出结果,在设计测试用例时,应包括合理的输入数据和不合理的输入数据),利用这些用例执行程序,找出软件潜在的缺陷一个好的测试用例很可能找到至今为止尚未发现的缺陷的用例;一个成功的测试则是指揭示了至今为止尚未发现的缺陷的测试。
主观上由于开发人员思维的局限性,客观上由于目前开发的软件系统都由相当的复杂性,决定了在开发过程中出现软件错误是不可避免的。若能及早排除 开发中的错误,就可以排除给后期工作带来的麻烦,也就避免了付出高昂的代价,从而大大地提高了系统开发过程的效率,因此,软件测试在整个软件开发生命周期 各个环节中都是不可缺少的。
软件测试总的目标是:确保软件的质量,所以测试并不仅是个技术问题,更是个职业道德问题。