• 15
  • 15
分享
  • 黑盒测试的五种典型方法——软件测试圈
  • 饭团🍙 2021-11-22 13:27:03 字数 2948 阅读 3946 收藏 15

黑盒测试(black—box testing)又称功能测试、数据驱动测试或基于规范的测试。用这种方法进行测试时,被测程序被当作看不见内部的黑盒。在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。

完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。

黑盒测试首先是程序通常的功能性测试。要求:

每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。

不仅要考核“程序是否做了该做的?”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。这些情况包括数据类型和数据值的异常等等。下述几种方法:

(a)等价类划分;

(b)因果图方法;

(c)边值分析法;

(d)猜错法;

(e)随机数法。

就是从更广泛的角度来进行黑盒测试。每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。

1、等价类划分

等价类划分是一种典型的黑盒测试方法。等价类是指某个输入域的集合。它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。因此我们只要在一个集合中选取一个测试数据即可。等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。这样就可使用少数测试用例检验程序在一大类情况下的反映。

在考虑等价类时,应该注意区别以下两种不同的情况:

有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合。在具体问题中,有效等价类可以是一个,也可以是多个。

无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。

确定等价类有以下几条原则:

如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。例如,程序的规范中提到的输入条包括“……项数可以从1到999……”,则可取有效等价类为“l考项数<999”,无效等价类为“项数<l,,及“项数>999”。

输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。如某程序涉及标识符,其输入条件规定“标识符应以字母开头……”则“以字母开头者”作为有效等价类,“以非字母开头”作为无效等价类。

如果我们确知,已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分成更小等价类。

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

。。。。。。

。。。。。。 。。。。。。

。。。。。。 。。。。。。

。。。。。。 

根据已列出的等价类表,按以下步骤确定测试用例:

为每个等价类规定一个唯一的编号;

设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖;

设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步,使所有无效等价类均被覆盖。这里强调每次只覆盖一个无效等价类。这是因为一个测试用例中如果含有多个缺陷,有可能在测试中只发现其中的一个,另一些被忽视。等价类划分法能够全面、系统地考虑黑盒测试的测试用例设计问题,但是没有注意选用一些“高效的”、“有针对性的”测试用例。后面介绍的边值分析法可以弥补这一缺点。

2、因果图

等价类划分法并没有考虑到输入情况的各种组合。这样虽然各个输入条件单独可能出错的情况已经看到了,但多个输入情况组合起来可能出错的情况却被忽略。采用因果图方法能帮助我们按一定步骤选择一组高效的测试用例,同时,还能为我们指出程序规范的描述中存在什么问题。

利用因果图导出测试用例需要经过以下几个步骤:

分析程序规范的描述中哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类。结果是输出条件。

分析程序规范的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”。

由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,在因果图上使用持殊的符号标明约束条件。把因果图转换成判定表。把判定表的每一列写成一个测试用例。

3、边值分析法

边值分析法是列出单元功能、输入、状态及控制的合法边界值和非法边界值,设计测试用例,包含全部边界值的方法。典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入,末受控状态等。边值分析法不是一类找一个例子的方法,而是以边界情况的处理作为主要目标专门设计测试用例的方法。另外,边值分析不仅考查输入的边值,也要考虑输出的边值。这是从人们的经验得出的一种有效方法。人们发现许多软件错误只是在下标、数据结构和标量值的边界值及其上、下出现,运行这个区域的测试用例发现错误的概率很高。

用边值分析法设计测试用例时,有以下几条原则:

如果输入条件规定了取值范围,或是规定了值的个数,则应以该范围的边界内及刚刚超出范围的边界外的值,或是分别对最大、最小及稍小于最小、稍大于最大个数作为测试用例。如有规范“某文件可包含l至255”个记录……“,则测试用例可选1和255及0和256等。

针对规范的每个输出条件使用原则〔a〕。

如果程序规范中提到的输入或输出域是个有序的集合(如顺序文件、表格等)就应注意选取有序集的第一个和最后一个元素作为测试用例。

分析规范,尽可能找出可能的边界条件。一个典型的边值分析例子是三角形分类程序。选取a,b,c构成三角形三边,“任意两边之和大于第三边”为边界条件。边值分析相等价类划分侧重不同,对等价类划分是一个补充。如上述三角形问题,选取a=3,b=4,c=5,a=2,b=4,c=7则覆盖有效和无效等价类。如果能在等价类划分中注入边值分析的思想。在每个等价类中不只选取一个覆盖用例,而是进而选取该等价类的边界值等价类划分法将更有效,最后可以用边值分析法再补充一些测试用例。

