测试用例的设计

*涉及概念来源于《软件测试的艺术》

目录

一、为什么要设计测试用例?

二、黑盒测试与白盒测试介绍

三、测试用例常见设计方法

1.黑盒测试(功能测试)

2.白盒测试(结构测试)

四、测试策略

五、测试用例怎么写


一、为什么要设计测试用例?

由于时间和成本的约束,软件测试最关键的问题是:在所有可能的测试用例中,哪个子集最有可能发现最多的错误?对软件测试用例设计方法的研究为这个问题提供了答案。

穷举的黑盒和白盒测试通常都是不可能的,但同时也建议:将这两种测试的要素组合起来得到一种合理的测试策略(灰盒测试)。可以通过使用特定的面向黑盒测试的测试用例设计方法,而后使用白盒测试方法对程序的逻辑结构进行检查以补充这些测试用例,借此来设计出一个相当严格的测试。

二、黑盒测试与白盒测试介绍

三、测试用例常见设计方法

1.黑盒测试(功能测试)

1.等价类划分:有效等价类和无效等价类。选取少数有代表性的数据,这一类数据等价于这一类的其它值

2.边界值分析:大量的错误是发生在输入或输出范围的边界上。通常边界值分析法是作为对等价类划分方法的补充,这种情况下,其测试用例来自等价类的边界。

3.因果图分析:输入因得到输出果,直观的表明输入(原因)和输出(结果)之间的关系。

        因果关系(若A则B、若A非B、A或B则C、A与B则C)

        因果图可以转为判定表,判定表的每一列作为依据,设计测试用例。可以略过因果图的绘制,直接列出所有组合进行筛选(判定表法)。

4.正交实验:用在有多个输入和多个输出的情况。测试用例数目巨大,为了有效合理地测试,可利用正交实验设计方法用尽量少的用例来涵盖输入条件的组合。

5.错误猜测:用经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例,与用户的使用习惯及测试程序中的常见问题为主。

6.场景实验:现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。如ATM取钱时:

基本事件流--先插卡、输入正确密码、选择取款功能、输入正确金额、取钱、取卡。

备选事件流--(1)插卡,输入密码错入、第二次输入正确、取钱、取卡;(2)插卡、密码忘记、取卡;(3)插卡、输入正确密码、选择查看余额功能...中间出现断电或ATM故障等。。。

2.白盒测试(结构测试)

1.语句覆盖:程序中的每条语句至少被执行一次。

2.判定覆盖/分支覆盖:使得每一个判断都至少有一个为真和为假的输出结果。

3.条件覆盖:将一个判断中的每个条件的所有可能的结果至少执行一次。

4.判定/条件覆盖:将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能的结果至少执行一次,将每个入口点都至少调用一次。

5.多重条件覆盖:将每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。

四、测试策略

1.输入中包含条件组合,应首先使用因果分析方法

2.在任何情况下都应该使用边界值分析方法

3.应该为输入和输出确定有效和无效等价类

4.使用错误猜测技术增加更多的测试用例

5.针对上述的测试用例,检查能否覆盖白盒测试中的几种测试设计类型

五、测试用例怎么写

测试用例应该包括:

①用例编号 ②测试项目 ③用例标题 ④重要级别 ⑤前置条件 ⑥测试输入 ⑦操作步骤 ⑧预期结果

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

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

相关文章

Git 的基本使用

1.创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来,例如下面代码创建了gitcode_linux的文件夹,之后再对其进行初始化。创建⼀个 Git 本地仓库对应的命令为 git init &#xff0c…

少年我看你有缘,这部《html标签大合集》就送你了

HTML标签是用于定义网页结构和内容的元素。标签通常是成对出现的&#xff0c;由开始标记和结束标记组成&#xff0c;开始标记使用尖括号< >包围&#xff0c;结束标记使用尖括号和斜杠/包围。开始标记中的元素属性可以提供额外的信息。 1.基础标签 html 标签 head 头标…

Codeforces Round 967 (Div. 2) C题Guess The Tree

题目链接 令1是根&#xff0c;我们可以一层一层的递推出去。容易知道询问a&#xff0c;b如果结果是c&#xff0c;那么c就是a&#xff0c;b路径上的中点。我们可以先让根1和其他n-1个点都询问一遍&#xff0c;如果返回值是1&#xff0c;那么这些点就是第二层&#xff0c;深度为2…

【注解】反序列化时匹配多个 JSON 属性名 @JsonAlias 详解

JsonAlias 注解是 Jackson 提供的一个功能强大的注解&#xff0c;允许一个字段在反序列化时匹配多个 JSON 属性名。它适用于在处理多种输入数据格式时&#xff0c;或当 JSON 数据的键名可能变化时。 一、JsonAlias 的作用 多种别名&#xff1a;JsonAlias 允许你为一个字段定义…

ZNS SSD是不是持久缓存的理想选择?

随着数据量的增加和技术的进步&#xff0c;对于高效、可靠的存储解决方案的需求日益增长。传统的基于块的SSD虽然具有成本效益和持久性的优点&#xff0c;但在处理写密集型和更新密集型工作负载时存在局限性。 NAND闪存的特点是数据只能按页&#xff08;例如4KiB&#xff09;写…

2024年最新最全的【大模型学习路线规划】从零基础入门到精通!

