黑盒测试(一)

本文介绍了黑盒测试的概念,强调其关注软件功能而非内部逻辑的特点,并阐述了进行黑盒测试的原因,包括它如何补充白盒测试,以及如何设计有效的测试案例。

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

黑盒测试(一)

 

1.1 什么是黑盒测试

  黑盒测试(Black Box Testing)又叫功能测试(Functional Testing),这是因为在黑盒测试中,主要关注于被测软件的功能实现,而不是内部逻辑。黑盒测试是与白盒测试截然不同的一个测试概念,也是在软件测试中使用得最早,也是最广泛的一类测试。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对被测产品的验证主要是根据其规格,验证其与规格的一致性。就像对一台自动售货机,为了验证其能否自动售出货物,你可以指定需要购买的物品,塞入钱币,然后观测售货机能否输出正确的货物并找出正确的零钱。在这个过程中你不需要关注自动售货机是如何判定钱币数额,如何选择货物,如何找出零钱等内部操作。这是白盒测试关注的范围,黑盒测试关注的是结果。图1-1是黑盒测试的一个示意图。

图1-1  黑盒测试示意图

  黑盒测试试图发现以下类型的错误:

    1)功能错误或遗漏;

    2)界面错误;

    3)数据结构或外部数据库访问错误;

    4)性能错误;

    5)初始化和终止错误。

 

1.2 为什么要进行黑盒测试

  既然我们已经做了白盒测试,为什么还要进行黑盒测试?这不是浪费工作吗?

  白盒测试在测试的早期采用,而黑盒测试主要用于测试的后期。黑盒测试故意不考虑控制结构,而是注意信息域。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。黑盒测试用于回答以下问题: 

    • 如何测试功能的有效性?
    • 何种类型的输入会产生好的测试用例?
    • 系统是否对特定的输入值尤其敏感?
    • 如何分隔数据类的边界?
    • 系统能够承受何种数据率和数据量?
    • 特定类型的数据组合会对系统产生何种影响?

  运用黑盒测试方法,可以导出满足以下标注的测试用例集:

    1)所设计的测试用例能够减少达到合理测试所需的附加测试用例数;

    2)所设计的测试用例能够告知某些类型错误的存在或不存在,而不是仅仅与特定测试相关的错误。 

### 黑盒测试元二次方程的实例代码 黑盒测试种不关注程序内部实现细节的测试方法,主要通过输入数据并验证输出结果来判断系统的正确性。对于元二次方程 \( ax^2 + bx + c = 0 \),可以通过不同的测试用例覆盖各种可能的情况,例如无解、单解或多解的情形。 以下是基于 Python 的元二次方程求解器及其对应的黑盒测试示例: #### 示例代码:元二次方程求解函数 ```python import math def solve_quadratic(a, b, c): """求解元二次方程 ax^2 + bx + c = 0""" if a == 0: raise ValueError("系数a不能为零") # 非法情况处理 discriminant = b ** 2 - 4 * a * c # 计算判别式 if discriminant > 0: # 两个实数根 root1 = (-b + math.sqrt(discriminant)) / (2 * a) root2 = (-b - math.sqrt(discriminant)) / (2 * a) return root1, root2 elif discriminant == 0: # 单个实数根 root = -b / (2 * a) return root, else: # 复数根 real_part = -b / (2 * a) imaginary_part = math.sqrt(-discriminant) / (2 * a) return complex(real_part, imaginary_part), complex(real_part, -imaginary_part) ``` #### 测试用例设计(黑盒测试) 根据黑盒测试的原则,可以采用等价类划分法边界值分析法设计测试用例[^1]。以下是些典型的测试用例: | 输入参数 | 描述 | 输出预期 | |----------|-------------------------|-----------------------------------| | `a=1, b=-3, c=2` | 判别式大于0 | `(2.0, 1.0)` | | `a=1, b=-2, c=1` | 判别式等于0 | `(1.0,)` | | `a=1, b=1, c=1` | 判别式小于0 | `(complex number pair)` | | `a=0, b=1, c=1` | 系数a为0 | 抛出异常 | #### 实际测试代码 ```python def test_solve_quadratic(): try: result = solve_quadratic(1, -3, 2) # 判别式>0 assert abs(result[0] - 2.0) < 1e-9 and abs(result[1] - 1.0) < 1e-9, f"Test failed with {result}" result = solve_quadratic(1, -2, 1) # 判别式=0 assert abs(result[0] - 1.0) < 1e-9, f"Test failed with {result}" result = solve_quadratic(1, 1, 1) # 判别式<0 expected_roots = (complex(-0.5, 0.8660254037844386), complex(-0.5, -0.8660254037844386)) assert all(abs(r - e) < 1e-9 for r, e in zip(result, expected_roots)), f"Test failed with {result}" solve_quadratic(0, 1, 1) # 系数a为0 except ValueError as ve: assert str(ve) == "系数a不能为零", f"Exception message mismatch: {str(ve)}" test_solve_quadratic() print("All tests passed.") ``` 上述代码涵盖了不同类型的测试用例,并利用断言机制验证实际输出是否符合预期。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值