软件测试分类
单元测试:单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程。
集成测试:集成测试是单元测试的基础上,将通过单元模块组装成系统或子系统,再进行测试,重点是检查模块之间的接口是否正确。
系统测试:系统测试是针对整个产品系统进行的测试,验证系统是否满足了需求规格的定义,以及软件系统的正确性和性能等是否满足其规约所指定的要求。
验收测试:验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,向软件购买都展示该软件系统满足其用户的需求。
白盒测试、黑盒测试、灰盒测试
白盒测试与黑盒测试,主要是根据在软件测试工作中对软件代码的可见程度进行的划分;这也是软件测试领域中最基本的概念。
黑盒测试:黑盒测试,指的是把被测的软件看作是一个黑盒子,我们不去关心盒子里面的结构是什么样子的,只关心软件的输入数据和输出结果。它只检查程序呈现给用户的功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
白盒测试:白盒测试,指的是把盒子打开,去研究里面的源代码和程序执行结果。它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
灰盒测试:灰盒测试介于黑盒测试与白盒测试之间。可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒测试的方法。
功能测试与性能测试从对软件的不同测试点可以划分为功能测试与性能测试。
功能测试功能测试检查实际的功能是否符合用户的需求。测试的大部分工作也是围绕软件的功能进行,设计软件的目的也就是满足客户对其功能的需求。如果偏离的这个目的任何测试工作都是没有意义的。
功能测试又可以细分为很多种:逻辑功能测试、界面测试、易用性测试、安装测试、兼容性测试等。
性能测试性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。软件的性能包括很多方面,主要有时间性能和空间性能两种。
时间性能:主要是指软件的一个具体的响应时间。比如一个登录所需要的时间,一个交易所需要的时间等。当然,抛开具体的测试环境,来分析一次事务的响应时间是没有任何意义的。需要搭建一个具体且独立的测试环境。
空间性能:主要指软件运行时所消耗的系统资源,比如硬件资源,CPU、内存,网络带宽消耗等。
手工测试与自动化测试从对软件测试工作的自动化程度可以划分为手工测试与自动化测试。
手工测试:手工测试就是由人去一个一个的去执行测试用例,通过键盘鼠标等输入一些参数,查看返回结果是否符合预期结果。手工测试并不非专业术语,手工测试通常是指我们在系统测试阶段所进行的功能测试,为了更明显的与自动化测试进行区分,所以这里使用了手工测试。
自动化测试自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
自动化测试又可分为:功能自动化测试与性能自动化测试。我们一般所说的自动化测试就是指功能自动化测试,通过相关的测试技术,通过编码的方式用一段程序来测试一个软件的功能,这样就可以重复执行程序来进行重复的测试。如果一个软件一小部分发生改变我们只要修改一部分自动化测试代码,就可以重复的对整个软件进行功能测试;从而大大的提高了测试效率。性能自动化测试,当然,除了早期阶段,现在的性能测试工作都是通过性能测试工具辅助完成的。通过工具可以模拟成千上万的用户向系统发送请求,用来验证系统的处理能力。
冒烟测试、回归测试、随机测试这三种测试出现在软件功能测试周期中,既不算具体明确的测试阶段也不是具体的测试方法。
冒烟测试:是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。引入到软件测试中,就是指测试小组在正规测试一个新版本之前,先投入较少的人力和时间验证一个软件 的主要功能,如果主要功能都没有实现,则打回开发组重新开发。这样做的好处是可以节省大量的时间成本和人力成本。
回归测试:回归测试是指修改了旧代码后,重新进行测试以确认修改后没有引入新的错误或导致其他代码产生错误。回归测试一般是在进行软件的第二轮测试开始的,验证第一轮中发现的问题是否得到修复。当然,回归也是一个循环的过程,如果回归的问题通不过,则需要开发人员修改后再次进行回归,直到通过为止。
随机测试:是指测试中的所有输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。随机测试可以发现一些隐蔽的错误,但是也有很多缺点,比如测试不系统,无法统计代码覆盖率和需求覆盖率,发现的问题难以重现。一般是放在测试的最后执行。其实随机测试更专业的升级版叫 探索性测试探索性测试探索性测试可以说是一种测试思维技术。它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。
探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
安全测试安全测试是在 IT 软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。安全测试也在越来越受到企业的关注和重视,因为由于安全性问题造成的后果是不可估量的。尤其对于互联网产品最容易遭受各种安全攻击。
分层的自动化测试
传统的自动化测试更关注产品 UI 层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段(层次)都需要自动化测试。
- 单元测试:我们需要规范的来做单元测试同样需要相应的单元测试框架,如 java 的 Junit、testNG,C#的 NUnit ,Python 的 unittest、pytest 等,几乎所有的主流语言,都会有其对应的单元测试框架。
- 集成、接口测试:对于不少测试新手来说不太容易理解,单元测试关注代码的实现逻辑,例如一个 if分支或一个 for 循环的实现;那么集成、接口测试关注的一是个函数、类(方法)所提供的接口是否可靠。例如,我定义一个 add()函数用于计算两个参数的结果并返回,那么我需要调用 add()并传参,并比较返回值是否两个参数相加。当然,接口测试也可以是 url 的形式进行传递。例如,我们通过 get 方式向服务器发送请求,那么我们发送的内容做为 URL 的一部分传递到服务器端。但比如 Web service 技术对外提供的一个公共接口,需要通过 soapUI 等工具对其进行测试。
- UI 层的自动化测试:这个大家应该再熟悉不过了,大部分测试人员的大部分工作都是对 UI 层的功能进行测试。例如,我们不断重复的对一个表单提交,结果查询等功能进行测试,我们可以通过相应的自动化测试工具来模拟这些操作,从而解放重复的劳动。UI 层的自动化测试工具非常多,比较主流的是 QTP,Robot Framework、watir、Selenium 等。为什么要画成一个金字塔形,则不是长方形 或倒三角形呢? 这是为了表示不同阶段所投入自动化测单元测试:我们需要规范的来做单元测试同样需要相应的单元测试框架,如 java 的 Junit、testNG,C#的 NUnit ,Python 的 unittest、pytest 等,几乎所有的主流语言,都会有其对应的单元测试框架。集成、接口测试:对于不少测试新手来说不太容易理解,单元测试关注代码的实现逻辑,例如一个 if分支或一个 for 循环的实现;那么集成、接口测试关注的一是个函数、类(方法)所提供的接口是否可靠。例如,我定义一个 add()函数用于计算两个参数的结果并返回,那么我需要调用 add()并传参,并比较返回值是否两个参数相加。当然,接口测试也可以是 url 的形式进行传递。例如,我们通过 get 方式向服务器发送请求,那么我们发送的内容做为 URL 的一部分传递到服务器端。但比如 Web service 技术对外提供的一个公共接口,需要通过 soapUI 等工具对其进行测试。UI 层的自动化测试:这个大家应该再熟悉不过了,大部分测试人员的大部分工作都是对 UI 层的功能进行测试。例如,我们不断重复的对一个表单提交,结果查询等功能进行测试,我们可以通过相应的自动化测试工具来模拟这些操作,从而解放重复的劳动。UI 层的自动化测试工具非常多,比较主流的是 QTP,Robot Framework、watir、Selenium 等。为什么要画成一个金字塔形,则不是长方形 或倒三角形呢? 这是为了表示不同阶段所投入自动化测
自动化测试及工具简述
- 自动化测试的概念有广义与狭义之分;
广义上来讲所有借助工具来进行软件测试都可以称为自动化测试;狭义上来讲,主要指基于 UI 层的自动化测试;除此之外还有基代码编写阶段的单元自动化测试,基本集成测试阶段的接口自动化测试。注意:如果没有特别说明,本文所说的“自动化测试”均指基于“UI 的功能自动化测试”。目前市面上的自动化测试工具非常多,下面几款是比较常见的自动化测试工具。
- QTP
QTP 是 HP Quick Test Professional software 的简称,是一种企业级的自动测试工具。提供了强大易用的录制回放功能。支持 B/S 与 C/S 两种架构的软件测试。是目前主流的自动化测试工具。 - Robot Framework
Robot Framework 是一款 Python 编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。 - watir
Watir 全称是“Web Application Testing in Ruby”。它是一种基于 Web 模式的自动化功能测试工具。watir 是一个 Ruby 语言库,使用 Ruby 语言进行脚本开发。 - Selenium
Selenium 也是一个用于 Web 应用程序测试的工具,支持多平台、多浏览、多语言去实现自动化测试。目前在 web 自动化领域应用越来越广泛。当然,除了上面所列自动化测试工外,根据不同的应用还有很多商业的、开源的以及公司自己开发的自动化测试工具。