【软件测试技术】软件测试详解

文章目录

  • 一、软件测试的分类
    • (一)按照开发阶段划分
    • (二)按照测试技术划分
    • (三)按照代码运行划分
    • (四)按照软件特性分类
    • (五)其他测试类型
    • (六)按照测试运行主体划分
    • (七)总结
  • 二、软件测试的原则
  • 三、测试用例和设计方法
    • (一)什么是测试用例
    • (二)测试用例编写注意事项
    • (三)黑盒测试用例设计方法

一、软件测试的分类

(一)按照开发阶段划分

单元测试

  • 单元测试又称模块测试,是针对软件设计的最小单位----程序模块进行正确性检验的测试工作。
  • 其目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各个模块内部可能存在的各种错误。
  • 单元测试需要从程序的内部结构出发设计测试用例。
  • 多个模块可以平行地独立进行单元测试。
  • 单元测试一般要读程序和代码,大多数时候,单元测试都是由开发人员自己去完成(交叉)(但一般不认为是做测试)

集成测试

  • 集成测试也叫做组装测试;
  • 通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试;
  • 集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统
  • 集成测试比较多的涉及到接口测试;企业非常需要接口测试工程师,它是一个持续不断的过程。

确认测试

  • 确认测试也叫有效性测试;一般都是正向的测试;
  • 是在模拟的环境下,验证软件的所有功能和性能以及其他特性是否与用户的预期要求一致;
  • 通过了确认测试之后的软件,才具备了进入系统测试阶段的资质;
  • 确认测试又称冒烟测试,一般不作为正式的测试环节或测试阶段

系统测试

  • 系统测试是在真实的系统运行的环境下,检查完整的程序系统能否和系统(包括硬件、外设、网络和系统软件、支持平台等)正确配置、连接,并最终满足用户的所有需求;
  • 系统测试是全面(系统所有功能的测试)的,模拟所有的软件用户的操作;
  • 系统测试是全方位的:和硬件系统的联系;和系统软件的联系;和其他软件的关系

验收测试

  • 是软件产品检验的最后一个环节;
  • 按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统;
  • 验收测试一般由供求双方达成的;
  • 一般有三种验收测试的主体:
  • α测试:软件开发商自己进行的交付前的测试;
  • β测试:软件的需求方自己进行的测试
  • γ测试:第三方的软件测试
  • 三个验收测试主体的关系如下:

【软件测试技术】软件测试详解_第1张图片

(二)按照测试技术划分

黑盒测试【在软件的表层进行操作测试】

  • 通过软件的外部表现来发现其缺陷和错误;
  • 黑盒测试法把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程;
  • 黑盒测试是在程序界面处进行测试,它只是检查程序是否按照需求规格说明书的规定正常实现。

白盒测试【比如说查看源代码,能够看到代码是怎么写的】

  • 通过对程序内部结构的分析、检测来寻找问题;
  • 白盒测试可以把程序看成装在一个透明的盒子里,检查是否所有的结构及路径都是正确的,检查软件内部动作是否按照设计说明的规定正常进行;
  • 白盒测试又称结构测试
  • 白盒测试需要能看懂代码,能懂算法

灰盒测试

  • 介于白盒测试和黑盒测试之间的测试;
  • 灰盒测试关注输出对于输入的正确性;
  • 同时也关注内部表现,但这种关注不像黑盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。

(三)按照代码运行划分

静态测试

  • 指不实际运行被测对象,而是静态的检查程序代码、界面或文档中可能存在错误的过程;
  • 代码测试:主要测试代码是否符合相应的标准和规范;
  • 界面测试:主要测试软件的实际界面与需求中的说明是否相符;
  • 文档测试:主要测试用户手册和需求说明是否真正符合用户的实际需求

动态测试

  • 指实际运行被测对象,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程;
  • 所以我们判断一个测试属于动态测试还是静态测试,唯一的标准就是看是否运行程序

(四)按照软件特性分类

功能测试

  • 是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求
  • 逻辑功能测试
  • 界面测试
  • 易用性测试
  • 安装/卸载测试
  • 兼容性测试

性能测试

  • 功能的另一个指标,主要关注软件中的某一功能在指定的时间、空间条件下,是否使用正常
  • 软件的性能包括很多方面,主要有时间性能和空间性能两种

安全性测试

  • 验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵,不受各种因素的干扰。

(五)其他测试类型

回归测试【非常重要的测试活动】

  • 是指对软件的新版本进行测试时,重复执行之前某一个重要版本的所有测试用例
  • 目的:
  • 1.验证之前版本产生的所有缺陷已全部被修复;
  • 2.确认修复这些缺陷没有引发新的缺陷

冒烟测试

  • 是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性,也叫可测性测试

随机测试

  • 是指测试人员基于经验和直觉的测试,发现一些边缘性的错误

猴子测试

  • 把自己当成不懂产品的笨蛋或者小动物,随便乱点,没有任何的主观意识和想法参与进来,让一些意想不到的操作造成错误的结果。

