我们先来看一个 Java 小程序,如下图所示。
Java 小程序
图 java小程序
运行这个程序会发生什么事情呢?在这个程序中,目标是为了创建一个有 10 个元素的一维数组,但是,在 Java 语言中,当一个数组被定义时,其第一个元素对应的数组下标是 0 而不是 1。所以,上述数组定义后,数组中成员的下标最大值为 9,程序运行后,会造成数组下标越界的错误产生。
经验表明,在软件开发中大量的错误都发生在输入或输出范围的边界上,而不是发生在输入/输出范围的内部。开发人员最容易在边界上犯错误,所以,针对软件的各种边界情况设计测试用例,可以达到更好的测试效果。这就需要采用边界值分析法来设计测试用例,接下来看看边界值分析法的使用。
一、边界值划分法的概述边界值分析法(Boundary Value Analysis,BVA)的测试用例来自于等价类的边界,是等价类划分法的补充。根据边界值划分法,等价类分析法中的测试数据不是选取等价类中的典型值或任意值,而是应当选取正好等于、刚刚大于、刚刚小于边界的值作为测试数据。
使用边界值分析法设计测试用例,首先应该确定它的边界。有些边界并不是需求中直接给出的,需要我们分析出来,比如一些常见的边界值:
- 对于 int 类型的整数而言,-2 的 15 次方 和 2 的 15 次方 -1 是它的边界,也就是 -32768 和 32767 是边界;
- 对于屏幕的光标焦点来说,屏幕上光标的最左上、最右下的位置是它的边界;
- 对于报表来说,报表的第一行和最后一行是它的边界;
- 对于数组来说,数组元素的第一个和最后一个是它的边界;
- 对于循环条件来说,循环的第 0 次、第 1 次和倒数第 2 次以及最后一次是它的边界。
- 同等价类划分法一样,边界值分析法也应遵循一定的原则:
- 上点:边界上的点,区间的终点值。
- 离点:离上点最近的点称为离点。开区间的离点,就是开区间中 上点 内侧紧邻的点。闭区间的离点,就是闭区间中 上点 外侧紧邻的点。
- 内点:上点之间(域范围内)的任意一点。
结合等价类划分的具体情况,针对边界值中的【离点】,有以下三种情况:
1.闭区间(闭区间边界两个值包括在内,如 [a,b])
离点(外点):紧邻上点范围之外的第一对点,如下图所示
闭区间
2.开区间(开区间边界的两个值不包括在内,如(a,b))
离点(外点):上点内部范围内紧邻的一对点,如下图所示。
开区间
3.半开半闭区间(闭区间一边的值包括在内,开区间一边的值不包括在内,如(a,b])
离点(外点):开区间一侧是上点内部范围内紧邻的点,闭区间一侧是上点外部范围内紧邻的点,如下图所示。
半开半闭区间
三、边界值划分法应用步骤第 1 步:根据等价类划分有效及无效等价类,确定上点、离点及内点,每个点统一编号。
第 2 步:设计一个新的测试用例,使其尽可能覆盖所有尚未覆盖的有效等价类,直到所有有效等价类完全覆盖。
第 3 步:设计一个新的测试用例,使其仅覆盖一个无效等价类,直到所有无效等价类完全覆盖。
四、边界值划分法案例如有一个用户名输入框,取值范围是:用户名在 6-18 位之间。那么:
- 上点:区间的端点值,6、18
- 内点:边界上有效范围内的任意一点,10
- 离点:离上点最近的点,根据上述情况也分为3种,如下:
实际案例取值
五、边界值划分法的应用场景1.如果需求规定了取值范围或规定了取值个数时,可利用该范围的边界内及边界附近的数据进行测试。
如:用户名取值为(6-18)位。按上述案例进行取值。
2.如果需求固定了取值的个数,取刚刚好小于、刚刚好大于的值进行测试。
如:购买 5 件商品可打 8 折。取值为:4 件商品、5 件商品、6 件商品。
3.如果需求规定了一个有序结合的时候,可使用该集合的第一个和最后一个值进行测试。
如:下拉列表中有 4 个城市名称。则取下拉列表中的第 1 个城市和最后一个城市进行测试。
4.如果程序中使用一个内部数据结构的话,则应该从该数据结构的边界进行考虑,如 int 类型。
六、边界值划分法总结1. 边界值的应用场景
程序中输入域语句编写错误,不管是由于需求界定不准确、设计不严密、程序书写手误或者其他原因造成的,都可以依据边界值分析法选出的测试点把它们找出来。边界值分析法多应用于以下几个场景中:
(1)输入(输出)条件规定了取值范围或值的个数;
(2)程序规格说明书中提到的输入或输出是一个有序的集合;
(3)可以通过分析找出程序的边界
不管是哪种场景,边界值分析法的运用都没有太大差别,首先都是要确定取值范围,然后确定边界,分析预期结果,输出测试用例。
2.等价类和边界值的区别
边界值一般和等价类一起搭配应用。等价类属于确认有效区间,而边界值属于确认边界。边界值数据本质上可以归为有效和无效的范畴,二者常常要一起考虑,边界值分析法属于等价类划分法的补充,但从测试技术角度来讲,需要单独拿出来测试。
边界值分析法和等价类划分法之间最大的区别就是,边界值分析考查正处于等价类划分的边界或在边界附近的状态。
边界值分析通过选择等价类边界作为测试用例,不仅重视输入条件边界,而且也必须考虑输出域边界。比如某程序需要输出一个 0 到 100 的数,那么针对输出域也要取边界进行测试。
3.常见边界值
如果是字符的话,我们常常考虑它的:正常长度、最大长度、最大长度 1、最小长度-1、空值、只有空格、字符前后有空格。
如果是整数的话,我们常常考虑它的:正常长度、最小值、最小值-1、最小值 1、最大值、最大值-1、最大值 1、中间值、字母、特殊字符、非整数、有小数点。