黑盒白盒测试

任务1 黑盒测试之等价类划分法

【任务需求】

【问题】例:某报表处理系统要求用户输入处理报表的日期,日期限制在2003年1月至2008年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月。如何用等价类划分法设计测试用例, 来测试程序的日期检查功能?

【实验效果图】

  • 有效等价类
    • 年份在有效范围内且月份在有效范围内 :代表符合系统要求能正常处理的日期范围,即 2003 年 1 月至 2008 年 12 月的所有日期组合。例如 200301、200812 等。
  • 无效等价类
    • 年份小于 2003 年 :如 200212 等,输入的年份早于系统限定的起始年份,不符合要求。
    • 年份大于 2008 年 :像 200901 等,输入的年份超出了系统限定的结束年份,不应被接受。
    • 月份小于 1 月 :例如 200300,输入的月份小于有效范围的起始月份,属于无效输入。
    • 月份大于 12 月 :比如 200313,超出了正常月份的范围,不符合日期规范。
    • 非 6 位数字字符组成 :像 abc123、2003-01(包含非数字字符或格式不符合要求)等情况,不符合系统规定的输入格式。

|----------------|---------------|----------------|-----------------------------|--------------------|
| 测试用例编号 | 输入日期值 | 预期输出结果 | 是否通过测试(示例,实际需执行后填写) | 等价类划分 |
| 1 | 200301 | 系统正常处理该日期对应的报表 | (待执行测试确认) | 有效等价类(规定范围内正常日期) |
| 2 | 200812 | 系统正常处理该日期对应的报表 | (待执行测试确认) | 有效等价类(规定范围内正常日期) |
| 3 | 200212 | 显示输入错误信息 | (待执行测试确认) | 无效等价类(年份小于规定起始年份) |
| 4 | 200901 | 显示输入错误信息 | (待执行测试确认) | 无效等价类(年份大于规定结束年份) |
| 5 | 200300 | 显示输入错误信息 | (待执行测试确认) | 无效等价类(月份小于规定起始月份) |
| 6 | 200313 | 显示输入错误信息 | (待执行测试确认) | 无效等价类(月份大于规定结束月份) |
| 7 | 123abc | 显示输入错误信息 | (待执行测试确认) | 无效等价类(输入非 6 位数字字符) |

任务2 白盒测试之逻辑覆盖

【任务需求】

【问题】假设有一个简单的Java函数,用于计算两个数的最大值,并考虑边界条件和异常情况。函数代码如下:

|----------------------------------------------------------------------------|---|
| |
| | |

(1)给出满足语句覆盖和条件组合覆盖的测试用例。

(2)设计驱动程序main函数,运行题(1)中的测试用例,并将测试结果截图。

【实验效果图】

  1. 语句覆盖和条件组合覆盖的测试用例
    1. 语句覆盖
      1. 语句覆盖要求程序中的每一条可执行语句至少被执行一次。
      2. 对于给定的max函数,有三条可执行语句:return a;(当a > b时),return b;(当a < b时),return a;(当a == b时)。
      3. 测试用例:
        1. 输入a = 5, b = 3,预期结果:5(覆盖a > b的情况)。
        2. 输入a = 3, b = 5,预期结果:5(覆盖a < b的情况)。
        3. 输入a = 5, b = 5,预期结果:5(覆盖a == b的情况)。
    2. 条件组合覆盖
      1. 条件组合覆盖要求考虑所有可能的条件组合。
      2. 在max函数中,有两个条件:a > b和a < b。
      3. 可能的条件组合:
        1. a > b为真,a < b为假(a > b)。
        2. a > b为假,a < b为真(a < b)。
        3. a > b为假,a < b为假(a == b)。
      4. 测试用例:
        1. 输入a = 5, b = 3,预期结果:5(覆盖a > b)。
        2. 输入a = 3, b = 5,预期结果:5(覆盖a < b)。
        3. 输入a = 5, b = 5,预期结果:5(覆盖a == b)。

将测试给代码运行截图得

任务3 白盒测试之基本路径覆盖

【任务需求】

【问题】有一个程序,根据用户输入的三个边长(a, b, c)来判断这三个边长是否能构成三角形,并进一步判断该三角形的类型(等边三角形、等腰三角形或普通三角形)。如果不能构成三角形,则输出相应的提示信息。

(1)给出被测模块的程序流程图。

(2)设计满足基本路径覆盖的测试用例设计。

【实验效果图】

(2)设计满足基本路径覆盖的测试用例设计。

  • 基本路径覆盖要求覆盖程序中所有可能的独立路径。
  • 对于上述程序,有以下几条独立路径:
    • 路径 1:输入边长,判断能构成三角形,判断为等边三角形
      • 测试用例:a = 3, b = 3, c = 3
      • 预期输出:"等边三角形"
    • 路径 2:输入边长,判断能构成三角形,判断为等腰三角形(非等边)
      • 测试用例:a = 3, b = 3, c = 4
      • 预期输出:"等腰三角形"
    • 路径 3:输入边长,判断能构成三角形,判断为普通三角形
      • 测试用例:a = 3, b = 4, c = 5
      • 预期输出:"普通三角形"
    • 路径 4:输入边长,判断不能构成三角形
      • 测试用例:a = 1, b = 2, c = 4
      • 预期输出:"不能构成三角形!"

【实验思考】

  1. 白盒测试与黑盒测试的区别?
  2. 三种黑盒测试方法比较?
  1. 白盒测试与黑盒测试的区别

(1)测试对象的关注点

  • 白盒测试
    • 白盒测试主要关注程序的内部结构和逻辑。它是基于代码的测试,测试人员需要了解程序内部的代码实现细节,如编程语言、算法、数据结构、控制流和数据流等。例如,在测试一个排序算法时,白盒测试人员会检查算法的实现步骤,如比较和交换元素的操作是否正确执行。
    • 测试用例的设计是根据程序的内部逻辑来进行的,通常会覆盖程序中的不同执行路径、条件分支、循环等结构,以确保程序的每个部分都能正确运行。
  • 黑盒测试
    • 黑盒测试侧重于软件的外部功能,不关心程序内部的实现细节。测试人员将软件系统看作一个 "黑盒子",只关注软件的输入和输出。例如,对于一个在线购物系统,黑盒测试人员主要关注用户的操作(如添加商品到购物车、下单、支付等)以及系统相应的反馈(如购物车内容更新、订单确认信息、支付成功提示等)。
    • 测试用例的设计是基于软件的功能需求规格说明书,通过对各种可能的输入情况进行组合和分析,来验证软件是否满足功能要求。

(2)测试用例设计方法

  • 白盒测试
    • 常用的设计方法包括语句覆盖、判定覆盖、条件覆盖、路径覆盖等。例如,路径覆盖要求设计的测试用例能够覆盖程序中所有可能的执行路径。以一个简单的 if - else 语句嵌套循环的程序为例,测试人员需要找出所有可能的路径组合,包括不同条件下循环的执行次数和路径走向。
  • 黑盒测试
    • 主要有等价类划分法、边界值分析法、错误推测法等。等价类划分法是将输入数据划分为有效等价类和无效等价类,然后从每个等价类中选取代表数据进行测试。例如,在测试一个要求输入年龄(18 - 60 岁)的系统功能时,18 - 60 岁这个区间就是有效等价类,小于 18 岁和大于 60 岁就是无效等价类。

(3)测试人员所需知识

  • 白盒测试
    • 要求测试人员具备较强的编程知识,能够读懂和理解程序代码。他们需要熟悉编程语言的语法、数据类型、控制结构等,并且要了解程序所采用的算法和数据结构。例如,测试一个用 Java 编写的复杂数据处理程序,测试人员需要精通 Java 语言。
  • 黑盒测试
    • 测试人员更侧重于业务知识和功能需求的理解。他们需要清楚软件系统的功能用途、用户操作流程和预期的输出结果。对于一个企业资源规划(ERP)软件,黑盒测试人员要了解企业的业务流程,如采购、销售、库存管理等环节的功能需求。

(4)发现的缺陷类型

  • 白盒测试
    • 能够发现程序内部逻辑错误,如算法错误、条件判断错误、循环终止条件错误等。例如,在一个计算利息的程序中,白盒测试可能会发现计算复利的算法实现有误。
  • 黑盒测试
    • 主要发现功能缺陷,如软件功能不符合需求规格说明书的要求、用户界面不友好、系统对异常输入处理不当等。例如,在一个手机应用程序中,黑盒测试可能会发现某个功能按钮点击后没有正确的响应,或者在输入特殊字符时系统出现崩溃。
  1. 三种黑盒测试方法比较

(1)等价类划分法

  • 优点
    • 可以有效减少测试用例的数量。通过将输入数据划分为等价类,只需要从每个等价类中选取少数代表性的测试数据,就能够在一定程度上覆盖所有可能的输入情况。例如,在测试一个输入范围为 1 - 100 的整数输入框时,不需要对 1 - 100 中的每个整数进行测试,只需要从有效等价类(1 - 100)和无效等价类(小于 1 和大于 100)中选取几个典型数据即可。
    • 能够关注输入数据的范围和边界,有助于发现边界附近的错误。因为在划分等价类时,边界值往往是划分的关键依据。
  • 缺点
    • 可能会遗漏一些特殊情况。虽然等价类划分能够覆盖大部分情况,但有些复杂的、特殊的输入组合可能没有被充分考虑。例如,在测试一个包含多个输入字段的表单时,某些输入字段之间可能存在相互关联的特殊情况,这些情况可能在划分等价类时被忽略。
    • 对于等价类的划分需要一定的经验和对需求的深入理解,如果划分不合理,会导致测试用例不全面或冗余。

(2)边界值分析法

  • 优点
    • 着重关注边界情况,而边界值往往是程序最容易出错的地方。例如,在测试一个循环结构,循环次数的边界值(如最小次数、最大次数)是测试的重点,通过测试这些边界值能够有效地发现程序在边界条件下的错误。
    • 可以作为等价类划分法的补充,与等价类划分法结合使用能够更全面地测试软件。通常在等价类的边界上选取测试数据,能够更好地保证测试的完整性。
  • 缺点
    • 只关注边界值,可能会忽略非边界情况。如果程序在非边界值的输入情况下也存在错误,边界值分析法可能无法发现这些错误。
    • 对于复杂的、多变量的输入情况,边界值的确定和组合会变得复杂。例如,对于一个有多个输入参数且每个参数都有自己的边界的函数,确定所有边界值的组合来进行测试是一项繁琐的工作。

(3)错误推测法

  • 优点
    • 充分利用测试人员的经验和直觉。测试人员根据以往的测试经验、对软件功能的理解以及对常见错误的认识,推测软件可能出现错误的地方,然后有针对性地设计测试用例。例如,对于一个文件上传功能,测试人员根据经验推测可能在文件格式不支持、文件过大、网络不稳定等情况下出现错误,从而设计相应的测试用例。
    • 可以发现一些其他测试方法不易发现的错误。尤其是对于一些特殊的、与业务逻辑紧密相关的错误,或者是在软件设计和实现过程中容易被忽略的细节错误。
  • 缺点
    • 对测试人员的经验和能力依赖较大。如果测试人员经验不足或对软件系统的了解不够深入,可能会遗漏很多可能出现错误的情况。

推测的准确性难以保证。即使是经验丰富的测试人员,也很难保证能够准确地推测出所有可能的错误情况,而且软件的复杂性也可能导致一些新的、未被推测到的错误出现。

相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟2 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome