软件测试用例设计方法-边界值分析

前言

大量错误都发生在输入或输出的边界上,所以,测试边界值,可以有效发现这类错误。

边界值分析,结合等价类,分析需求规则,写出边界值:最小值、小于最小值、最大值、大于最大值。

1.1 为什么要边界值分析

长期测试经验表明,大量错误发生在输入或输出范围的边界上,而不是在输入范围的内部。研究表明,边界相关错误占所有软件缺陷的15-25%。边界值分析(BVA)能有效发现这类错误,提高测试覆盖率,同时减少测试用例数量。它特别适用于数值输入、字符串长度限制、数组索引等场景,是黑盒测试中不可或缺的技术。

看看下面的代码有错误吗?

下面为java代码,数组下标是从0开始的,最大小标等于长度-1,所以,i<=10是错误的,i最大为9,应该为i<10.

java int data[] = new int[10]; for(int i=1; i<=10; i++) { data[i] = i + 1; }

输入或输出的边界最容易产生错误。

1.2 什么是边界值分析

边界值分析(Boundway Value Analysis, BVA)是一种测试技术,专注于测试输入/输出范围的边界条件。BVA选取边界值和边界附近的值作为测试数据,通常包括最小值(min)、略高于最小值(min+)、正常值(nom)、略低于最大值(max-)和最大值(max)五种典型值。

与等价类划分的区别:

(1) 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试数据。

(2) 边界值分析不仅考虑输入条件,还要考虑输出产生的测试情况。

1.3 什么是边界值

边界值(Boundary Value)是软件测试中的核心概念,指在输入或输出范围的边缘附近容易引发缺陷的特定值。其原理基于程序在处理边界时易出错的特点,常用于黑盒测试。

1.4 边界值类型

1.4.1 单缺陷假设边界值(Single Fault Assumption)

定义:假设系统中某个缺陷通常由单个输入变量的边界值引发,因此在设计测试用例时,每次只改变一个变量的边界值,其他变量保持正常值

特点与适用场景

用例数量少:假设多个变量不会同时处于边界,减少组合爆炸问题。

效率高:适用于输入变量较多且相互独立的情况。

常见于常规测试:如功能测试、黑盒测试。

设计规则

每个变量取 最小值、略高于最小值、正常值、略低于最大值、最大值。

1.4.2 多缺陷假设边界值(Multiple Fault Assumption)

定义:假设缺陷可能由多个变量同时处于边界引发,因此测试用例需覆盖所有变量边界的组合。

特点与适用场景

用例数量激增:变量越多,组合数呈指数增长(如3变量→5^3=125个用例)。

覆盖更全面:适用于关键系统或高可靠性要求的场景(如航空航天、金融系统)。

成本高:需权衡测试资源与覆盖率。

设计规则

所有变量的边界值需 全组合覆盖。

1.4.3 特殊边界值类型

除了单/多缺陷假设,某些场景下还需关注以下边界类型:

(1) 时间边界

特点:日期、时间相关的临界点。

示例:

月末最后一天(如2月28日/29日)→ 3月1日。

系统日志在23:59:59→00:00:00时的处理逻辑。

(2) 状态边界

特点:系统状态转换的临界条件。

示例:

电池电量从5%降到4%触发低电量警告。

用户权限从“普通用户”升级为“管理员”的阈值。

(3) 数据容量边界

特点:存储或传输数据的极限容量。

示例:

上传文件大小限制为100MB → 测试99MB、100MB、101MB。

数据库字段长度限制为255字符 → 测试254、255、256字符。

(4) 循环边界

特点:循环次数或索引的起始/结束点。

示例:

数组索引从0开始 → 测试索引0和最大值(如array[length-1])。

循环执行N次 → 测试N=0、N=1、N=最大值。

1.5 边界缺陷示例

软件测试用例设计方法-边界值分析1 当输入-99和99时,应该正确计算,不报错,但是下面代码少了等于号,导致报错。

if not (-99 < num1 < 99) or not (-99 < num2 < 99):
    QMessageBox.warning(self, '错误', '输入的参数值必须大于等于-99同时小于等于99')
    return

1.6 边界值分析的思想与步骤

使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

(1) 分析需求,找出边界

(2) 写出边界值:最小值、小于最小值、最大值、大于最大值。

1.7 边界值分析原则

基于边界值分析方法选择测试用例的原则:

(1) 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据

例如,如果程序的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……”。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。

(2) 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少1,比最大个数多1的数作为测试数据

比如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。

(3) 将规则(1)和(2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值

例如,某程序的规格说明要求计算出“每月保险金扣除额为0至1165.25元”,其测试用例可取0.00及1165.25、还可取一0.01及1165.26等。

再如一程序属于情报检索系统,要求每次”最少显示1条、最多显示4条情报摘要”,这时我们应考虑的测试用例包括1和4,还应包括0和5等。

(4) 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例

(5) 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

(6) 分析规格说明,找出其它可能的边界条件。

1.8 边界值分析案例

两位数加法计算器的边界值,范围[-99,99]。

写出边界值:-99、-100、99、100。

1.9 边界值分析练习

使用边界值分析方法写测试点。

(1) 输入A-Z之间的字母。

(2) 输入0-9之间的数字。

(3) 输入一个整数。

(4) 输入一个-99到99直接的整数。

1.10边界值分析练习题讲解

0-9之间的数字,数据类型可以为char、int、byte。

需要了解它的开发语言以及使用的数据类型。

比如,输入3,用char(0对应ASCII码48,9为57),3存的是48+3=51。

如果用int,3存的就是3.

1.10.1 测试知识的储备

(1) Z可能的编码方式。

if ( bl >= ‘A’ && bl <= ‘z’)

if ( bl >= 65 && bl <= 90)

if ( bl > 64 && bl < 91)

(2) 0-9可能的编码方式。

if( bl >= ‘0’ && bl<=’9’)

if (bl >= 0 && bl <= 9)

(3) 一个整数可能的编码方式:

if ( bl >= -32768 && bl<= 32767)

(4) -99到99可能的编码方式:

if (bl >= -99 && bl <= 99)

1.10.2 习题讲解

(1) 输入A-Z之间的字母。

需求分析:字母按ASCII码存储,A为65,Z为90。找ASCII码为64和91对应的字符:@和【。

边界值:@、A、Z、【。

(2) 输入0-9之间的数字。

需求分析:char类型按ASCII码存储,0为48,9为57.找出ASCII码为47和58的字符:/和:英文冒号。int类型直接按字面值存储。

边界值:char类型为:/、0、9、:。int类型:-1、0、9、10。

(3) 输入一个整数。

需求分析:使用java的byte存储。范围[-127,128]。

边界值:-128、-127、128、129。

(4) 输入一个-99到99直接的整数。

需求分析:使用java的byte存储,byte范围[-127,128]。

边界值:-100、-99、99、100。