『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!(一)

简介: 笔记

40.png⏳前言


有了软件缺陷的暴露,我们就需要通过各种软件测试的方法来查找出软件的漏洞,编写出测试用例,及时修改bug。

在下面的这篇文章中,我们将谈论八大典型的黑盒测试方法,一起来学习⑧💡


一、等价类划分法



1、定义


一个程序可以有多个输入,等价类划分就是将这些输入数据按照输入需求进行分类,将它们划分为若干个子集,这些子集即为等价类(某个输入域的子集合),在每个等价类中选择有代表性的数据设计测试用例。

举个例子

这种方法类似于学生站队,男生站左边,女生站右边,老师站中间,这样就把师生这整个群体划分成了三个等价类41.png


2、等价类划分法步骤


(1)先从程序规格说明书中找出各个输入条件; (2)再为每个输入条件划分等价类,形成若干互不相交的子集; (3)列出等价表

输入条件 有效等价类 无效等价类
…… …… ……


3、设计测试用例步骤


等价类划分法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。

(1)划分等价类

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试代表值就等价于这一类其他值的测试。

那在划分等价类的时候,会出现有效等价类和无效等价类,这个时候我们需要怎么判断呢?

有效等价类就是有效值的集合,它们是符合程序要求、合理且有意义的输入数据。

无效等价类就是无效值的集合,它们是不符合程序要求、不合理或无意义的输入数据。

因此,在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。

同时,在划分等价类的时候,需要遵循一定的划分原则:

等价类划分原则

原则1:如果输入条件规定了取值范围值的个数的情况下,可以确定一个有效等价类和两个无效等价类。

原则2:如果输入条件规定了输入值的集合或者规定了 “必须如何”的条件 的情况下,可以确立一个有效等价类和一个无效等价类。

原则3:如果输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

原则4:如果规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确定n个有效等价类和一个无效等价类。

原则5:如果规定了输入数据必须遵守的规则,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

原则6:在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。

同一个等价类中的数据发现程序缺陷的能力是相同的,如果使用等价类中的其中一个数据不能捕获缺陷,那么使用等价类中的其他数据也不能捕获缺陷;同样,如果等价类中的其中一个数据能够捕获缺陷,那么该等价类中的其他数据也能捕获缺陷,即等价类中的所有输入数据都是等效的

(2)设计测试用例

  • 在确立了等价类之后,建立等价类列表,列出所有划分出的等价类。
  • 为每个等价类规定一个唯一编号
  • 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类。重复这一步,直到所有的有效等价类都被覆盖为止。
  • 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类。重复这一步,直到所有的无效等价类都被覆盖为止。


4、案例:学生选修课程


看到这里,不妨再做下案例分析。

案例1:每个学生可以选修1~3门课程,要求采用等价类设计测试用例。

解题思路:首先分析有效等价类和无效等价类,然后建立等价类表。

【解析】

(1)根据题干分析有效等价类和无效等价类:

有效等价类:选修1~3门课

无效等价类:没有选修课、选修3门课以上

(2)根据分析建立等价类表:

42.png

(3)根据等价类表设计测试用例覆盖有效等价类和无效等价类:

43.png

案例2:某连锁酒店集团实行积分奖励计划,会员每次入住集团旗下酒店均可以获得一定积分,积分由欢迎积分加消费积分构成。其中欢迎积分跟酒店等级有关,具体标准如表1-1所示;消费积分跟每次入住消费金额有关,具体标准为每消费1元获得2积分(不足1元的部分不给分)。此外,集团会员分为优先会员、金会员、白金会员三个级别,金会员和白金会员在入住酒店时可获得消费积分的额外奖励,奖励规则如表1-2所示。

表1-1 集团不同等级酒店的欢迎积分标准

44.png

表1-2 额外积分奖励规则

45.png

该酒店集团开发了一个程序来计算会员每次入住后所累积的积分,程序的输入包括会员级别L、酒店等级C和消费金额A(单位:元),程序的输出为本次积分S。其中,L为单个字母且大小写不敏感,C为取值1到6的整数,A为正浮点数且最多保留两位小数,S为整数。

问题一】采用等价类划分法对该程序进行测试,等价类表如表1-3所示,请补充表中空(1)-(7)。46.png

问题二】根据以上等价类表设计的测试用例如下表所示,请补充表2-4中空(1)-(13)。

47.png


二、边界值分析法



1、边界值分析法概述


