用例设计方法

来源:互联网 发布: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)其目的是避免由于原因之间的屏蔽而漏掉某些错误。这里写图片描述

  1. 当回溯经过一个结果应为0 的and 结点时��显然应列举出导致结果为0 的所有的输入组合情况。然而,如果碰到的情况是一个输入为0其它的输入中有一个或更多为1,那么就无须罗列出其它输入可能为1 的所有情况。
  2. 当回溯经过一个结果应为0 的and 结点时,仅有一种所有输入皆为0 的情况需要列举出来如果这个and 结点位于因果图的中部,其输入来自于其他中间结点,那么所有输入都为0的情况就会非常多)。这里写图片描述

数据流分析

流程分析

状态转换图

验证程序的逻辑。类比白盒测试方法。
建立状态转换图
- 宁多不宁少(反正状态可进行简单的合并)
- 要将进入、退出状态的条件和输出列出
- 选择软件产品重要的部分来建立状态图
- 从用户使用角度来建立

设计用例考虑的点
按动态白盒测试的方法进行测试:
- 每种状态至少访问一次
- 附权值,为权值重的路径多设计用例
- 权值轻的也要覆盖
- 测试进入、变量状态、退出及输出
- 失败状态测试:竞争(并发)、重复、压迫、重负
- 不要忘了随机测试

失败状态单独拧出来说:
1. 竞争(并发)
哪些会引起中断、冲突
- 两个不同的程序同时保存或打开了同一个文档-
- 共享同一台打印机、端口、其他外围设备
- 软件处于读取状态或修改状态时去按键、单击鼠标;
- 同时关闭或者启动多个软件实例
- 同时使用不同的程序去访问同一个数据库。

  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。

减少路径覆盖用例

  1. 分支结构路径数
    当程序中判定多于一个时,形成的分支结构有两类:嵌套型、连锁型。
    嵌套型:n个判定语句,n+1个测试用例!这里写图片描述
    连锁型:n个判定语句,2n 个测试用例这里写图片描述
    如何减少用例:
    试验设计法,抽取部分路径进行测试,抽样服从均匀分布。
    • 若每条路径重要性相同、暂不明确各条路径的重要性,随机抽取即可做到均匀分布。
    • 如果每条路径的重要性有不同,则要为路径设定权值,并通过加权的方式来筛除部分路径,再进行抽样。正交表这里没说清楚

循环测试

循环分几类:简单循环,连锁循环,嵌套循环、非结构性循环
这里写图片描述

  1. 简单循环
    零次循环
    一次循环:查找循环初始值方面的错误
    二次循环:查找多次循环时才能暴露的错误
    m次循环:m小于最大循环数n,检查多次循环才能暴露的错误
    n次循环:最大循环数n
    n+1次循环
    n-1次循环
  2. 简单循环
    • 除最内层外,其他所有层循环次数为最小
    • 最内层做简单循环测试,测试时保持所有外层循环的次数为最小
    • 逐步外推,对每一层进行测试,保持外层次数最小,内层取典型值
    • 反复进行,直到各层测试完毕
    • 各层同时取最小循环数
    • 各层同时取最大循环数:需人为指定最大循环次数
  3. 连锁循环
    • 各循环独立,用简单循环方法进行测试
    • 循环处于连锁状态,前一个循环的值会影响后一个循环的初始值???
  4. 非结构化循环
    结构化程序设计方法重新设计测试用例?

经验积累

  1. 输入框:合法字符、非法字符、合法长度、过长、过短
  2. ……

引入测试策略的概念

本章讨论的测试用例设计方法可以组合为一个整体的策略—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. 之后再采用白盒的方法:检查程序的逻辑结构,对用例进行补充。

0 0
原创粉丝点击