当前位置: 首页 > news >正文

【软件测试】测试用例的设计方法

文章目录

  • 1. 测试用例的概念
  • 2. 设计测试用例的好处
  • 3. 基于需求设计测试用例
    • 3.1 功能性需求
    • 3.2 非功能性需求
  • 4. 设计测试用例的具体方法
    • 4.1 等价类
    • 4.2 边界值
    • 4.3 错误猜测法
    • 4.4 场景设计法
    • 4.5 因果图法
    • 4.6 正交法
  • 5. 测试用例的粒度

1. 测试用例的概念

测试用例就是测试人员向被测试系统发起的一组集合,该集合包括测试环境,测试数据,测试步骤,预期结果

2. 设计测试用例的好处

在测试前都要先设计测试用例,设计测试用例有如下好处:

  1. 测试用例是测试人员执行测试的依据
  2. 在做回归测试的时候,测试用例可以复用
  3. 测试用例可以衡量需求的覆盖率
  4. 测试用例是自动化测试的依据
  5. 测试用例具有借鉴意义,后续测试人员可以借鉴前人写的测试用例

测试用例的编写往往是根需求编写的,那么如何根据需求来编写测试用例?

3. 基于需求设计测试用例

在基于需求设计测试用例之前,测试人员要进行如下操作:

  1. 测试人员首先要分析需求,验证需求的合理性,正确性,无二义性,并且逻辑自洽
  2. 其次再是细化需求,从需求中提取出测试点,根据测试点设计测试用例

在测试人员分析需求时往往分析功能性需求和非功能性需求

3.1 功能性需求

功能性需求是为了满足软件的基本功能,往往从以下几个方面进行分析考虑

  1. 从界面考虑,验证界面功能

比如QQ登陆页面,有许多的按钮对应不同的功能

  1. 从业务角度考虑,把功能串起来进行测试

比如增加一条用户信息,然后是查询,修改或者删除

  1. 验证功能之间的交互性,一致性

比如微信发朋友圈,你发送的内容要和微信好友在朋友圈看到的一致

  1. 一个功能的多个输入

比如登陆功能,要使用不同的账号和密码进行登陆测试

  1. 功能的异常测试
  2. 功能的易用性,体验性的测试

主要是验证用户在使用上是否符合用户使用习惯,使用起来是否舒适等

  1. 功能涉及的算法

比如滴滴打车,一个顾客叫了一个车,系统要根据某些算法算出距该顾客最近的车

3.2 非功能性需求

非功能需求是在功能性需求的基础上做一些限制,满足特定场景的需求,让用户有更好的体验,比如软件的兼容性,性能,安全性,可靠性,可移植性,易用性等

不同的软件对于非功能性的需求往往是不同的,如:

  • 客户端的软件:像word,ppt,xmind,播放器对功能和要求很简单,对性能,安全性要求比较低,对软件的可移植性要求比较高,因为这些不需要联网就可以使用
  • 企业软件:比如聊天软件,像飞Q,飞书,钉钉,对功能有一定要求,对兼容性,安全性,性能要求低,因为企业软件用的用户比较少
  • 商业软件:像QQ,微信等,对功能,性能,安全性,可移植性,易用性要求都很高,因为商业软件使用的用户基数大

4. 设计测试用例的具体方法

设计测试用例的常用方法有:等价类,边界值,错误猜测法,场景设计法,因果图,正交法,下面就对这几种常用设计测试用例的常用方法展开具体的介绍

4.1 等价类

根据输入(特殊情况下考虑输出),把输入划分成若干个等价类,从每一个等价类当中取一个测试用例进行测试,如果这个测试用例通过,我们就说这个测试用例代表的等价类测试通过

等价类可以解决测试用例无法穷举的情况

等价类有有效等价类和无效等价类

  • 有效等价类:符合需求规格说明书的数据
  • 无效等价类:不符合需求规格说明书的数据

注意:测试的时候有效等价类和无效等价类都得测试

示例:注册网易邮箱时,针对账号和密码设计测试用例

测试用例

4.2 边界值

对输入和输出的边界针对性的进行测试用例的设计,叫作边界值法

示例:上面的网易注册账号和密码的测试用例

账号要求6~ 18个字符,密码要求8~16个字符,所以在设计账号的测试用例时,可以采用边界值设计账号长度的测试用例为5,7,17,19个字符,设计密码长度的测试用例为7,9,15,17个字符

注意:边界值往往和等价类结合在一起使用

4.3 错误猜测法

测试人员根据自己的经验,知识,个人直觉判断软件哪一部分会出现问题,针对性的设计测试用例

错误猜测法适用于补充测试用例,或者进行探索性测试的时候

示例:在数据库查询关于张三的信息,使用“张三”查询到相关信息,使用“ 张 三 ”就查询不到任何信息

有经验的测试人员可能能猜到开发人员在做查询的时候,把空格也当作有效字符,而实际要把空格去掉再去匹配

示例:在数据库查询500条信息,每条信息都不重复,500条分5页展示,每页展示100条,但是在翻看的时候发现每页都有与前面页相同的信息

有经验的测试人员可能猜测是开发人员在做查询的时候没有对数据进行排序,排序后,就不会出现类似问题了

4.4 场景设计法

把一个个孤立的功能串起来形成一个场景,每一个功能不同的输入会触发流程走向不同的场景,根据这些不同功能的不同输入触发形成的不同场景进行测试用例的设计

示例:ATM机取款流程

ATM机取款流程:插卡——输入密码——输入取款金额——退卡

ATM机取款流程
ATM机取款流程的测试用例举例:

  • 卡插反:提示无法识别,重新正确插入,操作正常的情况下可以取款成功
  • 卡消磁:提示无效卡,无法取款
  • 卡锁定:提示用户被锁定,请解锁后重新操作
  • 密码输入为空:提示请输入正确密码,输入正确密码取款成功

