一、软件测试的发展史
1979年,Glenford Myers的《软件测试艺术》,对测试做了定义:测试是为发现错误而执行的一个程序或者系统的过程。1983年,Bill Hetzel在《软件测试完全指南》中指出:测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。1996年提出的测试能力成熟度TCMM(Testing Capability Maturity Model)、测试支持度TSM(Testability Support Model)、测试成熟度TMM(Testing Maturity Model)。2002年,Rick和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命过程。
二、软件测试的相关背景
由于测试在中国的重视程度的问题, 才毕业那时的我也一直认为测试应该是不重要的, 甚至认为没有必要有专门的测试职业。认为软件主要是开发人员的事, 软件的成果也是由开发人员决定的, 当我在参加工作后, 真正参与软件技术开发的时候, 才知道并不是我想象的那样。软件是人编的,所以不完美,不可能不存在错误。例如著名的软件测试案例:
1、迪士尼的狮子王 (1994~1995)软件。
2、英特尔奔腾浮点除法软件缺陷(1994)。
3、美国航天局火星极地登陆(1999)项目。
4、爱国者导弹防御系统 (1991)。
5、千年虫。
三、软件测试的概述
3.1软件测试的定义
软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
3.2软件测试的目的
如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。在谈到软件测试时,引用Grenford J. Myers在《The Art of Software Testing》一书中的观点: (1)软件测试是为了发现错误而执行程序的过程;(2)测试是为了证明程序有错,而不是证明程序无错误;(3)一个好的测试用例是在于它能发现至今未发现的错误;(4)一个成功的测试是发现了至今未发现的错误的测试。
3.3软件测试的原则
1.应当把"尽早和不断的测试"作为开发者的座右铭。2.测试用例应由测试输入数据和与之对应的预期输出结果这两部分。3.程序员应避免检查自己的程序。4.在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。5.充分注意测试中的群集现象。6.严格执行测试计划,排除测试的随意性。对于测试计划,要明确规定,不要随意解释。7.应当对每一个测试结果做全面检查。8.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
四、软件测试的分类及相应的工具
4.1常用分类
(1)从是否需要执行被测软件的角度, 可分为:静态测试和动态测试。
静态测试是指不实际运行被测软件, 而只是静态的检查程序代码、界面或文档中可能存在的错误的过程。其中包括代码测试、界面测试和文档测试3个方面。静态测试工具的代表有:Telelogic公司的Logiscope软件;PR公司的PRQA软件。
动态测试是指实际运行被测程序, 输入相应的测试数据, 检查实际输出结果和预期结果是否相符的过程。所以, 我们判断一个测试属于动态还是静态测试 , 唯一的标准就是看是否运行程序。动态测试工具的代表有:Compuware公司的DevPartner软件;Rational公司的Purify系列等。
(2)从测试是否针对系统的内部结构和具体实现算法的角度来看, 可分为:白盒测试和黑盒测试。
白盒测试也称结构测试或逻辑驱动测试, 它是知道产品内部工作过程, 可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行, 按照程序内部的结构测试程序, 检验程序中的每条通路是否都有能按预定要求正确工作, 而不顾它的功能。根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。白盒测试的主要方法:逻辑驱动测试和基本路径测试
黑盒测试指的是把被测软件看作是一个黑盒子, 我们不去关心盒子里面的结构是什么样子, 只关心软件的输入数据和输出结果。
黑盒测试的测试用例设计主要是:等价划分法、边界值法、错误推测法、因果图法。黑盒测试工具的代表有:Rational公司的TeamTest、Robot Compuware公司的QACenter。
4.2其他测试工具
专用于性能测试的工具包括有:Radview公司的WebLoad;Microsoft公司的WebStress等工具;针对数据库测试的TestBytes;对应用性能进行优化的EcoScope等工具。MercuryInteractive的LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。AdventNet QEngine是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java API测试、SOAP测试、回归测试和Java应用性能测试。
专用于功能测试的工具有:QTP测试工具,一种自动测试工具。主要目的是用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。QuickTest针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。Mercury Interactive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。(来源:千锋软件测试)