测试理论基础

1.软件测试

1.1定义

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

1.2目的

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

1.3软件测试V模型(面试题)

√模型是软件测试过程中的常见一种模型,它反映了开发过程和测试过程的关系,在测试软件中起着重要作用。

在这里插入图片描述
√模型中的过程是从左向右描述了基本开发过程和测试行为。V模型的价值在于它非常明确的表明了测试过程中存在的不同级别,并且清楚的描述了这些测试阶段和开发过程各个阶段对应的关系。
需求分析:
主要明确客户需要的是什么?需要软件做成什么样子,还有那些功能。这点比较关键的是需求分析师和客户沟通时理解能力和交互性。要求分析师能准确的把客户所需要达到的功能,实现方式,等表述出来,给出分析结果,写出需求规格说明书。
概要分析:
主要是架构的实现,指搭建架构,表述各模块功能、模块接口连接和数据传递的实现等各项事务。
详细设计:
对概要设计中表述的各个模块进行深入分析,对各个模块组合进行分析等,这一阶段要求达到伪代码级别,已经把程序的具体实现功能,现象等描述出来。其中需要包含数据库设计说明。
软件编码︰
按照详细设计好的模块功能表,编程人员编写出实际的代码。
单元测试:
单元测试是对程序中单个儿子程序或具有独立功能的代码段进行测试的过程
集成测试:
集成测试在单元测试的基础上,先通过单元模块组装成系统或子系统,再进行测试。中带你是检查模块之间的接口是否正确。
系统测试:
系统测试针对整个产品进行测试,验证系统是否满足需求规格说明的定义,以及软件系统的正确性和性能等是否能满足。
验收测试:
验收测试是部署软件前(运维工程师进行代码部署操作)的最后一个测试,目的是确保软件准备就绪,向需求方展示软件能够满足需求,验收测试细分为α测试和β测试。
α测试︰
指的是由用户,测试人员,开发人员等共同参与的内部调试
β测试:指的是内测后的公测,即完全交给最终用户测试

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

  • 理解开发工作和测试工作的侧重点∶
  • 开发工作的目标: 尽量实现软件用户的需求﹔
  • 测试工作的目标 :检验软件系统是否满足软件用户的需求。
  • 主要工作内容:
    1. 寻找软件中的bug,越早发现越好,
    2. 确认bug的可重复性以及bug产生的步骤,确认bug是否被解决。
    3. 测试方法,测试计划,测试平台,测试代码,测试用例,测试文档,测试报告的确定,编写和执行。这里涉及到的bug,什么是bug?
    4. 生产软件的最终目的是为了满足客户的需求,我们以客户的需求作为评判软件质量的标准,将软件的缺陷总结如下:
      1)软件为达到客户需求的功能和性能
      2)软件超出了客户需求的范围
      3)软件出现客户需求不能容忍的错误
      4)软件的使用未能符合客户的习惯和工作环境

2.软件测试分类

2.1软件开发阶段角度

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

2.2根据软件结构与算法角度

白盒测试,黑盒测试,灰盒测试
白盒测试:
白盒测试又被称为结构测试,透明盒测试、逻辑驱动测试或基于代码测试,是对软件代码实现的细节做细致检查。对于白盒测试,测试员必须要全面了解程序的内部逻辑结构,对所有逻辑路径进行测试。
白盒测试流程参考https://blog.csdn.net/alexander_frank/article/details/51287601
黑盒测试:

  • 黑盒测试也称为功能测试,是通过测试来检测每个功能是否都能正常使用,在黑盒测试中,把程序当作一个不可开的黑盒子,在完全不考虑程序内部特性的情况下,对程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当的接受输入程序而产生正确的输出信息。灰盒测试
    灰盒测试:
    是介于白盒测试和黑盒测试之间的,灰盒测试关注输出对于输入的正确性,但同时也关注内部实现,不过这种关注不像白盒测试那么详细,完整,知识通过一些表征性的现象,事件,标志来判断内部的运行状态,有时候输出是正确的,但内部存在错误点。这种情况非常多,如果每次都通过白盒测试来操作,效率低,因此采用灰盒测试的方法。

2.3软件的测试面角度

功能测试以及性能测试功能测试
功能测试
主要检查实际功能是否符合用户的需求,因此测试的大部分工作也是围绕软件的功能进行。
功能测试也成为行为测试(behavioral testing),根据产品的性能,操作描述和用户方案,测试一个产品的特性以确定他们满足的设计需求。
功能测试主要包含:

  • 1).逻辑功能测试
  • 2) 界面测试
  • 3)易用性测试
  • 4)安装测试
  • 5)兼容性测试(软件本身的兼容性和不同平台下的兼容性)
    性能测试
  • 性能测试通过自动化的测试工具模拟多种正常,峰值以及异常负载条件来对系统进行各项性能指标进行测试。中国软件测评中心将性能测试概括为三个方面︰
  • 应用在客户端性能的测试,
  • 应用在网络上的性能测试
  • 应用在服务器端性能的测试。
    通常情况下性能测试包括:
    • 时间性能
    • 空间性能两种。
      时间性能︰主要指软件的一个具体响应时间。例如一个注册需要的时间,一个商品购买需要的时间等。抛开具体的测试环境,来分析一次事务的响应时间是没有任何意义的。需要单间好一个具体且独立的测试环境。
      **空间性能:**主要指软件运行时所消耗的系统资源,如硬件资源,cpu,内存,网络消耗等。

2.4软件测试的自动化程度

手工测试以及自动化测试
手工测试
由测试人员一个一个的执行测试用例,通过输入一些参数,产看返回结果是否符合预期效果。
自动化测试︰是以把人为驱动的测试行为转化为机器执行的一种过程。通常由测试人员根据测试用例中描述的规则流程一步步执行测试,把得到的结果与预期结果进行比较。自动化测试是一个很广义的概念,一般来说所有能替代人工测试的方式都属于自动化测试,
我们一般说的单元测试就是自动化测试的一种,单元测试很多人称之为“毫秒级的自动化测试”,可分为功能自动化测试,性能自动化测试
功能自动化测试∶是通过测试工具(或框架)录制/编写测试脚本,对软件的功能进行测试,并验证测试的结果是否正确,从而代替部分手工测试工作,达到节约人力成本和时间成本的目的。
性能自动化测试︰通过性能工具模拟成千上万的虚拟用户向系统发送请求,从而验证系统的处理能力。
性能测试
性能测试通过自动化的测试工具模拟多种正常,峰值以及异常负载条件来对系统进行各项性能指标进行测试。中国软件测评中心将性能测试概括为三个方面︰应用在客户端性能的测试,应用在网络上的性能测试和应用在服务器端性能的测试。
通常情况下性能测试包括:时间性能和空间性能两种。
时间性能︰主要指软件的一个具体响应时间。例如一个注册需要的时间,一个商品购买需要的时间等。抛开具体的测试环境,来分析一次事务的响应时间是没有任何意义的。需要单间好一个具体且独立的测试环境。
空间性能:主要指软件运行时所消耗的系统资源,如硬件资源,cpu,内存,网络消耗等。

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

冒烟测试,回归测试,随机测试,探索性测试和安全测试
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等。
我们在UI自动化测试方面主要讲解Selenium工具
Selenium是一个用于web应用程序测试工具,包含了测试的录制,编写以及运行,测试的并行处理
(Selenium Grid) .Selenium的核心Selenium Core 基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器使用。Selenium可以模拟真实浏览器,支持多种浏览器,它在爬虫中主要解决JavaScript渲染问题。
除了上述主流的测试工具外,对于有些有实力的公司比如华为,会根据自己的产品特点开发自己1定制的自动化测试工具。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值