zoukankan      html  css  js  c++  java
  • 黑盒测试用例设计总结

    最常见黑盒测试方法包括:边界值、等价类、错误推测法、场景法、因果图法、判定表组成法、正交实验设计。(注:黑盒测试仅需知道系统的【输入】和【输出】,不需要知道代码是怎么写的。所以代码部分就不赘述了)

    一、边界值测试

    经实践总结:大量的软件缺陷发生在输入域和输出域的边界上。所以在设计测试用例的时候,应该重视边界。

    例1:只有一个输入条件时,可以这么选取测试用例。(以坐标轴举例。以红点表示测试用例)

    例2:当有两个输入条件的时候,可以这么选取测试用例。(以红点表示测试用例)

    小结:

    边界值测试是一种最基本的黑盒测试方法,它是“等价类划分”这种测试方法的良好补充。但该方法会有较大的冗余和漏洞。边界值测试对布尔型无效(因为布尔型不是“true”就是“false”,不存在边界值的概念)。当然,边界值测试并非黑盒测试独有,它也可以应用在白盒测试(比如数组边界的测试、对循环次数边界的测试……)。

    二、等价类划分

    划分等价类

    01  要做到穷尽测试是不可能的,所以在设计测试用例时往往要先划分等价类再选取“人大代表”。划分的子集应该满足如下因素:

    (1)每个子集内部所有的数据都是等价的;

    (2)子集之间互不相交;

    (3)所有子集的并集是整个输入域或输出域;

    PS:

    (1)【有效等价类】是相对于规格说明合理的、正确的、有意义的输入数据构成的集合。

    (2)【无效等价类】是相对于规格说明不合理的、错误的、无意义的输入数据构成的集合。举例说明。

    例1:如网站注册用户名的时候,输入框要求“用户名由字母开头,后跟字母或数字的任意组合,且长度<=8”。

    例2:每个学生可选修1-3门课程;

    缺陷相关性假设

    02   针对缺陷相关性假设,可将等价类测试分为【弱等价类测试】和【强等价类测试】。在现实情况中,由于缺陷的可能情况非常多,一个子集中的数据对某种缺陷是等价的,但对另外一种缺陷可能又是不等价的。

    ①弱一般等价类(WN)测试:考虑单缺陷假设;测试用例使用每个等价类中的一个值。

    ②强一般等价类(SN)测试:考虑多缺陷假设;测试用例集合为等价类笛卡儿积。

    例1:弱等价类

    弱等价类是考虑某个单一缺陷情况下的等价情况,子集里所有数据在这种缺陷假设下是等价的,并且划分成的几个等价类能够覆盖整个测试空间的单一缺陷。比如以下一段程序:

    我们可以将数据划分为两个等价类,0~10为1个等价类,大于10的数据为1个等价类,在考虑“>”号误写成“<”号这种缺陷的情况下,这两个等价集中的数据都是等价的,比如0~10这个等价类中,使用0或使用10来进行测试都能发现缺陷。这两个等价类中各自抽取一个测试数据进行测试,都能代表其他数据揭示出“>”号误写成“<”号这种缺陷来,因此整个测试空间都被覆盖了。

    例2:强等价类

    强等价类是在多个缺陷假设前提下,各个等价类中的可测数据在单个或多个缺陷假设下是等价的,并且划分的各个等价子集中各自取一个测试数据可以覆盖整个测试空间的多个缺陷情况。

    再考虑前面弱等价类中的例子程序,出错的可能性有哪些呢?

    除了大于号会错写成小于号外,实际上还有可能写成大于等于号,10有可能写成1或100等大于10或小于10的数。(PS;为方便描述以错写成1和100为例)

    ①考虑0~10这个集合,在误写成中间一列条件中情况下,里面的数据并不等价,比如误写成x>1的情况下,使用1做测试和使用2做测试揭示缺陷是不同的,使用1做测试发现不了缺陷,但使用2测试就能发现缺陷。

    ②在判断条件误写成x>=10条件下,10和0~9中的任一数据也不等价,并且使用大于10的数据也无法揭示出条件错写成x>=10这个缺陷,因此整个测试空间的多个缺陷无法被已划分的两个等价类来覆盖,10需要单独划分成一个等价类。

    ③这样将数据划分成三个等价类{0~9}、{10}、{大于10的数据},再看看这三个等价类是否可以覆盖表中各种出错情况,显然在x>100和x>=100两种情况下,大于10的数据集合中的数据是不等价的,使用大于100的数据不能揭示出缺陷,但使用大于10小于100的数据却能揭示出缺陷,因此需要对大于10的数据再划分等价类,实际上只要将边界值{11}划一个单独的等价类就可以了。

    ④这样总共得到四个等价类{0~9}、{10}、{11}、{大于11的数据},从这四个等价类中各取一个数据的话就可以将以上列出的所有可能的缺陷情况都揭示出来,但是各个等价类并不是对所有缺陷都等价的,这种划分的等价类由于可以将各种缺陷情况覆盖到,把它叫做强等价类。

    小结:

    等价类测试可以处理布尔型和逻辑型的问题。建议在划分等价类后对每个等价类进行编号,这样可看起来会更清晰。

    三、因果图

    基于因果图的测试方法,要考虑如下问题:

    (1)规格说明书有哪些原因?

    (2)规格说明书有哪些结果?

    (3)规格说明书中各种原因之间的关系怎么样?

    (4)规格说明书中各种结果之间的关系怎么样?

    (5)规格说明书中原因和结果之间的约束条件怎么样?

    (6)如何从规格说明书中的原因和结果设计测试用例?

    01 因果图

    【a】恒等; 若c1为1,则e1也为1。若c1为0,则e1也为0;

    【b】非:若c1是1,则e1是0。若c1为0,则e1是1;

    【c】或:若c1与c2中有一个是1或者两个都为1,则e1是1。若c1和c2都为0,则e1是0;

    【d】与:当且仅当c1和c2都是1,则e1为1,否则e1为0。

    E约束(异;异或):a,b最多有一个可能为1,不能同时为1。

    I约束(或;包含);a,b,c中至少有一个必须为1,不能同时为0。

    O约束(惟一);a和b必须有一个且仅有一个为1。

    R约束(要求);a是1时,b必须是1,即a为1时,b不能为0。

    M约束;对输出条件的约束,若结果a为1,则结果b必须为0。

    举例:

    某个软件的规格说明书中规定;第一个字符必须是A或B,第二个字符必须是一个数字字符,在此情况下进行文件的修改。但如果第一个字符不正确,则给出信息L;如果第二个字符不正确,则给出信息M。

    可按照如下步骤设计测试用例:

          (1)根据软件规格说明书。列出原因和结果

          (2)找出原因和结果之间的关系,原因和原因之间的约束关系

          (3)将因果图转化为判定表

          (4)根据判断表设计测试用例

    原因:                                                                 结果:
    C1:第一个字符是A;                                        E1:给出信息L;
    C2:第一个字符是B;                                        E2:修改文件;
    C3:第二个字符是一个数字字符。                     E3:给出信息M;

    转化成决策表

    小结:

    因果图可以用于描述输入与输出的相互关系。但是其绘制过程比较繁琐。因果图可以转化成决策表。建议直接绘制决策表。

    四、决策表

    举例:

    已知a、b、c三边,判断是否能构成三角形?如果是三角形的话,是什么哪种三角形?

    解答(决策表的建立步骤):

    1、列出所有的条件桩和动作桩;
    2、填入条件项;
    3、填入动作项,制定初始判定表;
    4、简化、合并相似规则或者相同动作。

    小结:

    决策表测试仅适合对输入域展开分析,不适合对输出域展开测试。

    五、错误推测法

    01 来源

    错误推测法凭借的是测试人员的直觉和经验,推测系统中可能出现的各种缺陷。常常是列举出系统中所有【可能的缺陷和容易发生缺陷】的特殊情况,并根据它们来设计测试用例。

    举例:测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:

    小结:

    优点:充分发挥个人的经验和潜能,命中率高

    缺点:覆盖率难以保证;过多的依赖于个人的经验。

    六、场景测试

    软件的工作流程往往对应着现实生活的场景。应该从更高些的视角来把握系统的业务流程,了解功能模块。在熟悉流程的基础上才能讨论局部细节的测试设计。场景法的核心是事件流和场景。

    举例:

    有一个在线购物的实例,用户进入一个在线购物网站进行购物,选购物品后,进行在线购买,这时需要使用帐号登录,登录成功后,进行付钱交易,交易成功后,生成订购单,完成整个购物过程。

    解答:

    step1:确定基本流和备选流;

    step2:根据基本流和备选流来确定场景;

    step3:设计用例。对于每一个场景都需要确定测试用例。可以采用矩阵或决策表来确定和管理测试用例。下面显示了一种通用格式,其中各行代表各个测试用例,而各列则代表测试用例的信息。

    step4:设计用例设计数据,把数据填入上面的用例表中。

    (PS:测试用例只是购物的一部分测试用例,应该还可以继续补充以达到比较好的覆盖。)

    总结:

    为了测试程序业务逻辑、业务流程、主要功能的正确性,错误处理能力,使用场景法设计测试用例(其中包含等价类)。需要从两方面考虑:

    (1)模拟用户正确的操作——验证功能正确性(基本流)

    (2)模拟用户错误的操作——验证错误处理能力(备选流)

            要求精通软件的业务;基本流、备选流

    (3)等价类划分

    需要输入数据的地方,进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率最有效的方法

    只要有数据输入(选择)的地方,就可以使用。从无限的数据中找出有限的代表、无限等价类

    七、正交实验设计

     概念:

      1、n阶拉丁方

             用n个不同的拉丁字母排成一个n阶方(n<26),如果每行的n个字母均不同,每列的n个字母均不同,则这种方阵为n*n拉丁方,或n阶拉丁方。也即:每个字母在任一行、任一列只出现一次(可以以数字代替字母)。

    2、正交拉丁方

             设有2个n阶的拉丁方,如果将它们叠合在一起,恰好出现n2个不同的有序数对,则称为这两个拉丁方为相互正交的拉丁方,简称正交拉丁方。

    3、正交排列法概述

             正交排列法能够使用最小的测试过程集合获得最大的测试覆盖率。当可能的输入数据或者输入数据的组合数量很大时,由于不可能为每个输入组合都创建测试用例,可以采用这种方法。

    4、应用场合

    有很多的控件,每个控件有多个取值,要考虑不同控件的不同取值的组合——如何使用最少、最优化的数据组合达到最大的测试覆盖。

    5. 区别于因果图法

    因果图法适用于控件组合数量较少(20种以下),要比较全面的考虑所有情况(或主要情况)。而正交排列法适用于控件组合数量庞大,而从代码角度讲又没有必要全部测试。

    举例:

      

    基本需求:

    在一个窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值。具体如下:

    ①字体:仿宋、楷体、华文彩云   

    ②颜色:红色、绿色、蓝色      

    ③字号:20号、30号、40号

    ④样式:粗体、斜体、下划线

    在测试时,要考虑这些控件的组合情况,组合量非常大(34=81种组合情况)。由于组合量太大,不可能为每一种组合都创建测试用例。如何采用最少的测试用例集合获得最大的测试覆盖率——采用正交排列法

    正交表的概念:

    一种特制的表,一般的正交表记为:Ln(m)k。其中N是表的行数,也就是需要测试组合的次数;k是表的列数,表示控件的个数(因素的个数,或因子的个数);m是每个控件包含的取值个数(各因素的水平数,即各因素的状态数)。

    如L9(3)4,有4个控件,每个控件有3个取值,9为需要测试的组合个数。L9(3)4正交排列表如下所示:

     

    正交排列法的使用步骤:

    (1)把控件及其取值列举出来,并对取值进行编号

    (2)根据所测程序中控件的个数以及每个控件的取值个数,选取一个合适的正交排列表

    (3)把控件及其取值映射到正交排列表中

    ①把正交排列表中的A、B、C、D(因子)分别替换成4个控件

    ②把每列中的1,2,3(状态)分别换成这个控件的3个取值,排列顺序要求按照表中给出的顺序。

    (4)根据映射好的正交排列表编写测试用例

    需求分析:

    1、分析“字符属性设置程序”

    (1)步骤一:分析需求,把控件及其取值列举出来,并对取值进行编号

    控件

    编号

    字体

    字符样式

    颜色

    字号

    1

    仿宋

    粗体

    红色

    20号

    2

    楷体

    斜体

    绿色

    30号

    3

    华文彩云

    下划线

    蓝色

    40号

    (2)步骤二:根据所测程序中控件的个数以及每个控件的取值个数,选取一个合适的正交排列表。

    ①4个控件:字体、字符样式、颜色、字号

    ②每个控件有3个取值

    ③选择L9(3)4正交排列表,如下所示:

    序号

    1

    2

    3

    4

    1

    1

    1

    1

    1

    2

    1

    2

    2

    2

    3

    1

    3

    3

    3

    4

    2

    1

    2

    3

    5

    2

    2

    3

    1

    6

    2

    3

    1

    2

    7

    3

    1

    3

    2

    8

    3

    2

    1

    3

    9

    3

    3

    2

    1

    (3)步骤三:把控件及其取值映射到正交排列表中

    ①把正交排列表中的A、B、C、D(因子)分别替换成4个控件

    ②把每列中的1,2,3(状态)分别换成这个控件的3个取值,排列顺序要按照表中给出的顺序

    序号

    A-字体

    B-样式

    C-颜色

    D-字号

    1

    1-仿宋

    1-粗体

    1-红色

    1-20号

    2

    1-仿宋

    2-斜线

    2-绿色

    2-30号

    3

    1-仿宋

    3-下划线

    3-蓝色

    3-40号

    4

    2-楷体

    1-粗体

    2-绿色

    3-40号

    5

    2-楷体

    2-斜线

    3-蓝色

    1-20号

    6

    2-楷体

    3-下划线

    1-红色

    2-30号

    7

    3-华文彩云

    1-粗体

    3-蓝色

    2-30号

    8

    3-华文彩云

    2-斜体

    1-红色

    3-40号

    9

    3-华文彩云

    3-下划线

    2-绿色

    1-20号

    (4)步骤四:根据映射好的正交排列表编写测试用例

    ①正交表的每一行表示一种组合,对应编写一条测试用例

    ②测试用例

    用例1:在文本框输入“软件测试”,设置字体为“仿宋”,字符样式为“粗体”,颜色为“红色”,字号为“20号”,然后点击“确定”按钮。预期结果:字体设置正确

    用例2:在文本框输入“软件测试”,设置字体为“仿宋”,字符样式为“斜线”,颜色为“绿色”,字号为“30号”,然后点击“确定”按钮。预期结果:字体设置正确

    用例3:在文本框输入“软件测试”,设置字体为“仿宋”,字符样式为“下滑线”,颜色为“蓝色”,字号为“40号”,然后点击“确定”按钮。预期结果:字体设置正确 ……    

    ③以此类推,把映射好的正交排列表中的每一行,转换成一条测试用例,这样,就可以写出9条测试用例。

    (5)说明

    ①正交排列表是经过严格的数学推理的来的,也就是说这9条用例是最优的。

    ②这是进行测试的最少组合数量。但是,在测试中有72(81-9)种组合没有测试到。当然,如果时间允许,应该再补充一下用例。因为遗漏的组合越多,存在缺陷的可能性就越大。

    正交表的性质:

    1、正交表的性质

    (1)每列中不同数字出现的次数相等。

    (2)在任意两列中,将同一行的两个数字组成一个有序数对,则每种有序实数对出现的次数相等。

    2、正交表的种类

    (1)各列水平数均相同的正交表

    (2)混合水平正交表

             如L8(4*24)——一个控件有4个属性,4个控件有2个属性

    3、使用正交排列法的局限性

    (1)目前常见的正交排列表只有附录1中给出的几种(个数有限)

    (2)即使是已有的正交排列表,基本都要求每个控件中取值的个数要相等,这在实际软件中很少遇到(基本要求控件取值个数相等)

    4、◎思考:没有现成的正交排列表怎么办?

    通过正交排列法的学习,我们更多的应该学习到一种测试思想,也就是在所有组合集合中选取测试数据时,应该均匀的选取其中的组合作为测试用例,而不要只在某个局部选取数据。

    正交表的测试思想:

    1、公平原则:使每个控件的每个取值参与组合的次数尽量相等

    2、均匀原则:在所有的组合中挑选数据时,应该均匀零星的选取,而不要只从某个局部选

  • 相关阅读:
    [转] ORACLE 错误编号表一
    基于CkEditor实现.net在线开发之路(1)
    跨行清算系统的实现原理
    应用程序域
    支付机构客户备付金存管办法
    数据库培训二期试题
    MYSQL开发规范
    详解线上线下收单业务(一)第三方支付
    Solr安装配置说明
    进程(Process)
  • 原文地址:https://www.cnblogs.com/uestc2007/p/11276104.html
Copyright © 2011-2022 走看看