边界值分析是什么:定义、取点规则与用例写法

边界值分析是一种黑盒测试用例设计方法,它先找出输入或输出取值范围的边界,再重点选取正好落在边界上以及紧邻边界两侧的取值来设计用例。大量缺陷集中在取值区间的端点附近,因此用少量用例就能覆盖高风险位置。它关注的是“取哪些值”,不涉及测试脚本如何实现,也不负责条件组合的判定。



要点总览(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 条的分页与总数显示。设计用例时把输出变量和输入变量并列列出,逐个确认是否有数量或范围限制,可以减少遗漏。


边界值用例写好后,怎么保证执行结果可判定?


关键在预期结果写到可观察的层面:提示文案的具体内容、表单是否提交、数据是否写入、列表总数显示多少。写成“系统正常处理”会让执行人无法判断通过与否。用例进入评审时,可以让执行人先读预期结果,确认能否据此给出通过或失败的结论;不能判定的条目退回补充。用例关联到需求和迭代后,执行结果与缺陷在同一处记录,回归时按范围找到相关用例即可复用。