一、软件测试的分类:
1)单元测试:对程序中单个子程序或具有独立功能的代码进行测试。一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,
Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。
单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
2)集成测试:集成测试是在单元测试基础之上的,先通过单元模块组成系统或者子系统, 在进行测试,
主要是检查模块之间的接口是否正确。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。
所有的软件项目都不能摆脱系统集成这个阶段。
3)系统测试:是对整个系统的测试,将硬件、软件、操作人员看作一个整体系统测试是针对整个产品系统进行测试,
检验它是否有不符合系统说明书的地方,以及软件系统的正确性和性能等是否满足其需求规格的要求。
4)验收测试:验收测试是部署软件之前的最后一个测试阶段,在软件产品完成了单元测试、集成测试和系统测试之后,
验收测试的目的就是确保软件准备就绪,向用户展示该系统能够满足使用者的需求。
如图所示:
白盒测试、黑盒测试、灰盒测试
白盒测试与黑盒测试,主要是根据软件测试工作中对软件代码的可见度进行的划分。
1??、黑盒测试
所谓的黑盒测试,我们可以把它理解为一个黑色的盒子,我们不知道它里面具体构造如何,我们要测试的是每个功能点是否可用,
是否满足客户需求规格,黑盒测试是从用户的角度,从输入数据与输出数据的对应关系出发进行测试,
它只检查软件功能是否按照需求规格正常使用,不考虑内部逻辑结构,其实主要就是针对于软件界面和软件功能进行测试。
2??、白盒测试
顾名思义就是一个透明的盒子,我们能看见盒子中内部结构是怎样的,我们需要了解程序内部逻辑结构、对所有逻辑路径进行测试。
检查程序中的每一条逻辑是否按预定要求来完成。白盒测试法的覆盖标准有逻辑覆盖循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合和路径覆盖。
3??、灰盒测试
主要介于黑盒测试于白盒测试之间。
灰盒测试多用于集成测试阶段,既关心输入数据与输出结果的正确性,同时也需要关心内部结构表现,
只不过所关心的不像白盒测试那样详细、完整,它只是通过一些现象、事件、标志来判断内部的运行状态,
有的时候输出的数据是正确,但内部其实已经发生错误。
二、功能测试:
主要检查实际功能是否符合用户的需求。由测试人员手工去执行测试用例,通过键盘鼠标等输入一些参数,并观察返回结果是否符合预期结果,细分种类如图所示:
1)冒烟测试:
对一个新版本进行大规模的系统测试之前,先验证一下软件的基本功能是否实现,是否剧本可测性。
2)回归测试:
在开发修改了旧代码后,重新进行测试以确认修改后没有引入新的错误或导致其他代码产生错误。
回归测试一般是在进行第二轮软件测试开始的,验证第一轮软件测试中发下问题是否得到修复,当然,
回归也是一个循环的过程,如果回归的问题不通过,需要开发人员修改后再次进行回归,知道所有问题回归通过为止。
3)随机测试:
在测试中所有输入数据都是随机生成的,目的就是模拟用户的真是操作,并发现一些边缘性的问题。
随机测试可以发现一些隐蔽的错误,但是也有很多缺点,例如测试不系统,无法统计代码覆盖率和需求覆盖率,
发现的问题难以重现,一般是在测试的最后执行,
4)安全测试:
在产品开发基本完成至发布阶段,对产品进行检验以验证产品符合安全需求定义和质量标准的过程。
安全测试现在越来越受企业重视和关注,因为由于安全性的问题造成的后果是不可估量的,尤其是互联网产品,最容易受到各种安全攻击。
三、分层的自动化测试
测试金字塔(Test Automation Pyramid)迈克科恩在2009年的著作Succeeding with Agile:Software Development using Scrum (《Scrum敏捷软件开发》)
中提到,在这本书中,自动化测试金字塔被定义为一种三层的金字塔形结构,是一种自动化测试过程的金字塔形策略结构。
最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层;最上层是用户界面,通常用户界面是脆弱的,
测试和修改的经济成本和