美文网首页
软件评测师写作专栏之白盒测试用例设计08

软件评测师写作专栏之白盒测试用例设计08

作者: 昊洋_写作的匠心 | 来源:发表于2020-08-12 17:26 被阅读0次

    各位学员大家好,大家在做软件评测师下午场白盒测试用例设计的大题时,有很多学员说不会画控制流图,搞不清楚线性无关路径是怎么回事。为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!

    例题:阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。

    1、请对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。

    2、请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。

    3、请给出问题2中控制流图的线性无关路径。

    【昊洋详解】:

    1、本题考查白盒测试用例的设计方法中的判定覆盖法。

    判定覆盖法:设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。

    我们在上述程序中先看带标号的行,这些基本上是我们要重点关注的程序代码行,其中本程序中共有6个判定,而判定覆盖法需要使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,所以满足判定覆盖一共需要6*2=12个逻辑条件。程序中的判断条件本身先写上,然后把其相反的表达式再列举一次即可,如下所示:

    1、buf_len > 512;                             

    2、buf_len <= 512;

    3、buf_len == 0;                               

    4、buf_len != 0;

    5、i < total_bytes;                            

    6、i >= total_bytes;

    7、buf_c[i] == ‘\0’;                      

    8、buf_c[i] != ‘\0’;

    9、buf_c[i] < 7 || buf_c[i] > 14;     

    10、buf_c[i] >= 7 && buf_c[i] <= 14;

    11、i >= 32;                                    

    12、i < 32;

    2、本小题考查白盒测试用例设计方法中的基本路径法。涉及到的知识点是根据代码绘制控制流图和环路复杂度的计算。

    控制流图:描述程序控制流的一种图示方式,由节点和定向边构成。节点代表一个基本块,定向边代表控制流的方向。基本结构如下图所示:

    其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要将复合条件的判断拆解为为一系列单个条件的嵌套的判断。例如本题目中的符合条件buf_c[i] < 7 || buf_c[i] > 14,在画控制流图和计算环路复杂度的时候急需要拆解为buf_c[i] < 7和buf_c[i] > 14两个条件。

    我们在画控制流图的时候,只需要把程序中带标号的逻辑关系描述清楚即可,其他的不带标号的关系不必在图示中表示。画控制流图最重要的就是梳理好各个语句之间的逻辑关系,是嵌套判断?还是并列的关系?只要搞清楚他们之间的逻辑关系,那么控制流图就“跃然纸上”了。

    本题的程序中,我们首先看一下标号1,2,3的程序语句,这是一个简单的条件表达式,基本的形式为:a?b:c。如果a为真,则表达式值为b,如果a为假,则表达式值为c。

    再往后是标号4 的程序语句,无论上面最后执行的是语句2还是3,他们最后都会流向4,然后判定语句4如果满足,就执行语句5,然后直接结束,到语句13。如果判定语句4不满足,则执行else中的语句6,如果for循环中的判定语句不满足,直接跳转到语句13,结束。

    如果for循环中的判定语句满足,则继续执行语句7,继续判定,如果满足则执行语句8,由于语句8下面有个break语句,表示跳出循环,所以也会跳转到语句13,结束。如果判定语句7不满足,则执行下一个else中的符合判定语句9和10,此时需要把这个复合语句拆成2个单独的判定,他们之间的关系是或者,所以其中只要有一个判定语句满足了,都会跳转到语句11。如果复合判定语句都不满足,则重新跳转到for循环语句中,继续执行判定语句6。

    如果复合判定语句中有任意一个满足,则执行下一个判定语句11,如果不满足,则重新跳转到for循环语句中,继续执行判定语句6。如果满足则执行语句12 ,由于语句12下面也有个break语句,表示跳出循环,所以也会跳转到语句13,结束。

    根据以上的描述,可以得出本题中的控制流图,只需要把逻辑关系表示清楚即可,画出的样子可能根据标号的位置不同而变化,但是逻辑关系是不变的,本题给出的参考答案如下图所示:

    环路复杂度:用来衡量一个程序模块所包含的判定结构的复杂程度。

    控制流程图的环路复杂度 V(G)一共有以下三种计算方法,但是最后一种最好用,不易出错。

    (1)控制流程图中的区域个数。

    (2)边数-结点数+2。

    (3)判定节点数+1。

    环路复杂度等于控制流图中判定节点的个数加1,本题目中控制流图的判定节点是7,所以环路复杂度V(G)=7+1=8。

    3、本小题同样是考查白盒测试用例设计方法中的基本路径法。涉及到根据控制流图和环路复杂度给出线性无关路径。

    线性无关路径:指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。

    程序的环路复杂度等于线性无关路径的条数,所以本题中有8条线性无关路径。这8条路径组成了问题2中控制流图的一个基本路径集。只要设计出的测试用例能确保这些基本路径的执行,就可以使程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。需要注意的是,基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。我们给出如下的一组基本路径集作为参考答案:

    (1)、1-2-4-5-13;                        

    (2)、1-3-4-5-13;          

    (3)、1-2-4-6-13;                        

    (4)、1-2-4-6-7-8-13;                                   

    (5)、1-2-4-6-7-9-11-12-13;      

    (6)、1-2-4-6-7-9-10-11-12-13;

    (7)、1-2-4-6-7-9-10-6…          

    (8)、 1-2-4-6-7-9-11-6…

    巩固练习题

    (1)阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。

    1、请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。

    2、请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。

    3、请给出问题2中控制流图的线性无关路径。

    练习题参考答案

    (1)1、本小题考查白盒测试用例的设计方法之判定覆盖法。

    判定覆盖法:设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。

    本题目中共有3个判定,所以满足判定覆盖一共需要6个逻辑条件。如下所示:

    1)、i<ncycle;

    2)、i>=ncycle;

    3)、j<cyclelen;

    4)、j>=cyclelen;

    5)、pos>=panonopt_end;

    6)、pos<panonopt_end;

    2、解析:本小题考查白盒测试用例设计方法之基本路径法。涉及到根据代码绘制控制流图和环路复杂度的计算。

    控制流图:描述程序控制流的一种图示方式,由节点和定向边构成。节点代表一个基本块,定向边代表控制流的方向。本题根据程序之间的逻辑关系画出的控制流图如下图所示:

    环路复杂度等于控制流图中判定节点的个数加1,本题目中控制流图的判定节点是3,所以环路复杂度V(G)=3+1=4。

    3、解析:本小题同样是考查白盒测试用例设计方法之基本路径法。涉及到根据控制流图和环路复杂度给出线性无关路径。

    线性无关路径:指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。

    程序的环路复杂度等于线性无关路径的条数,所以本题中有4条线性无关路径。如下所示:

    1)、1、2、8

    2)、1、2、3、4、2…

    3)、1、2、3、4、5、6、4…

    4)、1、2、3、4、5、7、4…

    作者唯一官方个人微信公众号(昊洋与你一起成长):HYJY20180101

    写于2020年8月12日

    作者:昊洋讲师

    版权所有,侵权必究

    相关文章

      网友评论

          本文标题:软件评测师写作专栏之白盒测试用例设计08

          本文链接:https://www.haomeiwen.com/subject/dxjmdktx.html