阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。
【C程序】
int count(int x,int z){ int y=0; while(x>0){//l if(x==1)//2 y=7//3 else{//4 Y=x+z+4; If(y=7||y=21)//5,6 x=1;//7 } X--;//8 } return y;//9 }【问题1】(3分)
请针对上述C程序给出满足1006%DC(判定覆盖)所需的逻辑条件。
【问题2】(7分)
请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
【问题3】(5分)
请给出问题2中控制流图的线性无关路径。
【分析】
【问题1】
本问题考查白盒测师用例设计方法中的判定覆盖法。
判定覆盖指设计足够的测师用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有3个判定,所以满足判定覆盖一共需要6个逻辑条件。
编号条件1x>02x<=03x==1
4x>o&&x!=15x>o&&x!=1&&(y==7||y==21) x>o&&x!=1&&(y!=7&&y!=21)【问题2】
本问题考查白盒测试用例设计方法中的基本路径测试法。涉及的知识点包括根据代码绘制流图、计算环路复杂度。
控制流图使描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列单个条件的嵌套的判断。本题程序中,if(y==7||y==21)这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。需要注意的是,复合条件之间是“&&”的关系还是“||”的关系反应在控制流图的画法是不同的。
程序的环路复杂度等于控制流图中判定节点的个数加1,本题控制流图中判定节点个数为4,所以V(G)=5。
【问题3】
考查白盒测试用例设计方法中的基本路径法。涉及的知识点包括:根据控制流图和环路复杂度给出线性无关路径。
线性无关路径是指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包括一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数,所以本题应该有5条线性无关路径。
11-921-2-3-8-1...31-2-4-5-7-8-1...41-2-4-5-6-7-8-1...51-2-4-5-6-8-1...