测试用例的8大设计原则

我们看到的大部分关于测试用例设计的文章,都在讲等价类、因果图、流程法等内容,这是关于测试用例的具体设计方法层面。本文想讨论的重点是,测试用例设计该遵循什么原则,有哪些思维和观点有助于产出更好的测试设计,这些思考汇集了对质量和测试的理解,以及对设计成本和质量预期的平衡,思考这些原则有助于测试设计的完备性和有效性。

  一、测试用例有哪些设计原则?

  测试用例设计需要遵循以下原则:基于需求、场景化、描述精准、可判定、原子化、可回归、独立、正交。下面就这些原则来逐一解释。

  1.基于需求

  测试用例是为了验证需求而设计的,应避免过度设计。

  ·从需求出发,设计能有效验证需求的测试用例

  · 明确不在需求范围内的功能,不设计测试用例

  · 在需求范围内的功能,不过度设计

  · 一些没有明确提出、但属于共识或隐含的需求,应设计测试用例

  例1:集成系统之间用于同步数据的更新接口,需求规定接口只允许单独调用,如果设计了并发量的测试,就属于过度设计。就算并发量测试出了问题,也不能作为软件缺陷,因为并发调用不在需求范围内。

  例2:单次调用这个接口,等了半天没响应。这种情况,就算没有明确提出关于超时设置的需求,也可以设计用例并提交缺陷,因为接口的响应表现已经远超出了正常响应的时长范围。可作为隐含的需求进行用例设计,如果在需求分析和细化时可以包含这类情况,就更好了。

  2.场景化

  测试用例设计尽可能贴近真实用户或端到端的使用场景。

  · 应全覆盖真实用户的使用场景

  · 围绕场景进行更多的探索

  · 以第一人称的主观视角描述用例,帮助建立同理心

  · 按照用户使用的自然顺序设计用例

  例1:某车载导航经常出现地图失效、误导、卡顿等问题,直接影响到了车主日常使用。一过隧道地图就失灵了,车机不能连WiFi,信号差导航就没法用……在软件测试阶段这些问题都没暴露,而嵌入式软件的功能验证不能不考虑真实的使用场景,能在需求分析时就考虑到当然很好,如果前期缺失这些关键信息,在测试设计时进行使用场景的思考就显得尤为重要了。

  例2:一些不包含终端用户使用场景的软件,比如后台功能、接口或算法等,还需要遵循场景化这一规则吗?当然也是需要的,场景化的原则并不局限于终端用户,也可以面向系统或服务的消费者,不管用户是人还是机器、系统还是接口,都可以面向受众场景来进行用例设计。

  3.描述精准

  描述测试用例的语言要尽量精准,避免歧义,保证不同的人对用例都有一致的理解。

  · 语言准确,没有歧义,尽量具体不空泛

  · 描述精练,保留必要信息,去掉无关信息

  · 避免大段描述,对大量信息进行分层和结构化设计

  · 描述角度关注给用户带来的价值,而非详细的操作步骤

  例:一个不满足描述精准的用例设计

 

  请结合以下问题来理解该原则:

  · 该用例的测试价值是超过限定次数的边界验证,从设计来看也在验证5次以内

  · 第1-5次有必要放在这里验证吗?是不是可以放在前提条件里?

  · 在这验证1-5次,和另写一个用例来验证5次以内,两种设计哪个更好?为什么?

  · 现在次数限制是5,如果是200次呢?

  · 哪里违反了描述精准原则?

  4.原子化

  每个测试用例应有单独的测试点,确保一个用例只测一点。

  · 每个测试用例,只针对一个验证点进行设计

  · 如发现验证点多于一个,可拆分

  · 用例的颗粒度要适宜

  例1:界面比较复杂,元素很多,为了满足原子化,是不是每个点都得写一个测试用例?当然不必,可以思考测试点是什么,并不是UI元素里的每一个点,而是UI的实现满足UI设计,从这个角度看,整体算是一个测试点。在描述时也不用啰嗦很多,直接贴个图就很直观。

  例2:如果要测试的是一个流程,有很多步骤,还满足原子化吗?思考方法同例1,需要验证的点并不是流程中的某个步骤,提供用户价值的是整个流程,以验证流程的角度来思考,这个测试点的设计仍然是满足原子化的。

  5.可判定

  应给出可判定的期望执行结果,在没有缺陷的情况下,多次执行应保持结果一致性。

  · 判定准则应明确可判,避免模糊或笼统的描述

  · 除非业务规则变化,否则判定准则应不变

  · 同一条件下,多次执行结果判定应一致

  这个原则比较简单,只要用例有单一的判定规则,可以按照预期结果和实际结果来判断用例是否通过,就满足了可判定原则。

  6.可回归

  测试用例的存在就是为了验证和回归,因此可回归是用例的必要条件。

  · 同一条件下,不同人回归的结果应一致

  · 在不同时间内,回归结果应一致

  · 使用满足条件的任何数据,回归结果应一致

  例:假设要测试的是抽奖算法,每次不一定抽中,或者要验证拍卖逻辑,不一定次次成交,这种情况下还算可回归吗?同样的方法,仍然思考测试点,这类情况要验证的测试点不是单次执行的结果,而是多次执行的概率,或是拍卖算法的逻辑,虽然每次执行的结果不一样,只要统计上满足算法和概率要求,就是可回归的设计。

  7.独立

  测试用例彼此之间应尽量保持独立,用例B的执行不应该依赖于用例A的执行结果。可以结合上面的抽奖用例和以下问题来思考独立原则。

  · 当多个用例彼此之间存在数据或流程上的依赖时,是放在一起验证较好,还是分开验证较好?

  · 如果测试人员按照特定顺序执行用例比较节省时间,如订单的创建、提交、审核、取消,这几个过程还是彼此独立的吗?

  · 在用例里怎样描述能凸显独立性?

  · 为什么用例之间最好彼此独立?

  8.正交

  测试用例的设计应尽量全面,无重复,确保测试设计有效且低成本。

  · 多个用例之间应彼此正交

  · 不重复验证同一个测试点

  对于不重复验证同一个测试点,想更多澄清一下,我们在设计用例的时候应避免重复设计,但在测试执行时,适当的重复验证是合理的,能够预防一些遗漏的缺陷。

  以上就是测试用例的设计原则了,这些原则能帮助我们更真实、有效且经济地设计出设计出更好的测试用例。

  二、测试用例的设计原则适用场景

  测试用例的设计原则可适用于以下场景:

  1. 测试用例设计:任何进行测试设计的场景,如单元测试、用户测试、接口测试

  2. 测试用例评审:进行测试设计评审的场景,可参考设计原则给出改进建议

  3. 回归范围确定:好的用例设计能够更方便地确定回归范围,当确定范围困难时,有可能是用例设计本身不合理,难以快速界定测试的范围和要验证的价值

  4. 测试有效性评估:当需要评估测试是否有效时,可参考设计原则进行评估,好的测试设计可以更有效地验证功能和揭示缺陷

  最后再澄清一下,测试用例设计原则同样适用于敏捷测试的情况。可能在敏捷场景下,测试人员不会写出详尽的测试用例文档,但由于敏捷的快速迭代和反馈,在测试设计上更要追求高效和经济,因此会比时间和资源相对充裕的场景更需要优化测试设计。

  不论在何种场景,都需要更好的测试设计,这也是优秀的软件从业者必备的核心技能。

  三、测试用例管理工具

  无论是需求管理、设计测试用例、编写测试执行报告、通知其他团队成员测试进展等,使用测试管理工具都是非常有必要的。为了管理测试过程遇到的所有issue,一些测试管理工具可以让你的测试管理工作变得非常方便和高效。下面推荐一些优秀的免费/付费测试管理软件。

  1、PingCode

  PingCode 是国内的一站式软件研发项目管理工具,在2021年曾被36氪评为国内研发项目管理工具top1。被广泛用于需求管理、敏捷/瀑布/看板项目管理、测试管理、缺陷管理、文档管理等工作领域。

  PingCode 具有专门的测试管理模块,支持测试用例创建、用例库管理、用例评审、测试计划、自动生成测试报告,测试用例还能关联版本、需求、缺陷等。

  最让我喜欢的是,PingCode 支持用例自定义,这对于对扩展有情结的人来说非常重要,因为业务是多变的,多给自己留点空间,同时用例导入这块支持脑图的导入、支持代码工具git、CI/CD工具jinkens等也是非常吸引我们团队的。

 2、Testpad

  Testpad是一个轻量级的测试计划管理工具,是DIY电子表格的完美升级版,目的是给你足够的过程,无需在繁琐的测试用例管理工作中耗费过多时间。