4.5 因果图法

因果图是一种简化了的逻辑图,能直观地表明程序输入条件(原因)和输出动作(结果)之间的相互关系,因果图法是借助图形来设计测试用例的一种系统方法,

使用场景:当输入有多个,并且不同的输入组合对应着不同的输出,这个时候我们可以用因果图来进行测试用例的分析,根据分析的结果来设计测试用例

因果图的几种关系

恒等:输入为真,输出为真
在这里插入图片描述
与:当输入条件有多个,多个条件都为真的时候,输出为真
在这里插入图片描述
或:当输入条件有多个,有一个条件为真,输出为真
在这里插入图片描述
非:输入为真,输出为假;输入为假,输出为真
在这里插入图片描述

如何使用因果图法来设计测试用例?

  1. 分析所有的输入和输出
  2. 找出输入和输出之间的逻辑关系
  3. 根据输入和输出画出因果图
  4. 根据因果图画出判定表
  5. 根据判定表去设计测试用例

示例:淘宝618活动,订单已提交,并且购物金额大于300或者有红包,则有优惠,否则无优惠

  1. 分析所有的输入和输出

输入:订单已提交,购物金额大于300,有红包
输出:有优惠,没优惠

  1. 找出输入和输出之间的逻辑关系

订单已提交,购物金额大于300,有红包,有优惠
订单已提交,购物金额小于300,有红包,有优惠
订单已提交,购物金额大于300,没红包,有优惠
订单已提交,购物金额小于300,没红包,没优惠
订单未提交,没优惠

  1. 根据输入输出之间的逻辑关系,画出因果图
    在这里插入图片描述
  2. 根据因果图,画出判定表
    在这里插入图片描述
  3. 根据判定表,写测试用例

订单已提交,金额大于300,有红包,有优惠
订单已提交,金额大于300,没红包,有优惠
订单已提交,金额小于300,有红包,有优惠
订单已提交,金额小于300,没红包,没优惠
订单没提交,金额大于300,有红包,没优惠
订单没提交,金额大于300,没红包,没优惠
订单没提交,金额小于300,有红包,没优惠
订单没提交,金额小于300,没红包,没优惠

4.6 正交法

根据正交法从大量的测试数据中,选取出最优的数据组合,根据最优的数据组合的结果来衡量整个测试的输出结果

正交法的目的是为了减少测试用例的数目

5. 测试用例的粒度

测试用例的粒度指测试用例编写的详细程度

测试用例不能写的过于复杂和过于简单

  • 过于复杂:

测试用例写得过于复杂或详细,会带来两个问题,一个是效率问题,另一个是维护成本问题,还有如果测试用例设计得过于详细,留给测试执行人员的思考空间就比较少,容易限制测试人员的思维

  • 过于简单:

测试用例写的过于简单,则可能失去了测试用例的意义,设计过于简单的测试用例其实并没有真正的进行设计,只是把需要测试的功能模块记录下来而已,它的作用仅仅是在测试过程中作为一个简单的测试计划,提醒测试人员测试的主要功能包括哪些而已,测试用例设计的本质应该是在设计的过程中理解需求,检验需求,并把对软件系统的测试方法的思路记录下来,以便指导将来的测试

测试用例的粒度应该介于两者之间,具体设计应该根据项目的实际情况,测试资源的情况来决定应该设计出何等粒度的测试用例

相关文章:

  • 二叉树的遍历问题
  • FPGA/HDL 人员开发利器-TerosHDL(开源 IDE)
  • 《谁动了我的奶酪》阅读笔记
  • 2023秋招--腾讯天美--游戏客户端--一面面经
  • 跨模态学习能力再升级,EasyNLP电商文图检索效果刷新SOTA
  • JavaScript 中什么时候使用 Map 更合适(二)
  • 【统计学习|书籍阅读】第五章 决策树 p55-p75
  • 【GlobalMapper精品教程】009:DSM过滤植被和房屋并生成等高线案例教程
  • web前端期末大作业:我的家乡广东(html+css布局)div制作
  • 【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
  • 【DNS服务器的配置】实操
  • mysql索引下推与回表
  • 安装Scala
  • [C#小技巧]如何捕捉上升沿和下降沿
  • 一行代码,将2D转3D图表!
  • Apache的基本使用
  • ES6语法详解(一)
  • Facebook AccountKit 接入的坑点
  • iOS小技巧之UIImagePickerController实现头像选择
  • javascript 总结(常用工具类的封装)
  • Javascript设计模式学习之Observer(观察者)模式
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • mysql外键的使用
  • Redis字符串类型内部编码剖析
  • spring-boot List转Page
  • SQLServer之创建数据库快照
  • sublime配置文件
  • Vue2 SSR 的优化之旅
  • Zepto.js源码学习之二
  • 阿里云前端周刊 - 第 26 期
  • 工作手记之html2canvas使用概述
  • 技术胖1-4季视频复习— (看视频笔记)
  • 实现菜单下拉伸展折叠效果demo
  • 一天一个设计模式之JS实现——适配器模式
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 自动记录MySQL慢查询快照脚本
  • 昨天1024程序员节,我故意写了个死循环~
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #图像处理
  • $.ajax中的eval及dataType
  • (2022 CVPR) Unbiased Teacher v2
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Note)C++中的继承方式
  • (python)数据结构---字典
  • (九)信息融合方式简介
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (一)SpringBoot3---尚硅谷总结
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET轻量级ORM组件Dapper葵花宝典
  • ??eclipse的安装配置问题!??
  • @Bean注解详解
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ C++ ] STL_list 使用及其模拟实现