
黑盒测试用例设计
黑盒测试(也称为功能测试或黑盒测试)将测试对象视为黑盒。使用黑盒测试方法进行动态测试时,需要测试软件产品的功能,而不是软件产品的内部结构和处理过程。
利用黑盒技术设计测试用例的方法包括等价类划分、边界值分析、假推测、因果图和综合策略。
黑盒测试侧重于测试软件的功能需求,即黑盒测试使软件工程师能够推导出执行程序的所有功能需求的输入条件。黑盒测试不是白盒测试的替代品,而是用来帮助白盒测试发现其他类型的错误。
黑盒测试试图找到以下类型的错误:
1)功能错误或遗漏;
2)接口错误;
3)数据结构或外部数据库访问错误;
4)性能误差;
5)初始化和终止错误。
一、黑盒测试的测试用例设计方法
等价类划分方法
边界值分析法
错误的推测方法
因果图方法
决策表驱动的分析方法
正交实验设计方法
功能图分析法
类等价划分:
就是把所有可能的输入数据,也就是程序的输入域分成几个部分(子集),然后从每个子集里选取几个有代表性的数据作为测试用例。该方法是一种重要且常用的黑盒测试用例设计方法。
1)划分等价类:等价类是指一个输入域的子集。在这个子集中,每个输入数据都相当于暴露程序中的错误。合理的假设是测试一个等价类的代表值等价于测试这个类的其他值。因此,可以将所有的输入数据合理地划分为几个等价类,以每个等价类中的一个数据作为测试输入条件,就可以使用少量有代表性的测试数据。获得良好的测试结果。类等价有两种不同的情况:有效等价类和无效等价类。
等价类:指对程序的规格说明来说合理且有意义的一组输入数据。有效等价类可以用来检验程序是否实现了规格书中规定的功能和性能。
无效等价类:与有效等价类的定义相反。
当设计测试用例时,两个等价类都应该被考虑。因为软件不仅要能接收到合理的数据,还要能经受住意想不到的考验。这样,测试可以确保软件具有较高的可靠性。
2)划分等价类的方法:下面是确定等价类的六个原则。
当输入条件指定值的范围或值的个数时,可以建立一个有效等价类和两个无效等价类。
在输入条件指定输入值集合或如何可以建立有效的等价类和无效的等价类。
当输入条件为布尔量时,可以确定有效等价类和无效等价类。
当输入数据的一组值被指定(假设N个值),程序要分别处理每个输入值时,可以建立N个有效等价类和一个无效等价类。
在输入数据必须符合规则的条件下,可以建立一个有效等价类(符合规则)和几个无效等价类(从不同角度违反规则)。
如果已知划分的等价类中的元素在程序处理中有不同的方式,那么等价类应该进一步划分为更小的等价类。
3)设计测试用例:建立等价类后,可以建立等价类表,列出所有划分的等价类:
输入条件有效等价类无效等价类。
然后根据以下三个原则从划分的等价类中设计测试用例:
为每个等价类指定一个唯一的编号。
设计一个新的测试用例,覆盖尽可能多的有效等价类,重复这个步骤。直到覆盖所有有效的等价类。
设计一个新的测试用例,只覆盖一个没有被覆盖的无效等价类,重复这个步骤。直到覆盖了所有无效的等价类。
边界值分析
边界分析法是等价类划分法的补充。
(1)边界值分析方法的考虑:
长期的测试经验告诉我们,大量的误差发生在输入或输出范围的边界上,而不是在输入输出范围内。因此,通过为各种边界条件设计测试用例,可以发现更多的错误。
使用边界值分析法设计测试用例时,首先要确定边界条件。通常,输入和输出等价类之间的边界是应该重点测试的边界条件。应选择刚好等于、刚好大于或刚好小于边界的值作为试验数据,而不是同等类别中的典型值或任意值。
(2)基于边界值分析法的测试用例选择原则:
1)如果输入条件指定了值的范围,则刚好达到该范围的边界的值和刚好超出该边界的值应被视为测试输入数据。
2)如果输入条件指定了值的数量,则最大数量、最小数量、比最小数量少一个和比最大数量多一个被用作测试数据。
3)根据规范中规定的每个输出条件,使用前面的原则1)。
4)根据规范中规定的每个输出条件,应用前面的原则2)。
5)如果程序的规格说明给出的输入字段或输出字段是一个有序集合,则应选择该集合的第一个和最后一个元素作为测试用例。
6)如果程序中使用了内部数据结构,则应选择该内部数据结构边界上的值作为测试用例。
7)分析规范,找出其他可能的边界条件。
虚假推测法
错误推断法:基于经验和直觉,推测程序中所有可能的错误,从而有针对性地设计测试用例。
错误推理方法的基本思想是列出程序中所有可能出现的错误和容易出现错误的特殊情况,并据此选择测试用例。例如,在单元测试期间列出了模块中的许多常见错误。以往产品测试中发现的错误等。这些都是经验总结。此外,输入数据和输出数据都是0。输入表为空或只有一行。这些都是容易出错的情况。这些情况下的例子可以被选择作为测试用例。
因果图方法
前面介绍的等价类划分法和边界值分析法都是着眼于输入条件,而没有考虑输入条件的关系和组合。考虑到输入条件的组合,可能会出现一些新的情况。但是检查输入条件的组合并不容易。即使将所有输入条件划分为等价类,它们之间的组合也相当多。因此,有必要考虑以一种形式设计测试用例,这种形式适合于描述各种条件的组合并相应地产生多个动作。这就需要使用因果图(逻辑模型)。
因果图法的最终结果是决策表。它适用于检查程序输入条件的各种组合。
利用因果图生成测试用例的基本步骤:
(1)分析软件规范的描述,这些描述是原因(即输入条件或输入条件的等价类)和结果(即输出条件),并为每个原因和结果分配一个标识符。
(2)分析软件规格说明描述中的语义。找出因果之间,因与因之间的对应关系。根据这些关系,画出因果图。
(3)由于语法或环境的限制,原因与原因之间、原因与结果之间的某些组合并非不可能。为了表示这些特殊情况,在因果图上用一些标记来表示约束或限制条件。
(4)将因果图转换成决策表。
(5)取出决策表的每一列作为设计测试用例的基础。
因果图生成的测试用例(局部的,组合的)包含了所有输入数据的真假情况,测试用例的数量最少,随着输入数据的增加,测试用例的数量线性增加。
决策表已经在以前的因果图方法中使用过。决策表是分析和表达多逻辑条件下不同操作的工具。在编程发展的早期,决策表一直被用作编程的辅助工具。因为它既能具体又清晰地表达复杂的逻辑关系和各种条件的组合。
决策表驱动的分析方法
决策表通常由四部分组成。
条件存根:列出问题的所有条件。一般认为所列条件的顺序无关紧要。
动作存根:列出问题指定的可能动作。这些操作的顺序没有限制。
条件条目:在左侧列中列出条件的值。所有可能情况下的真值和假值。
动作条目:列出在各种条件下应该采取的动作。
规则:任何条件组合的特定值以及要执行的相应操作。贯穿决策表中的条件项和操作项的列是一个规则。显然,判断表中列出的条件值集有多少,规则就有多少,也就是说,条件项和操作项的列就有多少。
决策表的建立步骤:(根据软件规范)
确定规则的数量。假设有n个条件。每个条件有两个值(0,1),所以有一个规则。
列出所有条件桩和动作桩。
填写条件项。
填写行动项目。等到最初的决策表。
简化合并相似的规则(相同的动作)。
B.贝泽尔指出了适合使用决策表设计测试用例的条件:
规格以决策表的形式给出,或者可以很容易地转换成决策表。
条件的顺序不会也不会影响执行哪些操作。
规则的顺序不会也不会影响执行哪些操作。
只要满足了某个规则的条件,并且确定了要执行的操作,就没有必要测试其他规则。
如果满足某个规则,要执行多个操作,这些操作的执行顺序无关紧要。
黑盒测试的优势
1、基本上没人管。如果程序停止运行,一般是被测程序崩溃。
2、设计完测试用例,接下来的工作就是爽了。当然,更郁闷的是确定坠机原因。
黑盒测试的缺点
1、结果取决于测试用例的设计。测试案例的设计来自经验,OUSPG的东西值得借鉴。
2、没有状态转换的概念。目前基本上为PDU做出了一些成功的例子,但是他们可以对被测程序进行状态转换。
3、就没有状态概念的测试而言,寻找和确定导致程序崩溃的测试用例是比较麻烦的,而且周围可能出现的测试用例必须单独确认。就有状态测试而言,甚至更麻烦,尤其不是由单个测试用例引起的。这些问题在堆里比较突出。
黑盒测试(功能测试)工具的选择
那么,如何高效地完成功能测试呢?选择合适的功能测试工具,培养一支高素质的工具使用团队,无疑是必不可少的。虽然现阶段有少数软件服务企业不使用任何功能测试工具,从事功能测试外包项目。短期来看,这些企业的盈利能力尚可,但长期来看,很可能被自动化程度更高的软件服务企业所取代。
目前用于功能测试的工具和软件很多,针对不同架构的工具也在不断更新。本文重点介绍了一种典型的自动化测试工具,即Mercury公司的WinRunner。
WinRunner是一个企业级的软件功能测试工具,用来检查应用程序是否能如期运行。通过自动捕获、检测和模拟用户交互,WinRunner可以识别大多数软件功能缺陷,从而保证那些跨越多个功能点和数据库的应用在发布时尽可能不出现功能故障。
WinRunner的特点是:与传统的手工测试相比,可以快速、批量地完成功能点测试;可以对同一个测试脚本执行相同动作,消除了人工测试带来的理解错误;此外,它可以重复执行相同的动作,测试工作中最枯燥的部分可以由机器来完成;它支持程序风格的测试脚本。一个高素质的测试工程师可以用它来完成极其复杂过程的测试。通过使用通配符、宏、条件语句、循环语句等。它也可以重用测试脚本。针对大多数编程语言和Windows技术,提供了良好的集成和支持环境,为基于Windows平台的应用程序的功能测试带来了极大的便利。
WinRunner 的工作流程大致可以分为以下六个步骤:
1.识别应用程序的GUI
在WinRunner中,我们可以使用GUI Spy来识别各种GUI对象,识别后WinRunner会将其存储在GUI映射文件中。它提供了两种GUI映射文件模式:全局GUI映射文件和每次测试的GUI映射文件。最大的区别是后者为每个测试脚本生成一个GUI文件,可以自动创建、存储和加载。建议初学者使用这种模式。但是这种模式不容易描述对象的变化,效率比较低。所以对于有经验的测试人员来说,前者是更好的选择。它只产生一个共享的GUI文件,这使得测试脚本更容易维护并且更有效。
2.建立一个测试脚本
在构建测试脚本时,一般是先录制,然后将需要的TSL(类似于C语言的测试脚本语言)手工添加到录制的脚本中。记录脚本有两种模式:上下文相关和模拟。选择主要依据是否模拟鼠标轨迹,需要回放时一般使用模拟。在录制过程中,可以通过F2键切换这两种模式。
只要看看现代软件的规模和功能点就能明白,功能测试早已跨越了只需要手动敲击键盘和点击鼠标就能完成的阶段。性能测试是控制系统性能的有效手段,在软件能力验证、能力规划、性能调优、缺陷修复等方面发挥着重要作用。
3.调试测试脚本。
WinRunner中有专门的调试工具栏,用于测试脚本调试。可以使用单步、暂停、断点等。控制和跟踪测试脚本,并查看各种变量值。
4.在应用程序的新版本中执行测试脚本。
当应用程序的新版本发布时,我们将测试应用程序的各种功能,包括新功能。这个时候,当然不可能重新录制和编写所有的测试脚本。我们可以使用现有的脚本,批量运行这些测试脚本来测试旧的功能点是否正常工作。您可以使用call命令来加载每个测试脚本。您还可以将各种TSL脚本添加到call命令中,以增加批处理能力。
5.分析测试结果
在整个测试过程中,分析结果是最重要的,通过分析可以发现应用的各种功能缺陷。在运行测试脚本之后,将会生成一个测试报告。从这份测试报告中,我们可以发现应用的功能缺陷,看到实际结果与预期结果的差异,看到测试过程中产生的各种对话框。
6.返回缺陷(缺陷)
分析测试报告后,按照测试流程上报应用的各种缺陷,然后将这些缺陷发送给指定人员进行修改和维护。
常见的功能测试方法
功能测试是为了验证产品的各项功能。根据功能测试用例,逐项测试检查产品是否满足用户的要求。常见的测试方法如下:
1、页面链接检查:每个链接是否有对应的页面,页面切换是否正确。
2、相关性检查:删除/添加一个项目是否会影响其他项目,如果是,这些影响是否都是正确的。
3、检查按钮功能是否正确:如更新、取消、删除、保存等。
4、字符串长度检查:输入超过需求中指定字符串长度的内容,看系统是否检查字符串长度,是否会有错误。
5、字符类型检查:在应输入指定类型的地方输入其他类型的内容(例如,在应输入整数类型的地方输入其他字符类型),并查看系统是否检查字符类型并将报告错误。
6、标点符号检查:输入内容包括各种标点符号,尤其是空格,各种引号,回车键。看系统处理是否正确。
7、汉字处理:在可以输入中文的系统中输入中文,看是否会出现乱码或错误。
8、检查带出信息的完整性:在检查信息和更新信息时,检查填写的信息是否全部带出。带出的信息与添加的信息是否一致。
9、重复信息:为一些需要命名且应该唯一的信息输入重复的名称或id。要看系统有没有处理,会不会给出错误。重名包括是否区分大小写,以及系统是否通过在输入内容前后输入空格来正确处理重名。
10、检查删除功能:在一些可以一次删除多条信息的地方,不要不要选择任何信息,然后按删除看系统怎么处理,会不会有错误;然后选择一个或多个消息并删除它们,以查看它们是否被正确处理。
11、检查增加和修改是否一致:检查增加和修改信息的要求是否一致,比如增加必选项和修改也应该是必选项;如果某项作为整数添加,则修改也必须是整数。
12、检查和修改重复名称:修改时,更改可以不要在现有内容中使用重复的名称,看看它们是否会被处理,并报告一个错误。同时也要注意是否会报出和自己同名同姓的错误。
13、重复提交表单:已经提交成功的记录,返回后再提交,看系统是否处理过。
14、多次检查使用后退键的情况:有后退的地方,后退,回到原页面,再后退,重复多次,看是否会有错误。
15、搜索检查:在有搜索功能的地方,输入系统存在和不存在的内容,查看搜索结果是否正确。如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看看系统处理是否正确。
16、输入信息位置:在光标停留的地方输入信息,注意光标和输入的信息是否会跳转到其他地方。
17、检查上传下载文件:是否实现了上传下载文件的功能,上传的文件是否可以打开。上传文件的格式有什么规定,系统有没有说明信息,检查系统能不能做到。
18、必填项检查:应填项未填时,均由系统处理,必填项是否有提示,如必填项前加*?
19、快捷键检查:是否支持常用快捷键,如Ctrl C Ctrl V退格等。对于一些不允许输入信息的字段,比如选择人和日期,有快捷键的限制。
20.回车键检查:输入完成后直接按回车键,看系统如何处理,是否报错。









