1、阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。问题1:(3分) 请针对上述C程序,给出满足100%DC(判定覆盖)所需的逻辑条件。问题2:(7分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。问题3:(3分)请给出【问题2】中控制流图的线性无关路径。
答案:
问题1:答案:
1)、*string && *string !='-';
2)、! (*string && *string !='-');
3)、!*string;
4)、*string;
5)、*string&&*string!=' ' && *string!=' \n' &&*string!='\t';
6)、!(*string&&*string!=' ' && *string!=' \n' &&*string!=' \t');
问题2:答案:
(1)、控制流图如下图所示:
(2)、V(G)=7+1=8
问题3:答案:
1.1、2、5、6、13;
2.1、2、3、5、6、13;
3.1、2、3、4、2、5、6、13;
4.1、2、5、7、12、1. . .
5.1、2、5、7、8、12、1. . .
6.1、2、5、7、8、9、12、1. . .
7.1、2、5、7、8、9、10、12、1. . .
8.1、2、5、7、8、9、10、11、7、12、1. . .
答题解析:
问题1:解析:本小题考查白盒测试用例的设计方法之判定覆盖法。
判定覆盖法:设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。
本题目中共有3个判定,所以满足判定覆盖一共需要6个逻辑条件。这些条件详见上述答案。
问题2:解析:本题考查白盒测试方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。
控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:
其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。
环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度。环路复杂度等于右图中的判定的节点个数加1。图中判定节点个数为7,所以V(G)=7+1=8。
控制流程图的环路复杂性 V(G)一共有以下三种方法,但是最后一种最好用,不易出错。
(1)控制流程图中的区域个数。
(2)边数-结点数+2。
(3)判定数+1。
问题3:解析:本小题考查白盒测试用例设计方法之基本路径法。涉及到根据控制流图和环路复杂度给出线性无关路径。
线性无关路径:指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。
程序的环路复杂度等于线性无关路径的条数,所以本题中有8条线性无关路径。这8条路径组成了问题2中控制流图的一个基本路径集。只要设计出的测试用例能确保这些基本路径的执行,就可以使程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。需要注意的是,基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。
查看完整试题>>>