(六)按照测试运行主体划分

手工测试

  • 比较低级的一种测试方式

自动化测试

  • 利用工具软件或者编写代码的方式,测试被测的软件系统,(游戏外挂)

(七)总结

【软件测试技术】软件测试详解_第2张图片
【软件测试技术】软件测试详解_第3张图片

二、软件测试的原则

  • 所有测试的标准都是建立在用户需求之上
  • 软件测试必须基于“质量第一”【质量是指功能、性能、安全】的思想去开展各项工作,当时间和质量冲突时,时间要服从质量
  • 事先定义好产品的质量标准,只有有了质量标准,才能根据测试的结果,对产品的质量进行分析和评估
  • 软件项目一启动,软件测试也就是开始,而不是等程序写完,才开始进行测试
  • 穷举测试是不可能的
  • 第三方进行测试会更客观、更有效
  • 软件测试计划是做好软件测试工作的前提
  • 测试用例是设计出来的,不是写出来的,所以要根据测试的目的,采用相应的方法去设计测试用例,从而提高测试效率,更多的发现错误,提高程序的可靠性
  • 软件测试是为了发现更多的错误,不能保证没有缺陷,如果软件发布以后还有缺陷,不能认为是测试人员的问题,都属于正常现象【不要无故背锅】
  • 对发现错误较多的程序段,应进行更深入的测试,一般来说,一段程序中发现的错误数越多,其中存在的错误概率也就越大;
  • 重视文档,妥善保存一切测试过程文档(测试计划、测试用例、测试报告等);
  • 当把“尽早和不断的测试”作为测试人员的座右铭;
  • 回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误的现象并不少见
  • 测试应从“小规模”,逐步向“大规模”
  • 不可将测试用例置之度外,排除随意性;
  • 必须彻底检查每一个测试结果;
  • 一定要注意测试中的错误集中发生现象【对错误集中的模块进行着重测试】,这和程序员的编程水平和习惯有很大关系;
  • 对测试错误结果一定要有一个确认的过程
面试测试工程师时不能说的缺点:粗心、耐心不够、不善与人沟通、语言表达能力不行 可以说的缺点:对于一个点爱斤斤计较、遇到问题喜欢穷追不舍、人很轴、性格较急

三、测试用例和设计方法

(一)什么是测试用例

测试用例的定义

  • 设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的预期结果
  • 如果程序在这种情况下不能正常运行,而且这种问题会重复发生,那就表示软件程序人员已经测出软件有缺陷,这时候就必须将这个问题标注出来,并且通知软件开发人员。
  • 软件开发人员接获通知后,将这个问题修改完成与下一个测试版本内;
  • 软件测试工程师获得新的测试版本后,必须利用同一个用例来测试这个问题,确保该问题已经修改完成

测试用例模板和包含的内容

  • 测试用例常用的是excel表格来编写,Excel在编写测试用例的时候还是比较高效和方便的

【软件测试技术】软件测试详解_第4张图片

  • 标识符【用例编号】:由测试设计过程说明和测试程序说明引用的唯一标识符;【一般编号规则:TestCase_项目名称_模块名称_功能名称_0001】
  • 测试项:描述被测试的详细特性、代码模块等,应该比测试设计说明中所列的特性更加具体;还要指出引用的产品说明书或者测试用例所依据的其他设计文档;【测试用例的测试目的,一般情况下,用一句话表明目的。例如:使用谷歌浏览器打开百度首页;在QQ登录界面输入正确的用户名密码等登录上。(表明测试的模块、测试对象、方式、事件)】
  • 输入说明:该说明列举执行测试用例的所有输入内容或者条件;
  • 输出说明:描述进行测试用例预期的结果;
  • 环境要求:是指执行测试用例必要的硬件、软件、测试工具、人员等;
  • 特殊要求:描述执行测试必须的特殊要求;
  • 用例之间的依赖性:如果一个测试用例依赖于其他用例,或者受其他用例的影响,就应该在此注明【一般功能流程上,下游的功能测试依赖于上游的功能测试的用例。比如说QQ号的注册与登录,登录依赖于注册;再例如,增加了一个数据的测试用例,将会被删除该数据的测试用例依赖】
  • 测试步骤:用最朴实的语言写出来软件的操作步骤;尽量详细【例如在用户名文本框输入***;在省份下拉列表选择**,在城市下拉列表选择:**】
  • 测试数据:单独整合测试数据,必须和测试步骤中的数据保持一致。
  • 预期结果:在描述中需要准确【对象的准确性和内容的准确性】;原则上每一个操作都要有一个结果,一般情况下,在重要的步骤之后设定预期结果。一般和测试目的密切相关
  • 测试结果:要求在测试执行完成后添加,没有执行保持为空;测试结果只有两个:通过【和预期结果一致】/失败【和预期结果不一致】;Pass/Failed
  • 测试目的决定了测试步骤和预期结果
  • 测试人:测试的执行者,可以和设计者相同,也可以不同
  • 备注:为了测试用例正常执行而做的特殊准备,【例如专门制造网络不畅的情况下,软件错误提示】

用例设计和编写的作用

  • 有效性:测试用例是测试人员测试过程中的重要参考依据
  • 可复用性:良好的测试用例具有重复使用的功能,使得测试过程事半功倍,提高测试效率
  • 易组织性:即使是小的项目,也可能会有几千或者更多的测试用例,测试用例可能在数月甚至几年的测试过程中被创建和使用
  • 可评估性:从测试的项目管理角度来说,测试用例的通过率是检验代码质量的保证
  • 可管理性:测试用例也可以作为检验测试人员进度、工作量以及跟踪/管理测试人员工作效率的标准

面试常问的问题:

  • 测试用例真的有必要耗费时间进行设计和编写吗?【有,测试用例的可复用性】
  • 测试用例需要经常更新吗?【必须更新,尤其是发现过缺陷的测试用例。“杀虫剂效应”:一个已经发现过缺陷的测试用例,就相当于杀虫剂。杀虫剂用过一次之后就必须用更强的杀虫剂(用新的测试用例进行重新设计)】

(二)测试用例编写注意事项

  • 不要设计“穷举测试用例”
  • 在详细测试用例与有效测试时间中找到平衡点
  • 好的测试用例应该多关注“反向测试问题”
  • 测试用例库应该不断更新和维护
  • 测试用例可以复用,但要注意数据有效性与环境变化
  • 测试用例是设计出来的,不是写出来的
  • 多去学习经验丰富的测试工程师所设计的测试用例
  • 针对不同的需求类型和测试对象,灵活采用不同的测试用例设计方法

(三)黑盒测试用例设计方法

黑盒测试用例设计方法概述

【软件测试技术】软件测试详解_第5张图片

等价类划分法

等价类划分法原理

  • 把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例
  • 每一类的代表性数据在测试中的作用等价于这一类的其他值,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误
  • 反正,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误
  • 等价类要求灵活对待【在面试中应该尽可能说的详细】

等价类划分设计步骤

确定等价类的原则

  • 在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类【例如,一个文本框规定,输入字符个数为6~18位,则一个有效等价类为:范围内的个数,两个无效等价类为:小于6位数和大于18位数】
  • 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类【例如:请输入11位的手机号,一个有效等价类:输入11位数字,一个无效等价类就是不是11位的数字】
  • 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类【真就是有效,假就是无效】
  • 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类【例如:登录中要输入用户名和密码,有效:用户名和密码都正确,无效:用户名和密码随意一个不正确】
  • 在规定了输入数据必须遵守规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
  • 在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步划分为更小的等价类

划分等价类和列出等价类表

  • 有效等价类
  • 无效等价类

确定测试用例

  • 为每个等价类规定一个唯一的编号
  • 设计一个新的测试用例,使其尽可能多的覆盖尚未覆盖的有效等价类;重复这一步,最后使得所有有效等价类均被测试用例所覆盖
  • 设计一个新的测试用例,使其只覆盖一个无效等价类;重复这一步骤使所有无效等价类均被覆盖

用例问题

  • 按照测试用例分类:功能【Function】、界面【UI】、性能【Performance】、安全【Security】、接口【Interface】
  • 测试项必须是确定的;测试项中可以不写目的的产生结果
  • 测试项一般只写一个测试目的,测试目的必须是明确的,不能一次测试多个点。
  • 测试中,一个反向的(无效等价类的)测试数据,只要违反一个需求
  • 依赖用例一般都是下游的用例依赖上游的测试用例(已经存在的测试用例),用例依赖可以跨越模块
  • 测试步骤能够表明操作的对象和方式即可
  • 测试数据没有数据的时候不用写;【例如:输入要求不为空,不输入就不写。(须在测试项中标注某一个内容为空)。如果要对空格进行测试(建议不要将空格放在数据的最前面或者最后面)】
  • 测试结果没有执行就不用填
  • 测试用例中不需要显示正向或者反向
  • 等价类划分不要出现重复的情况,也不要出现缺失的输入部分

边界值分析法

  • 如果输入条件规定了值的范围,则应取刚达到这个范围得边界的值,以及刚刚超越这个范围边界的值作为测试输入数据
  • 如果输入条件规定了值得个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1得数作为测试数据
  • 分析规格说明,找出其他可能的边界条件
  • 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
  • 如果程序中使用了一个内部的数据结构,则应当选择这个内部数据结构边界上的值作为测试用例

思考:

  • 6≤x≤12,请问测试中的x的边界值要选取哪几个值进行测试?【5,6,7,11,12,13】
  • 6<x<12,请问测试中的x的边界值要选取哪几个值进行测试?【6,7,11,12】
  • 文本框输入字符的个数要求是不大于150字,测试的时候如何选择边界值?【null,1,149,150,151】【负数不存在】

旺财加油!✨

你可能感兴趣的:(软件测试,软件测试)