测试理论基础

1 软件测试

定义

软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其能否满足设计要求进行评估的过程。

目的

软件测试的目的就是尽可能多的发现软件缺陷。bug是测试过程中的产品而非目标。检查系统是否满足要求,站在用户的角度思考产品或项目功能实现地正确性。

测试的目的不仅仅是为了找出错误,通过分析错误产生的原因和错误的分布特征,帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,通过分析也能帮助我们设计出针对的检测方法,改善测试的有效性。

软件测试V模型

V 模型是软件测试过程中的常⻅⼀种模型,它反映了开发过程和测试过程的关系,在测试软件中起着重要作⽤。同样,在面试题中也问的非常多。
在这里插入图片描述
V模型中的过程是从左向右描述了基本开发过程和测试⾏为。V模型的价值在于它⾮常明确的表明了测试过程中存在的不同级别,并且清楚的描述了这些测试阶段和开发过程各个阶段对应的关系,左半部分为开发人员的职责,右半部分为测试人员的职责。

下面介绍这些阶段都会做些什么

  • 需求分析:主要明确客户需要的是什么?需要软件做成什么样⼦,还有那些功能。这点⽐较关键的是需求分析师 和客户沟通时理解能⼒和交互性。要求分析师能准确的把客户所需要达到的功能,实现⽅式,等表述出 来,给出分析结果,写出需求规格说明书。
  • 概要分析:主要是架构的实现,指搭建架构,表述各模块功能、模块接⼝连接和数据传递的实现等各项事务。
  • 详细设计:对概要设计中表述的各个模块进⾏深⼊分析,对各个模块组合进⾏分析等,这⼀阶段要求达到伪代码 级别,已经把程序的具体实现功能,现象等描述出来。其中需要包含数据库设计说明。
  • 软件编码:按照详细设计好的模块功能表,编程⼈员编写出实际的代码。
  • 单元测试:单元测试是对程序中单个子程序或具有独立功能的代码段进⾏测试的过程
  • 集成测试:集成测试在单元测试的基础上,先通过单元模块组装成系统或子系统,再进行测试。检查模块之间的接口是否正确。
  • 系统测试:系统测试针对整个产品进⾏测试,验证系统是否满足需求规格说明的定义,以及软件系统的正确性和 性能等是否能满⾜。
  • 验收测试:验收测试是部署软件前(运维⼯程师进行代码部署操作)的最后⼀个测试,⽬的是确保软件准备就 绪,向需求⽅展示软件能够满足需求,验收测试细分为α测试和β测试。
    α测试: 指的是由⽤户,测试⼈员,开发⼈员等共同参与的内部调试
    β测试: 指的是内测后的公测,即完全交给最终⽤户测试

软件测试工程师的工作内容

理解开发⼯作和测试⼯作的侧重点:开发⼯作的⽬标是尽量实现软件⽤户的需求;测试⼯作是检验软 件系统是否满⾜软件⽤户的需求。

工作内容:
寻找软件中的bug,越早发现越好,确认bug的可重复性以及bug产⽣的步骤,确认bug是否被解决。
测试⽅法,测试计划,测试平台,测试代码,测试⽤例,测试⽂档,测试报告的确定,编写和执⾏。

这里说到的bug指的是什么呢?
生产软件的最终目的是为了满足客户的需求,我们以客户的需求作为评判软件质量的标准,将软件的缺陷也就是bug总结如下:

  • 1.软件未达到客户需求的功能和性能
  • 2.软件超出了客户需求的范围
  • 3.软件出现客户需求不能容忍的错误
  • 4.软件的使用未能符合客户的习惯和工作环境

2 软件测试分类

从软件开发阶段的角度

单元测试、集成测试、系统测试、验收测试

根据软件结构与算法角度

白盒测试、黑盒测试、灰盒测试

**白盒测试:**⽩盒测试⼜被称为结构测试,透明盒测试、逻辑驱动测试或基于代码测试,是对软件代码实现的细节 做细致检查。对于⽩盒测试,测试员必须要全⾯了解程序的内部逻辑结构,对所有逻辑路径进⾏测试。

**黑盒测试:**⿊盒测试也称为功能测试,是通过测试来检测每个功能是否都能正常使⽤,在⿊盒测试中,把程序当 作⼀个不可开的⿊盒⼦,在完全不考虑程序内部特性的情况下,对程序接⼝进⾏测试,它只检查程序功能 是否按照需求规格说明书的规定正常使⽤,程序是否能适当的接受输⼊程序⽽产⽣正确的输出信息。

灰盒测试:是介于⽩盒测试和⿊盒测试之间的,灰盒测试关注输出对于输⼊的正确性,但同时也关注内部实现, 不过这 种关注不像⽩盒测试那么详细,完整,知识通过⼀些表征性的现象,事件,标志来判断内部的运⾏状态, 有时候输出是正确的,但内部存在错误点。这种情况⾮常多,如果每次都通过⽩盒测试来操作,效率低, 因此采⽤灰盒测试的⽅法。

从软件的测试面角度

功能测试: 主要检查实际功能是否符合⽤户的需求,因此测试的⼤部分⼯作也是围绕软件的功能进⾏。功能测试也称为⾏为测试(behavioral testing) ,根据产品的性能,操作描述和⽤户⽅案,测试⼀个 产品的特性以确定他们满⾜的设计需求。

功能测试主要包含:
1)逻辑功能测试 2) 界⾯测试 3) 易⽤性测试 4) 安装测试 5) 兼容性测试(软件本身的兼容性和不 同平台下的兼容性)
性能测试: 性能测试通过⾃动化的测试⼯具模拟多种正常,峰值以及异常负载条件 来对系统进⾏各项性能指标进 ⾏测试。 中国软件测评中⼼将性能测试概括为三个⽅⾯:应⽤在客户端性能的测试,应⽤在⽹络上的性能 测试和应⽤在服务器端性能的测试。

通常情况下性能测试包括:时间性能和空间性能两种。
时间性能: 主要指软件的⼀个具体响应时间。例如⼀个注册需要的时间,⼀个商品购买需要的时间 等。抛开具体的测试环境,来分析⼀次事务的响应时间是没有任何意义的。需要单建好⼀个具体且独⽴的 测试环境。
空间性能: 主要指软件运⾏时所消耗的系统资源,如硬件资源,cpu,内存,⽹络消耗等。

软件测试的自动化程度

手工测试: 由测试⼈员⼀个⼀个的执⾏测试⽤例,通过输⼊⼀些参数,产看返回结果是否符合预期效 果。
自动化测试: 是以把⼈为驱动的测试⾏为转化为机器执⾏的⼀种过程。 通常由测试⼈员根据测试⽤例 中描述的规则流程⼀步步执⾏测试,把得到的结果与预期结果进⾏⽐较。⾃动化测试是⼀个很⼴义的概 念,⼀般来说所有能替代⼈⼯测试的⽅式都属于⾃动化测试, 我们⼀般说的单元测试就是⾃动化测试的⼀ 种,单元测试很多⼈称之为“毫秒级的⾃动化测试”,可分为功能⾃动化测试,性能⾃动化测试
功能⾃动化测试:是通过测试⼯具(或框架)录制/编写测试脚本,对软件的功能进⾏测试,并验证测 试的结果是否正确,从⽽代替部分⼿⼯测试⼯作,达到节约⼈⼒成本和时间成本的⽬的。
性能⾃动化测试:通过性能⼯具模拟成千上万的虚拟⽤户向系统发送请求,从⽽验证系统的处理能 ⼒。

软件测试周期中使用的方法

  • 1、冒烟测试:指在对一个新版本进行大规模的系统测试之前,先验证软件的基本功能是否实现,是否具备可测性。
  • 2、回归测试:指修改了旧代码后,重新进行测试以确认修改后没有引进新的错误或导致其他代码产生错误
  • 3、随机测试:是指测试中的所有输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性错误
  • 4、安全测试:在软件产品的生命周期中,特别是产品开发过程基本完成到发布阶段,对产品进行检验,以验证产品符合安全需求定义和产品质量标准的过程。