特点:

  1. 简单到任何人都可以使用-不需要培训

  2. 测试报告一目了然:测试了什么,还有多少要做,"我们准备发布了吗?"

  3. 基于分层检查表的测试计划

  4. 创建灵活的测试,你可以在测试过程中随时改进。

  5. 满足你想要的任何测试方式。TCM,BDD,或任何形式的探索性测试。

  3、TestRail

  TestRail提供全面的测试用例管理,帮助你组织测试工作,实时了解测试活动。强大的报告和指标使QA团队能够提高生产力并提供快速反馈。

 特点:

  1. 轻松地跟踪单个测试用例的状态。

  2. 用信息丰富的仪表板和活动报告来衡量进度

  3. 比较多个测试运行、配置和里程碑的结果

  4. 追踪团队的工作量以调整任务和资源

  5. 高度可定制,有基于云或内部安装的选项

  6. 与缺陷跟踪和协作解决方案集成,如Atlassian Jira、FogBugz、Bugzilla、Axosoft、GitHub和TFS;以及与领先的测试自动化工具,包括Ranorex Studio。

  以上就是关于测试用例管理设计原则,管理工具的盘点,希望对大家有所帮助。

 

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CNP实现应用CD部署

上一篇整体介绍了cnp的功能,这篇重点介绍下CNP产品应用开发的功能。 简介 CNP的应用开发,主要是指的应用CD部署的配置管理。 应用列表,用来创建一个应用,一般与项目对应,也可以多个应用对应到一个项目。具体很灵活。…

结合两个Python小游戏,带你复习while循环、if判断、函数等知识点

💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…

Ubuntu18.04安装LeGO-LOAM保姆级教程

系统环境:Ubuntu18.04.6 LTS 1.LeGO-LOAM的安装前要求: 1.1 ROS安装:参考我的另一篇博客Ubuntu18.04安装ROS-melodic保姆级教程_灬杨三岁灬的博客-CSDN博客文章浏览阅读168次。Ubuntu18.04安装ROS-melodic保姆级教程https://blog.csdn.net/…

.Net中Redis的Hash表操作

前言 Redis中的Hash是一种存储数据的数据结构,用于存储键值对的集合。Hash常用于存储对象或者记录,因为它可以将多个属性存储为一个键值对,这样可以方便地获取、修改、和删除对象中的单个属性。 Redis的使用 安装包ServiceStack.Redis Nu…

javascript开发经验小结

javascript 面向对象的编程方法 对象声明: 1。 var MapX {}; 2。 var XLngLat new Class(); 3.//菜单项对象。 function MenuItem(id,text,clickEvent,accelerator) //指定菜单项属性,ID,中文名,单击事件快捷键…

鸿蒙系统扫盲(二):再谈鸿蒙是不是安卓套壳?

最近小米发布了澎湃OS,vivo发布了蓝OS,好像自从华为回归后,大伙都开始写自己的OS了,小米官方承认是套壳安卓,然后被大家喷了,于是鸿蒙是不是安卓套壳的话题又回到了大众的视野,今天在讨论下这个…

Docker-compose 安装mysql8

1、编写docker-compose.yml文件 version: 3.8 services:mysql:container_name: mysql8image: mysql:8.0.18restart: alwaysports:- 3306:3306privileged: truevolumes:- $PWD/log:/var/log/mysql- $PWD/conf/my.cnf:/etc/mysql/my.cnf- $PWD/data:/var/lib/mysqlenvironment:M…

解决uncompyle6反编译报错KeyError

报错内容:KeyError:3.11.0 (这个是我自己的Python版本号) 主要原因就是你的Python版本没在它库文件支持的版本里,我们需要进行手动添加即可。 首先找到文件:magics.py 我的是在这个路径下:D:\…

5.2 Windows驱动开发:内核取KERNEL模块基址

模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块,这里的用户模块指的是应用层进程运行后…

ubuntu linux C/C++环境搭建

目录 前言 1.1 vim安装与配置 ​编辑 1.2 vim配置 1.3 gcc g编译器的安装 与gdb调试器的安装 1.4 写个C/C程序测试一下 1.6 vscode安装 1.7 vscode插件下载​编辑 前言 在开始C之前,我们需要搭建好C的开发环境,我这里使用的操作系统是ubuntu Linux&a…

python之随机数

生成随机数 工具库:random 生成随机整数:random.randint(0, 99999) 生成随机大写英文字母:random.choice(string.ascii_uppercase) 例子 3. 写代码实现,车牌的区域划分。如 car_list [鲁A32444, 沪B12333, 京B8989M, 京C49678, 黑…

Java实现象棋算法

象棋算法包括搜索算法、评估函数和剪枝算法。以下是一个简单的实现: 搜索算法:使用极大极小值算法,即每个玩家都会做出最好的选择,考虑到对方也会做出最好的选择,所以需要搜索多层。 public int search(int depth, i…

数据库-索引

一、概述 索引是SQL优化的核心 索引(index)是帮助MySQL高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向数据),这样可以在这些数据结构上实现高级查找算法,这种数…

docker下移除不使用的镜像、容器、卷、网络

Prune images docker image prune移除没有标签并且没有被容器引用的镜像,这种镜像称为 dangling(摇晃的) 镜像。 示例1:docker image prune 删除了redis,无标签且无引用 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STA…

深度学习之基于YoloV5抽烟检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5(You Only Look Once)的抽烟检测系统可以用于实时检测图像或视频中是否存在抽烟行…

CF 1894A 学习笔记 思维 题意理解分析

原题 A. Secret Sport time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standard output Lets consider a game in which two players, A and B, participate. This game is characterized by two positive integer…

IvorySQL3.0:基于PG16.0最新内核,实现兼容Oracle数据库再升级

Oracle作为全球最大的数据库厂商之一,具有较高的市场知名度和份额。但随着数据处理需求日益增长,使用Oracle的企业可能面临一些挑战,如数据库复杂性、高昂维护成本、数据迁移和集成问题等,难以满足企业实时数据处理需求&#xff0…

服务器能分成的四种类型有哪些?

1、文件服务器:是一种网络服务器,他能够把共享文件夹或者是网络驱动器映射到本地计算机上面,这样企业里的用户都可以很方便的访问和共享文件,文件服务器还能够存储大量的数据,提供备份,安全性也很高&#x…

UI 自动化测试框架设计与 PageObject 改造!

在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: 简单的录制/回放速度快,但无法适应复杂场景;编写自动化测试脚本比较灵活,但工作量大且可维护性差;以往的封装技术&#xff…

webpack 创建typescript项目

【视频链接】尚硅谷TypeScript教程(李立超老师TS新课) 创建webpack 项目 IDE:webstorm 新建一个空的项目运行npm init初始化项目目录结构 1. 安装 webpack:构建工具webpack-cli: webpack的命令行工具typescript&am…