如何设计软件设计【测试用例设计】

一、测试设计与测试用例

  • 测试设计:将概括的测试目标转化为具体的测试条件和测试用例的一系列活动。

测试分析和设计的主要任务:

  1. 评审测试依据
    (需求、系统架构、设计、接口说明等)做到心中有数,理解北侧的系统是什么状态,包含什么内容。
  2. 评估测试依据和测试对象的可靠性
    (文档很完善,但是到了实际测试过程中发现实际情况和文档不一样,项目迭代和运行过程中,需求接口等一直在变,但是没有记录到文档中)
  3. 通过对测试项、规格说明、测试对象行为和结构分析,识别测试条件并确定优先级
  4. 设计测试用例,并确定优先级
  5. 确定测试条件测试用例所需的必要的测试数据

确定测试条件

  1. 依据在测试策略或测试计划中确定的测试技术。比如 要做性能自动化兼容测试等.
  2. 通过对测试依据和测试目标的分析。可以确定需要测试的内容,获得测试条件。

确定测试用例

  1. 测试用例:是通过使用在测试计划中确定的测试技术,对于已确定的测试条件进行逐步推敲,精炼而设计出来的重点说明如何具体操作产生何种结果的文档。(指引测试的步骤文档,包含场景、方法论 等的设计)
  2. 测试用例应该具有 可重复性可验证性需求可追踪性 不能一概而说。

测试用例设计包括以下关键点

  1. 前提条件,如项目或局部测试环境的需求,及其交付计划
  2. 测试步骤
  3. 测试数据
  4. 预期结果

测试用例案例

序号 模块名称 测试子项 用例名称(测试意图) 用例级别 预置条件 测试步骤 预期结果 测试结果 缺陷编号 备注
1 大模块 小模块
2

测试用例常用设计方法

  1. 等价类划分法
  2. 边界值法
  3. 因果图设计法
  4. 判定表设计法
  5. 正交实验法

一、等价类划分法

项目:测试一个两位数的加法计算器
测试需求:测试两个参数的值相加后的结果是否正确。

  1. 隐藏需求:输入的数值在-99到99之间 大于99或小于-99的数应该被拒绝输入并显示错误信息。

开始测试:
分别给第一个参数和第二个参数输入下表中的值,得到测试结果如表所示

不能把-99到99所有数的相加情况都测试一遍,那么问题有:
1、在测试了1+1 1+2 1+(-1) 等这些情况之后,是否还有必要测试1+3,1+4呢
2、如果不穷举测试,能否放心的认为所有的参数组合都是正确的?

等价类划分法:概念

  1. 把程序的输入域划分为若干部分

  2. 然后从每个部分中选取少数代表性数据作为测试用例

  3. 每一类的代表性数据在测试中的作用等价于这一类中的其他值

    也就是说,如果某一类中的例子发现了错误,这一等价类中其他例子也能发现同样错误,反之同理。

等价类划分法:原则

  1. 如果输入条件规定了取值范围或值的个数,则可以确定一个有效等价类和两个无效等价类。
    比如 [-99,99]为取值区间,则大于99和小于-99的都是无效等价类

  2. 如果输入条件说明了一个“必须成立”的情况,则可划分一个有效等价类和一个无效等价类。
    比如 “今天必须完成100题” ,则“完成100题”是有效等价类 “未完成100题”是无效等价类。

  3. 如果输入条件规定了一组可能的值,而且程序是用不同的方式处理每一种值,则可为每一种值划分一个有效等价类,并划分一个无效等价类。

  4. 如果确知,已划分的某等价类中的各元素(例子)在程序中处理的方式是不同的,则应据此将此等价类进一步划分为更小的等价类。

  5. 确立了等价类之后,建立等价类表,列出所有划分出的等价类。

基于等价类划分的用例设计

  1. 明确测试对象,非测试对象保证正确。
  2. 为每个等价类规定一个唯一编号
  3. 设计测试用例,尽可能多的覆盖尚未覆盖的有效等价类。 重复,最终似的所有等价类均被测试用例覆盖。
  4. 设计一个新的测试,使其只覆盖一个无效等价类。重复,直至所有无效等价类均被覆盖。

等价类划分实战

