如果眼睛黑盒上能上了黑笔怎么办

   黑盒测试也称功能测试它是通過测试来检测每个功能是否都能正常使用。在测试地把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部 特性的情况丅在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用程序是否能适当地接收输入数据而产生正确的输絀信息。黑盒测 试着眼于程序外部结构不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试

    黑盒测试是以用户的角度,从输叺数据与输出数据的对应关系出发进行测试的很明显,如果外部特性本身有问题或规格说明的规定有误用墨盒测试方法是发现不了的。

    黑盒测试法注重于测试软件的功能需求主要试图发现下列几类错误:功能不正确或遗漏、界面错误、数据库访问错误、性能错误、初始囮和终止错误等。

    从理论上讲黑盒测试只有采用穷举输入测试,把所有可能的输入都作为测试情况考虑才能查出程序中所有的错误。實际上测试情况有无穷多个人们不仅要测试 所有佥的输入,而且还要对那些不合法但可能的输入进行测试这样看来,完全测试是不可能的所以我们要进行有针对性的测试,通过制定测试案例指导测试的实 施保证软件测试有组织、按步骤,以及有计划地进行黑盒测試行为必须能够加以量化,才能真正保证软件质量而测试用例就是将测试行为具体量化的方法之 一。

    具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等

    等价类划分的办法是把程序的输叺域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例每一类的代表性数据在测试中的作用等价于这一类中的其他徝。

    边界值分析是通过选择等价类边界的测试用例边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界

    错误推测设计方法就是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法

    因果图方法是从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输出或程序状态的改变),可以通过因果图转换为判定表

    正交试验设计法,就是使用已經造好了的正交表格来安排试验并进行数据分析的一种方法目的是用最少的测试用例达到最高的测试覆盖率。

发布了34 篇原创文章 · 获赞 6 · 访问量 5万+

黑盒是从软件的外部对软件实施測试也常形容为闭着眼睛黑测试。在接下来的学习中将介绍几种常用的黑盒测试方法其中包括等价类划分、边界值分析、决策表测试等。

等价类划分是一种典型的黑盒测试方法该方法完全不考虑程序的内部结构,只根据对软件的要求和说明即需求规格说明,把程序輸入域划分成若干个部分然后从每个部分中选取少数有代表性的数据作为测试输入。使用等价类划分方法设计测试用例必须在分析需求规格说明的基础上划分等价类。

等价类划分把程序的输入域划分成若干个互不相交的子集称之为等价类
所谓等价类是指输入域的某個子集合所有等价类的并便是整个输入域,这对于测试有两个非常重要的意义:完备性和无冗余性
由于等价类由等价关系决定,因此等价类中的元素有一些共同的特点:如果用等价类中的一个元素作为测试数据进行测试不能发现软件中的故障那么使用等价类中的其他え素进行测试也不可能发现故障。

如果测试数据全都从同一个等价类选取除去其中一个测试数据对发现软件故障有意义外,使用其他的測试数据进行测试都是徒劳它们对测试工作的进展没有意义,不如把测试时间花在其他等价类元素的测试中


例如:三角形问题中,如果选择三元组(22,2)作为测试输入可以判定这是一个等边三角形。若再以三元组(100100,100)或(55,5)作为测试输入与测试用例(2,22)一样的方式进行,它们具有等价的测试效果因此,这些测试用例是冗余的使用等价类划分测试的目的是既希望进行完备的测试,哃时又希望避免冗

传统的等价类划分测试的实现分两步进行,一是确定等价类二是确定测试用例。

   软件不能只接收有效地合理的数據,还应经受意外的考验即接受无效的或不合理的数据,这样获得的软件才能具有较高的可靠性因此,在考虑等价类时应注意区别兩种不同的情况。
       有效等价类是指对软件规格说明而言是有意义的,合理的输入数据所构成的集合
利用有效等价类,可以检验程序是否实现了规格说明预先的功能和性能在具体问题中,有效等价类可以是一个也可以是多个。
无效等价类是指对软件规格说明而言是鈈合理或无意义的输入数据所构成的集合。
  利用无效等价类可以检查软件功能和性能的实现是否有不符合规格说明要求的地方。对于具體的问题无效等价类至少应有一个,也可能有多个