4、猜错法

猜错法在很大程度上是凭经验进行的,是凭人们对过去所作的测试工作结果的分析,对所揭示的缺陷的规律性作直觉的推测来发现缺陷的。

一个采用两分法的检索程序,典型地可以列出下面几种测试情况:

被检索的表只有一项或为空表;

表的项数恰好是2的幂次;

表的项数比2的幂次多1等。

猜错法充分发挥人的经验,在一个测试小组中集思广益,方便实用,特别在软件测试基础较差的情况下,很好地组织测试小组 (也可以有外来人员)进行错误猜测,是有效的测试方法。

5、随机数法

即测试用例的参数是随机数。它可以自动生成,因此自动化程度高。使用大量随机测试用例测试通过的程序会提高用户对程序的信心。但其关键在于随机数的规律是否符合使用实际。


文章来源:百度文库

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1.引言部分1.1项目背景本测试报告的具体编写目的,指出预期的读者范围。(3-4句) 本测试报告为(系统名称)系统测试报告;本报告目的在于总结测试阶段的测试及测试结果分析,描述系统是否达到需求的目的。本报告预期参考人员包括测试人员、测试部门经理、项目管理人员、SQA人员和其他质量控制人员。1.2参考资料  《XXXX需求说明书》  .....缺陷记录    测试用例2.测试基本信息2.1测试范围 (---需求规格说明书(列表整理)产品模块子模块功能测试点优先级负责人QQ邮箱收件箱群邮件群邮件的删除功能1、邮件的删除2、邮件彻底删除高xxx草稿箱...
            2 2 2615
            分享
          • 一、输入框1、字符型输入框:(1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@#¥%……&?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。(2)长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。(3)空格检查:输入的字符间有空格、字符前有空格、字符后有空格、字符前后有空格(4)多行文本框输入:允许回车换行、保存后再显示能够保存输入的格式、仅输入回车换行,检查能否正确保存(若能,检查保存结果,若不能,查看是否有正常提示)、(5)安全性检查:输入特殊字符串(null,N...
            1 0 1938
            分享
          • 1.核心机制1.1.疑问:作用域有哪些?全局作用域的范围仅限于单个文件。在python中格式没有一个基于单个的、无所不包的情景文件的全局作用域。1.2.疑问:如何定义作用域?Def/class/lambda三种方式1.3.疑问:作用域的基本法则?LEGB法则L:本地作用域;E:上层结构中的本地作用域;G:全局作用域;B:内置作用域;法则描述:变量名引用分为四个作用域进行查找:LEGB,第一个能够完成查找的就算成功;默认状态下,变量名赋值会创建或者改变本地变量;全局声明将赋值变量名映射到模块文件内部的作用域;需要讲的就这么多^_^接下来,希望大家能自己慢慢去体会“引用”和“赋值”之间的区别,那将...
            13 13 1670
            分享
          • 前言这几年关于“35岁失业”的讨论甚嚣尘上,特别是进入疫情时代,身边也越来越多的人开始讨论这个话题。一方面是疫情带来的巨大变革,导致部分行业特别是互联网大规模的裁员潮;另一方面,舆论里占据重要部分的也大多是互联网相关从业者;摸鱼、躺平等词语越来越成为了高频的社交讨论内容。今年步入30岁的年纪,对“35岁失业”有了不一样的感受。正好前天和一个原来的同事聊到了成长的瓶颈,以及寻求可能性的话题。这篇文章,聊聊我对“35岁失业”背后的原因分析,及个人的一些观点,包括我是如何应对“职业危机”的。如何理解35岁失业?网络上热议的“35岁失业”,最初应该是某互联网大厂的一个爆料引起的,然后近几年的互联网裁员...
            12 12 1932
            分享
          •   之前在项目中用LoadRunner进行并发性能测试,后改用Jmeter更为简便快捷,笔者认为这也是开源工具颇受欢迎的原因之一吧。本次继之前的分享更新了一版,近期项目做个小结,希望大家也可以有新的收获!  下载  官网https://archive.apache.org/dist/jmeter/,选择binaries。目前最新5.6.3,官网上说“应该避免使用比最后一个版本早3个版本的版本”。笔者习惯不使用最新的版本,免得不稳定,大家可以使用5.0以上的都行,2、3版本的bug比较多。  环境配置  一、配置环境变量  系统变量中新建JMETER_HOME,值为安装路径D:\dev\apac...
            0 0 451
            分享
      • 51testing软件测试圈微信