黑盒白盒测试

ops/2024/12/13 17:27:54/

任务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 > ba < 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)错误推测法

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

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


http://www.ppmy.cn/ops/141592.html

相关文章

【2】数据分析基础(关于Numpy 的基础 1)

NumPy NumPy是什么&#xff1f;NumPy&#xff08;Numerical Python的缩写&#xff09;是一个开源的Python科学计算模块&#xff0c;其中包含了许多实用的数学函数&#xff0c;用来处理数值型数据。 优点&#xff1a; 1. 很多更高级的扩展模块都依赖于NumPy&#xff0c;比如p…

国产物联网平台(IotSharp+IoTGateway+Influxdb)快速上手

环境说明&#xff1a; Visual Studio 2022 CommunityIotSharp代码&#xff1a;https://github.com/IoTSharp/IoTSharp.gitIoTGateway版本&#xff1a;v2.1.1Node版本&#xff1a;v20.18.1Influxdb版本&#xff1a;v2.7.11 安装Node Node.js官网 官网下载并安装&#xff0c;…

Android Studio 控制台输出的中文显示乱码

1. Android Studio 控制台输出的中文显示乱码 1.1. 问题 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。…

机器学习周报(12.2-12.8)

文章目录 摘要Abstract Vision Transformer1 原理2 代码 摘要 本周学习了Vision Transformer (ViT) 的基本原理及其实现&#xff0c;并完成了基于PyTorch的模型训练、验证和预测任务。深入理解了ViT如何将图像分割成patch作为输入序列&#xff0c;并结合Transformer Encoder处…

Pydantic中的discriminator:优雅地处理联合类型详解

Pydantic中的discriminator&#xff1a;优雅地处理联合类型详解 引言1. 什么是discriminator&#xff1f;2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中&#xff0c;有时我们需要…

使用 XAML 和 C# 旋转 3D 立方体

此示例演示如何使用 XAML 显示和旋转 3D 立方体。它显示一个带有滚动条的蓝色三维立方体&#xff0c;您可以使用滚动条旋转立方体以从不同方向查看它。 下面显示了该程序的完整 XAML 代码。XAML 代码处理所有用户交互&#xff0c;包括旋转立方体&#xff0c;因此该示例不需要任…

Netty 的 SSL/TLS 安全通信

SSL/TLS&#xff08;Secure Sockets Layer/Transport Layer Security&#xff09;协议是网络通信中常用的加密协议&#xff0c;用于确保客户端和服务器之间数据的安全性与完整性。SSL/TLS 通过对数据进行加密和身份验证&#xff0c;可以防止数据泄露和篡改。 在基于 Netty 的应…

【jvm】内存溢出内存不够的原因

目录 1. 内存分配与回收问题2. 代码逻辑问题3. JVM参数设置不当4. 系统资源限制 1. 内存分配与回收问题 1.堆内存不足&#xff1a;应用程序申请的内存超过了JVM堆内存的限制&#xff0c;导致内存溢出。代码中可能存在内存泄漏&#xff0c;即对象在不再需要时仍被引用&#xff…