zoukankan      html  css  js  c++  java
  • 测试方法和测试用例设计

    测试方法和测试用例设计

    用户需求/原始需求

    需求分析/规格说明书(评审过后,将不合理、无法做到的地方去掉以后的说明书)

    测试需求(在需求分析的基础上,以测试团队的工作计划、方式的需要、工作优先级安排)

    主要解决“测什么”的问题,即指明被测对象中什么需要测试。

    功能是第一要务,按照测试团队的工作要求进行计划

    在后期交流中,要不断验证客户需求,要保留文档

    对于测试工程师:测试一般划分为功能性测试、非功能性测试

    如果没有需求文档,先做冒烟测试,对软件大体有什么功能,进行了解,哪些是功能的重点,有多少功能点,把需求理出来

    测试原则:

    1. 所有测试活动应以需求为源头和驱动

    2. 应尽早地和不断地进行测试

    3. 完全测试(穷举测试)是不可能的,数据是无穷无尽的,总有测试不到的数据

    4. 没有完美的软件和完美的测试

    5. 应避免仅有程序员自己检查程序,避免随意性(避免随意测试)

    6. 二八定律,把相对多的时间、成本、精力花在重要的模块、部分

    7. Good enough 不做不充分的测试,也不做过多的测试,找到测试费用和测试量之间平衡点

    8. 一定要有正确和错误验证

    1、所有测试活动都应追溯到用户需求,测试活动应以需求(用户需求->需求规格说明书)为源头和驱动

    2、应尽早地和不断地进行软件测试

    3、完全测试(穷举测试)是不可能的,因为数据本身是无穷无尽的,总有无法测试到的数据、方面。没有完美的测试和完美的软件,只有未被发现的缺陷,没有不存在问题的软件

    4、应充分注意测试中的集群现象:二八定律(把相对多数的时间花在重要的部分)

    5、应避免只有程序员自己检查程序,尽量避免测试的随意性(即避免随机测试)

    6、测试的Good Enough,不要做不充分的测试,也不做过多的测试,找到测试费用和测试量之间的平衡点,是最佳选择

    制定测试内容和最低测试通过标准加以衡量(必要时具体问题具体分析)

    7、兼顾合理的输入数据、操作对软件进行测试和不合理的输入数据、操作对软件进行测试

    8、程序修改后要做回归测试(不论修改的多少,都要做回归测试)

    测试的完成标准:

    1.   功能符合需求
      
    2.   被测系统所有的功能点都要被覆盖到(100%覆盖)  如果某个功能点被测试到了,就说该功能点被覆盖了(但凡是要交付到下一阶段的功能、内容,都必须覆盖到,所有功能点至少覆盖一次)
      
    3.   被测系统不允许出现严重程度为一、二、三级缺陷(致命错误、严重错误、一般错误)
      
    4.   所有的配置项必须完整(产业链的各个项目必须完整)
      

    测试过程中遇到的问题:

    不知道是否较全面的测试了所有功能

    测试的覆盖率无法衡量

    对新版本的重复测试很难实施

    存在大量冗余测试影响测试效率

    软件还未测试之前,就对需求进行设计,实用性要很强

    测试用例

    测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。

    解决要测什么、怎么测、如何衡量的问题

    软件名、版本、模块、测试步骤、顺序、数据、预期结果(根据需求、设计,对可能的结果进行预测)

    //测试用例一般可以划分为:场景测试用例(简称“测试用例”)和基本测试用例(给或称为“工用测试用例”)

    定义:集合(测试环境、测试步骤、数据、代码、预期结果)

    解决“测什么,怎么测,如何衡量”

    测试是在测试执行之前设计、编写的文档/报告,它不一定会发现缺陷

    缺陷报告是在测试执行完成之后,发现问题、缺陷的报告

    作用:

    1、 执行测试的有效依据(文档而非口头或主观)

    2、 追溯测试的有效依据(可在做回归、缺陷分析时查看)

    3、 衡量测试工作量的有效数据

    4、 衡量测试人员工作量和工作质量的依据

    5、 评估测试覆盖力度的依据(需求中的内容/功能点被测试涉及到了,就说它被覆盖了,需求/功能点覆盖100%)

    6、 验证需求和寻找缺陷的重要手段

    7、 为新版本或其他项目参考和累积测试经验

    测试用例在什么时候开始

    设计人员会根据需求进行设计,只要需求和设计文档到位,就可以开始编写测试用例

    测试人员的时间周期比开发人员的时间周期长,测试人员早在需求阶段就进入测试阶段

    1、如果需求、设计缺失或不完整,在软件完成后编写用例

    2、需求、设计完整

    熟悉需求、设计之后,在编码之前或实现过程中设计用例

    3、软件代码、需求、设计变更后,测试用例需要变更

    4、执行用例过程中或执行之后需要适时调整、修改

    如何对软件执行操作动作、步骤?

    操作步骤中输入些什么样的数据,数据有什么讲究,有什么范围,数据的营造

    用合理的方式造出数据

    黑盒测试与功能性测试、兼容性测试、自动化测试是平等的

    黑盒设计用例的方法:(黑盒测试:以数据为驱动的功能性测试,不关注内部结构)

    1、等价类

    两位数加法计数器

    需求:两位数范围内(-99~99),两个数求和

    两位数包不包括小数?

    衡量成本、时间,评估一下工作量,进行测试

    加数1:[-99,99]

    加数2:[-99,99]

    工作量:199*199=39601

    留哪些数据?为什么留这些数据?为什么砍掉其他数据?

    等价类(解决了不能穷举测试的问题/极大的控制了测试成本在可接收范围内/控制测试用例的数量)

    根据用户需求及其特点和数据本身的特点,将数据划分为有限的若干个类型,从每个类型中的抽取一个具有代表性的数据进行测试

    如何利用现有的时间成本,将数据划分到什么地步

    有效等价类

    无效等价类

    等价类1:[-99,99]

    等价类2: <-99 因为无法找到小于-99同时大于99的数,因此,无效等价类分

    等价类3: > 99 为两个

    划分等价类的方法

    1、在连续的数据取值范围中,至少可以划分三个等价类,其中1个有效等价类[0,100],2个无效等价类(<0)(>100)

    有规律的数据,例如奇数、偶数,也可以用等价划分的方法

    课堂练习:

    微信红包(0,200]

    分析需求特点,边界值的特点,是否需要取等于

    等价类1 0<x<=200

    等价类2 x<=0

    等价类3 200>x

    T0305样品软件

    需求:一班学生学号[1,40]

    ​ 各科成绩[0,100]

    一班学生学号

    等价类1 [1,40]

    等价类2 <1

    等价类3 >40

    等价类4 >200

    成绩

    等价类1 [0,100]

    等价类2 <0

    等价类3 >100

    2、输入条件规定了必须输入某些数据,至少划分为一个有效等价类、一个无效等价类

    3、输入数据只有两种可能,true、false/yes、no等,划分为一个有效等价类、一个无效等价类

    4、确定一个有效等价类(多个条件都满足),若干个无效等价类(不满足长度要求或者不满足开头或者不满足组成,三个无效等价类)

    5、在已知等价类的基础上,根据具体情况再划分

    等价类细分的素材 例如:

    非数值:

    汉字

    字母

    其他字符

    空白

    6、规定了输入数据的一组值,并且对每个输入值分别处理,划分若干个有效等价类,一个无效等价类

    建议尽可能在一个下拉框中,减少输入选项,可以增加下拉框控件数量

    等价类划分步骤:

    1、对输入数据进行分析(结合需求分析,数据本身特点的分析),再划分等价类

    考虑输入数据的数据类型(输入类型)、数据范围(输入长度)

    2、为等价类进行编号

    3、每个等价类中的数据至少要用一次

    9.25回顾

    等价类划分方法

    1、连续数据取值范围,可以分为一个有效,两个无效

    2、规定输入某些无规律的数据取值集合,例如验证码,可以分为一个有效,一个无效

    3、输入条件是布尔量true/fales,yes/no,可以分为一个有效,一个无效

    4、由多个无关联的条件共同构成数据范围,例如Java标识符的命名规则,可以分为一个有效,多个无效

    5、在已知等价类基础上,再进行细分

    6、规定了输入数据是无规律的一组值,并且对每个输入值分别处理,例如下拉框,可划分为若干个有效,1个无效(除了下拉框中的,其他的都是无效的)

    划分等价类标准

    完备测试、避免冗余;

    子集互不相交:保证无冗余,不会出现多个用例用到相同类型的数据;

    所有子集相加即为数据总集(整个集合)。

    等价类1 x>99

    等价类2 x<-99

    -99<=x<=99

    等价类3 -99<=x<0

    等价类4 x=0 若3和4中都包括0这个取值,那么会造成冗余

    等价类5 0<x<=99

    边界值

    -99<=x<=99

    if(-99<=x&&x<=99)

    {

    …//正确处理

    }

    if(x<-99||x>99)

    {

    …//错误处理

    }

    边界值是等价类派生出来的方法,只要有数据的取值范围,就肯定有边界值

    开区间:一个连续的取值范围,大于最小值,小于最大值,不包括两个端点

    1<x<10 (1,10)

    闭区间:一个连续的取值范围,大于等于最小值,小于等于最大值,包括两个端点

    1<=x<=10 [1,10]

    上点:不区分开闭区间,边界上的点,1和10是上点

    若是开区间,上点在域范围外

    若是闭区间,上点在域范围外

    内点:在取值范围内的任意一点,2,3,4等都是内点

    离点:若是开区间,离点是范围内离上点最近的点,若是闭区间,离点就是范围外离上点最近的点

    开区间(1,10),2和9就是离点,内收,因为1,10是无效值,所以还应取又消失

    闭区间[1,10],0和11是离点,外放

    边界值:上点和离点

    (49,79):49,79,50,78

    (49,79]:49,79,50,80

    [49,79):49,79,48,78

    回顾上午的知识:

    边界值(等价类的补充/特例)

    开区间:不包含最大值和最小值的数据取值范围 (1,10)

    闭区间:包含最大值和最小值的数据取值范围 [1,10]

    上点:边界上的点,最大值、最小值,不区分开闭区间

    内点:取值范围内的任意一点

    离点:区分开闭区间,离上点最近的点

    开区间的离点是取值范围内离上点最近的点,内收,最小值+1个单位,最大值-1个单位,因为上点是无效值,故还应取有效值

    闭区间的离点是取值范围外离上点最近的点,外放,最小值-1个单位,最大值+1个单位,因为上点是有效值,故还应取无效值

    4+1理论,2个上点,2个离点,1个内点

    6+1理论

    [10,100] 边界值,9,10,100,101

    (10,100) 边界值,10,11,99,100

    不管开闭区间,六个边界值:9,10,11,99,100,101

    若已知,开闭区间,会产生冗余,若需求不明确,或团队技术不高的情况可考虑采用6+1理论

    回顾:

    等价类的作用:解决不能穷举测试的问题,极大的控制成本在可接收范围内

    等价类划分(根据需求的特点,数据本身的特点进行划分)

    有效等价类:符合需求的数据

    无效等价类:不符合需求的数据

    等价类划分方法:

    1、 连续数据取值范围,可划分为一个有效,两个无效

    2、 规定输入的数据是无规律的一组值,并且对每个输入值分别进行处理,例如下拉框,可划分为若干个有效,一个无效(除了下拉框中的,都是无效的)

    等价类缺点:数据值是不准确的,不精确的/数据值的准确性不一样

    边界值:是等价类的补充,解决数据不准确的缺点

    边界值的优点:数据值的准确性、判断数据的边界,解决了数据中极大极小值可能存在的问题

    int i;

    If(i>=1 && i<=12)

    {

    System.out.print(i+“月是月份”);//正确处理

    }

    If(i<1 ||1>12)

    {

    System.out.print(i+”不是月份”);//错误处理

    }

    等价类、边界值都是为黑盒测试设计数据的

    4+1理论

    开区间:包含最大值和最小值的数据取值范围 (1,12) 1<x<12

    1,2,12,13

    闭区间:不包含最大值和最小值的数据取值范围 [1,12] 1<=x<=12

    0,1,12,13

    上点:边界上的点,取值范围的两个端点

    离点:离上点最近的点,在开区间中,离点是取值范围内离上点最近的点;

    在闭区间中,离点是取值范围外离上点最近的点。

    char c;

    for(c=0;c<70000;c++)

    {

    System.out.print(c);

    }

    代码可编译,可运行,结果是死循环,

    ping –l 5000 192.168.0.106 向IP地址为192.168.0.106发送字节数为50000的数据包

    ping –t 5000 192.168.0.106 不间断的向IP地址为192.168.0.106发送字节数为32的数据包

    ping –l 5000 192.168.0.106 -t 不间断的向IP地址为192.168.0.106发送字节数为50000的数据包

    ping IP地址,向该IP地址发送数据包,数据包字节的取值范围为[0,65500]

    端口号,采用短整型,[0,65536]

    数据设计和制造

    数据组合:因果图,正交排列(有较强的局限性)

    掌握原理、目的、操作步骤

    因果图:(质量控制,也称石川图/鱼骨图/树杈图)

    输入的数据(因)

    程序结果(果)

    先分析因果关系

    确定因与因,因与果之间的关系

    用例评审标准:

    1、100%覆盖需求、功能、控件

    2、执行效率,文字说明不够清晰、步骤不严谨

    等价类之间互不相交

    将等价类中的数据进行等价分类,将有效等价类和无效等价类划分出来,再将它们进行组合

    一个应用程序输入项目的个数很多,等价类个数偏多,组合更多,人工成本过大

    因果图基本步骤:

    1、 在程序中梳理输入项目,(再根据输入项目数据的特点)划分等价类(因)

    2、 在程序中梳理得出预期结果(果)

    3、考虑因之间的关系、产生的结果的组合(石川图)

    4、判定驱动法形成判定表、对判定表进行优化(化简)

    5、判定表的每一列即一条测试用例

    解决问题:

    分析数据之间组合产生的不同结果,从而设计测试用例/分析因与因之间的组合产生的不同结果,设计测试用例

    原因为真,结果必为真

    ![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)

    ![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)与(并且):两个原因都为真,结果才为真

    ![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)或:有一个原因为真,结果就为真

    ![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg)非:原因为假,结果为真

    排他性约束:各个原因之间不能同时为真,但可以同时为假

    ![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg)

    在一个复杂的应用程序中,可以局部的使用因果图

    使用因果图的方法写测试用例

    1、 门槛相对较高(需要一定需求分析能力)

    2、 需要较高的熟练度

    3、 成本偏高(规模大、复杂度高)

    正交

    正交测试目标:

    节省工作时间/节省测试用例设计时间,减少人工排列组合的时间

    控制测试用例数量

    具有比较均衡的覆盖率

    优点:

    节省测试用例设计时间,减少人工排列组合的时间

    控制测试用例数量

    具有比较均衡的覆盖率

    特点:均匀分散、齐整可比(概率相同)

    正交表必须满足这两个特点,有一条不满足,就不是正交表:

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

    2、 在任意两列,其横向组成的数字对中,每种数字对出现的次数相等

    因素:考察的变量/被测的输入项/ (外貌、家庭、个人、能力)

    水平:因素被考察的值/输入项中的等价类/控件中的取值范围、等价类(身高、体重、颜值、背景、经济、性格、三观、年龄、经济、生活)

    因素1:水平1、水平2… 每个因素的水平数量相等

    因素1:水平1、水平2…

    ……

    Ln(mk) Ln_k_m

    n:表的行数,需要测试组合的次数/测试用例的数量

    k:表的列数,控件个数/因素的数量

    m:每个控件包含的取值个数/水平的数量

    正交表的表示形式:L行数(水平数因素数)

    L9(34)表示用例数量为9,因素数量为4,每个因素含3个水平

    正交表类型

    1、完全符合正交表(每个因素的水平相同,且符合正交规律)的整齐排列直接套用现成的正交表

    2、部分符合正交表(每个因素的水平相同,但因素或水平无现成的正交表),将因素或水平适当增减向可能的正交表靠拢,如果是减则在正交表基础上适当人工增加用例

    3、非整齐的排列借助正交公式缩减并计算出排列数量,再人工方式在最终的排列数量中按规律排列

    正交表公式:N=(p1-1)q1+(p2-1)q2+…+1

    p:水平的数量

    q:拥有此水平数量的因素个数

    N:最后求出的最后结果数量

    1:校验值

    a:a1 a2

    b:b1 b2

    c:c1 c2 c3

    d:d1 d2 d3

    e:e1 e2 e3 e4 e5 e6

    N=(2-1)2+(3-1)2+(6-1)*1+1=12

    状态图

    数据、操作动作

    状态图的分析使用步骤

    1.   列出被测系统的输入事件
      
    2.   对空闲状态(程序刚启动时的状态)加所有可能的输入,判断产生哪些新状态
      
    3.   对第二步产生的每个新状态分别加所有可能的输入
      
    4.   对第三步产生的每个新状态分别加所有可能的输入
      
    5.   对第四步产生的每个新状态分别加所有可能的输入
      
    6.   直到没有新状态产生
      

    在空闲状态下,单独进行

    第一轮

    1、空闲->ip1->人民币金额已输入

    2、空闲->ip2->国家已选择

    3、空闲->ip3->国家未选择,人民币金额未输入

    4、空闲->ip4->空闲

    5、空闲->ip5->程序结束,退出

    第二轮

    1、人民币金额已输入->ip1->人民币金额已输入

    6、人民币金额已输入->ip2->国家已选择,人民币金额已输入

    7、人民币金额已输入->ip3->国家未选择,人民币金额已输入

    4、人民币金额已输入->ip4->空闲

    5、人民币金额已输入->ip5->程序结束,退出

    第三轮

    6、国家已选择->ip1->国家已选择,人民币金额已输入

    2、国家已选择->ip2->国家已选择

    8、国家已选择->ip3->国家已选择,人民币金额未输入

    4、国家已选择->ip4->空闲

    5、国家已选择->ip5->程序结束,退出

    第四轮

    7、国家未选择,人民币金额未输入->ip1->国家未选择,人民币金额已输入

    6、国家未选择,人民币金额未输入->ip2->国家已选择,人民币金额未输入

    3、国家未选择,人民币金额未输入->ip3->国家未选择,人民币金额未输入

    4、国家未选择,人民币金额未输入->ip4->空闲

    5、国家未选择,人民币金额未输入->ip5->程序结束,退出

    4、国家未选择,人民币金额未输入->ip6->空闲

    第五轮

    6、国家已选择,人民币金额已输入->ip1->国家已选择,人民币金额已输入

    6、国家已选择,人民币金额已输入->ip2->国家已选择,人民币金额已输入

    9、国家已选择,人民币金额已输入->ip3->显示金额

    4、国家已选择,人民币金额已输入->ip4->空闲

    5、国家已选择,人民币金额已输入->ip5->程序结束,退出

    第六轮

    7、国家未选择,人民币金额已输入->ip1->国家未选择,人民币金额已输入

    6、国家未选择,人民币金额已输入->ip2->国家已选择,人民币金额已输入

    7、国家未选择,人民币金额已输入->ip3->国家未选择,人民币金额已输入

    4、国家未选择,人民币金额已输入->ip4->空闲

    5、国家未选择,人民币金额已输入->ip5->程序结束,退出

    7、国家未选择,人民币金额已输入->ip6->国家未选择,人民币金额已输入

    第七轮

    6、国家已选择,人民币金额未输入->ip1->国家已选择,人民币金额已输入

    8、国家已选择,人民币金额未输入->ip2->国家已选择,人民币金额未输入

    8、国家已选择,人民币金额未输入->ip3->国家已选择,人民币金额未输入

    4、国家已选择,人民币金额未输入->ip4->空闲

    5、国家已选择,人民币金额未输入->ip5->程序结束,退出

    7、国家已选择,人民币金额未输入->ip6->国家已选择,人民币金额未输入

    测试点:给出错误提示,点击确定后,能否继续正确的完成操作

    每种状态至少访问一次

    被用户多次使用,常用的模块、状态要多次覆盖

    优点

    能够清晰地看出哪些状态未被覆盖到

    能够清楚的计算出状态覆盖力度

    1、思路清晰,要求我们事先做好设计思路,需求分析

    2、测试用例的概述、测试点要清晰准确

    3、测试步骤简洁,即别人看你的测试用例是,可以清晰地看到第一步做什么,第二步做什么

    4、测试步骤清晰、具体,即不会产生歧义

    5、无冗余即测试用例不要重复,每条用例的测试点要不一样

    6、100%覆盖就是在设计用例时,用户需求、功能、控件都要涉及到

    7、可复用性,即测试用例可反复使用,可执行性高

    1、100%覆盖

    2、预期结果是否确定、唯一

    3、可执行性,语言描述是否清晰、步骤是否严谨

    4、对中间、后台的数据的检查

    正确保存,即数据能够完整、准确的保存到后台,

    冗余:

    在设计上存在等价类的子集相交(你在划分等价类的时候,就存在交集)

    不是为了验证重复性或业务需求,多条用例的数据步骤完全一样

    多条测试用例不能测试出需求、设计或程序或数据的不同类型和方面

    考虑等价类、方法够不够

    1、 需求点100%覆盖

    2、 被测功能点、控件100%覆盖

    3、 必须有正确数据、正确步骤和坑能导致出错的数据、步骤

    4、 有数据值域的必须考虑数据值域覆盖:边界值、等价类

    5、 所有边界值都必须覆盖

    6、 等价类必须包含有效和无效等价类

    7、 所有等价类都必须覆盖(等价类数量过多导致超过测试成本,优先考虑有效等价类,然后根据数据使用频率、机率高低分优先级,高级优先覆盖,同时考虑自动化测试)

    8、 核心功能点必须被覆盖多次()

    9、 测试用例数量要大于功能点的数量

  • 相关阅读:
    .target 和 e.srcElement(事件监听——兼容古代浏览器IE8)
    JS 的引用赋值与传值赋值
    函数 实现计算任意一个数的各个 位数的和
    JS函数实现和递归实现斐波那契数列 || js两种方法实现斐波那契数列
    CSS3中(2D、3D、动画)重点整理
    CSS3与H5的新知识点整理
    css的初级样式整理
    HTML的初级知识汇总
    const 那点事儿
    VS2010 编译 sqlite3 生成动态库和链接库
  • 原文地址:https://www.cnblogs.com/TD1900/p/11755181.html
Copyright © 2011-2022 走看看