以下给出几条确定等价类的原则:
  如果规格说明规定了输入条件的取值范围或值的數量,则可以确定一个有效等价类和两个无效等价类例如:如果软件规格说明要求输入的是1-12月中的一个月,则1-12定义了一个有效等价类和兩个无效等价类(月<1和月>12)
如果规格说明规定了输入数据的一组值,而且软件要对每个输入值分别进行处理则可为每个输入值确立一個有效等价类,此外针对这组确立一个无效等价类它是所有不允许的输入值的集合。
如果规格说明规定了输入值的集合则可确定一个囿效等价类和一个无效等价类。例如:某软件涉及标识符要求“标识符应以字母开头”,则“以字母开头者”作为一个有效等价类“鉯非字母开头”为一个无效等价类。
(4)按限制条件或规则划分
如果规格说明规定了输入数据必须遵守的规则或限制条件则可以确立一個有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
等价类中的各个元素在程序中的处理各不相同则可将等价类進一步划分成更小的等价类。


在设计测试用例时应同时考虑有效等价类和无效等价类侧似乎用例的设计。希望用最少的测试用例覆盖所有的有效等价类。但对每个无效等价类设计一个测试用例来覆盖它即可。
根据已列出的等价类按以下步骤确定测试用例:
(1)为每個等价类规定一个唯一的编号。
(2)设计一个新的测试用例尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步知道测试用例覆盖叻所有的有效等价类。

(3)设计一个新的测试用例使其覆盖并只覆盖一个还没有被覆盖的无效等价类。重复一步直至测试用例覆盖了所有的无效等价类。
注:通常程序发现一类错误后就不再检查是否还有其他错误因此,应该使每个测试方案只覆盖一个无效的等价类

瑺见的等价类划分测试形式:

针对是否对无效数据进行检测,可以将等价类测试分为标准等价类测试和健壮等价类测试
大多数有关软件測试的教材都讨论了健壮等价类测试的问题,这种形式的测试关注无效数据值体现了20世纪60-70年代的主流程序设计风格。随着现代程序设计語言的出现特别像那些具有强数据类型语言,图形用户界面语言的出现使得输入数据的检验不再那么重要。


不考虑无效数据值测试鼡例使用每个等价类中的一个值。

(1)对有效输入来说测试用例从每个有效等价类中取一个值。
(2)对无效输入来说一个测试用例有┅个无效值,其他值都取有效值
注:健壮等价类测试也有两个问题:一是规格说明往往没有定义无效测试用例的期望输出应该是什么样嘚,因此测试人员需要花费大量的时间来定义这些测试用例的期望输出;二是强类型语言没有必要考虑无效输入

1、三角形问题的等价类測试用例
(1)传统等价类划分测试用例设计
使用等价类划分方法必须仔细分析程序规范说明。在三角形问题中输入条件为:
整数,3个数取值在1-100之间
(2)标准和健壮等价类划分测试用例设计
在大多数情况下,从输入域划分等价类但不是不能被测程序的输出与定义等价类,实际上对于三角形问题是最简单的方法。

三角形问题有4种可能输出:等边三角形等腰三角形,一般三角形和非三角形可确定下列輸出等价类。

2、nextdate函数的等价类测试用例设计

Nextdate是一个含有三个变量的函数则可定义为:

如果更仔细地选择等价关系,得到的等价类可能会哽有用

3、雇佣金问题的等价类测试用例设计

无论是标准等价类还是健壮等价类测试用例,都知道一个是有效的等价类测试用例很难判斷雇佣金问题的计算部分有没有问题,因此输入域等价类划分不能产生令人满意的测试用例集合。对雇佣金问题的输出值域定义等价类吔许可以改进测试用例集合

可以在佣金值域上定义3个等价类:

人们从长期的测试工作经验得知,大量的故障往往发生在输入定义域或输絀值域的边界上而不是在内部。说明边界值分析、测试的最佳方式是如果在悬崖峭壁边上可以自如行走那么在平地上行走就更没有问題了。
但是在软件设计和程序编写中,常常对规格说明中的输入域边界或输出域边界重视不够以至于形成一些差错。
实践表明在设計测试用例时,对边界附近的处理必须给予足够的重视为检验边界附近的处理设计专门的测试用例,常常可以取得良好的测试效果

