测试用例设计方法_黑盒测试——测试用例设计方法

ad3ad8ac44841191ba685c604bc0edec.png

黑盒测试

也称为功能测试或数据驱动测试。通过软件的外部表现来发现其缺陷和错误。在测试时,把被测程序视为一个不能打开的盒子,在完全不考虑程序内部逻辑结构和内部特性的情况下进行。它是在已知产品所应具有的功能前提下,通过测试来检测每个功能是否都能正常使用,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能够适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

e813f7f70b1df4c0d02df3cdf581fd7f.png

黑盒测试主要用于软件确认测试。

等价类划分法

定义

等价类测试是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。它是一种重要的,常用的黑盒测试用例设计方法,适用范围广,可以适用于单元测试、集成测试。系统测试等,且容易扩展。

等价类划分分类

等价类划分有两种不同的情况:有效等价类和无效等价类。在设计测试用例时,要同时考虑这两种等价类。软件不仅要能接受合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

等价类划分原则

  • 如果某个输入条件规定了取值范围或值的个数。则可确定一个合理的等价类(输入值在此范围内)和两个不合理的等价类(输入值或个数小于这个范围的最小值或大于这个范围的最大值)
  • 如果规定了输入数据的一组值,而且程序对不同输入值做不同的处理,则每个允许输入值是一个合理的等价类,此外还有一个不合理的等价类,即任何一个不允许输入的值。
  • 如果规定了输入数据必须遵循的规则,可确定一个合理的等价类(符合规则)和若干个不合理的等价类(从各种角度违反规则)
  • 如果输入是布尔表达式,可以分为一个有效的等价类和一个无效的等价类
  • 如果已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分为更小的等价类
  • 等价类划分还应特别注意默认值、空值、Null、0等的情形

实例

【例】电话号码测试。某城市电话号码由三部分组成,分别是

地区码——空白或4位数字

前缀——为三位数字,但不能为“1”或“0”

后缀——4位数字

假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。请用等价类方法进行测试,设计测试用例

0c80568cff43b51b3e1d98a945d9c66d.png
97dacc4862d0fb5424495cebf6df1819.png

边界值分析法

常见边界条件

1.数值的边界值

计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。比如一个字节由8位组成,一个字节所能表达的数值范围是[0,255]。下表列出了计算机中常用的数值范围。

aa06f49dec164157ce74828ea0a85527.png

2.字符的边界值

3.其他边界条件

边界值选择遵循的原则

  1. 如果输入条件规定了值的范围,可选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。如输入值的取值范围是[0,99],可取-1,0,99,100等值作为测试数据。
  2. 如果输入的条件指出了输入数据的个数,则按最大个数。最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。如,一个输入文件可包括1~255个记录。则分别设计有1个记录,255个记录,以及0个记录、266个记录的输入文件来作为测试用例
  3. 如果程序的规格说明给出的输入域或输出域是有序集合(如有序列表、顺序文件等),则应选取集合的第一个元素和最后一个元素作为测试数据。例如,输出的表最多有99行,每50行为一页,则输出0行、1行、50行、51行、99行。
  4. 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试数据

实例

【例】NextDate函数边界值测试

程序有三个变量month、day、year(month、day和year均为整数值,并且满足1<=month<=12、1<=day<=31、1900<=year<=2050),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。请用边界值分析法设计测试用例,分析各变量的取值。

边界值分析测试时,各变量分别取:略小于最小值、最小值、正常值、最大值和略最大于最大值。具体取值如下:

month:-1,1,6,12,13;

day:-1,1,15,31,32;

year:1899,1900,1975,2050,2051;

6ea63e4a05cd4b18de23f5f851b31937.png

在NextDate函数中有两种复杂性的输入来源,一是输入域的复杂性(即输入变量之间逻辑关系的复杂性),而是确定闰年的规则。

决策表

考虑输入与输出变量取值之间的关系,比较复杂,需要更多的规则。

在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值,在这些逻辑条件取值的组合构成的多种情况下,分别执行不同的操作。处理这类问题的一个非常有力的分析和表达工具是判定表(决策表)。决策表能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合。在所有的功能测试方法中,基于决策表的测试方法是最严格的

决策表通常由四个部分组成:

(1)条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要

(2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束

(3)条件项(Condition Entry):列出了针对它左列条件的取值。在所有可能的情况下,给出真假值。

(4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作

建立判定表可遵循的步骤

1)列出条件桩和动作桩

2)确定规则的个数,用来为规则编号

若有n个原因,且每个原因的可取值为0或者1,那么将会有2n个规则

3)完成所有条件项的填写

4)完成所有的动作项的填写(得到初始判定表)

5)合并相似规则,用以对初始判断表进行简化

有两个或者多条规则具有相同的动作,并且条件项之间存在极为相似的关系就可以进行合并。

实例

问题描述: “……对于功率大于50马力的机器,并且维修记录不全或已运行10年以上的机器,应给予优先的维修处理……”

条件桩:

C1:功率大于50马力吗?

C2:维修记录不全吗?

C3:运行超过10年吗?

动作桩:

A1:进行优先处理

A2:作其他处理

12f292edd4e7d536332715b5d2e2614e.png

生成判定表:

简化判定表:

1,2合并,5,7合并,6,8合并

98cae383a8d86e70ab94ca0fa5687cf6.png

因果图

等价类划分和边界值分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入条件的各种组合和输入条件之间的相互制约关系引起的错误。因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图(逻辑模型),因果图方法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况

因果图中的基本符号:通常在因果图中用Ci表示原因,用Ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。

130fa362121eadf60ef6c510c991d190.png

因果图法基本步骤:

  • 找出所有的原因,原因即输入条件或输入条件的等价类
  • 找出所有的结果,结果即输出条件
  • 明确所有输入条件之间的制约关系以及组合关系
  • 明确所有输出条件之间的制约关系以及组合关系
  • 找出什么样的输入条件组合会产生哪种输出结果
  • 把因果图转换成判定表/决策表
  • 为判定表/决策表中的每一列表示的情况设计测试用例

实例:

某软件规格说明书中需求描述为:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件修改,但如果第一列字符不正确,则给出信息L,如果第二列字符不是数字,则给出信息M。

根据以上说明书需求分析出原因和结果

原因:

x、第一列字符是A;

y、第一列字符是B

z、第二列字符是数字

结果:

a、修改文件(即成功)

b、给出信息L

c、给出信息M

分析:

原因:

x、y、z不能同时出现(对应表规则号1)

x和y不能同时出现(对应表规则号2)

x、z可以组合(对应表规则号3)

y、z可以组合(对应表规则号5)

x、y、z可以单独出现(对应序号4、6、7)

x、y、z可以都不出现(对应表规则号1)

结果:

ab不能组合

ac不能组合

bc不能组合

a、b、c可以单独出现

根据以上分析建立判定表

软件规格说明书判定表

fbf6d0fddae48fb4395e3d21f09a4470.png

注意,规则1、2列是不可能同时出现的,排除,简化后即为测试用例

608400f04e338ea104801a1b532c0b9d.png

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

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

相关文章

SpringAop @Pointcut(“@annotation“)\@Aspect练习

切面记录日志 切面类 Slf4j Aspect Component public class AspectForFeign {Pointcut("execution(public * com.keke.remote..*Feign.*(..))")public void pointcut() {}Around("pointcut()")public Object around(ProceedingJoinPoint joinPoint) thro…

Mybatis缓存机制详解与实例分析

前言&#xff1a; 本篇文章主要讲解Mybatis缓存机制的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以下正文开始 Mybat…

delphi语言转为汇编语言_每天5分钟,轻松建立技术图谱 编程语言黑历史

阿T课堂开播啦&#xff01;这里只有干货干锅&#xff0c;没有水坑没有套路&#xff01;计算机编程语言的发展&#xff0c;也是随着计算机本身发展而发展。人类不断的提高科技的同时&#xff0c;也必须使工具的使用越来越简化&#xff0c;从而提高整个社会效率&#xff0c;这其中…

水系图一般在哪里找得到_进展 | 水系钠离子电池研究取得重要进展

水系钠离子电池兼具钠资源储量丰富和水系电解液本质安全的双重优势被视为一种理想的大规模静态储能技术。此前&#xff0c;我们针对这水系钠离子电池体系做了一些探索(Nature Communications 2015, 6, 6401&#xff1b;Advanced Energy Materials 2015, 5, 1501005&#xff1b;…

@Around简单使用示例——SpringAOP增强处理

Around的作用 既可以在目标方法之前织入增强动作&#xff0c;也可以在执行目标方法之后织入增强动作&#xff1b;可以决定目标方法在什么时候执行&#xff0c;如何执行&#xff0c;甚至可以完全阻止目标目标方法的执行&#xff1b;可以改变执行目标方法的参数值&#xff0c;也…

python numpy逆_Python使用numpy计算矩阵特征值、特征向量与逆矩阵

原标题&#xff1a;Python使用numpy计算矩阵特征值、特征向量与逆矩阵 Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量&#xff0c;而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵。 >>> importnumpy as np >>> x np.matrix([…

Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)

Mysql索引数据结构 下面列举了常见的数据结构 二叉树红黑树Hash表B-Tree&#xff08;B树&#xff09; Select * from t where t.col5我们在执行一条查询的Sql语句时候&#xff0c;在数据量比较大又不加索引的情况下&#xff0c;逐行查询并进行比对&#xff0c;每次需要从磁盘…

一篇搞懂mysql中的索引(大白话版)

容易来说&#xff0c;索引的出现其实就是为了提升数据查询的效率&#xff0c;就像书的目录一样。一本 500 页的书&#xff0c;如果你想快速找到其中的某一个知识点&#xff0c;在不借助目录的情况下&#xff0c;那我估计你可得找一会儿。同样&#xff0c;对于数据库的表而言&am…

