精华内容
下载资源
问答
  • 逆序对个数(归并排序)
    2020-12-23 17:07:34

    题目描述

    输入 N 组数据,对每组数据输出逆序对个数。

    输入

    对于每组测试用例,第一行输入此组数据元素个数 x,接下来 x 行,每行一个数,表示元素。(1≤x≤500000)(1≤x≤500000)

    当读入的元素个数 x 为零时,程序结束。

    输出

    对于每组测试用例,输出一个数,表示逆序对个数。

    样例输入

    5

    9

    1

    0

    5

    4

    3

    1

    2

    3

    0

    样例输出

    6

    0

    数据规模与约定

    时间限制:1 s

    内存限制:256 M

    100% 的数据保证 1≤x≤500000

    解答:

    逆序对定义:设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 这个有序对称为 A 的一个逆序对,也称作逆序数。

    根据逆序对定义可知,如果寻找一个序列中逆序对的数量相当于寻找一个序列中每个数后面有多少个小于自己的数,将这些数加起来就是最后的答案。

    所以一种暴力的算法就直接出来了,两层for循环,每次取一个数依次和他后面的数进行比较,如果小于这个数,逆序对数加1否则继续向后比较。这也是最暴力的算法,时间复杂度O(n)。

    上述算法只是为了找到每一个数后面有多少个数小于他自己,,其实可以对其进行排序,然后看每一个数进行了多少次交换。对交换的次数进行统计即可得到最后的结果。排序有好多算法,最好的排序算法是快速排序,但他是不稳定的,并不适合这道题,所以我们选择一种稳定,并且相对效率较高的归并排序。下面附上代码。

    #include

    #include

    using namespace std;

    #define MAX_N 500000

    int n, a[MAX_N +5], temp[MAX_N + 5];

    long long num;

    void merge(int begin, int mid, int end)

    {

    int i = begin;

    int j = mid + 1;

    int k = begin;

    while (i <= mid && j <= end)

    {

    if (a[i] > a[j]) {

    temp[k] = a[j];

    k++;

    j++;

    num += mid - i + 1; //对交换的次数进行统计

    } else {

    temp[k] = a[i];

    k++;

    i++;

    }

    }

    while (i <= mid) {

    temp[k] = a[i];

    k++;

    i++;

    }

    while (j <= end) {

    temp[k] = a[j];

    k++;

    j++;

    }

    for (int p = begin; p <= end; p++)

    a[p] = temp[p];

    }

    void mergesort(int begin, int end) { //归并排序

    if (begin >= end)

    return;

    int mid = (begin + end) / 2;

    mergesort(begin, mid);

    mergesort(mid + 1, end);

    merge(begin, mid, end);

    }

    int main()

    {

    while (1) {

    cin >> n;

    if (n == 0) break;

    for (int i = 0; i < n; i++) cin >> a[i];

    num = 0;

    mergesort(0, n - 1);

    cout << num << endl;

    }

    return 0;

    }

    以上就是本题的代码,有什么问题欢迎随时提问。

    更多相关内容
  • 股票类的用例:板块的默认筛选状态为全部板块,下拉选择有全部板块、主板、创业板; 递表状态的默认筛选状态为通过聆讯,下拉选择有通过聆讯和正在处理, 通过聆讯状态时默认以聆讯日期逆序排序,正在处理状态...
  • 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: 等价类是指某个输入...

    一、等价类划分方法

    1.定义
      是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。
       
    2.划分等价类:
      等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。(1)有效等价类

       是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
    (2)无效等价类

       与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。
      设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

    3.划分等价类的标准:
      1)完备测试、避免冗余;
      2)划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
      3)并是整个集合:完备性;
      4)子集互不相交:保证一种形式的无冗余性;
      5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。

    4.划分等价类的方法
     (1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100;

    (2)在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类;
    (3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

    (4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
        例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
      (5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
     (6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

     5.设计测试用例
      在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:
      (1)为每一个等价类规定一个唯一的编号;
      (2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
      (3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

    二、边界值分析方法:

    1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 

    2.与等价划分的区别
    (1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
    (2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

    3.边界值分析方法的考虑:
      长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
      使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

    4.常见的边界值
      1)对16-bit 的整数而言 32767 和 -32768 是边界
      2)屏幕上光标在最左上、最右下位置
      3)报表的第一行和最后一行
      4)数组元素的第一个和最后一个
      5)循环的第 0 次、第 1 次和倒数第 2 次、最后一次

    5.边界值分析
      1)边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
        例:测试计算平方根的函数
            --输入:实数
            --输出:实数
            --规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。

    2)等价类划分:
        I.可以考虑作出如下划分:
          a、输入 (i)<0 和 (ii)>=0
          b、输出 (a)>=0 和 (b) Error
        II.测试用例有两个:
          a、输入4,输出2。对应于 (ii) 和 (a) 。
          b、输入-10,输出0和错误提示。对应于 (i) 和 (b) 。

      3)边界值分析:
        划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:
        a、输入 {最小负实数}
        b、输入 {绝对值很小的负数}
        c、输入 0
        d、输入 {绝对值很小的正数}
        e、输入 {最大正实数}

     4)通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。
      5)相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、  最短/最长、 空/满等情况下。

      6)利用边界值作为测试数据

    边界值

    测试用例的设计思路

    字符

    起始-1个字符/结束+1个字符

    假设一个文本输入区域允许输入1个到255个 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。

    数值

    最小值-1/最大值+1

    假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。

    空间

    小于空余空间一点/大于满空间一点

    例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。

    7)内部边界值分析:
        在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。
        内部边界值条件主要有下面几种:
        a)数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。

    范围或值

    位(bit)

    0或者1

    字节(byte)

    0——225

    字(word)

    0~65535(单字)或 0~4294967295(双字)

    千(K)

    1024

    兆(M)

    1048576

    吉(G)

    1073741824

    b)字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCII和Unicode是常见的编码方式。下表中列出了一些常用字符对应的ASCII码值。

    字符

    ASCII码值

    字符

    ASCII码值

    空 (null)

    0

    A

    65

    空格 (space)

    32

    a

    97

    斜杠 ( / )

    47

    Z

    90

    0

    48

    z

    122

    冒号 ( : )

    58

    单引号 ( ‘ )

    96

    @

    64

    c)其它边界值检验

    6.基于边界值分析方法选择测试用例的原则
      1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
        例如,如果程序的规格说明中规定:"重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……"。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。
      2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
        比如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。
      3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
        例如,某程序的规格说明要求计算出"每月保险金扣除额为0至1165.25元",其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。
        再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括1和4,还应包括0和5等。
      4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
      5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
      6)分析规格说明,找出其它可能的边界条件。

    三、错误推测方法:

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

    2.         错误推测方法的基本思想:

    列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

    1)        例如, 输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。

    2)        例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:

    I.          程序是否把空格作为回答

    II.       在回答记录中混有标准答案记录

    III.     除了标题记录外,还有一些的记录最后一个字符即不是2也不是3

    IV.   有两个学生的学号相同  

    V.        试题数是负数。

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

    I.       输入的线性表为空表;

    II.     表中只含有一个元素;

    III.     输入表中所有元素已排好序;

    IV.     输入表已按逆序排好;

    V.      输入表中部分或全部元素相同。

    四、因果图方法:

    1.定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

    2.因果图法产生的背景:

    等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。

    如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。

    3.因果图介绍

    1) 4种符号分别表示了规格说明中向4种因果关系。

     

    2) 因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。

    3) Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。

    4. 因果图概念

    1)    关系

    ①恒等:若ci是1,则ei也是1;否则ei为0。

    ②非:若ci是1,则ei是0;否则ei是1。

    ③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。

    ④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。

    2)    约束

    输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。

     

    A.输入条件的约束有以下4类:

       ① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。

       ② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。

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

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

    B.输出条件约束类型

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

    5. 采用因果图法设计测试用例的步骤:

    1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。

    2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。

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

    4)把因果图转换为判定表。

    5)把判定表的每一列拿出来作为依据,设计测试用例。

    五、判定表驱动分析方法:

    1.定义:判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。

    2.判定表的优点

    能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。

    在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。

     3.“阅读指南”判定表

     

     4.  判定表通常由四个部分组成如下图所示。

    1)条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。

    2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。

    3)条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。

    4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

    5.规则及规则合并

    1)规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。

    2)化简:就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。

    6.规则及规则合并举例

    1)如下图左端,两规则动作项一样,条件项类似,在1、2条件项分别取Y、N时,无论条件3取何值,都执行同一操作。即要执行的动作与条件3无关。于是可合并。“-”表示与取值无关。

     2)与上类似,下图中,无关条件项“-”可包含其他条件项取值,具有相同动作的规则可合并。

    3)化简后的读书指南判定表

    1

    2

    3

    4

    你觉得疲倦吗?

    -

    -

    Y

    N

    你对内容感兴趣吗?

    Y

    Y

    N

    N

    书中内容使你胡涂吗?

    Y

    N

    -

    -

     

    请回到本章开头重读

    x

    继续读下去

    X

    跳到下一章去读

    x

    停止阅读,请休息

    x

    7.判定表的建立步骤:(根据软件规格说明)

    1)确定规则的个数.假如有n个条件。每个条件有两个取值(0,1),故有2n种规则。

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

    3)填入条件项。

    4)填入动作项。等到初始判定表。

    5)简化.合并相似规则(相同动作)。

    六、正交实验设计方法:

    利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地,合理地减少测试的工时与费用,可利用正交实验设计方法进行测试用例的设计。

    正交实验设计方法:依据Galois理论,从大量的(实验)数据(测试例)中挑选适量的,有代表性的点(例),从而合理地安排实验(测试)的一种科学实验设计方法.类似的方法有:聚类分析方法,因子方法方法等.

    利用正交实验设计测试用例的步骤:

    1.提取功能说明,构造因子--状态表

    把影响实验指标的条件称为因子.而影响实验因子的条件叫因子的状态.利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态.对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求.这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据.确定因子与状态是设计测试用例的关键.因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。

    2.加权筛选,生成因素分析表

    对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。

    3.利用正交表构造测试数据集

    正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。

    利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。

    七、功能图分析方法:

    一个程序的功能说明通常由动态说明和静态说明组成.动态说明描述了输入数据的次序或转移的次序.静态说明描述了输入条件与输出条件之间的对应关系.对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的.必须用动态说明来补充功能说明.功能图方法是用功能图FD形式化地表示程序的功能说明,并机械地生成功能图的测试用例. 功能图模型由状态迁移图和逻辑功能模型构成.状态迁移图用于表示输入数据序列以及相应的输出数据.在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态.逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系.逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定.测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成.功能图方法其实是是一种黑盒白盒混合用例设计方法。

    (功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,其属白盒测试方法中 的内容.逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法.该方法要求测试人员对程序的逻辑结构有清楚的了解.由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖.下面我们指的逻辑覆盖和路径是功能或系统水平上的,以区别与白盒测试中的程序内部的.)

    1.功能图

    功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳机ATM的功能图。

    2.测试用例生成方法

    从功能图生成测试用例,得到的测试用例数是可接受的. 问题的关键的是如何从状态迁移图中选取测试用例. 若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式.问题就转化为程序的路径测试问题(如白盒测试)问题了.

    3.测试用例生成规则

    为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则.在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复.但分辨一个状态迁移中的所有循环是有困难的.(其表示图形省略)。

    4.从功能图生成测试用例的过程

    1)生成局部测试用例:在每个状态中,从因果图生成局部测试用例.局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。

    2)测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。

    3)测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例.结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。

    5.测试用例的合成算法:采用条件构造树.

    八、场景设计法:

    现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。

    基本流和备选流:如下图所示,图中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单的路径。备选流用不同的色彩表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流1和3);也可能起源于另一个备选流(如备选流2),或者终止用例而不再重新加入到某个流(如备选流2和4)。

    九、测试用例设计综合策略:

    1. Myers提出了使用各种测试方法的综合策略:

    1)在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强。 【文章来源:文斯测试技术研究中心

    2)必要时用等价类划分方法补充一些测试用例。

    3)用错误推测法再追加一些测试用例。

    4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例。

    5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。

    2.测试用例的设计步骤 【文章来源:文斯测试技术研究中心

    1)构造根据设计规格得出的基本功能测试用例;

    2)边界值测试用例;

    3)状态转换测试用例;

    4)错误猜测测试用例;

    5)异常测试用例; 【文章来源:文斯测试技术研究中心

    6)性能测试用例;

    7)压力测试用例。

    3.优化测试用例的方法

    1)利用设计测试用例的8种方法不断的对测试用例进行分解与合并;

    2)采用遗传算法理论进化测试用例;

    3)在测试时利用发散思维构造测试用例。

    展开全文
  • 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求...

    简介:

    黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用墨盒测试方法是发现不了的。黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误:

    1.功能不正确或遗漏界面错误;

    2.数据库访问错误;

    3.性能错误;

    4.初始化和终止错误等。

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

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

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

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

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

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

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

    f.功能图法是由状态迁移图和布尔函数组成,状态迁移图用状态和迁移来表示。一个状态指出数据输入的位置(或时间),一个迁移指明状态的改变,同时要依靠判定表或因果图表示的逻辑功能。

    I等价类方法

    1.定义
      是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。   
    2.划分等价类
      等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。
      1)有效等价类
        是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
      2)无效等价类
        与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。
      设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。  
    3.划分等价类的标准
      1)完备测试、避免冗余;
      2)划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
      3)并是整个集合:完备性;
      4)子集互不相交:保证一种形式的无冗余性;
      5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。

    4.划分等价类的方法
      1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100;

     

      2)在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类;
      3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
      4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
        例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
      5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
      6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

    5.设计测试用例
      在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:
      1)为每一个等价类规定一个唯一的编号;
      2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
      3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

    II边界值分析方法

    方法简介
    1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 

    2.与等价划分的区别
      1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
      2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

    3.边界值分析方法的考虑:
      长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
      使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

    4.常见的边界值
      1)对16-bit 的整数而言 32767 和 -32768 是边界
      2)屏幕上光标在最左上、最右下位置
      3)报表的第一行和最后一行
      4)数组元素的第一个和最后一个
      5)循环的第 0 次、第 1 次和倒数第 2 次、最后一次

    5.边界值分析
      1)边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
        例:测试计算平方根的函数
            --输入:实数
            --输出:实数
            --规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。
           
      2)等价类划分:
        I.可以考虑作出如下划分:
          a、输入 (i)<0 和 (ii)>=0
          b、输出 (a)>=0 和 (b) Error
        II.测试用例有两个:
          a、输入4,输出2。对应于 (ii) 和 (a) 。
          b、输入-10,输出0和错误提示。对应于 (i) 和 (b) 。

      3)边界值分析:
        划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:
        a、输入 {最小负实数}
        b、输入 {绝对值很小的负数}
        c、输入 0
        d、输入 {绝对值很小的正数}
        e、输入 {最大正实数}
       
      4)通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。
      5)相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、  最短/最长、 空/满等情况下。
      6)利用边界值作为测试数据

    边界值

    测试用例的设计思路

    字符

    起始-1个字符/结束+1个字符

    假设一个文本输入区域允许输入1个到255个 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。

    数值

    最小值-1/最大值+1

    假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。

    空间

    小于空余空间一点/大于满空间一点

    例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。


      7)内部边界值分析:
        在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。
        内部边界值条件主要有下面几种:
        a)数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。

    范围或值

    位(bit)

    0 或 1

    字节(byte)

    0 ~ 255

    字(word)

    0~65535(单字)或 0~4294967295(双字)

    千(K)

    1024

    兆(M)

    1048576

    吉(G)

    1073741824

        b)字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCII和Unicode是常见的编码方式。下表中列出了一些常用字符对应的ASCII码值。

    字符

    ASCII码值

    字符

    ASCII码值

    空 (null)

    0

    A

    65

    空格 (space)

    32

    a

    97

    斜杠 ( / )

    47

    Z

    90

    0

    48

    z

    122

    冒号 ( : )

    58

    单引号 ( ‘ )

    96

    @

    64


        c)其它边界值检验
       
    6.基于边界值分析方法选择测试用例的原则
      1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
        例如,如果程序的规格说明中规定:"重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……"。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。
      2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
        比如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。
      3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
        例如,某程序的规格说明要求计算出"每月保险金扣除额为0至1165.25元",其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。
        再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括1和4,还应包括0和5等。
      4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
      5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
      6)分析规格说明,找出其它可能的边界条件。

    错误推测法

    方法简介

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

    2.错误推测方法的基本思想:

    列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

    1)        例如, 输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。

    2)        例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:

    1. 程序是否把空格作为回答
    2. 在回答记录中混有标准答案记录

    III.     除了标题记录外,还有一些的记录最后一个字符即不是2也不是3

    1. 有两个学生的学号相同
    2. 试题数是负数。

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

    1. 输入的线性表为空表;
    2. 表中只含有一个元素;

    III.     输入表中所有元素已排好序;

    1. 输入表已按逆序排好;
    2. 输入表中部分或全部元素相同。

    Ⅳ 因果图法

    方法简介

    1.定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

    2.因果图法产生的背景:

    等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。

    如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。

    3.因果图介绍

    1) 4种符号分别表示了规格说明中的4种因果关系。

     

    2) 因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。

    3) Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。

    4.因果图概念

    1)    关系

    ①恒等:若ci是1,则ei也是1;否则ei为0。

    ②非:若ci是1,则ei是0;否则ei是1。

    ③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。

    ④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。

    2)    约束

    输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。

    A.输入条件的约束有以下4类:

       ① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。

       ② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。

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

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

    B.输出条件约束类型

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

    5.采用因果图法设计测试用例的步骤:

    1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。

    2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。

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

    4)把因果图转换为判定表。

    5)把判定表的每一列拿出来作为依据,设计测试用例。

    Ⅴ 判定表驱动分析法

    方法简介

    1.定义:判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。

    2.判定表的优点

    能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。

    在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。

    3.“阅读指南”判定表

    1

    2

    3

    4

    5

    6

    7

    8

    问题

    觉得疲倦?

    Y

    Y

    Y

    Y

    N

    N

    N

    N

    感兴趣吗?

    Y

    Y

    N

    N

    Y

    Y

    N

    N

    糊涂吗?

    Y

    N

    Y

    N

    Y

    N

    Y

    N

    建议

    重读

    继续

    跳下一章

    休息

    4.判定表通常由四个部分组成如下图所示。

     1)条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。

    2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。

    3)条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。

    4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

    5.规则及规则合并

    1)规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。

    2)化简:就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。

    6.规则及规则合并举例

    1)如下图左端,两规则动作项一样,条件项类似,在1、2条件项分别取Y、N时,无论条件3取何值,都执行同一操作。即要执行的动作与条件3无关。于是可合并。“-”表示与取值无关。

     2)与上类似,下图中,无关条件项“-”可包含其他条件项取值,具有相同动作的规则可合并。

     3)化简后的读书指南判定表

    1

    2

    3

    4

    你觉得疲倦吗?

    -

    -

    Y

    N

    你对内容感兴趣吗?

    Y

    Y

    N

    N

    书中内容使你胡涂吗?

    Y

    N

    -

    -

     

    请回到本章开头重读

    x

    继续读下去

    X

    跳到下一章去读

    x

    停止阅读,请休息

    x

    7.判定表的建立步骤:(根据软件规格说明)

    1)确定规则的个数.假如有n个条件。每个条件有两个取值(0,1),故有2n种规则。

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

    3)填入条件项。

    4)填入动作项。等到初始判定表。

    5)简化.合并相似规则(相同动作)。

    Ⅵ 正交法

    方法简介

    利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地,合理地减少测试的工时与费用,可利用正交实验设计方法进行测试用例的设计。

    正交实验设计方法:依据Galois理论,从大量的(实验)数据(测试例)中挑选适量的,有代表性的点(例),从而合理地安排实验(测试)的一种科学实验设计方法.类似的方法有:聚类分析方法,因子方法方法等.

    利用正交实验设计测试用例的步骤:

    1.提取功能说明,构造因子--状态表

    把影响实验指标的条件称为因子.而影响实验因子的条件叫因子的状态.利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态.对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求.这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据.确定因子与状态是设计测试用例的关键.因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。

    2.加权筛选,生成因素分析表

    对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。

    3.利用正交表构造测试数据集

    正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。

    利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。

    Ⅶ  功能图

    方法简介

    一个程序的功能说明通常由动态说明和静态说明组成.动态说明描述了输入数据的次序或转移的次序.静态说明描述了输入条件与输出条件之间的对应关系.对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的.必须用动态说明来补充功能说明.功能图方法是用功能图FD形式化地表示程序的功能说明,并机械地生成功能图的测试用例. 功能图模型由状态迁移图和逻辑功能模型构成.状态迁移图用于表示输入数据序列以及相应的输出数据.在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态.逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系.逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定.测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成.功能图方法其实是是一种黑盒白盒混合用例设计方法。

    (功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,其属白盒测试方法中 的内容.逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法.该方法要求测试人员对程序的逻辑结构有清楚的了解.由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖.下面我们指的逻辑覆盖和路径是功能或系统水平上的,以区别与白盒测试中的程序内部的.)

    1.功能图

    功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳机ATM的功能图。

    2.测试用例生成方法

    从功能图生成测试用例,得到的测试用例数是可接受的. 问题的关键的是如何从状态迁移图中选取测试用例. 若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式.问题就转化为程序的路径测试问题(如白盒测试)问题了.

    3.测试用例生成规则

    为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则.在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复.但分辨一个状态迁移中的所有循环是有困难的.(其表示图形省略)。

    4.从功能图生成测试用例的过程

    1)生成局部测试用例:在每个状态中,从因果图生成局部测试用例.局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。

    2)测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。

    3)测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例.结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。

    5.测试用例的合成算法:采用条件构造树.

    Ⅷ 场景设计方法

    方法简介

    现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。

    基本流和备选流:如下图所示,图中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单的路径。备选流用不同的色彩表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流1和3);也可能起源于另一个备选流(如备选流2),或者终止用例而不再重新加入到某个流(如备选流2和4)。

     

    Ⅸ  综合策略

    1.Myers提出了使用各种测试方法的综合策略:

    1)在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强。 

    2)必要时用等价类划分方法补充一些测试用例。

    3)用错误推测法再追加一些测试用例。

    4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例。

    5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。

    2.测试用例的设计步骤

    1)构造根据设计规格得出的基本功能测试用例;

    2)边界值测试用例;

    3)状态转换测试用例;

    4)错误猜测测试用例;

    5)异常测试用例; 

    6)性能测试用例;

    7)压力测试用例。

    3.优化测试用例的方法

    1)利用设计测试用例的8种方法不断的对测试用例进行分解与合并;

    2)采用遗传算法理论进化测试用例;

    3)在测试时利用发散思维构造测试用例。

     

    展开全文
  • 软件测试——测试用例的编写

    千次阅读 2020-07-17 16:34:07
    测试用例要素构成 用例ID 字符和数字组合成的字符串,用例编号应具有唯一性、易识别 系统测试 产品编号-ST-系统测试项名-系统测试子项名-XXX 集成测试 产品编号-IT-集成测试项名-集成测试子项名-XXX 单元测试 ...

    测试用例要素构成

    • 用例ID

    字符和数字组合成的字符串,用例编号应具有唯一性、易识别

    系统测试

    产品编号-ST-系统测试项名-系统测试子项名-XXX

    集成测试

    产品编号-IT-集成测试项名-集成测试子项名-XXX

    单元测试

    产品编号-UT-单元测试项名-单元测试子项名-XXX

    • 用例标题

    简单描述,需要用概括的语言描述用例的出发点和关注点,原则上每个用例的标题不能重复

    • 所属项目

    当前测试用例所在测试大类、被测试需求、被测模块、被测单元等

    系统测试用例测试项目

    软件需求项

    集成测试用例测试项目

    集成后的模块名或接口名

    单元测试用例测试项目

    被测函数名

    • 用例优先级

    对基本和普通测试项的区分

    高级别

    保证系统基本功能、核心业务、重要特性、实际使用频率比较高的用例

    中级别

    重要程度介于高和低之间的测试用例

    低级别

    实际使用的频率不高,对系统业务功能影响不大的模块或功能的测试用例

    • 预置条件

    执行当前测试用例需要的前提条件,如果这些前提条件不满足,则后面测试步骤无法进行或无法得到 预期结果

    • 测试数据

    用例执行过程中需要加工的外部信息。根据软件测试用例的具体情况,有手工输入、文件、数据库记录等

    • 执行步骤

    执行当前测试用例需要经过的操作步骤,需要明确的给出一个步骤的描述,测试用例执行人员可以根据该步骤完成测试用例执行

    • 预期结果

    当前测试用例的预期输出结果,包括返回值内容,界面的响应结果,输出结果的规则符合度等

    测试用例额外的要素

    • 用例设计者

    能准确的找到测试用例设计人员,对用例修改时能方便找准人员

    • 用例设计日期

    方便检查用例设计的进度

    • 用例版本号

    方便用例设计人员对用例的跟踪

    •  对应的开发人员

    出现BUG后能及时找到相应的人员进行修复

    测试用例的设计

    设计的方法:

    • 等价类

    等价类划分可有两种不同的情况:有效等价类和无效等价类。
      1)有效等价类
        是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
      2)无效等价类
        与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。

    • 边界值

    边界值分析方法的考虑:
      长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
      使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

    • 因果图

    采用因果图法设计测试用例的步骤:

    1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。

    2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。

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

    4)把因果图转换为判定表。

    5)把判定表的每一列拿出来作为依据,设计测试用例。

    • 判定表

    能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。

    在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。

    判定表通常由四个部分组成如下图所示。

    1)条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。

    2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。

    3)条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。

    4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

    • 正交法

    利用正交实验设计测试用例的步骤:

    1.提取功能说明,构造因子--状态表

    把影响实验指标的条件称为因子.而影响实验因子的条件叫因子的状态.利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态.对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求.这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据.确定因子与状态是设计测试用例的关键.因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。

    2.加权筛选,生成因素分析表

    对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。

    3.利用正交表构造测试数据集

    正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。

    利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。

    • 流程图法
    • 错误推测

     错误推测方法的基本思想:

    列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

    1)        例如, 输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。

    2)        例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:

    I.         程序是否把空格作为回答

    II.       在回答记录中混有标准答案记录

    III.     除了标题记录外,还有一些的记录最后一个字符即不是2也不是3

    IV.     有两个学生的学号相同

    V.        试题数是负数。

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

    I.         输入的线性表为空表;

    II.       表中只含有一个元素;

    III.     输入表中所有元素已排好序;

    IV.     输入表已按逆序排好;

    V.        输入表中部分或全部元素相同。

    • 状态迁移

    如何设计测试用例(要具体结合我们需求说明书)

    根据产品需求说明书使用xmind画出测试用例思维导图

    其中核心业务是根据下列的业务流程图画出的

     

     

    根据测试用例思维导图设计出测试用例:

    编号用例标题所属项目优先级预置条件测试数据执行步骤预期结果执行结果
    导航区  
    1主页导航标题显示Egop2网络正常1、通过微信扫码进入小程序
    2、查看微信Ego小程序主页Android导航标题显示
    3、查看微信Ego小程序主页iOS导航标题显示
    2、导航标题"Ego微商"显示居左
    3、导航标题"Ego微商"显示居中
     
    2主页进入下一级页面导航显示Egop2网络正常1、通过微信扫码进入小程序
    2、点击轮播图进入商品详情页,查看导航显示
    导航标题显示"商品详情",左侧有返回按钮"<" 
    3主页进入下级页面也返回Egop2网络正常1、通过微信扫码进入小程序
    2、进入下级页面点击导航返回按钮能返回到上级页面
    2、能够返回到上级页面 
    4主页进入多级页面可返回Egop2网络正常1、通过微信扫码进入小程序
    2、通过主页进入专题在进入商品详情进行逐级返回
    能够逐级返回到主页 
    5主页转发Egop2网络正常1、通过微信扫码进入小程序
    2、进入主页导航右侧内嵌按钮转发
    2、能够转发成功到其他微信用户
    3、能够转发成功到微信朋友圈
     
    6主页转发结果验证Egop2网络正常1、通过微信扫码进入小程序
    2、查看是否能够直接打开对应小程序
    2、能够成功打开进入小程序对应页面 
    展示区  
    Ego-show_001主页轮播图显示与后台传送的信息是否一致Egop2网络正常1张1、通过工具在服务器端传轮播图
    2、进入小程序主页,查看轮播图显示信息是否和上传的一致
    和后台上传的一致 
    Ego-show_002主页轮播图单张图片轮播Egop2网络正常1张1、通过工具在服务器端传轮播图数量为一张
    2、进入小程序主页
    3、插卡轮播图是否轮播
    单张图片不轮播 
    Ego-show_003主页轮播图显示与后台传送的信息是否一致Egop2网络正常5张1、通过工具在服务器端传轮播图
    2、进入小程序主页,查看轮播图显示信息是否和上传的一致
    和后台上传的一致 
    Ego-show_004主页轮播图显示与后台传送的信息是否一致Egop2网络正常6张1、通过工具在服务器端传轮播图
    2、进入小程序主页,查看轮播图显示信息是否和上传的一致
    显示5张 
    Ego-show_005主要轮播图的轮播方式Egop21、网络正常
    2、轮播图片多于一张
    1、进入Ego微商小程序主页
    2、查看轮播图轮播方式
    按指定频率进行循环轮播 
    Ego-show_006主要轮播图的轮播频率Egop21、网络正常
    2、轮播图片多于一张
    1、进入Ego微商小程序主页
    2、查看轮播图轮播频率
    5秒轮播一张图片 
    Ego-show_007主页当前轮播图的状态Egop21、网络正常
    2、轮播图片多于一张
    1、进入Ego微商小程序主页
    2、查看当前轮播图对应状态
    当前轮播图对应显示黑色实心点 
    Ego-show_008主页非当前轮播图的状态Egop21、网络正常
    2、轮播图片多于一张
    1、进入Ego微商小程序主页
    2、查看非当前轮播图对应状态
    当前轮播图对应显示灰色实心点 
    Ego-show_009主页轮播图滑动操作Egop31、网络正常
    2、轮播图片多于一张
    1、进入Ego微商小程序主页
    2、主页存在多张轮播图
    3、通过手指向左滑动
    4、通过手指向右滑动
    3、能够切换下一张轮播图片
    4、能够切换上一张轮播图片
     
    Ego-show_010主页轮播图点击操作Egop4网络正常1、进入Ego微商小程序主页
    2、主页存在多张轮播图
    2、点击其中一张轮播图
    3、进入轮播图对应详情页面能否返回
    3、能够进入当前轮播图对应的商品详情页面
    4、进入轮播图对应的详情页面能够返回到主页
     
    核心业务  
    Ego-Business-01库存不足,下单失败Egop1网络正常1、打开小程序
    2、选中商品添加购物车进行下单
    3、在订单详情点击去付款操作
    3、提示库存不足,未生成订单 
    Ego-Business-02下单成功,未完成支付Egop1网络正常1、打开小程序
    2、选中商品添加购物车进行下单
    3、在订单详情点击去付款操作
    4、进入我的查看订单状态
    3、能够呼起微信支付操作
    4、显示订单编号及订单状态信息待付款
     
    Ego-Business-03下单成功,支付失败Egop1网络正常1、打开小程序
    2、选中商品添加购物车进行下单
    3、在订单详情点击去付款操作,结果付款失败,查看订单详情
    3、订单状态显示"待付款"状态 
    Ego-Business-04下单成功,支付成功Egop1网络正常1、打开小程序
    2、选中商品添加购物车进行下单
    3、在订单详情点击去付款操作,结果付款成功
    4、点击我的查看付款状态
    4、订单状态显示"已付款"状态 
    展开全文
  • 测试用例设计——软件测试基础
  • 功能测试_测试用例设计方法

    千次阅读 2021-01-21 16:09:17
    是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: 等价类是指某个输入域...
  • 测试用例设计方法

    2019-11-13 19:09:51
    黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景图法等。 (一)等价类划分法 定义:等价类划分法是把所有可能输入的数据,即程序的...
  • 软件测试-测试用例的经典例子

    万次阅读 多人点赞 2018-05-22 16:03:09
    输入三个整数 a、 b、 c分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般...用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复...
  • 很齐全的测试用例设计方法

    千次阅读 2020-05-08 15:25:29
    是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: 等价类是指某个输入...
  • 黑盒 测试用例设计方法

    千次阅读 2019-11-14 09:51:51
    黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。 等价类划分法 概念 等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个...
  • 我们以数组{7,5,6,4}为例来分析统计逆序对的过程。每次扫描到一个数字的时候,我们不拿ta和后面的每一个数字作比较,否则时间复杂度就是O(n^2),因此我们可以考虑先比较两个相邻的数字。我的算法编译提示错误,但我...
  • 【测试】黑盒测试用例设计方法

    万次阅读 多人点赞 2019-06-03 13:27:39
    黑盒测试用例设计方法包括: 1、等价类划分法、 2、边界值分析法、 3、错误推测法、 4、因果图法、 5、判定表驱动法、 6、正交试验设计法、 7、功能图法、 8、场景法等。 9、状态迁移法 10、流程分析法 ...
  • 软件测试必备技能之用例设计 学会这个技能,让你测试点覆盖的更加全面
  • 黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景图法等。 (一)等价类划分法 定义:等价类划分法是把所有可能输入的数据,即程序的...
  • 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: ...
  • 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的、常用的黑盒测试用例设计方法。 (2)划分等价类: 等价类是指某个...
  • 一个测试用例占一行,第一个整数表示数组的长度,后面紧跟者数组中的各个整数元素,中间都用一个空格分开。 数组的长度范围 每个数字A[i]的范围为 【输出形式】 输出一个整数,表示逆序对的个数。 【样例输入】...
  • 测试用例 int arr[5] = {5,3,1,6,2}; 用整型数组作为容器,5可以由里面的元素进行改变。这样防止手动输入浪费编程可视化效果时间。 源码附上 #include typedef int ElementType; void Print_Array(ElementType A[],...
  • 测试用例设计方法与举例说明

    千次阅读 2019-03-05 13:28:00
    黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景图法等。 (一)等价类划分法 定义:等价类划分法是把所有可能输入的数据,即程序的...
  • 如果软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导, 帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来, 又或者已经工作但是经常觉得难点很多,觉得自己...
  • 软件测试用例设计方法(一)

    万次阅读 多人点赞 2019-05-31 23:23:06
    测试用例设计方法,等价类划分法,边界值分析法,错误推测法,因果图法,判定表驱动法,三角形问题用例设计
  • 【黑盒测试用例设计】测试方法之错误值猜测法 原理:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。 基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据...
  • 黑盒测试用例设计 一

    千次阅读 2018-09-20 15:21:53
    简介: 总结黑盒测试用例的常用设计方法 等价类划分 一、方法简介 1.定义 把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例 2.划分等价类...
  • 于是便自己写了一个测试用例来展示vector各个函数的用法。写完了一下之后果然是对于vector的用法感到更加熟练了呢! 接下来贴上这段代码,希望初学vector的小伙伴有所帮助。(不过还是希望大家能自己动手多写
  • 测试用例编写方案

    千次阅读 2018-05-28 08:32:25
    测试用例的设计方法(全)等价类划分方法:一.方法简介1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,684
精华内容 1,473
关键字:

逆序对测试用例