项目:测试一个两位数的加法计算器
测试需求:测试两个参数的值相加后的结果是否正确。

Step1:根据测试需求可以分为三个等价类:
1、一个有效数据的等价类,两个无效数据等价类
有效等价类: -99<=数值<=99
无效等价类:数值<-99 数值>99
Step2:建立等价类表:

Step3:确定测试用例:
1、为等价类表中的每一个等价类分配一个唯一编号
2、设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类
3、重复,直至所有有效等价类均被测试用例覆盖
4、与上步类似,设计一个新的测试用例,使它只覆盖一个无效等价类
5、重复,直至所有无效等价类均被测试用例覆盖

Step4:细化等价类划分

  1. 在测试”-99~99“的这个等价类区间时,10+40、-20+30、-30+(-30)正数相加、正负数相加、负数相加也是不同的等价区间

细化之后的等价类表

PS:无效等价类中还有非数字情况,可以加上。

Step5:完善测试用例

根据上面划分的4个等价类,我们至少需要有5个测试用例

等价类的特点

  1. 测试相同的内容
  2. 如果等价类中的一个测试能够捕获一个bug,那么选择该等价类的其他测试也能捕获该bug
  3. 如果等价类中的一个测试不能捕获bug,那么其他的也不能
  4. 如果正确的划分等价类,可以大大降低测试用例的数量,测试会准确有效
  5. 如果错误的将两个不同的等价类当作一个等价类,就会遗漏一种测试情况

等价类划分要注意的问题

  1. 不但要考虑有效等价类,也要考虑无效等价类
  2. 仔细划分,审查划分 (实际不仅一个人划分,群策群力,还有评审)
  3. 过于粗略可能会漏掉bug
  4. 组织评审

【等价类用例设计练习】

测试需求:余额宝提现到银行卡增加新规则:快速到账(2h)日限额1w

分析过程:

  1. 超过1W只能选择普通到账
  2. 选择快速到账才有限制

设计用例
**思路:**首先分为两个功能(快速提现和普通提现),然后快速提现要求金额在0和1W之间(有效等价类),提现小于0和大于1W都是无效。其次普通提现不受限制,只要求提现金额在0和余额之间即可,(所以0和总余额之间都是有效值),无效指为小于0以及大于总余额。
优化:
日限额1W,可以是当天多次提现,要对总提现额度做划分(第一次和第N次)

PS:由于每次操作对应的功能场景不一样,所以每次无效等价类对应的<=0的情况都是不同的,比如第一次输入的提现金额为0和第二次提现金额0是不一样的。

思考题

需求说明:一个程序读入三个整数,把这三个数值看作一个三角形的3条边的长度值
利用等价类划分法,给出足够的测试用例。


优化建议:

二、边界值划分法

边界值分析法是一种补充等价划分的测试用例设计技术,它不是选择等价类的任意元素,二十选择等价类边界的测试用例。

以两位数相加计算器为例

由于允许输入的值在-99和99之间,所以-99和99可看作两个边界值,测试的时候选取紧邻边界值的数值和边界值本身:

用边界值设计余额宝需求测试用例

思路:边界为0、1W-已提现金额、1W,总余额最大值,取边界和紧邻边界的值:-1、0、1、9999、10001等

PS:最大值为约定数值,比如余额宝中最多可输入七位数。

三、因果图和判定表法

等价类划分和边界值分析都是着重考虑输入条件,而不考虑输入条件的各种组合、输入条件之间的相互制约关系。

如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、产生多个相应动作的测试方法,就需要因果图(逻辑模型)

  1. 因果图:从程序规格说明书中找出因(输入条件)果(输出结果或程序状态的改变)
  2. 将因果图转化为判定表。为判定表中的每一列设计一个测试用例。

判定表:分析和表达多逻辑条件下执行不同操作的工具。

由四个部分组成:

  1. 条件桩:列出了问题的所有条件,次序一般无所谓。
  2. 动作桩:列出可能的操作和结果。
  3. 条件项:列出针对它左列条件的取值,在所有可能情况下的真假值。
  4. 动作项:列出条件项的各种取值情况下应该采取的动作。

因果图设计步骤:

1、分析软件规格中那些是原因,哪些是结果?并给每个原因和结果赋予一个标识符。

2、找到原因和结果之间、原因和原因之间的相互关系。

3、有些组合情况不可能出现,为表明这些情况,在因果图上使用一些记号表明约束或限制条件。

4、把因果图转换为判定表。

5、根据判定表的每列设计用例。

两位数计算器实战



余额宝例子


面试题 【工资发放】
a1 年薪制 a2月薪制 a3普通错误 a4严重错误

a1和a2互斥;b1 b2 和b3 b4互斥 a3 和a4可同时具备。

四、正交实验法

是从大量的试验点中选取适量的、有代表性的点,应用迦罗卡瓦理论导出的“正交表”,合理的安排试验的一种科学试验设计法。(很少用到,一般大型系统才会用到,正常情况下极少有穷举所有的情况)

设计步骤
1、提取功能说明,构造因子——状态表

2、加权筛选,生成因素分析表(优先级确定,删掉优先级低的)
3、利用正交表构造测试数据集
4、利用正交表每行数据构造测试用例

案例:测试支付宝web网站,站点有大量的服务器和操作系统,并且有多种浏览器及其插件




五、场景法

由于上述方法比较单一从输入输出两方面考虑,但现在的软件几乎都是事件触发来控制流程的,事件触发时的情景形成场景,而同一事件不同的触发顺序和处理结果就形成了事件流

tb购物流程

测试用例综合设计

1、测试用例项划分

经典方法:瀑布模型,从上到下,逐渐细分,大模块包含小模块,更小模块(类似俄罗斯套娃),把系统划分成一块一块的,来测试,保证系统的完整性。

2、切面设计

功能点切面:最常见的切面,通常认为页面上的一个按钮就是一个功能点。根据功能的复杂程度,按每个功能进行用例的撰写。
隐含切面:完整业务流程的测试;从需求、业务角度进行编写。比如完整的购物流程。

3、功能点用例设计

  1. 任何情况都必须使用边界值分析法,经验表明这种方法找出bug能力最强
  2. 必要时用等价类划分法补充
  3. 如果程序功能说明中含有输入条件的组合情况,则可以用因果图法
  4. 业务复杂度高,则补充场景法

举例:共享单车充值案例

1、边界值:充值金额0、1、-1、多位小数、银行卡限额等
2、充值选择不同银行、支付渠道,所以针对支付宝、微信、银联等渠道分别设计测试用例
3、考虑异常,充值失败,银行卡余额不足,银行账户异常,银行卡返回超时等。场景法
4、更复杂的业务场景,比如满减、满赠、抽奖等等

-----------------------------------------------分割线--------------------------------------------------------


