软件测试相关概念
软件测试的定义:
在规定的条件下对程序进行操作,以发现程序的错误,并对软件质量进行评估。
PS:用简单的话来概述,我们可以把软件测试理解为:在把软件交付给用户使用前,我们先用一遍。其实,软件测试,就是在使用软件,站在用户的角度,模拟各种正常的和异常的场景来使用软件。
测试的目的:
软件测试不仅仅是为了发现软件缺陷与错误,而且也是对软件质量进行度量和评估,以提高软件的质量。
软件的质量
软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”。
- 明确的需求指:软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准;
- 隐含的需求指:所有专业开发的软件都应具有的隐含特征的程度,比如:符合行业标准。
软件测试原则
- 所有的软件测试都应追溯到用户需求。
- 应当尽早地和不断地进行软件测试
- 完全测试是不可能的,测试需要终止。
- 充分注意测试中的群集现象。
- 程序员应避免检查自己的程序。
- 尽量避免测试的随意性
软件测试风险
软件测试中的软件风险分析是根据预测软件将出现的风险,制定软件测试计划并排列优先等级,风险分析是对软件中潜在的问题进行识别、估计和评价的过程。
风险也包括进度风险、质量风险、人员风险、需求变更、成本风险等
优秀的软件测试工程师
- 计算机相关知识,能够熟练使用各种常用的管理工具,如:SVN,禅道等
- 开发语言:python,C,Java,Shell,ruby等
- 数据库:Oracle,MySQL,SQL Server 2005 等数据库知识
- 操作系统,如 Window系统,UNIX,Linux,Solaris, AIX 等
- 网络基本知识,熟悉常见的网络协议,如 http协议
- 能够独立完成测试环境的搭建(至少能根据安装手册搭建测试环境)
- 软件测试理论知识:软件测试流程,测试方法,测试理论有较深的理解。
- 能编写各类测试文档,具备进行需求分析,需求讲解,能独立设计测试用例,执行测试,跟踪缺陷的修复,提交完整的缺陷报告单, 编写测试报告的能力。
- 掌握性能测试,自动化测试和接口测试的方法,流程以及相关工具的使用。
职业素养:
- 良好的沟通表达能力;
- 能很好地与领导,同事相处;
- 强烈的责任感,团队意识,抗压能力,工作要细心,耐心。
软件测试工程师的日常工作内容
参与需求分析
编写和执行测试用例
搭建测试环境
提交问题单
维护测试用例,测试脚本
回归测试
编写测试报告,日报,周报
完成测试相关的其它任务
软件测试分类标准
按阶段划分
-
单元测试(UT)
一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”;是指对软件中的最小可测试单元进行检查和验证。 -
集成测试( SIT)
在单元测试的基础上,将所有模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行集成测试。
实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。
集成测试主要关注模块与模块之间的接口
集成测试的关注点:在把各个模块连接起来时,穿越模块接口的数据是否会丢失。
以下是一个接口数据丢失例子:
集成测试可以划分成2个级别:<br>1. 子系统间的数据集成测试。<br>2. 不同系统间的数据集成测试 -
系统测试
- 将集成后的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试
- 目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案
- 系统测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。
- 对象不仅仅包括需测试的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。
系统测试范围/策略/类型
功能测试、用户体验测试、性能测试、UI测试、兼容性测试、安装测试、文档测试、稳定性测试等
- 用户验收测试
- 它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制
- 主要确认软件是否按合同要求进行工作,既是否满足软件需求规格说明书中的要求。
验收测试分类:
- 非正式的验收测试
- а测试 (内测)
软件开发公司组织内部人员模拟各类用户行为对即将上市的产品进行测试。 - ß测试 (公测)
软件开发公司组织各方面的的典型客户在日常工作中实际使用,并要求用户报告异常情况、提出改进意见,然后公司再进行完善。
- а测试 (内测)
正式的验收测试
- 在UAT测试之前,我们会制定测试方案,选择基线用例,即级别高的用例,在UAT测试环境上进行测试,如果测试通过,验收测试就通过了。
按是否查看代码划分
-
白盒测试(White box)
对程序内部结构和算法进行测试。必须先全面熟悉程序内部逻辑结构,然后编写程序,对所有逻辑路径进行测试的一种方法。 -
黑盒测试(Black box)
把软件看成一个黑盒子,在完全不考虑程序内部逻辑的情况下,检查程序是否满足用户需求。 -
灰盒测试(Gray box)
关注系统接口所实现的功能,是否和需求一致。
其他划分
-
冒烟测试(BVT测试(Build Verification Test ))
当开发写完代码,编译好后,会提交到测试部进行测试时。测试人员搭建好环境,首先要对系统的基本功能进行测试,保证主要流程的能正常使用,这叫冒烟测试。如果冒烟测试不通过,就打回给开发人员修改。
假设一个电商系统,它的基本功能是:后台发布商品,发货;前台注册,登录,下单,付款,确认收货。 -
回归测试(Regression Testing )
对软件的新版本测试时,重复执行上一个版本测试时使用的测试用例,防止出现“以前应用没有的问题现在出问题了”,这是全量回归;当在测试过程中,发现某个模块存在缺陷,开发修复后,测试人员重新验证该缺陷是否被修复,以及验证相关联的模块是否受影响,这叫部分回归。
怎么做回归测试呢? 首先,把bug单对应的用例执行一遍,还要检查有数据交互的模块会不会受影响,有没有引入新的问题;项目上线前,还要把当前版本的重要功能以及冒烟测试的用例都回归一遍,确保重要功能上线后不出问题。 -
敏捷测试(相对敏捷开发而言)
敏捷开发的最大特点是高度迭代,有周期性,并且能够及时、持续地响应客户的频繁反馈。敏捷测试即是不断修正质量指标,正确建立测试策略,确认客户的有效需求得以圆满实现和确保整个生产的过程安全的、及时的发布最终产品。
敏捷测试的特点:
- 强调从客户的角度,即从使用系统的用户角度来测试系统。
- 重点关注持续迭代地测试新开发的功能,而不再强调传统测试过程中严格的测试阶段。
- 开发一个模块就测试一个模块,不需要等到系统所有模块都开发完成再测试。