sqlite插入时间字段_sqlite 获取最后插入id

(点击上方公众号&#xff0c;可快速关注)SQLite数据库中的表均有一个特殊的rowid字段&#xff0c;它是一个不重复的64位有符号整数&#xff0c;默认起始值为1。rowid别名为oid或_rowid_&#xff0c;但在创建表的SQL声明语句中只能使用rowid作为关键字。如果在创建表的时候设置了…

Dubbo与SpringCloud的架构与区别

Dubbo与SpringCloud的架构与区别 Dubbo架构图 SpringCloud 架构图 总结 框架DubboSpringCloud服务注册中心ZookeeperSpring Cloud Netfix Eureka(nacos)服务调用方式RPCREST API服务监控Dubbo-monitorSpring Boot Admin熔断器不完善Spring Cloud Netflix Hystrix服务网关无Sp…

matlab求微分数值,用MATLAB语言求微积分方程的数值解.(xd^2y)/dx^2-5dy/dx+y=0y(0)=0y'(0)=0...

function dymyfun03(x,y)dyzeros(3,1) %初始化变量dydy(1)y(2); %dy(1)表示y的一阶导数,其等于y的第二列值dy(2)5/x*y(3)-y(1); %dy(2)表示y的二阶导数%ex0808 用ode23 ode45 ode113解多阶微分方程clear,clc[x23,y23]ode23(myfun03,[1,10],[1 10 30]);[x45,y45]ode45(myfun03,[…

springboot 接口404_资深架构带你学习Springboot集成普罗米修斯

这篇文章主要介绍了springboot集成普罗米修斯(Prometheus)的方法&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧&#xff01;Prometheus 是一套开源的系统监控报警框…

http常见的状态码,400,401,403状态码分别代表什么?

2XX 成功 200 OK&#xff0c;表示从客户端发来的请求在服务器端被正确处理 204 No content&#xff0c;表示请求成功&#xff0c;但响应报文不含实体的主体部分 206 Partial Content&#xff0c;进行范围请求 3XX 重定向 301 moved permanently&#xff0c;永久性重定…

mysql left 数学原理,MySQL全面瓦解21(番外):一次深夜优化亿级数据分页的奇妙经历...

背景1月22号晚上10点半&#xff0c;下班后愉快的坐在在回家的地铁上&#xff0c;内心想着周末的生活怎么安排。sql忽然电话响了起来&#xff0c;一看是咱们的一个开发同窗&#xff0c;顿时紧张了起来&#xff0c;本周的版本已经发布过了&#xff0c;这时候打电话通常来讲是线上…

java8中的map与flatmap区别

map:只能返回一个值 flatmap:返回多个值 new ArrayList().stream().map(x -> x);//返回一个 new ArrayList().stream().flatMap(x -> Arrays.asList(x.split(" ")).stream());//返回一个流,也就是多个值 看API声明可以发现&#xff0c;flatmap接受的参数是流…

shell 文件路径有空格_Python学习第57课-shell入门之基本简单命令(一)

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】我们现在学习shell操作&#xff0c;对于shell的命令&#xff0c;我们就把它看做新的语言&#xff0c;shell语言&#xff0c;它是不同于其他编程语言的。就像我们学习一门编程语言&#xff0c;都是从打出“hell …

比较Spring AOP和AspectJ

1. 介绍 当前有多个可用的AOP库&#xff0c;这些库必须能够回答许多问题&#xff1a; 它与我现有的或新的应用程序兼容吗&#xff1f;在哪里可以实施AOP&#xff1f;它与我的应用程序集成的速度有多快&#xff1f;性能开销是多少&#xff1f; 在本文中&#xff0c;我们将着眼…

hough变换直线检测_python+opencv实现霍夫变换检测直线

作者&#xff1a;Ruff_XY功能&#xff1a;创建一个滑动条来控制检测直线的长度阈值&#xff0c;即大于该阈值的检测出来&#xff0c;小于该阈值的忽略 注意&#xff1a;这里用的函数是HoughLinesP而不是HoughLines&#xff0c;因为HoughLinesP直接给出了直线的断点&#xff0c;…

php文件防删改,PHP实现增删改查以及防SQL注入

最近项目调研时&#xff0c;需要在集成板子上做个配置的网页&#xff0c;板子上装的是linux系统&#xff0c;配置信息在一个SQLite数据库中&#xff0c;经过讨论大家决定用PHP做这个网页。由于项目组没一个会PHP的&#xff0c;所以安排我调研下写个Demo&#xff0c;经过几天的研…

c# python 相互调用_【GhPython】Python如何使用“委托”和lambda表达式

【版权声明】| 作者&#xff1a;月之眼| 首发于大水牛参数化设计平台| 如需转载请联系作者| 如果觉得文章不错&#xff0c;欢迎分享 函数作为参数传入 在python中函数是能作为参数输入函数的。这个有点类似于C#中的委托&#xff0c;将一个函数封装到一个委托对象里&#xff0c;…