边界值分析是一种黑盒测试用例设计方法,它先找出输入或输出取值范围的边界,再重点选取正好落在边界上以及紧邻边界两侧的取值来设计用例。大量缺陷集中在取值区间的端点附近,因此用少量用例就能覆盖高风险位置。它关注的是“取哪些值”,不涉及测试脚本如何实现,也不负责条件组合的判定。
要点总览(TL;DR)
- 边界值分析是一种黑盒用例设计方法:先确定输入或输出的取值范围,再重点选取边界上的值以及紧邻边界两侧的值来设计用例。
- 取点围绕上点、内点、离点展开;闭区间的端点属于有效值,开区间的端点应作为离点验证系统拒绝,整数与小数还要结合精度确定最接近边界的可取值。
- 等价类划分按区间归类取值,边界值分析聚焦区间端点,判定表处理多条件组合;三者常组合使用,先划等价类再补边界,规则复杂时用判定表理清。
- 边界值用例要同时覆盖输入边界和输出边界,预期结果写到提示文案、状态变化或数据结果这一层,避免只测端点、忽略区间中部。
边界值分析的定义与核心判断
边界值分析(Boundary Value Analysis,常缩写为 BVA)是一种从取值范围的端点出发设计测试用例的方法。它把被测对象的某个输入或输出看作一个有起止范围的变量,然后围绕这个范围的边界取若干代表性数值,用这些数值分别构造用例,观察系统在边界附近的行为是否符合预期。
它属于黑盒用例设计方法:设计用例时只依据需求规格、接口说明或业务规则中描述的取值范围,不需要阅读代码内部结构,也不依赖白盒的语句覆盖、分支覆盖指标。测试人员关心的是“这个变量允许取什么值、不允许取什么值”,以及“在允许与不允许的交界处系统怎么反应”。
边界附近缺陷更集中,原因在于程序处理端点时往往要做额外判断:循环的第一次和最后一次迭代、数组的首尾下标、分页的首页与末页、金额的最小值与最大值、字符串长度的下限与上限。这些位置容易出现差一错误(off-by-one)、比较符号写反、闭区间与开区间混淆等问题。区间中部的取值通常走同一条处理路径,出错概率相对低;端点及其两侧则同时检验“刚好允许”和“刚好不允许”两种判断,因此更容易暴露问题。
一句话概括:边界值分析就是取边界上的值以及紧邻边界两侧的值来设计用例,用端点附近的小样本验证取值范围判断是否正确。
边界值分析包括什么、不包括什么
明确方法范围,可以避免把边界值分析当成万能用例设计手段。它覆盖的对象和它不负责的内容可以对照如下。
| 事项 | 是否属于边界值分析 | 说明 |
|---|---|---|
| 输入边界 | 属于 | 如年龄输入框允许 18 至 60,取 17、18、60、61 等值 |
| 输出边界 | 属于 | 如查询结果最多返回 100 条,检验第 100 条与第 101 条时的返回行为 |
| 有效区间边界 | 属于 | 区间内允许的端点值,验证系统正常接受 |
| 无效区间边界 | 属于 | 紧邻有效区间外侧的值,验证系统正确拒绝并给出提示 |
| 条件组合的判定 | 不属于 | 多个条件同时成立或互斥时的动作组合,由判定表等方法处理 |
| 测试脚本实现与自动化框架 | 不属于 | 边界值分析只决定取哪些值,脚本如何组织、用什么框架执行是另一层工作 |
| 跨项目用例资产复用 | 不属于本文范围 | 用例库如何跨项目沉淀和复用,属于测试资产管理话题 |
需要区分的是,边界值分析处理的是“单个变量取值范围的端点”,等价类划分处理的是“把取值划分成若干类并各取代表”,判定表处理的是“多个条件组合对应哪些动作”。三者解决的问题不同,实际项目中经常一起使用。
边界值分析的取点规则与执行机制
从需求到用例,边界值分析通常按“定变量—定范围—取点—写用例”的顺序推进。第一步是确定被测变量及其取值范围,范围要写明单位、精度和区间开闭;第二步是按规则在范围上取点;第三步是把取到的值填入用例步骤,并写出对应的预期结果。
取点时常用三个概念:上点指正好落在边界上的值;内点指区间内部的一个代表性值;离点指紧邻边界外侧、刚好超出范围的值。下面的规则表按区间类型给出取点方式。
| 区间类型 | 示例范围 | 上点 | 内点 | 离点 |
|---|---|---|---|---|
| 闭区间 | 18 ≤ 年龄 ≤ 60 | 18、60 | 30(区间内任一值) | 17、61 |
| 左闭右开 | 0 ≤ 数量 < 100 | 0、99 | 50 | -1、100 |
| 左开右闭 | 0 < 金额 ≤ 1000 | 1(最小可取整数)、1000 | 500 | 0、1001 |
| 开区间 | 0 < 比例 < 1 | 按精度取最接近边界的可取值为上点 | 0.5 | 0、1 |
开区间与闭区间的取点区别在于“边界值本身是否可取”。闭区间的端点属于有效值,上点应验证系统正常接受;开区间的端点不属于有效值,端点值应作为离点验证系统拒绝。若变量是整数,开区间的“最小可取整数”就是端点加一;若变量是小数,则要结合精度确定最接近边界的可取值,不能笼统写成端点本身。
单变量边界相对直接:一个变量一个范围,按上表取点即可。多变量边界要复杂一些,常见做法有两种。其一,固定其他变量取正常值,只让一个变量在边界上变化,逐变量轮换,便于定位问题来源;其二,在变量数量不多时,让多个变量同时取边界值,检验组合场景下的处理,例如最小值与最大值同时出现。前者覆盖清晰、用例数量可控,后者能发现变量之间的相互影响,适合在核心流程上补充。选择哪种方式取决于风险判断和用例预算,不必对每个变量都做全组合。
取点结果落到用例时,每条用例应包含:被测变量及取值、前置条件、操作步骤、预期结果。预期结果要写具体,例如“提示‘年龄须在18至60之间’,表单不提交”,而不是“系统正常处理”。边界值用例的价值很大程度取决于预期结果是否可判定。
边界值分析与等价类划分、判定表的区别
这三种方法常被放在一起讲,但回答的问题不同。用同一口径对照,可以看出各自的侧重点和配合方式。
| 方法 | 核心问题 | 典型产物 | 适用条件 |
|---|---|---|---|
| 等价类划分 | 取值可以分成哪几类,每类取一个代表 | 有效等价类、无效等价类清单及代表值 | 取值范围较大、需要控制用例数量时 |
| 边界值分析 | 区间的端点及紧邻端点的值取哪些 | 上点、内点、离点取值表 | 需求中明确了取值范围或数量限制时 |
| 判定表 | 多个条件组合分别对应什么动作 | 条件桩、动作桩及规则列 | 业务规则由多个条件共同决定时 |
等价类划分按区间归类取值,把无穷多的输入压缩成有限几类,每类选一个代表值;边界值分析则把注意力放在区间的端点,认为端点附近的处理最容易出错。两者关注同一取值范围的不同位置:等价类划分给出“类”,边界值分析给出“端点”。实践中常先做等价类划分确定有效类和无效类,再对每个类的边界补充边界值用例。
判定表处理的是条件组合与动作的对应关系,例如“会员等级为金卡且订单金额满 500 元且使用优惠券”时享受哪种折扣。它关心的是多个条件同时成立时的分支,边界值分析关心的是单个变量取值的端点。当业务规则既有取值范围又有多条件组合时,可以先用判定表理清规则,再对规则中出现的数值范围补充边界值用例。三者是组合使用的关系,各自覆盖不同的缺陷类型。
具体例子:一个输入框的边界用例怎么写
假设某后台系统的“批量导入”功能要求单次上传的记录条数在 1 至 500 条之间,超出范围时提示“单次最多导入500条”,少于 1 条时提示“请至少选择1条记录”。这是一个闭区间范围,变量为记录条数,单位为条,取整数。
按取点规则,上点为 1 和 500,内点取 250,离点为 0 和 501。据此可以写出如下用例。
| 用例编号 | 取值 | 取点类型 | 操作步骤 | 预期结果 |
|---|---|---|---|---|
| TC-01 | 1 条 | 上点(下边界) | 选择 1 条记录,点击导入 | 导入成功,提示“成功导入1条” |
| TC-02 | 500 条 | 上点(上边界) | 选择 500 条记录,点击导入 | 导入成功,提示“成功导入500条” |
| TC-03 | 250 条 | 内点 | 选择 250 条记录,点击导入 | 导入成功,记录数与选择一致 |
| TC-04 | 0 条 | 离点(下侧) | 不选择记录,点击导入 | 提示“请至少选择1条记录”,不发起导入 |
| TC-05 | 501 条 | 离点(上侧) | 选择 501 条记录,点击导入 | 提示“单次最多导入500条”,不发起导入 |
这个例子还涉及输出边界:导入完成后结果列表最多展示 100 条,第 101 条起需要翻页或提示。输出边界同样值得取点,可以补充“导入 100 条时结果列表完整展示”“导入 101 条时列表分页正确、总数显示 101”两条用例。只测输入边界而忽略输出边界,是边界值分析中常见的遗漏。
几个常见误解需要纠正。其一,只测边界值不测区间中部。边界值分析用少量用例覆盖高风险位置,内点用例用于确认区间内部处理正常,二者配合才能说明取值范围整体可用。其二,把边界值分析当成性能压测。边界值分析检验的是取值判断是否正确,不测量系统在极限数据量下的响应时间和资源占用;后者属于性能测试的范畴,即使使用相同的边界数值,目的和判定标准也不同。其三,忽略输出边界。很多缺陷出现在结果集数量、分页总数、金额计算上限等输出侧,取点时要把输出变量一并纳入。其四,预期结果写得含糊。边界用例的判定依赖明确的提示文案、状态变化或数据结果,预期结果越具体,用例越可执行。
当这些用例进入测试管理流程,需要有人编写、有人评审、有人执行并记录结果。ONES 的测试管理可以把每条边界用例作为工作项管理,关联到对应的需求与迭代,评审通过后进入执行,执行结果和缺陷在同一处流转,便于后续回归时按范围快速找到相关用例。
常见问题
需求里只写了“最多500条”,没写区间开闭,取点该怎么处理?
先向需求方确认端点是否可取,再决定取点方式。若“最多500条”表示 1 至 500 条均可导入,属于闭区间,500 是上点,应验证导入成功,501 作为离点验证拒绝;若规则实际是“少于500条”,500 就变成离点。开闭没有确认前,可以把两种解释都写成待确认项,用例先按最可能的解释设计,并在评审时与产品、开发对齐,避免用例本身建立在错误假设上。
多变量同时取边界值,用例数量增长很快,怎么控制?
常用做法是先固定其他变量为正常值,每次只让一个变量在边界上变化,逐变量轮换,这样用例数量与变量数大致成线性关系,出问题时也容易定位到具体变量。对核心流程或历史缺陷集中的模块,再补充少量多变量同时取边界的组合用例,检验变量之间的相互影响。是否做全组合取决于风险判断和用例预算,不必对每个变量都铺开。
边界值用例和等价类用例会重复,评审时怎么取舍?
两者关注同一取值范围的不同位置,重复部分可以合并表达。等价类划分给出有效类和无效类,边界值分析在类的端点补充取值。评审时可以按“类代表值”和“端点值”分别标注用例目的:类代表值用于确认区间内部处理正常,端点值用于检验边界判断是否正确。若某条用例既代表类又落在端点上,保留一条并注明覆盖目的即可,不必为了数量重复编写。
输出边界具体指哪些对象,容易漏掉什么?
输出边界包括结果集条数、分页总数、金额计算上限、统计汇总的极值、导出文件的行数限制等。容易漏掉的是“刚好达到上限”和“刚超过上限”这一对取值,例如结果列表最多展示 100 条时,只测了 100 条以内,没有测第 101 条的分页与总数显示。设计用例时把输出变量和输入变量并列列出,逐个确认是否有数量或范围限制,可以减少遗漏。
边界值用例写好后,怎么保证执行结果可判定?
关键在预期结果写到可观察的层面:提示文案的具体内容、表单是否提交、数据是否写入、列表总数显示多少。写成“系统正常处理”会让执行人无法判断通过与否。用例进入评审时,可以让执行人先读预期结果,确认能否据此给出通过或失败的结论;不能判定的条目退回补充。用例关联到需求和迭代后,执行结果与缺陷在同一处记录,回归时按范围找到相关用例即可复用。