1)边界值分析法是对软件的输入或输出边界进行测试的一种方法,它通常作为等价类划分法的一种补充测试。

2)在等价类划分法中,无论是输入等价类还是输出等价类,都会有多个边界,而边界值分析法就是在这些边界附近寻找某些点作为测试数据,而不是在等价类内部选择测试数据。


2、设计测试用例


设计测试用例步骤

1)首先划分等价类,根据等价类划分情况确定边界情况

2)选取正好等于刚刚大于刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值。


3、边界值设计原则


原则1:如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据

原则2:如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据

原则3:根据规格说明的每个输出条件,使用前面的原则1。

原则4:根据规格说明的每个输出条件,使用前面的原则2。

原则5:如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素最后一个元素作为测试用例。

原则6:如果程序中使用了一个内部数据结构,则应该选择这个内部数据结构边界上的值作为测试用例。

原则7:分析规格说明,找出其他可能的边界条件


三、错误推测法




1、错误推测法概述


错误推测法就是人们可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。


2、错误推测法基本思想


(1)列举出程序中所有可能有的错误和容易发生错误的特殊情况(比如,程序只能输入数字,测试时可以输入字母进行测试)。 (2)根据它们选择测试用例。


四、因果图设计法



1、因果图设计法概述


如果在测试时必须考虑输入条件的各种组合以及各种输出情况,那么可以使用一种适用于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。


2、因果图表示


因果图使用一些简单的逻辑符号和直线将程序的因(输入)与果(输出)连接起来,一般原因用ci表示,结果用ei表示,各结点表示状态,可以取值“0”或“1”,其中“0”表示状态不出现,“1”表示状态出现。

如下图所示:

48.png

ci与ei之间有恒等、非(~)、或(∨)、与(∧)4种关系,分别为:

恒等:在恒等关系中,要求程序有一个输入和一个输出,输出与输入保持一致。若c1为1,则e1也为1,若c1为0,则e1也为0。

:非使用符号“~”表示,在这种关系中,要求程序有一个输入和一个输出,输出是输入的取反。若c1为1,则e1为0,若c1为0,则e1为1。

:使用符号“∨”表示,或关系可以有任意个输入,只要这些输入中有一个为1,则输出为1,否则输出为0。

:使用符号“∧”表示,与关系也可以有任意个输入,但只有这些输入全部为1,输出才能为1,否则输出为0。

以下用一张图展示这4种关系:49.png

总结

  • 在软件测试中,如果程序有多个输入,那么除了输入与输出之间的作用关系之外,这些输入之间往往也会存在某些依赖关系,某些输入条件本身不能同时出现,某一种输入可能会影响其他输入。
  • 例如,某一软件用于统计体检信息,在输入个人信息时,性别只能输入男或女,这两种输入不能同时存在,而且如果输入性别为女,那么体检项就会受到限制。


3、约束条件


为了表示原因与原因之间原因与结果之间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号。

(1)输入条件的约束类别可分为四种:

E(Exclusive,这些依赖关系在软件测试中称为“约束”,异)、I(at least one,或)、O(one and only one,唯一)、R(Requires,要求),在因果图中,用特定的符号表明这些约束关系。

  • E(异):a和b中最多只能有一个为1,即a和b不能同时为1。
  • I(或):a、b和c中至少有一个必须是1,即a、b、c不能同时为0。
  • O(唯一):a和b有且仅有一个为1。
  • R(要求):a和b必须保持一致,即a为1时,b也必须为1,a为0时,b也必须为0。

50.png

(2)输出条件的约束类别只有一种:

  • 除了输入条件,输出条件也会相互约束,输出条件的约束只有一种M(Mask,强制),强制约束关系。若结果a是1,那么结果b强制为0。


4、设计测试用例


(1)因果图设计测试用例思想:

  • 从程序规格说明书的描述中,找出因(输入条件)和果(输出结果或者程序状态的改变);
  • 通过因果图转换为判定表
  • 为判定表中的每一列设计一个测试用例;

(2)使用因果图设计测试用例的步骤:

  • 分析程序规格说明书描述内容,确定程序的输入与输出,即确定“原因”和“结果” 。
  • 分析得出输入与输入之间输入与输出之间的对应关系,将这些输入与输出之间的关系使用因果图表示出来。
  • 由于语法与环境的限制,有些输入与输入之间、输入与输出之间的组合情况是不可能出现的,对于这种情况,使用符号标记它们之间的限制或约束关系。
  • 将因果图转换为决策表,根据决策表设计测试用例。(决策表将在标题五判定表驱动法中提到)


