软件测试概述
程序+文档+数据=软件
狭义的软件测试定义:为发现软件缺陷而执行程序或系统的过程
广义的软件测试定义:人工或自动地运行或测定某系统的过程,目的在于检验它是否满足规定的需求或弄清预期结果和实际结果间的差别
为什么要做软件测试
软件质量高低:是否符合用户习惯、符合用户需求
测试的任务
测试用例的定义和组成部分
- 用例ID
- 用例名称
- 测试目的
- 测试环境
- 前提条件
- 测试步骤
- 预期结果
- 其他信息
一个好的高质量的测试用例在于能发现至今未发现的错误,一个成功的测试是发现了至今未发现的错误的测试
两个方向
用户需求
什么时候停止测试
测试过程模型
缺陷具有放大的特点,随着阶段的推进发现bug的成本会指数型上升,所以并不是代码级的测试才叫测试,而是开发过程各个阶段越早开始测试越好。
软件测试的原则
- 测试中发现的错误80%很可能起源于程序中的20%
- 提前测试可发现80%,系统测试找出剩余bug的80%(总体的16%),最后的4%可能只有用户大范围长时间使用后才暴露出来
- 80%的工程用在20%的需求上(即关键需求)
- …
软件测试流程
制定测试计划->测试设计->测试开发->测试执行->评估测试
注意
L10N:本地化测试
I18N:国际化测试
黑盒测试
等价类划分与边界值分析
如何划分有效和无效等价类(一些常用原则)
在找到有效等价类和无效等价类后如何找测试数据
如果功能模块的输入是多个,多个自变量放在一起如何找有效等价类、无效等价类、测试数据,4种方法:
以一个具有自变量X1、X2的函数F为例,X1取值范围为[a, b)、[b, c)、[c, d];X2取值范围为[e, f)、[f, g]。仅考虑有标记的方块内为一般等价类测试(不处理无效数据的测试)、所有方块都考虑为健壮等价类测试(进行无效数据处理的测试)
弱一般等价类
对于X1(横轴):[a, b)、[b, c)、[c, d]都需要覆盖到;对于X2(纵轴):[e, f)、[f, g]都需要覆盖到。保证了这两点的情况下,就可以任意取点了
强一般等价类
对于X1(横轴):[a, b)、[b, c)、[c, d];X2(纵轴):[e, f)、[f, g],笛卡尔积的结果就是所有的格子,所以必须所有格子都取点
弱健壮等价类
所以如下图,在保证弱一般等价类的取点后,还需要分别保证X1、X2中有1个属于无效输入的两个额外的取值范围,另一个属于有效输入的原本取值范围(如X1取无效X2取有效或X1取有效X2取无效,并全部覆盖无效范围)
强健壮等价类
在找测试数据时
- 单缺陷有效值
- 单缺陷无效值
- 有效值
- 无效值
与等价类划分密切相关的就是边界值分析。先划分等价类,再结合边界值产生测试用例。边界值分析中也有假设前提:单缺陷。包含4种设计测试用例的方法:
- 有效范围:最小的、比最小大一点的、正常值、比最大小一点、最大值
- 无效范围:比最小更小、比最大更大
- 共7个,再分单缺陷和多缺陷,这样设计测试用例的个数就会指数上升
常见的边界值
决策表
适合于问题有多个条件,条件有多种组合执行不同操作(有很多if、else if、else),不能表达循环结构
最严格、最具有逻辑性
规则:条件的任意组合,判定表中的一列(贯穿条件项和动作项)。判定表有多少列就代表有多少条规则。
规则的化简:有的规则相互包含,可以化简
因果图
找出所有的原因,找出结果,可能还有中间结果的产生,在画因果图时注意。
- I:连虚线出去,如连到ab,表示ab中至少有一个必须成立
- E:连虚线出去,如连到ab,表示ab不能同时成立
- R:如处于a指向b的虚线三角箭头上,表示a出现时b也必须出现,不可能一个出现一个不出现
M:如处于a指向b的虚线三角箭头上,表示a为1时b必须为0,a为0时b值不定
画出因果图后,根据图得到决策表从而得到相应的测试数据:原因节点+中间节点为条件桩,结果节点为动作桩
白盒测试
逻辑覆盖
语句覆盖->判定覆盖->判定/条件覆盖->条件组合覆盖->路径覆盖 _条件覆盖/12
关系:
基本路径测试
基于程序圈复杂度产生的测试方法,画出控制流程图,算圈复杂度,找到独立路径并压缩为基本路径集合,根据集合中每条路径设计用例。把复合逻辑表达式拆成单个表达式
圈复杂度用于计算程序的基本的独立路径数目(每条新的独立路径都必须包含一条新的有向边,从入口到出口互不相同的路径数)
如果把覆盖的路径数压缩到一定限度内,例如程序中的循环体只执行0次和1次,就成为基本路径测试,通过导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次
基于数据流的测试
基于真的数据定义到数据的使用来进行测试,需要找到定义的节点(包括赋值的和比较的)和使用的节点
需要找到所有这段功能代码从哪里开始定义,到哪里开始执行,把路径找出来。什么是定义使用路径(某一变量在最初节点定义到最终节点被使用)、定义清除路径(某一个变量从它的定义节点到使用节点这个过程中没有对这个变量进行二次定义)
循环测试
前提是程序是结构化的。
简单循环测试
测试的过程
单元测试
单元测试的内容:5点(简答题)
单元测试的模块
单元测试的工具:Junit相关的概念:以插入断言的方式进行测试(类似黑盒测试)
单元测试的方法
集成测试
- 自上而下:从主程序模块开始按深度或广度优先策略边组装边测试
- 自下而上:从最底层模块开始组装和集成测试
- 汉堡包:两者进行结合,树状图每层画线,顶层采用自顶向下,底层采用自底向上
相邻的集成:上下三层进行集成
成对集成:先成对再相邻
基于MM路径的集成:MM路径不是可执行路径,描述单元之间的控制转移。
最终得到调用图,然后就会到基本路径测试,找复杂度,找路径,得到测试用例的套路
系统测试
黑盒为主
对哪些内容进行系统测试(9个):易用性、国际化本地化、性能、功能、界面、兼容性、安全性、文档、安装
Web系统测试
具体到如Web系统测试中的功能测试包含哪些内容、对cookies里面的内容进行测试属于Web系统测试里面的哪一项的测试(属于功能测试)
功能测试
性能测试(负载/压力)
- 负载测试
- 压力测试
可靠性测试:不间断测试,看多久不出错
用户界面测试/易用性测试
安全性测试
兼容性测试
接口测试
- 服务器接口
- 外部接口
- 错误处理
主要讲了性能测试的含义和怎么做,如所涵盖的含义如压力测试怎么做、负载测试怎么做等
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
负载测试让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的可靠性。
负载/压力测试关注什么?
验证系统能否同一时间响应大量的用户,用户传送大量数据时能否响应,系统能否长时间运行。
LoadRunner性能测试工具原理:录制+回放模拟用户实际操作场景,监控并分析运行结果。
自动化测试
录制+回放+脚本 是主要的方式
常用的自动化测试的工具,哪些种类,每种有什么工具
- 写脚本或者录制脚本
- 使用用户自定义参数
- 场景设计
- 产生虚拟用户的机制:使用控制器,来控制模拟多少用户。
- 使用监听器,查看测试结果
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!