功能测试笔记PART2-测试用例设计方法与实战【等价类划分、边界值、因果图判定表、正交实验法】相关推荐

  1. 测试用例设计方法 之【等价类划分法】

    前言: 在没有测试用例之前,团队里的成员进行测试时,完全"以人为本",根据个人思路.需求理解度.发散性思想来完成测试系统,人无完人,弊端显而易见.衍生出[测试用例]后,测试工作的目 ...

  2. 软件测试(用例Ⅰ)· 测试用例的基本概念 · 万能公式 · 设计测试用例的方法(等价类、边界值、判定表法、正交法、场景设计法、错误猜测法)

    一.测试用例 基本要素 好处 设计方法 - 万能公式 二.设计测试用例的方法 等价类 边界值 判定表法 正交法 场景设计法 错误猜测法 一.测试用例 基本要素 测试用例(Test Case)是为了实施 ...

  3. 软件测试 通用技术03 测试用例 黑盒测试用例设计方法 等价类划分法 边界值分析法 判定表法 场景法 功能图法 其他用例设计方法 用例设计方法综合选择

    文章目录 1 测试用例 1.1 测试用例的定义 1.2 测试用例模板 1.3 测试用例模板的内容 测试用例编号 测试项 依赖用例 测试步骤 测试数据 预期结果 测试结果 测试人 备注 2 测试用例编写 ...

  4. 测试用例设计方法基础理论知识

    一.什么是测试用例 测试用例设计:将软件测试的行为活动,作为一个科学化的组织归纳. 测试用例:设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果. 因为我们不可能进行穷举 ...

  5. 软件测试用例优秀例子_功能测试用例设计方法分享

    测试用例可以用来衡量一个项目测试质量,因此在平时的测试流程中,编写测试用例就是测试过程中很重要的一步,每一个测试工程师都需要并且非常熟练的编写测试用例,能在编写测试用例中尽可能的覆盖任何异常的测试点: ...

  6. python测试用例设计方法_功能测试用例设计方法分享

    本文首发于:行者AI 测试用例可以用来衡量一个项目测试质量,因此在平时的测试流程中,编写测试用例就是测试过程中很重要的一步,每一个测试工程师都需要并且非常熟练的编写测试用例,能在编写测试用例中尽可能的 ...

  7. 【测试】功能测试用例设计方法总结

    测试用例可以用来衡量一个项目测试质量,因此在平时的测试流程中,编写测试用例就是测试过程中很重要的一步,每一个测试工程师都需要并且非常熟练的编写测试用例,能在编写测试用例中尽可能的覆盖任何异常的测试点: ...

  8. 功能测试用例设计方法、有那些,一一举例

    测试用例可以用来衡量一个项目测试质量,因此在平时的测试流程中,编写测试用例就是测试过程中很重要的一步,每一个测试工程师都需要并且非常熟练的编写测试用例,能在编写测试用例中尽可能的覆盖任何异常的测试点: ...

  9. 功能性测试用例设计方法深入理解

    一 进行测试设计的一般流程 设计测试案例的时候,需要有清晰的测试思路,对要测试什么,按照什么顺序测试,覆盖哪些需求做到心中有数.测试用例编写者不仅要掌握软件测试的技术和流程,而且要对被测软件的设计.功 ...

  10. 软件测试基础-测试用例设计方法(等价类+边界值)

    常见的用例设计方法 等价类划分法(适用于输入项少,输入项的属性或者特性相同) 边界值分析法(适用于有范围约束的情况) 判定表法(适用于有明显的条件及其对应的动作的情况) 因果图法 状态迁移图法(适用于 ...

最新文章

  1. C#高性能大容量SOCKET并发(十一):编写上传客户端
  2. VTK:图片之ImageText
  3. leetcode--121. 买卖股票的最佳时机
  4. javascript构造函数类和原型prototype定义的属性和方法的区别
  5. IQueryable和IEnumerable区别
  6. 触发2次 layui_[电路小知识篇]D型触发器电路
  7. WCF添加服务失败一则
  8. 地震勘探专业词汇(3)地震波动力学
  9. LeetCode 102. 二叉树的层次遍历(递归)(迭代)
  10. Android so文件进阶 一
  11. JAVA基础--JAVA语言组成01
  12. 算法:Merge k Sorted Lists(合并 k 个排序链表)
  13. Solidworks2022安装
  14. 复旦大学:专硕没住宿?我们帮你建!还给补助!
  15. 计算机组成与结构1800题,最新版数据结构1800题含完整答案详解
  16. Flutter之以阿里云图标库为例,使用多色图标
  17. 第三届人工智能、网络与信息技术国际学术会议(AINIT 2022)
  18. 文献跟踪、文献订阅工具
  19. 虫虫吃第一颗豆子---第一次作业
  20. 基于JavaWeb的网上订餐网站设计与实现 毕业论文+任务书+外文翻译及原文+答辩PPT+项目源码及数据库文件

热门文章

  1. 银河麒麟系统开机启动时间优化
  2. matlab函数randi,Matlab之rand(), randn(), randi()函数的使用方法
  3. 「PS-CC2019新版教程」画板工具-基础篇
  4. PAT (Basic Level) Practice (中文)1018 锤子剪刀布 python (无超时)
  5. Windows下安装tdm-gcc(64位)
  6. 导入技能要素三大类_教学能力综合训练(李平)-中国大学mooc-题库零氪
  7. 基于 STM32 的水质监测(需求与实现分析)
  8. 织梦dedecms免费转换到yzmcms教程(含插件下载)
  9. 无任何格外需求的命令行C++飞机大战,内含BOSS,动画,万行代码!免费奉上!
  10. mysql空间函数计算坐标距离