使鼡边界值分析方法设计测试用例,首先应确定边界情况输入等价类与输出等价类的边界,就是着重测试的边界情况
边界值分析方法的基本思想是:选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据而不是选取等价类中典型值或任意值作为测试数据。
边界值分析方法是一种最有效的黑盒测试方法但当边界情况和复杂的时候,要找出适当的边界测试用例还需针对问题的输入域、输出域边界耐惢仔细的逐个进行考虑。


边界条件是一些特殊的情况程序在处理大量中间数值时都正确,但在边界处可能出现问题

比如,在作三角形判断时要输入三角形的3条边长a、b和c。我们知道当满足a<b+c; b<a+c;c<a+b时才能构成三角形。但如果把大于号改成大于等于号就无法构成三角形了问题恰恰出现在那些容易被疏忽的边界上。

实际上边界条件就是软件操作界限所在的边缘条件。一些可能与边界有关的数据类型有:数值速度,字符地址,位置尺寸,数量等同时,考虑这些数据类型的下述特征:

    第一个/最后一个、最小值/最大值、开始/完成、超过/在内、空/满、最短/最长、最快/最慢、最早/最迟、最高/最低、相邻/最远等

有些边界在软件内部,用户几乎是看不到但软件测试仍有必要对这些边界条件进行检查,这样的边界条件称为次边界条件或内部边界条件2的幂次方和ASCII码就是这种例子。
寻求次边界条件比较困难虽然不偠求软件测试人员成为程序员或者具有阅读源代码的能力,但要求软件测试员能大体了解软件的工作方式

     计算机中的数是用二进制数“0”和“1”来表示的,8位二进制数组成一个字节4个字节组成一个字。对于一些常用的2的幂次方对应十进制数的表示范围或值是作为边界條件的重要数据。但它们通常在软件内部使用外部是看不见的除非用户提出这些范围,否则在软件需求规格说明中不会明确指出

 例如,假如某种通信协议支持256条命令为了提高数据传输效率,通信软件总是将常用的信息压缩到一个很小的单元中必要时再扩展为大一些嘚单元。比如将常用的15条命令压缩为一个半字节数据,在遇到第16-256之间的命令时软件转而发送一个一字节的命令。用户只知道可以执行256條命令并不知道软件根据半字节/字节边界执行了不同的计算和操作。为了覆盖所有可能的2的幂次方边界还要考虑临近半字节边界的14、15囷16,以及临近字节边界254、255和256

   数字0-9的ASCII值是48-57。斜杠字符(/)在数字0前面而冒号字符(:)在数字9后面。大写字母A-Z对应的ASCII码值是65-90小写字母對应的ASCII码值是97-122.这些情况都表示次边界条件。

   如果对文本输入或文本转换软件进行测试在考虑数据区间包含哪些值时,最好参考一下ASCII表唎如,如果测试的文本框只接受用户输入字符A-Z和a-z就应该在非法区间中,检测ASCII表中位于这些字符前后的值——@、[、‘和{

实际上,边界值測试更适于采用非强类型语言编写的程序边界值分析测试的基本原理是故障往往出现在输入变量的边界值附近。例如当循环条件本应判断“<=”时,却错写成了“<”;计数器少记一次等美国陆军对其软件进行了研究,发现有相当一部分的故障是由边界值引起的

边界值汾析基于一种在可靠性理论中称为“单故障”的假设,即由两个或两个以上的故障同时出现而导致软件失效的情况很少也就是说,软件夨效是由单故障引起的边界值分析利用输入变量的最小值min,稍大于最小值min+、域内任意值nom、稍小于最大值max-和最大值max来设计测试用例即通過使所有变量取正常值,只使一个变量分别取最小值稍大于最小值、域内任意值、稍小于最大值和最大值。

不管采用什么语言变量的min、min+、nom、max-和max值根据语境可以清楚地确定。例如雇佣金问题中的变量其min、min+、nom、max-和max值很容易确定。如果没有显示地给出边界例如三角形问题,可以人为地设定一个边界显然,边的下界是1但如何确定上界呢?在默认情况下可以取最大可表示的整型值,或者规定一个数作为仩界如100或1000。

   健壮性测试是边界分析测试的一种扩展变量除了取min、min+、nom、max-和max5个边界值外,还要考虑采用一个略超过最大值max+以及略小于最小徝min-的取值看看超过极限值时系统会出现什么情况。

边界值分析的大部分讨论都可直接用于健壮性测试

健壮性测试最有意义的部分不是輸入,而是预期的输出

前面3个例子的每一个都是一个含有3个输入变量的函数。给出每个例子的所有边界值分析测试用例非常浪费空间所以,下面只列出一部分测试用例
1、三角形问题的边界值分析测试用例设计。
 在三角形问题描述中除了要求边长是整数外,没有给出其他的限制条件显然,边长下界为1上界可取100。
2、nextdate函数的边界值分析测试用例设计
3、雇佣金问题的边界值分析测试用例设计
对雇佣金问題考虑输出域的边界值,尤其是在$1000和$1800这两个临界点附近用输出值域来确定测试用例,部分原因是因为在不同的销售额范围内雇佣金按不同比例计算,想找出边界值在$100、$1000、$1800以及$7800上的输入变量组合

 当被测程序含有多个独立变量,这些变量又受物理量的制约时使用边界汾析侧似乎方法比较适合,关键是“独立”和“物理量”
简单地看一下nextdate函数的边界值分析测试用例,就会发现这些测试用例是不充分的例如,没有强调对2月和闰年的测试问题的根源是,边界值分析假设变量是独立的而month、day和year变量之间存在某些依赖关系。

边界值分析不適用逻辑变量和布尔型变量比如,作为逻辑变量的一个例子很难想象0000、0001、5000、9998和9999这样的数字或电话号码会发生什么故障。尽管边界值分析测试很有用但实际运用中,并不如测试人员预想的那样令人满意

基于函数(程序)输入定义域的测试方法,是所有测试方法中最基夲的这类测试方法都有一种假设,即输入变量是真正独立的如果不能保证这种假设,则这类方法不能产生令人满意的测试用例(如:1912姩2月31日)这些方法可以应用于程序的输出值域,就像在雇佣金问题中所做的一样


所有的黑盒测试方法中,基于决策表的测试最为严格最具有逻辑性的测试方法。

在一些数据处理问题中某些操作的实施依赖于多个逻辑条件的组合,即针对不同逻辑条件的组合之分别執行不同的操作,决策表很适合处理这类问题

3.1  决策表 决策表通常由4部分组成:条件桩、条件项、动作桩和动作项。

条件桩分列出问题的所有条件除了某些问题对条件的先后次序有特定的要求外,通常在这里列出的条件其先后次序无关紧要条件项部分对条件桩给出的条件列出所有可能的取值。动作桩则给出了问题规定的可能采取的操作这些操作的排列顺序一般没有什么约束。动作项指出在条件项的各組取值情况下应采取的动作

把任何一个条件组合的特定取值及相应要执行的动作称为一条规则,在决策表中贯穿条件项和动作项的一列僦是一条规则显然,决策表中列出多少组条件取值就有多少条规则。

若表中有两条或多条规则具有相同的动作并且在条件项之间存茬着极为相似的关系,便可以设法将其合并

结合三角形问题给出构造决策表的5个步骤如下:

  (1)确定规则的个数。例如三角形问题的决策表有4个条件,每个条件可以取两个值故应有16种规则。

(2)列出所有的条件桩和动作桩

(4)填入动作项,这样便可得到初始决策表


基於决策表测试适合于要产生大量决策的情况(如:三角形问题),或者输入变量之间存在重要的逻辑关系的情况(如:nextdate函数)

决策表测試方法适用于具有以下特征的应用 程序:

 2、输入变量之间存在逻辑关系

 3、设计输入变量子集的计算

 4、输入与输出之间存在因果关系

适合于使用决策表设计测试用例的情况有: 1、规格说明以决策表形式给出,或者是很容易转换成决策表

2、条件的排列顺序不会也不应影响执行的操作

3、规则的排列顺序不会也不应影响执行的操作

4、当某一规则的条件已经满足并确定要执行的操作后,不必检验别的规则

5、如果某一規则要执行多个操作这些操作的执行顺序无关紧要

      给出这些情况的目的是为了说明操作的执行应完全依赖于条件的组合。其实对于某些鈈满足这几条的决策表同样可以用设计测试用例,只不过需增加一些其他的测试用例罢了

决策表规模较大,有N个条件的有限条目决策表(每个条件取真、假值)有2n个规则现在已有多种方法可以解决这个问题——扩展条目决策表(条件使用等价类)、代数简化表,将大表“分解”为小表等方法

与其他方法一样,迭代也比较有效第一次识别的条件或动作可能不那么令人满意,把第一次得到的结果作为鋪路石逐渐改进,直到得到满意的决策表为止

 等价类划分和边界值分析方法,着重考虑输入条件不考虑输入条件的各种组合,也不栲虑各个输入条件之间的相互制约关系
 如果在测试时必须考虑输入条件的各种组合,可能的组合数将是一个天文数字因此必须考虑使鼡一种适合于描述多种条件的组合,产生多个相应动作的测试方法这就需要因果图。

因果图方法能够帮助测试人员按照一定的步骤高效率地开发测试用例,以检测程序输入条件的各种组合情况它是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,可以指出规格说明中存在的不完整性和二义性

因果图中使用了简单的逻辑符号,以直线连接左右结点左结点表示输入状态,右结点表示输絀状态因果图用4种符号分别表示规格说明中的4种因果关系。

在实际问题中输入状态相互之间还可能存在某些依赖关系,称之为:“约束”比如,某些输入条件本身不可能同时出现输出状态之间也往往存在约束。

对于输入条件的约束有以下4种:

1、E约束:a和b中最多有一個可能为1即a和b不能同时为1。

2、I约束:a、b和c中至少有一个必须是1即abc不能同时为0。

3、O约束:a和b必须有一个且仅有一个为1

4、R约束;a是1时,b必須是1即当a是1时,b不能是0

输出条件的约束只有M约束:若结果a是1,则结果b强制为0。

因果图方法最终生成决策表利用因果图导出测试用例需偠见过以下几个步骤:

1、分析程序规格说明中哪些是原因,哪些是结果原因常常是输入条件或输入条件的等价类,结果则是输出条件

2、分析程序规格说明中语义的内容,找出原因与结果之间原因与原因之间的对应关系,并将其表示成连接各个原因与各个结果的“因果圖”

3、由于语法或环境的限制,有些原因与原因之间原因与结果之间的组合情况不可能出现。为表明这些特定的情况在因果图上使鼡一些记号表明约束或限制条件。

4、把因果图转换成决策表

5、根据决策表中每一列设计测试用例。

下面举例说明因果图方法的步骤:

  某軟件规格说明要求:第一个字符必须是*或#第二个字符必须是一个数字,在此情况下进行文件的修改如果第一个字符不是#或*,则给出信息N;如果第二个字符不是数字则给出信息M。

分析:把原因和结果分开

原因:c1----第一个字符是#

       将原因和结果用上述的逻辑符号连接起来可鉯得到因果图,然后根据因果图建立决策表。

注:不要以为因果图是多余的实际上,在较为复杂的问题中这个方法常常十分有效,咜能有效地帮助我们检查输入条件组合设计出非冗余、高效的测试用例。

特殊值测试      特殊值测试是最直观、运用最广泛的一种测试方法当测试人员应用其领域知识使用类似程序的测试经验等信息开发测试用例时,常常使用特殊值测试这种方法不适用测试策略,只根据“最佳工程判断”来设计测试用例因此特殊值测试特别依赖测试人员的能力。

 故障猜测法   人们也可以靠经验和直觉猜测程序中可能存在嘚各种软件故障从而有针对地编写检查这些故障的测试用例。这就是故障测试用例它是一种很特别的方法。

基本思路:列出程序中所囿可能出现的故障或容易发生故障的情况然后根据它们开发测试用例。比如以前遇到的最容易出错的情况是什么故障的历史可能提供┅些答案,过去出错的地方很可能以后还会出错例如:输入数据为0或输出数据为0是容易发生故障的情形,因此可选择使输入数据为0或使输出数据为0的测试用例

前面介绍了集中典型的黑盒测试方法,这些测试方法的共同特点是:它们都是把被测程序看做是一个打鈈开的黑盒只知道输入到输出的映射关系,根据软件规格说明设计测试用例那么哪种测试方法最好?如何有效地选择测试方法下面從测试工作量、测试效率两方面来讨论,它们是进行有效测试的关键

   主要以边界值分析、等价类划分和决策表测试方法来讨论它们的测試工作量,即生成测试用例的数量与开发这些测试用例所需的工作量

 边界值分析测试方法不考虑数据或逻辑依赖关系,它机械地根据各邊界生成测试用例生成的测试用例最多等价类划分测试方法则关注数据依赖关系和函数本身,需要借助于判断和技巧考虑如何划分等價类,随后也是机械地从等价类中选取测试输入生成测试用例。决策表技术最精细它要求测试人员既要考虑数据,又要考虑逻辑依赖關系如果有一个良好的条件集合,所得到的测试用例就是完备的在一定意义上讲也是最少的。

       边界值分析测试方法使用简单但会生荿大量测试用例,机器执行时间很长如果将精力投入到更精细的测试方法,如决策表方法则测试用例生成花费了大量的时间,但生成嘚测试用例数少机器执行时间短。测试方法研究的目的就是在开发测试用例工作量和测试用例执行工作量之间做一个令人满意的折中

  洳果仔细研究这3个例子的测试用例集合,可以发现黑盒测试的基本局限是遗漏了某些未测试的功能和冗余测试。一般来说更精细的方法有助于识别漏洞,但是却不能保证什么因为可以为某个程序开发出优秀的健壮等价类,然后又构造出很差的决策表

关于测试用例集匼,真正想知道的是它们的测试效果如何即一组测试用例找出程序中故障的效率如何。但是解释测试有效性是很困难的,因为不可能知道程序中的所有故障因此也就不可能知道给定方法所产生的测试用例是否能够发现这些故障,所能够做的只是根据不同类型的故障,选择最有可能发现这种缺陷的测试方法根据最有可能出现的故障种类,分析得到可提高测试有效性的实用方法通过跟踪所开发软件Φ的故障的种类和密度,也可以改进测试方法
这需要测试经验和技巧。

有些时候人们可能对普遍存在的故障没有任何感觉。这时最恏的办法是利用程序的已知属性,选择处理这些属性的方法在选择黑盒测试方法时一些经常用到的属性有:

1、变量表示物理量还是逻辑量

2、在变量之间是否存在依赖关系

3、是否有大量的例外处理

下面列出一些黑盒测试方法选取的初步“专家系统”:

1、如果变量引用的是物悝量,可采用边界值分析测试和等价类测试

2、如果变量是独立可采用边界值分析测试和等价类测试

3、如果变量不是独立的,可采用决策表测试

4、如果可保证是单故障假设可采用边界值分析和健壮性测试

5、如果程序包含大量例外处理,可采用健壮性测试和决策表测试

6、如果变量引用的是逻辑量可采用等价类测试用例和决策表测试。

等价类划分把程序的输入域划分称若干个互不相交的等价类其目的是要減少测试用例的绝对数量。在进行等价类划分测试时不仅要考虑有效等价类,还应考虑无效等价类
边界值分析方法通过分析输入变量嘚边界值域设计测试用例。实践表明在设计测试用例时,对边界及次边界附近的处理必须给予足够的重视为检验边界附近的处理,专門设计测试用例常常可以取得良好的测试效果。
决策表的测试中通过分析被测程序的逻辑依赖关系,构造决策表进而设计测试用例。在所有的黑盒测试方法中基于决策表的测试是最具有逻辑性的测试方法,但所需的测试工作量较大

我要回帖

更多关于 lorbeer古皂 的文章

 

随机推荐