3 分层自动化测试(了解)

测试⾦字塔的概念是由敏锐⼤师Mike Cohn在它的书中⾸次提出,如下图所示,他的基本观点:我 们应该有更多的低级别的单元测试,⽽不仅仅是通过⽤户界⾯运⾏的⾼层次的端到端的测试。
Martin Fowler⼤师在测试⾦字塔模型基础上提出分层⾃动化测试的概念。在⾃动化测试之前加“分 层”的修饰,以区别传统的⾃动化测试。什么是传统的⾃动化测试?为何提倡分层⾃动化测试的思想?
在这里插入图片描述
在⼤多数研发组织中,都存在开发测试团队割裂(部⻔墙),质量职责错配(测试主要对质量负责) 的问题,在这种状态下,测试团队(或者测试⽼⼤)的⼀个“正常”反应就是: 在测试团队中能够掌握的⿊盒测试环节尽可能全⾯覆盖,甚⾄尽可能⿊盒(界⾯)⾃动化测试。 这可能导致两个后果:
1) 测试团队规模的急剧膨胀。2)所谓全⾯⿊盒(界⾯)⾃动化测试

⼀般来 说注定失败,因为界⾯是⾮常易变得,⿊盒(界⾯)⾃动化测试⽆论怎么写都还会是维护成本相对⾼昂。 因此,分层⾃动化测试倡导得是从⿊盒单层测试到⿊⽩盒多测试体系,从全⾯⿊盒(界⾯)⾃动化到关键 业务流程⻚⾯测试+单元(模块)算法测试。
在这里插入图片描述
1)单元⾃动化测试
单元⾃动化测试是指对软件中得最⼩可测单元进⾏检查和验证。对于单元测试中得单元得含义,⼀般 来说密钥根据实际情况去判定其具体含义。⽐如C语⾔中单元是指⼀个函数,java中得单元只⼀个类,图形 化的软件单元是指⼀个窗⼝或者⼀个菜单等。总的来说,单元就是⼈为规定的最⼩被测功能模块。规范的 进⾏单元测试需要借助单元测试框架,如Java中的Junit,TestNG,Python中的unittest,pytest等,⽬前⼏ 乎所有语⾔都有相应的单元测试框架。

2)接⼝⾃动化测试 Web应⽤的接⼝⾃动化测试可以分为两类:模块接⼝测试和web接⼝测试 2.1) 模块接⼝测试: 主要测试模块之间的调⽤与返回。我们可将其看作是单元测试的基础,主要强调 对⼀个类⽅法或函数的调⽤,并对返回结果的验证,所⽤到的测试⼯具与单元⾃动化测试相同。 2.2)Web接⼝测试:⼜分为服务器接⼝测试和外部接⼝测试 服务器接⼝测试:指测试浏览器与服务器的接⼝ 外部接⼝测试:指调⽤的接⼝由第三⽅提供。⽐如使⽤QQ,⽀付宝,微信账号登陆系统等。

3)UI⾃动化测试 UI⾃动化测试:UI层是⽤户使⽤该产品的⼊⼝,所有功能都通过这⼀层提供并展示给⽤户,所以测试 ⼯作⼤量都集中在这⼀层。为减轻这⼀层的测试⼈⼒和时间成本,早期的⾃动化测试⼯具主要针对该层设 计。⽬前主流的测试⼯具由UFT,Watir,Robot Framework、Selenium等。

Selenium 是⼀个⽤于web应⽤程序测试⼯具,包含了测试的录制,编写以及运⾏,测试的并⾏处理 (Selenium Grid).Selenium 的核⼼Selenium Core 基于JsUnit,完全由JavaScript编写,因此可以⽤于 任何⽀持JavaScript的浏览器使⽤。Selenium可以模拟真实浏览器,⽀持多种浏览器,它在爬⾍中主要解 决JavaScript渲染问题。 除了上述主流的测试⼯具外,对于有些有实⼒的公司⽐如华为,会根据⾃⼰的产品特点开发⾃⼰定制的⾃动化测试⼯具.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降温vae+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值