5、优点


因果图法的优点:

  • 考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系
  • 因果图的约束关系可以有效简化决策表,帮助测试人员高效率的开发测试用例。
  • 因果图法是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,可以指出规格说明存在的不完整性二义性


6、思考题


程序的规格说明要求:输入的第一个字符必须是#或*,第二个字符必须是一个数字,在此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N,如果第二个字符不是数字,则给出信息M。采用因果图法设计该软件的测试用例。

具体解析如下:

(1)分析程序规格说明中的原因和结果:

原因 结果
C1:第一个字符是# e1:给出信息N
C2:第一个字符是* e2:修改文件
C3:第二个字符是一个数字 e3:给出信息M

(2)画出因果图:

51.png:10为导出结果的中间原因

(3)将因果图转换成判定表,3个条件一般可以有2³种组合

1 2 3 4 5 6 7 8
原因 c1 1 1 1 1 0 0 0 0
c2 1 1 0 0 1 1 0 0
c3 1 0 1 0 1 0 1 0
结果 e1
e2
e3

(4)简化判定表,第7列和第8列合并

1 2 3 4 5 6 7
原因 c1 1 1 1 1 0 0 0
c2 1 1 0 0 1 1 0
c3 1 0 1 0 1 0 -
结果 e1
e2
e3

(5)根据判定表生成测试用例

测试用例ID 输入数据 输出结果
1 #3 修改文件
2 #M 给出信息M
3 *5 修改文件
4 *A 给出信息M
5 MM 给出信息N


相关文章
|
19天前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
21 1
|
3天前
|
XML 存储 测试技术
深入理解自动化测试中的数据驱动方法
【5月更文挑战第11天】 在软件测试领域,数据驱动测试(DDT)是一种高效的测试策略,它允许测试人员通过外部数据源控制测试用例的输入和输出。这种方法促进了测试用例的参数化,并提高了测试的灵活性和可维护性。本文将探讨数据驱动测试的核心概念、实施步骤以及使用Python进行数据驱动测试的实践案例,旨在为读者提供一种结构化的方法来设计和执行复杂的测试场景。
|
3天前
|
自然语言处理 安全 Java
【软件测试】教你如何写一份软件测试报告
【软件测试】教你如何写一份软件测试报告
|
3天前
|
安全 Java 测试技术
【软件测试】测试工具推荐
【软件测试】测试工具推荐
|
17天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
7天前
|
存储 测试技术 数据库
深入理解自动化测试中的数据驱动方法
【5月更文挑战第7天】 在快速发展的软件行业中,为了提升测试效率和测试覆盖率,自动化测试已经成为一个不可或缺的部分。数据驱动测试(DDT)是一种独特的自动化测试方法,它允许分离测试逻辑和测试数据,从而使得测试案例可以更加灵活和有效地进行管理。本文将探讨数据驱动测试的核心概念、实施步骤及其在实际应用中的优势与挑战。通过对多个案例的分析,我们旨在提供一个全面的指南,帮助软件测试人员理解和运用数据驱动方法以优化他们的自动化测试策略。
|
14天前
|
存储 大数据 测试技术
矢量数据库的性能测试与评估方法
【4月更文挑战第30天】本文探讨了矢量数据库的性能测试与评估方法,强调其在大数据和AI时代的重要性。文中介绍了负载测试、压力测试、容量测试、功能测试和稳定性测试五大评估方法,以及实施步骤,包括确定测试目标、设计用例、准备环境、执行测试和分析结果。这些方法有助于确保数据库的稳定性和高效性,推动技术发展。
|
15天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率:智能化测试用例生成策略
【4月更文挑战第28天】 随着软件开发的复杂性不断增加,传统的软件测试方法面临巨大挑战。为了提高测试覆盖率并确保软件质量,需要投入大量的时间和资源去设计、执行和维护测试用例。本文探讨了一种基于人工智能(AI)技术的智能化测试用例生成策略,该策略能够自动识别关键的测试路径,动态调整测试用例,并优化测试集合。通过引入智能化工具和算法,显著提升了软件测试过程的效率和有效性。
|
17天前
|
测试技术
【测试】优化软件测试:有效测试用例设计的关键
【测试】优化软件测试:有效测试用例设计的关键

热门文章

最新文章