软件测试入门指南:周期、模型和文档化

在业界,我们通常将软件测试称为验证和确证软件产品的过程。因此,它关注软件产品的如下三个方面:

  1. 是否满足那些指导其设计和开发的业务和技术需求
  2. 是否能够按需运行并提供稳定的服务
  3. 既定的服务功能是否能够重复实现

软件开发生命周期

首先,我们来了解一下软件开发生命周期(Software Development Life Cycle,SDLC)的概念。它是整个软件行业用于设计、开发和测试高质量软件的过程。SDLC旨在规定的时间和成本预算之内,生产出那些满足甚至超出客户期望的高质量软件。下图概括性地描绘了SDLC所涉及的各个阶段。

由上图可见,在V模型的左侧是一系列开发活动,其中包括:用户需求、软件定义、概要设计、详细设计、以及软件编码;而右侧则是一系列对应的测试活动,其中包括:单元测试、集成测试、系统测试、以及验收测试。因此,左右不同阶段的联系可以简述为:单元测试着眼于开发出的代码是否符合详细设计的要求;集成测试检查的是各组成组件能否协同工作;系统测试关注的是集成到一起的产品是否符合规格说明的要求;而验收测试则注重的是产品能否让最终用户满意。

软件测试方法

通常而言,我们会采取如下三种方法开展软件的相关测试,它们是:

  1. 黑盒测试:测试人员并不知晓被测项目的内部结构、设计、以及实现原理。
  2. 白盒测试:测试人员完全知晓被测项目的内部结构、设计、以及实现原理。
  3. 灰盒测试:测试人员仅仅知晓被测项目有限的内部功能信息。

软件测试阶段

我们运用软件测试的不同阶段,来对目标软件系统的每个单元或组件进行审验。由于系统测试的主要目标就是评估其是否符合既定的开发需求。因此,这些不同的测试阶段不但有助于检查软件的行为和性能,也能够识别出其中的缺陷(bug),以及在整个开发的生命周期中起到一定的协调作用。具体说来,软件测试分为如下四个阶段:

  1. 单元测试:通过设定目标软件的最小测试单位,尽快地找出各个模块或组件中的明显错误,以提高单块程序代码的质量、并减少后期返工的成本。
  2. 集成测试:通过测试整个系统能否编译和构建成功,以发现系统架构和模块之间、模块与模块之间是否存在接口问题,并记录下测试结果。
  3. 系统测试:通过运行整个系统,来根据系统测试用例执行全面测试,验证并确证系统的功能与性能是否符合需求规格说明中的要求。
  4. 验收测试:在系统安装部署完成之后,通过邀请客户参与进来,进而确认软件系统能否按照既定的要求平稳运行。

软件测试文档化

将各项测试用例进行文档化,将有助于我们评估测试的工作量,以及跟踪测试的覆盖率。那么,常用的软件测试相关文档包括如下四种:

1、测试计划:为目标应用程序提供测试大纲与策略。其中包括:测试的范围、方法、资源和进度等。具体还会涉及到各阶段的测试任务、时间进度安排、测试执行团队、以及风险揭示等。

2、测试场景:描述目标的特性、测试的方法、环境的要求、工具的选择、以及测试的范围。具体还会涉及到各阶段的启动、停止、完成标准等条件。

3、测试用例:它是由一组条件或变量所组成,测试人员籍此确定被测系统是否满足要求,以及能否正常工作。开发测试用例的过程,也有助于发现应用程序在代码与设计中的问题。因此,在具体测试期间,我们可以设计出许多类型的测试用例。例如:

功能性测试用例

负面错误测试用例

逻辑测试用例

物理测试用例

用户接口测试用例

4、追溯矩阵:也称为需求追踪矩阵(Requirement Traceability Matrix,RTM),它是一张被用于在创建产品的SDLC模型时,草拟各种需求的表格。在实际应用中,我们既可以采取从设计到编码的前向跟踪方式,也可以采用相反的向后跟踪方式。

缺陷管理流程

众所周知,软件开发是一个非常复杂的过程。它往往要求团队成员在严格的时间期限内,每天都必须完成大量的代码编写工作,因此他们通常没有太多的时间去考虑如何避免出现错误。因此,对于每个软件开发项目来说,我们都需要有一个能够检测错误与缺陷,进而及时修复的缺陷管理过程。

缺陷管理,或称错误跟踪,通常是在产品的测试阶段进行的。我们可以通过两种不同的方式实现缺陷管理,即:开发人员自行测试他们的产品;或邀请用户参与测试。虽然最终用户能够提供不同的视角来识别缺陷,但是他们的识别途径往往不够全面。

因此,缺陷管理通常会涉及到如下四个步骤:

  1. 检测与识别缺陷
  2. 分析与定位缺陷,进而填写并提交缺陷 告
  3. 提请整改并修复缺陷
  4. 验证修改并记录缺陷列表

缺陷生命周期

一般而言,缺陷的生命周期是从bug被发现开始,直至它被最终修复,并能确保不再复发为止。不过有时候,根据组织的策略,使用到的软件开发模型(如敏捷或迭代),项目的时间表,以及团队的结构等因素的不同,缺陷的生命周期也可能有所差异。总的说来,它所要经历的步骤与过程,如下图所示:

由于需要人工进行测试结果的验证和输出的判断,因此不但费时费力,而且难免会产生人为的疏忽。

不言而喻,自动化测试意味着更高的效率,更少的人力,更低的出错几率,以及适用于回归和功能性测试环节的、更频繁的执行次数。

例如:对于某个登录页面而言,如果我们需要验证所有登录尝试的可能性及其结果,那么我们只需要通过编写一段测试代码,就能自行输入所有可能的数据,执行各种类型的登录方法,进而判断并记录所有登录尝试的成败结果。

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你

送上一句话:

世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。

推荐好文:

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

自动化测试到底要学什么p>

为何跳槽不考虑腾讯我和鹅厂的一点往事

自动化测试和手动测试哪个更高级p>

新手必看:怎么写一个合格的测试用例p>

python登录接口测试问题记录与解决 ( 干 货 )

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月5日
下一篇 2021年4月5日

相关推荐