测试用例设计——边界值分析法

本文介绍了边界值分析法的基本概念,以及如何将其与等价类划分法结合使用来设计更有效的测试用例。通过具体实例解释了边界点的定义,并详细阐述了选择测试用例的原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前面的测试用例设计——等价类划分法中,我们使用等价类划分法给两位数加法器设计了测试用例,但在测试过程中我们发现了一个问题。
在这里插入图片描述
为什么我们用等价类法设计的测试用例没有发现这个问题呢?查看一下代码,发现程序员粗心,边界条件设置错误了。
在这里插入图片描述
无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。因此,针对各种边界情况设计测试用例,通常可能会发现更多的bug。

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法,是对等价类划分方法的补充。一般,我们在设计测试用例的时候,需要将等价类法和边界值法结合起来使用。

关于边界点,可以分为上点、内点和离点。如图:
在这里插入图片描述
上点:就是边界上的点,不管它是开区间还是闭区间,就是说,如果该点是封闭的,那上点就在值域范围内,如果该点是开放的,那上点就在值域范围外;
内点:就是在值域范围内的任意一个点;
离点:就是离上点最近的一个点,如果边界是封闭的,那离点就是值域范围外离上点最近的点,如果边界是开放的,那离点就是域范围内离上点最近的点。

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

边界值与等价类的区别在于:
1、边界值分析不是从某等价类中随便挑一个,而是把这个等价类的每个边界都作为测试条件
2、边界值分析不仅考虑输入条件,还要考虑输出结果产生的测试情况。

基于边界值分析方法选择测试用例的原则:
1、如果输入(输出)规定了值的范围,则应该以该范围的边界值及边界附近的值作为测试数据;如一个文本输入区域允许输入1个到255个字符,那么输入0个、1个、255个字符和256个字符做为边界条件值。
2、如果输入(输出)条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据;如超市打折,买3件相同商品打7折,则2件、3件、4件商品做为边界条件值。
3、将规则1和2应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值;如某程序的规格说明要求计算出“每月保险金扣除额为0至1165.25元”,其边界值可取0.00及1165.24、还可取0.01及1165.26等。
4、如果需求规格说明书中提到的输入或输出是一个有序的集合,应该注意选取有序集合的第一个和最后一个元素作为测试数据;如下拉列表中可以对5个行政区域进行选择,可以选择第一个和最后一个。
5、如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试数据;如对16-bit 的整数而言 32767 和 -32768 是边界。
6、分析规格说明,找出其它可能的边界条件。

根据以上边界值分析法的介绍,我们的两位数加法器还需要加上边界值的相关用例。
在这里插入图片描述
在这里插入图片描述

### 黑盒测试中的边界值分析法 #### 定义与重要性 边界值分析法是一种黑盒测试技术,专注于对输入和输出的边界情况进行测试。许多错误往往发生在输入或输出范围的边缘位置,因此这种方法能够更高效地发现潜在缺陷[^2]。 #### 设计原则 当采用边界值分析法来构建测试用例时,需遵循如下几个基本原则: - **确定边界状况**:识别并定义所有可能影响系统的临界点,即那些位于合法区间两端的位置。 - **选择恰当数值**:对于每一个已知的边界条件,挑选恰好等于该界限以及稍微超出其上下限的具体数值作为实际传入参数[^5]。 具体来说,如果某个字段允许接收6到18个字符长度的内容,则应该考虑创建至少四个不同的实例来进行验证——分别对应于最少数量(6)、最多数量(18),还有略微超过这两个极端的情况(比如5, 7; 或者17, 19)。这样做不仅有助于确认应用程序能否正确处理预期范围内的一切情形,也能检验它面对异常情况下的表现如何。 #### 应用步骤概述 为了更好地理解和运用这一策略,在实践中可按以下流程操作: 1. 明确待测功能的需求描述; 2. 基于此划分出合理的等价分类,并从中提炼出相应的边界要素; 3. 构建具体的测试样本集,确保覆盖上述提到的各种典型场景; 4. 执行这些精心准备好的例子并对结果加以记录分析。 通过这种方式,不仅可以提高发现问题的概率,而且还能增强整体质量保证工作的效率和效果。 ```python def validate_input_length(input_string): min_length = 6 max_length = 18 if not (min_length <= len(input_string) <= max_length): raise ValueError(f"Input length must be between {min_length} and {max_length}") return True try: test_cases = [ "abcdef", # 正好等于下限 "a"*5, # 小于下限 "a"*7, # 大于下限但接近 "a"*18, # 正好等于上限 "a"*19, # 超过上限 "a"*17 # 接近但不超过上限 ] for case in test_cases: print(f'Testing "{case}"...') result = validate_input_length(case) except Exception as e: print(e) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值