用例设计方法
来源:互联网 发布:Python如何使用 编辑:程序博客网 时间:2024/06/10 11:46
用例设计方法
- 用例设计方法
- 三角形用例
- 黑白盒动静态
- 用例设计方法
- 动态黑盒测试
- 测试对象数据与程序
- 通过测试
- 等价类
- 边界值
- 因果图判定表
- 数据流分析
- 流程分析
- 状态转换图
- 无经验假设
- 错误推测
- 探索测试
- 动态白盒测试
- 白盒测试与单元测试
- 测试对象数据与程序
- 语句覆盖
- 分支覆盖
- 路径覆盖
- 基本路径测试
- 减少路径覆盖用例
- 循环测试
- 动态黑盒测试
- 经验积累
- 引入测试策略的概念
书是要带着目的去读的。华罗庚的读书法,先只看标题,自己想象出这本书的内容,然后再看书里哪些是自己没想到的。
参考文档:
1. 《测试理论》——Ron Patton第5章 :闭着眼睛测试软件
2. 《测试理论》——Ron Patton第7章 :用X光测试软件
3. [《软件测试的艺术》](http://download.csdn.net/download/thn_sweety/9455960)——Glenford J.Myers
4. CSDN博客
Ron Patton更像是针对软硬件整体解决方案中的软件部分进行测试,第一部分理论写得非常详尽。对整体的测试可以做了解用,对实践的指导性不大。软件测试的艺术更适合web测试人员翻看,是一本经典的书,强烈建议。
三角形用例
这个程序从一个输入对话框中读取三个整数值,这三个整数值代表
了三角形三条边的长度。程序显示提示信息,指出该三角形是何种三角形:不规则三角形、等腰三角形还是等边三角形。
用例设计:
1. 输入框测试,限制条件整数:字符、带小数、0、空值、最大值(2次幂测试)
2. 三角形:正常三角形,不是三角形(两边之和小于,两边之和等于)
3. 正常三角形:不规则,等腰(三个边)、等边
没考虑到的地方;
1. 两边之和小于 ,三边遍历
2. 两边之和等于,三边遍历
3. 负数
4. 设置输出
黑白盒、动静态
静态黑盒子、动态黑盒子、静态白盒子、动态白盒子
静态黑盒子:测试产品说明书(它这里的概念包含需求说明书、详细需求、概要设计、详细设计);
动态黑盒子:测试软件
静态白盒子:检查程序代码、代码走查
动态白盒子:测试运行中的程序,查看代码功能和实现方式
用例设计方法
这是听闲话听到的:用例设计11+种方法,等价类、边界值、流程分析,状态迁移,因果图/判定表,错误推测,随机测试,输入域,输出域,正交(文中还未涉及)
黑盒测试:等价类、边界值、因果图/判定表、数据流分析、流程分析,状态迁移/状态转换图,因果图,错误推测、无经验假设、探索测试
白盒测试:语句覆盖,判定覆盖/分支覆盖,条件覆盖,判定-条件覆盖,多重条件覆盖/条件组合覆盖,路径覆盖
两个都可以用:随机测试
基本步骤:
1. 穷举(非法、合法)数据输入+穷举程序测试
2. 首先通过黑盒测试方法来减少用例集合
3. 白盒测试方法来增减用例集合
动态黑盒测试
在错误越来越少的情况下,明确的结构化方法来保证测试工作的运转。用例设计基本思想:把不可穷尽的可能性减小到可以控制的范围。
不深入代码细节的软件测试方法称为黑盒测试:
通用示例:进行输入、接受输出、检验结果
测试对象:数据与程序
软件包含数据和程序两个方面(对应数据结构和算法不)。
数据:
- 程序内部:常量、变量、数据结构等等
- 磁盘文件输入
- 外设输入:键盘、鼠标
- 网络输入:调制解调器等等
- 打印输出
对于数据的用例设计方法有:等价类,边界值
程序:
- 流程:顺序流程;状态机(web应用特别典型)
- 状态:站在程序的角度思考,特别是web程序的服务器程序
- 状态转换:转换函数(transition function)
传统应用程序的控制流程基本是顺序的,很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。
另一类应用程序由外部发生的事件来驱动——事件在应用程序之外生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事件,或者它 相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。Web应用程序由提交的表单和用户请求的网页来驱动,它们也可划归到上述类别。
- 逻辑和运算
对于程序的用例设计方法有:流程图分析,数据流图分析、状态转换图分析
通过测试
在设计和执行测试用例是,必须做通过测试!失败测试,则是在通过测试之后,蓄意攻击软件的薄弱环节。
等价类
先逻辑穷举,再进行等价划分。等价分类方法:
- 相同的测试目的:暴露同样软件缺陷的一组用例;
- 相似输入、输出、操作
边界值
针对数据的输入输出进行边界值推断、也指程序的边界条件(这可能需要在测试过程中不断地发现)。
一般边界:
- 数值:速度,长度,数量,尺寸大小限定
- 字符:地址,名称
- 极限词语:第一个/最后一个,开始/结束,空/满、最大/最小等等
一般和等价类一起进行用例编写,在边界值的两边寻求用例:这一般是四个用例/四个数据点
次边界条件/内部边界条件:
举例说明:
- 2的乘方,在软件内部使用数据或存储单位时,会有位、双位、字节、字、千、兆、千兆等描述,这时候会对应一些边界值。特别是在动态使用存储单位时、通讯过程中这些边界都是要考虑的;
- ASCII表,如果测试进行文本输入或文本转换,需要参考ASCII表。比如输入限定了字母、数字,则应该在ASCII表中相应位置的边界处进行测试数据选择
- Unicode表,参考ASCII表
默认、空白、空值、零值、无:
单独提出作为测试项,不和非法值进行等价
非法、错误、不正确、垃圾数据
发挥创造力、进行破坏试验
因果图、判定表
边界值和等价未对输入条件的组合进行分析。
因果图是一种格式语言,通过需求规格说明书可以得到,通过数字逻辑电路(与、或、非电路)的形式表现。因果图根据条件的组合生成测试用例,建立因果图的过程可以暴露格式说明书中模糊和不完整的地方,查找未意料到的结果。
它的缺点:
1. 没有办法考虑在因果图范围以外的影响因素:比如一个以“显示”作为最终结果的示例,就无法考虑内存值和显示值是否一致。
2. 没有办法充分考虑边界值,考虑边界值会将因果图过度复杂化。
设计步骤:
1. 将规格说明书分解成可执行的片段。因果图无法处理哒的规格说明书。
2. 确定因果关系。因:一个明确输入条件或输入等价类。果:输出条件或系统状态转换、数据库记录修改。
3. 将规格说明片段转换为因果关系布尔图
4. 给图加上注解:比如节点之间的约束关系
5. 跟踪图中的状态变化情况,将因果图换成一个有限项的判定表(借助商业软件)
6. 判定表转成测试用例
判定表生成过程:
1. 设一个果状态为1
2. 利用因果图回溯,查找导致该结果的因的组合
3. 在判定表中为每个因生成一列
4. 对每种因的组合,判断所有其他果的状态,并生成一列
执行第二步的时候,为了减少因果图中的组合关系:
1. 当回溯经过一个结果应为1 的or 结点时, 不要同时将该or 结点的一个以上的输入设置为1。这就是所谓的路径敏感性(path sensitizing)其目的是避免由于原因之间的屏蔽而漏掉某些错误。
- 当回溯经过一个结果应为0 的and 结点时��显然应列举出导致结果为0 的所有的输入组合情况。然而,如果碰到的情况是一个输入为0其它的输入中有一个或更多为1,那么就无须罗列出其它输入可能为1 的所有情况。
- 当回溯经过一个结果应为0 的and 结点时,仅有一种所有输入皆为0 的情况需要列举出来如果这个and 结点位于因果图的中部,其输入来自于其他中间结点,那么所有输入都为0的情况就会非常多)。
数据流分析
流程分析
状态转换图
验证程序的逻辑。类比白盒测试方法。
建立状态转换图
- 宁多不宁少(反正状态可进行简单的合并)
- 要将进入、退出状态的条件和输出列出
- 选择软件产品重要的部分来建立状态图
- 从用户使用角度来建立
设计用例考虑的点
按动态白盒测试的方法进行测试:
- 每种状态至少访问一次
- 附权值,为权值重的路径多设计用例
- 权值轻的也要覆盖
- 测试进入、变量状态、退出及输出
- 失败状态测试:竞争(并发)、重复、压迫、重负
- 不要忘了随机测试
失败状态单独拧出来说:
1. 竞争(并发)
哪些会引起中断、冲突
- 两个不同的程序同时保存或打开了同一个文档-
- 共享同一台打印机、端口、其他外围设备
- 软件处于读取状态或修改状态时去按键、单击鼠标;
- 同时关闭或者启动多个软件实例
- 同时使用不同的程序去访问同一个数据库。
- 重复、压迫、重负:
重复:不断地重复某个操作(椅子起坐)、主要是看内存使用是否进行了释放。
压迫:外部资源支持不够、通过压迫测试将支持降到最低限度。
重负(压力测试):尽量提供条件使其任意发挥,处理尽可能多的数据文件,处理几千个模拟链接,最大的挖掘软件的能力。
长时间运行
重复、压迫、重负通常是联合使用
无经验假设
像笨拙的用户那样使用软件
错误推测
利用经验、直觉猜出错的可能类型。利用已经犯过、可能会犯的错误经验来进行推演。
探索测试
凭借经验、直觉、预感进行测试,将有用经验进行记录归纳
动态白盒测试
动态白盒子测试注意点:
1. 先黑盒、再根据测试状况白盒补充
1. 它是直接测试底层功能、过程、子程序、库、API的方法
3. 应有从软件读取变量和状态信息的访问权
4. 中间变量可进行测试信息打印(在设计阶段应该考虑到)
4. 在测试过程中需要估算测试时命中的代码量和具体代码,即测试代码覆盖率的估算、根据测试结果调整测试用例
其中底层测试对测试员要求很高,要使用与程序员相同的工具,如果已经编译过了,还有可能涉及到编译器、采用不同的设置,已加强错误监测的功能。软件测试员可能要使用代码级的调试器去执行程序、观察变量、设置断点条件等等。对于一些独立模块,可能还需要编写程序去测试。
白盒测试与单元测试
软件开发过程的概念:单元测试/模块测试、接口测试->集成测试
单元测试:自顶向下、自底向上(分层设计、分层实现的软件可以用到)。对于简单的应用来讲,貌似不存在这样的取舍。
通常白盒测试是在单元测试阶段采用的方法。
单元测试示例:通过需求说明书来确定黑盒子测试案例合集->利用用例设计方法减少测试用例->利用白盒测试经验增减测试用例
测试对象:数据与程序
先把软件分为两部分:数据部分+算法部分(程序、代码等);
数据:
考虑所有的数据形式:见黑盒相关部分
除了乐比动态黑盒测试的 数据,由于代码可见,重要算法的公式和等式都是可以接触到的。要拆开里面使用的变量,找出输入和输出值,为其设计用例。这种情况下,一般在实施测试时,是使用调试器改变变量的值,有可能会出现强制赋值的情况,小心不要设计出现实世界不可能出现的用例。
程序:
黑盒测试的流程或状态更宏观一点,白盒测试的测试范围比黑盒测试更具体一点,涉及到代码本身、条件判定等。
下面很多涉及的覆盖的概念,是通过代码范围分析器获得,比如jacoco。它用例记录哪些代码被执行过,哪些没有。可以用来检查用例设计效果、和衡量软件质量。
语句覆盖
每个语句至少执行一次,最弱的覆盖
分支覆盖
- 判定覆盖/分支覆盖
每个判断的取真分支和取假分支都至少执行一次 :if(a&&b) a&&b = 真一次,a&&b=假一次 - 条件覆盖
每个判定条件可能取值都至少执行一次:if(a&&b) a = 真一次,a=假一次, b = 真一次,b=假一次 - 判定-条件覆盖
同时满足判定覆盖和条件覆盖。 - 多重条件覆盖
判定条件中一些“与”和“或”会阻碍掉其他条件,if(a&&b)条件判定时先判断a,再判断b,如果a为假,那么b的取值便不重要了。
每个判断的所有可能的判定条件组合至少执行一次。
路径覆盖
多重条件覆盖虽然已经相当强了,但是会漏掉路径
基本路径测试
简化控制流程图的方法:
1. 把程序中的循环体只执行0或1次
2. 把复合条件语句简化:
然后在此在控制流程图的基础上,分析基本路径集和环路复杂性,导出可执行路径集合,从而设计测试用例。
举例说明:
流程图
独立路径:指包含一组以前没有处理的语句或条件的一条路径。
基本路径集:保证每个可执行语句至少执行一次的路径结合。
则流程图对应的基本路径集为:
path1:1-11
path2:1-2-3-4-5-10-1-11
path3:1-2-3-6-8-9-10-1-11
path4:1-2-3-6-7-9-10-1-11
基本路径集不唯一
环路复杂性:没说怎么用啊
(1) 将环路复杂性定义为控制流图中的区域数;
(2) 设E为控制流图的边数,N为图的结点数,则定义环路复杂性为V(G)=E-N+2;
(3) 若设P为控制流图中的判定结点数,则有V(G)=P+1。
减少路径覆盖用例
- 分支结构路径数
当程序中判定多于一个时,形成的分支结构有两类:嵌套型、连锁型。
嵌套型:n个判定语句,n+1个测试用例!
连锁型:n个判定语句,2n 个测试用例
如何减少用例:
试验设计法,抽取部分路径进行测试,抽样服从均匀分布。- 若每条路径重要性相同、暂不明确各条路径的重要性,随机抽取即可做到均匀分布。
- 如果每条路径的重要性有不同,则要为路径设定权值,并通过加权的方式来筛除部分路径,再进行抽样。正交表这里没说清楚
循环测试
循环分几类:简单循环,连锁循环,嵌套循环、非结构性循环
- 简单循环
零次循环
一次循环:查找循环初始值方面的错误
二次循环:查找多次循环时才能暴露的错误
m次循环:m小于最大循环数n,检查多次循环才能暴露的错误
n次循环:最大循环数n
n+1次循环
n-1次循环 - 简单循环
- 除最内层外,其他所有层循环次数为最小
- 最内层做简单循环测试,测试时保持所有外层循环的次数为最小
- 逐步外推,对每一层进行测试,保持外层次数最小,内层取典型值
- 反复进行,直到各层测试完毕
- 各层同时取最小循环数
- 各层同时取最大循环数:需人为指定最大循环次数
- 连锁循环
- 各循环独立,用简单循环方法进行测试
- 循环处于连锁状态,前一个循环的值会影响后一个循环的初始值???
- 非结构化循环
结构化程序设计方法重新设计测试用例?
经验积累
- 输入框:合法字符、非法字符、合法长度、过长、过短
- ……
引入测试策略的概念
本章讨论的测试用例设计方法可以组合为一个整体的策略—Glenford J.Myers 《软件测试艺术》第二版P70 4.3测试策略
The Strategy
The test-case design methodologies discussed in this chapter can be combinedinto an overall strategy.
所以,在此作者眼里中的测试策略很可能是指测试的组合套拳。
将以上讨论的测试用例设计方法组合形成一个整体的策略。
选择组合套拳的策略经验:
1. 如果规格说明书中有包含明确的输入条件组合的情况,用因果图;
2. 任何情况下都要使用边界值!
3. 应对输入和输出确定有效和无效等价类,必要情况对以上测试用例进行补充
4. 错误猜测用来增加更多用例
5. 之后再采用白盒的方法:检查程序的逻辑结构,对用例进行补充。
- 用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 测试用例设计方法
- 用例设计方法1
- 测试用例设计方法
- JavaScript面向对象(二)--前端必须知道的原型和继承
- js中的兼容问题
- 订阅号如何获取用户基本信息?
- WPS为公式编号
- 生成随机数
- 用例设计方法
- RAC grid卸载
- Android Rtmp客户端搭建
- java中HashMap实现细节1
- angular2 中使用第三方组件样式调整
- yii2框架初识
- 学习Axure RP原型设计
- HTML中为何p标签内不可包含div标签?那哪些块元素里面不能放哪些块元素呢?
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN