任务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)中的测试用例,并将测试结果截图。
【实验效果图】
- 语句覆盖和条件组合覆盖的测试用例
- 语句覆盖 :
- 语句覆盖要求程序中的每一条可执行语句至少被执行一次。
- 对于给定的max函数,有三条可执行语句:return a;(当a > b时),return b;(当a < b时),return a;(当a == b时)。
- 测试用例:
- 输入a = 5, b = 3,预期结果:5(覆盖a > b的情况)。
- 输入a = 3, b = 5,预期结果:5(覆盖a < b的情况)。
- 输入a = 5, b = 5,预期结果:5(覆盖a == b的情况)。
- 条件组合覆盖 :
- 条件组合覆盖要求考虑所有可能的条件组合。
- 在max函数中,有两个条件:a > b和a < b。
- 可能的条件组合:
- a > b为真,a < b为假(a > b)。
- a > b为假,a < b为真(a < b)。
- a > b为假,a < b为假(a == b)。
- 测试用例:
- 输入a = 5, b = 3,预期结果:5(覆盖a > b)。
- 输入a = 3, b = 5,预期结果:5(覆盖a < b)。
- 输入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:输入边长,判断能构成三角形,判断为等边三角形
【实验思考】
- 白盒测试与黑盒测试的区别?
- 三种黑盒测试方法比较?
- 白盒测试与黑盒测试的区别
(1)测试对象的关注点
- 白盒测试 :
- 白盒测试主要关注程序的内部结构和逻辑。它是基于代码的测试,测试人员需要了解程序内部的代码实现细节,如编程语言、算法、数据结构、控制流和数据流等。例如,在测试一个排序算法时,白盒测试人员会检查算法的实现步骤,如比较和交换元素的操作是否正确执行。
- 测试用例的设计是根据程序的内部逻辑来进行的,通常会覆盖程序中的不同执行路径、条件分支、循环等结构,以确保程序的每个部分都能正确运行。
- 黑盒测试 :
- 黑盒测试侧重于软件的外部功能,不关心程序内部的实现细节。测试人员将软件系统看作一个 "黑盒子",只关注软件的输入和输出。例如,对于一个在线购物系统,黑盒测试人员主要关注用户的操作(如添加商品到购物车、下单、支付等)以及系统相应的反馈(如购物车内容更新、订单确认信息、支付成功提示等)。
- 测试用例的设计是基于软件的功能需求规格说明书,通过对各种可能的输入情况进行组合和分析,来验证软件是否满足功能要求。
(2)测试用例设计方法
- 白盒测试 :
- 常用的设计方法包括语句覆盖、判定覆盖、条件覆盖、路径覆盖等。例如,路径覆盖要求设计的测试用例能够覆盖程序中所有可能的执行路径。以一个简单的 if - else 语句嵌套循环的程序为例,测试人员需要找出所有可能的路径组合,包括不同条件下循环的执行次数和路径走向。
- 黑盒测试 :
- 主要有等价类划分法、边界值分析法、错误推测法等。等价类划分法是将输入数据划分为有效等价类和无效等价类,然后从每个等价类中选取代表数据进行测试。例如,在测试一个要求输入年龄(18 - 60 岁)的系统功能时,18 - 60 岁这个区间就是有效等价类,小于 18 岁和大于 60 岁就是无效等价类。
(3)测试人员所需知识
- 白盒测试 :
- 要求测试人员具备较强的编程知识,能够读懂和理解程序代码。他们需要熟悉编程语言的语法、数据类型、控制结构等,并且要了解程序所采用的算法和数据结构。例如,测试一个用 Java 编写的复杂数据处理程序,测试人员需要精通 Java 语言。
- 黑盒测试 :
- 测试人员更侧重于业务知识和功能需求的理解。他们需要清楚软件系统的功能用途、用户操作流程和预期的输出结果。对于一个企业资源规划(ERP)软件,黑盒测试人员要了解企业的业务流程,如采购、销售、库存管理等环节的功能需求。
(4)发现的缺陷类型
- 白盒测试 :
- 能够发现程序内部逻辑错误,如算法错误、条件判断错误、循环终止条件错误等。例如,在一个计算利息的程序中,白盒测试可能会发现计算复利的算法实现有误。
- 黑盒测试 :
- 主要发现功能缺陷,如软件功能不符合需求规格说明书的要求、用户界面不友好、系统对异常输入处理不当等。例如,在一个手机应用程序中,黑盒测试可能会发现某个功能按钮点击后没有正确的响应,或者在输入特殊字符时系统出现崩溃。
- 三种黑盒测试方法比较
(1)等价类划分法
- 优点 :
- 可以有效减少测试用例的数量。通过将输入数据划分为等价类,只需要从每个等价类中选取少数代表性的测试数据,就能够在一定程度上覆盖所有可能的输入情况。例如,在测试一个输入范围为 1 - 100 的整数输入框时,不需要对 1 - 100 中的每个整数进行测试,只需要从有效等价类(1 - 100)和无效等价类(小于 1 和大于 100)中选取几个典型数据即可。
- 能够关注输入数据的范围和边界,有助于发现边界附近的错误。因为在划分等价类时,边界值往往是划分的关键依据。
- 缺点 :
- 可能会遗漏一些特殊情况。虽然等价类划分能够覆盖大部分情况,但有些复杂的、特殊的输入组合可能没有被充分考虑。例如,在测试一个包含多个输入字段的表单时,某些输入字段之间可能存在相互关联的特殊情况,这些情况可能在划分等价类时被忽略。
- 对于等价类的划分需要一定的经验和对需求的深入理解,如果划分不合理,会导致测试用例不全面或冗余。
(2)边界值分析法
- 优点 :
- 着重关注边界情况,而边界值往往是程序最容易出错的地方。例如,在测试一个循环结构,循环次数的边界值(如最小次数、最大次数)是测试的重点,通过测试这些边界值能够有效地发现程序在边界条件下的错误。
- 可以作为等价类划分法的补充,与等价类划分法结合使用能够更全面地测试软件。通常在等价类的边界上选取测试数据,能够更好地保证测试的完整性。
- 缺点 :
- 只关注边界值,可能会忽略非边界情况。如果程序在非边界值的输入情况下也存在错误,边界值分析法可能无法发现这些错误。
- 对于复杂的、多变量的输入情况,边界值的确定和组合会变得复杂。例如,对于一个有多个输入参数且每个参数都有自己的边界的函数,确定所有边界值的组合来进行测试是一项繁琐的工作。
(3)错误推测法
- 优点 :
- 充分利用测试人员的经验和直觉。测试人员根据以往的测试经验、对软件功能的理解以及对常见错误的认识,推测软件可能出现错误的地方,然后有针对性地设计测试用例。例如,对于一个文件上传功能,测试人员根据经验推测可能在文件格式不支持、文件过大、网络不稳定等情况下出现错误,从而设计相应的测试用例。
- 可以发现一些其他测试方法不易发现的错误。尤其是对于一些特殊的、与业务逻辑紧密相关的错误,或者是在软件设计和实现过程中容易被忽略的细节错误。
- 缺点 :
- 对测试人员的经验和能力依赖较大。如果测试人员经验不足或对软件系统的了解不够深入,可能会遗漏很多可能出现错误的情况。
推测的准确性难以保证。即使是经验丰富的测试人员,也很难保证能够准确地推测出所有可能的错误情况,而且软件的复杂性也可能导致一些新的、未被推测到的错误出现。