2024年最新最全的大模型学习路线规划&#xff0c;对于零基础入门到精通的学习者来说&#xff0c;可以遵循以下阶段进行&#xff1a; 文章目录 一、基础准备阶段数学基础&#xff1a;编程语言&#xff1a;深度学习基础&#xff1a; 二、核心技术学习阶段Transformer模型&#xf…

[Linux#41][线程] 线程的特性 | 分离线程 | 并发的问题

1.线程的特性 进程和线程的关系如下图: 关于进程线程的问题 • 如何看待之前学习的单进程&#xff1f;具有一个线程执行流的进程 线程 ID 及进程地址空间布局 pthread_ create 函数会产生一个线程 ID&#xff0c;存放在第一个参数指向的地址中。 该线程 ID 和前面说的线程 ID …

动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本

系统流程概览 main函数 对于一个服务器程序来说&#xff0c;因为要为外部的客户端程序提供网络服务&#xff0c;也就是进行数据的读写&#xff0c;这就必然需要一个 socket 文件描述符&#xff0c;只有拥有了文件描述符 C/S 两端才能通过 socket 套接字进行网络通信&#xff0…

4.Redis单线程和多线程

1.Redis的单线程 Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程完成的&#xff0c;Redis在处理客户端的请求时包括获取&#xff08;Socket读&#xff09;、解析、执行、内容返回&#xff08;Socket写&#xff09;等都由一个顺序串行的主线程处理&#xff0c;这…

ProxySQL 读写分离配置

ProxySQL 是一个高性能、高可用的 MySQL 代理软件&#xff0c;旨在提升 MySQL 数据库的可扩展性和性能。它可以在应用程序和 MySQL 服务器之间充当中间层&#xff0c;提供强大的路由、负载均衡和查询优化功能。 ProxySQL 的主要功能&#xff1a; 查询路由&#xff1a; ProxySQ…

MySQL DDL详细讲解和常见问题案例示范

MySQL 删除操作和连接类型详细讲解和案例示范 DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;是用于创建和修改数据库结构的语句&#xff0c;包括创建表、索引、视图&#xff0c;以及修改这些结构。本文将详细介绍MySQL DDL语句的常见用法&…

stm32hal库can使用记录

一、单片机最小系统板使用can 资料&#xff1a;https://blog.csdn.net/yoie01/article/details/136921034 https://blog.csdn.net/qq_36561846/article/details/117431769 这里面有一个问题&#xff0c;最小系统板没有can收发器&#xff0c;所以没法直接用&#xff0c;只能测…

市盈率的概念

写篇有关市盈率的【不务正业】的内容。 重要公式 市盈率 官方的定义 平均市盈率&#xff1d;∑(收盘价发行数量)/∑(每股收益发行数量)&#xff0c;统计时剔除亏损及暂停上市的上市公司。 静态市盈率 滚动市盈率&#xff08;TTM&#xff09; 股票市盈率的意义 如果某股票有较…

培训第三十四天(初步了解Docker与套接字的应用)

上午 回顾 1、主从复制&#xff08;高可用&#xff09; 2、传统的主从复制 3、gtids事务型的主从复制 4、注意 1&#xff09;server_id唯一 2&#xff09;8.X版本需要get_ssl_pub_key 3&#xff09;5.X不需要 4&#xff09;change master to 5&#xff09;stop | sta…

项目服务器登录部分

从连接池中获取上下文&#xff0c;接受连接。 async_accept 这个函数本质上是监听和接受客户端连接的结合操作。 void CServer::StartAccept() {auto& io_context AsioIOServicePool::GetInstance()->GetIOService();std::shared_ptr<CSession> new_session mak…

JS中encodeURIComponent和encodeURI函数的区别

1、encodeURIComponent函数用于对完整的URL组件进行编码&#xff0c;包括查询参数、路径片段等。 它会对所有非字母数字字符进行编码&#xff0c;并将其替换为相应的URL编码形式。这包括对特殊字符&#xff08;如冒号、斜杠、问号、等号、加号等&#xff09;的编码。encodeURI…

拍抖音在哪里去水印,三招教你快速掌握去水印技巧

在抖音上&#xff0c;我们经常会看到一些精彩的内容&#xff0c;想要保存下来&#xff0c;但往往视频上会有水印。本文将分享五个免费且高效的去除抖音视频水印的技巧&#xff0c;帮助你轻松保存无水印的视频。 技巧一&#xff1a;奈斯水印助手(小程序) 奈斯水印助手是一款专…

GIS空间数据库,基本概念

文章目录 一、前言二、空间概念三、地理空间四、空间数据五、数据库六、空间数据库七、空间数据库与传统数据库的差异7.1 信息描述差异7.2 数据管理差异7.3 数据操作差异7.3 数据更新差异7.3 服务应用差异 一、前言 数据是指客观事物的属性、数量、位置及其相互关系等的符号描…

JavaScript(30)——解构

数组解构 数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法 基本语法&#xff1a; 赋值运算符左侧的[]用于批量声明变量&#xff0c;右侧数组的单元值将被赋值给左侧变量变量的顺序对应数组单元值的位置依次进行赋值操作 const arr [1, 2, 3, 4, 5]const [a, b…

云渲染的三个条件是指什么!哪三点最重要!

云渲染技术以其灵活性和效率&#xff0c;让创意人士和企业无论身处何地&#xff0c;都能通过网络接入强大的远程服务器&#xff0c;轻松完成复杂的图形渲染任务&#xff0c;但要发挥其魔力&#xff0c;我们得满足一些关键条件。 一、网络连接&#xff1a;云渲染的桥梁 首先&am…