当我们还是学生时,最彷徨的莫过于得知自己的考试成绩仅差 “半分” 就达到目标。即便只有“半分”差异,回到家却是一种天上与炼狱的待遇。
这种处于临界的差异会产生截然不同的状态,使得结果发生天翻地覆的变化。软件测试也不例外,很多代码对边界处理不当,严重时导致系统崩溃。这种通过对临界条件的测试分析方法叫做 边界值测试设计。
1、 边界值分析法概述
1.1 定义
边界值测试设计就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值测试设计是作为对等价类划分法的补充,这种情况下,其测试用例来自 等价类 的边界。
经验告诉我们,大量的错误是发生在输入条件或输出结果的范围边界,因此针对各种边界情况设计测试用例,可以查出更多错误。
1.2 等价类差异
边界值是作为等价类的补充,其主要区别是:
(1)边界值测试设计不是从某一等价类中随便挑一个作为代表,而是要覆盖该等价类的所有边界的测试条件。
(2)边界值测试设计不仅考虑输入条件,还要考虑输出结果产生的测试情况。譬如,在高速收费站,其收费结果只有 “找零” 或 “无需找零”。当遇到没有现金的司机会怎么样?这就是从输出结果的边界考虑的。
2、 边界值划分方法
使用边界值分析法时,首先要确定边界情况,通常以输入和输出等价类的临界点,就是着重测试的边界情况。
在软件测试中,存在明显边界的有:数值(重量、大小、速度、尺寸)、字符串、空间(及地理位置)等。
2.1 数值型边界
在一个区间内,边界上的点可分类为:
(a)上点:边界上的点,闭内开外(闭指闭区间;开指开区间)。
(b)离点:离上点最近的点称为离点。开内闭外。
(c)内点:区间内的任意一点。
使用最小值、略高于最小值、正常值、略低于最大值和最大值为输入值,记为:min、min+、normal、max-、max。考虑到健壮性测试,还可以加一个略大于最大值max+,以及一个略小于最小值min-的值。
2.2 字符型边界
字符型边界也可以转换成数值型边界,譬如我们小学的各科成绩满分是100分,当我们要对小学成绩管理系统测试时,可以转换成对区间 [0, 100] 进行边界测试分析。
除此之外,对于一个字符串来说,其第一个字符和最后一个字符也被当做边界,如 邮箱名不能以数字或字母以外的开头结尾。
2.3 空间型边界
空间可以是物理空间或位置,也可以是计算机的磁盘存储。我们之前所讨论的数值或字符,都是在一维空间上分析,但是对于物理空间或位置而言,其边界通常并不是一个数值,而是一个结构体(如平面的二维坐标、立体空间的三维坐标)。
3、 边界值分析实例
3.1 微信红包的金额限制
微信红包单个金额的取值范围是 (0, 200],因此我们可以得到边界值:0, 0.01, 199.99, 200, 200.01 这五个数值。
3.2 邮箱地址中对用户名长度的校验
某网站在注册邮箱时,对邮箱的用户名长度限制为 4 ~ 18,那么我们得到的边界值为:3、4、5、17、18、19 的6个数值。
3.3 机场电子围栏(无人机)
通常在集成附近都对无人机进行了电子围栏限制,即通过软件算法限制无人机在三维空间的活动区域。把三维空间映射到二维平面上,分别得出禁飞区、30米限飞区、120米限飞区、净空区。
从平面来看,禁飞区边缘附近、30米限飞区边缘附近、120米限飞区边缘附近 就是机场电子围栏的边界值(地理位置)。
从高度来看,禁飞区禁飞,高度=0,30米限飞区高度范围是 [0, 30],120米限飞区的高度范围是[0, 120],净空区的高度范围是[0, 500]。
该场景还会涉及到几个空间的转换,涉及到 状态迁移,在后续章节会有详细说明。
4、 小结
边界值测试设计与我们的日常生活密切关联。读书时,我们经常掐表下课。工作后,我们对考勤和下班时间的边界也十分敏感。正因为边界值与我们生活息息相关,使得我们能够十分轻松地完成边界值测试设计的学习。更重要的是,边界值测试设计能够在工作或项目上快速出成效,让我们的测试工作快速得到价值提升。
- 黑盒测试设计专题:等价类
- 软件测试活动分类:按测试覆盖分类
- 软件测试活动分类:按测试方法分类
- 软件测试活动分类:按测试阶段分类
- 软件测试活动分类:按质量属性分类
- Python自动化:Pytest快速入门
- Python自动化:requests编写接口用例
- Python自动化:Selenium编写Web用例
- Python自动化:Appium编写App用例
- Python自动化:自动化测试脚本优化