论述题3:针对以下C语言程序,请按要求回答问题下面是一个简单的C语言程序:(1)画出该函数的程序流程图。(2)设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100%,需要说明原因。(3)设计特殊的测试用例,说明各种逻辑覆盖之间的关系。

题目

论述题3:针对以下C语言程序,请按要求回答问题

下面是一个简单的C语言程序:

(1)画出该函数的程序流程图。

(2)设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100%,需要说明原因。

(3)设计特殊的测试用例,说明各种逻辑覆盖之间的关系。


相似考题
更多“ 论述题3:针对以下C语言程序,请按要求回答问题下面是一个简单的C语言程序:(1)画出该函数的程序流程图。(2)设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100”相关问题
  • 第1题:

    针对一下C语言程序,请按要求回答问题。 已知weekday. c源程序如下: include include

    针对一下C语言程序,请按要求回答问题。

    已知weekday. c源程序如下:

    include<stidio. h>

    include<conio. h>

    / *主函数* /

    Int main()

    {

    Char letter;

    Printf("please input the first letter,"Y'to exit!\n");

    While((letter=getch())!="Y")//当输入字母为Y时结束

    {

    Switch(letter)

    {

    Case'S':

    Printf("%c\n",letter);

    Printf("please input second letter\n");//输入第二个字母

    If((letter=getch())=='a')

    Printf("Saturday\n");

    Else if(letter=='u')

    Printf("Sunday\n");

    Else printf('data error\n);

    Break;

    Case'F':

    Printf("fridaykn");

    Break;

    Case 'M':

    Printf("mondayha");

    Break;

    Case 'T':

    Printf("%c\n",letter);

    Printf("please input second letter\a");//输入第二个字母

    If((letter=getch())=='u')

    Printf("Tuesday\n"):

    Else if(letter=='h')

    Printf("Thursday\n");

    Break;

    Case 'W':

    Printf("Wednesday\n");

    }

    }

    Return 0;

    }

    (1) 画出主函数main的控制流程图;

    (2) 设计一组测试用例,使main函数的语句覆盖率尽量达到100%;

    (3) Main函数的语句覆盖率能否达到100%?如果认为无法达到,需说明原因。


    正确答案:[path1]12 [path2]23 [path3]234522 [path4]236722 [path5]236822 [path6]91022 [path7]111222 [path8]1314 [path9]13141516 [path10]1314171822 [path11]1 314822 [path12]192022 [path13]19822 生成测试用例确保基本路径集中每条路径的执行: path1.输入数据y输出的结果程序结束返回值0 path2.输入数据s输出结果“s输入第二个字母” path3.输人数据s后输入数据a输出结果“Saturday” path4.输入数据s后输入数据u输出结果“sunday” path5.输入数据s后输入数据非a非u输出结果“data erroi” path6.输入数据f输出结果“friday” path7.输入数据m输出结果“monday” path8.输入数据t输出结果“输入第二个字母” path9.输入数据t后输入数据u输出结果“tuesday” path10.输入数据t后输入数据h输出结果“thursday” path11.输入数据t后输入数据非u非h输出结果“data crror” pathl2.输入数据w输出结果“Wednesday"’ path13.输入数据defalt输出结果“data error”
    [path1]1,2 [path2]2,3 [path3]2,3,4,5,22 [path4]2,3,6,7,22 [path5]2,3,6,8,22 [path6]9,10,22 [path7]11,12,22 [path8]13,14 [path9]13,14,15,16 [path10]13,14,17,18,22 [path11]1 3,14,8,22 [path12]19,20,22 [path13]19,8,22 生成测试用例,确保基本路径集中每条路径的执行: path1.输入数据y,输出的结果程序结束返回值0 path2.输入数据s,输出结果“s输入第二个字母” path3.输人数据s后,输入数据a,输出结果“Saturday” path4.输入数据s后,输入数据u,输出结果“sunday” path5.输入数据s后,输入数据非a非u,输出结果“data erroi” path6.输入数据f,输出结果“friday” path7.输入数据m,输出结果“monday” path8.输入数据t,输出结果“输入第二个字母” path9.输入数据t后,输入数据u,输出结果“tuesday” path10.输入数据t后,输入数据h,输出结果“thursday” path11.输入数据t后,输入数据非u非h,输出结果“data crror” pathl2.输入数据w,输出结果“Wednesday"’ path13.输入数据defalt,输出结果“data error”

  • 第2题:

    设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果为该程序的语句或分支覆盖率无法达到100%,需说明为什么。


    正确答案:测试用例包含几种情况: ①正数3; ②负数-12.4;
    测试用例包含几种情况: ①正数3; ②负数-12.4;

  • 第3题:

    【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C 语言编写的程序,按要求回答问题。



    问题1:(4分)请给出满足100%DC(判定覆盖)所需的逻辑条件。
    问题2:(8分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。问题3:(3分)请给出【问题2】中控制流图的线性无关路径。


    答案:
    解析:
    问题1:
    1、*p == ’r’2、*p != ’r’3、*p >= ’0’&& *p <= ’9’4、*p < ’0’|| *p > ’9’5、*p == ’f’6、*p != ’f’7、m != fmode + sizeof(fmode)8、m == fmode + sizeof(fmode)
    问题2:
    (1) 控制流图如下图所示:



    (2)、V(G)=5+1=6问题3:
    (1) 1-2-4-5-6-10-11-2... (2) 1-2-3-4-5-6-10-11-2... (3) 1-2-4-7-8-10-11-2...(4) 1-2-4-5-7-8-10-11-2… (5) 1-2-4-7-9-10-11-12(6) 1-2-4-5-7-9-10-11-12
    【解析】
    问题1:
    本小题考查白盒测试中的判定覆盖法。判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得-次 “真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序一共有4个判定,所以满足判定覆盖一共就需要8个逻辑条件,这些条件详见上述答案。问题2:
    解析:本题考查白盒测试方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:



    其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度。环路复杂度等于右图中的判定的节点个数加1。图中判定节点个数为5,所以V(G)=5+1=6。控制流程图的环路复杂性 V(G)一共有以下三种方法,但是最后一种最好用,不易出错。(1)控制流程图中的区域个数。(2)边数-结点数+2。(3)判定数+1。问题3:
    本小题考查白盒测试用例设计方法之基本路径法。涉及到根据控制流图和环路复杂度给出线性无关路径。线性无关路径:指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数,所以本题中有6条线性无关路径。这6条路径组成了问题2中控制流图的一个基本路径集。只要设计出的测试用例能确保这些基本路径的执行,就可以使程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。需要注意的是,基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。

  • 第4题:

    设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率尽量达到最大。如果认为该程序的语句覆盖率或分支覆盖率无法达到100%,需说明为什么。


    正确答案:测试用例: ①输入:bookCount输出:合法! ②输入:puts输出:常、变量标识不能用C语言预定义函数名! ③输入:5student输出:首字符只能是字母或下划线! ④输入:stu+name输出:常、变量只能由字母、下划线和数字构成! ⑤输入:float输出:常、变量标识不能用C语言关键字! ⑥输入:putsfloatstudentsnamechinachineseenglishchinachinesechinachina输出:内存不够! ⑦输入:_StuId输出:合法! 该程序的语句覆盖率或分支覆盖率均无法达到100%因为该程序允许中间返回值。如果if条件中任意一个成立就立即返回那么剩下的语句就无法执行;即使所有的if条件均不成立。运行到最后那么if条件成立时的语句就无法执行其覆盖率始终无法达到100%。
    测试用例: ①输入:bookCount,输出:合法! ②输入:puts,输出:常、变量标识不能用C语言预定义函数名! ③输入:5student,输出:首字符只能是字母或下划线! ④输入:stu+name,输出:常、变量只能由字母、下划线和数字构成! ⑤输入:float,输出:常、变量标识不能用C语言关键字! ⑥输入:putsfloatstudentsnamechinachineseenglishchinachinesechinachina,输出:内存不够! ⑦输入:_StuId,输出:合法! 该程序的语句覆盖率或分支覆盖率均无法达到100%,因为该程序允许中间返回值。如果if条件中任意一个成立就立即返回,那么剩下的语句就无法执行;即使所有的if条件均不成立。运行到最后,那么if条件成立时的语句就无法执行,其覆盖率始终无法达到100%。

  • 第5题:

    阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C 语言编写的程序,按要求回答问题。



    问题1:(6分) 请针对上述C程序,给出满足100%DC(判定覆盖)所需的逻辑条件。
    问题2:(7分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
    问题3:(3分)请给出【问题2】中控制流图的线性无关路径。


    答案:
    解析:
    问题1答案:

    问题2:答案:(1)控制流图如下图所示:



    (2)V(G)=10+1=11
    问题3:答案:(1)1-2-19 (2) 1-2-3-19 (3) 1-2-3-4-12-13-17-19(4) 1-2-3-4-12-13-14-17-19 (5) 1-2-3-4-12-13-14-15-17-19(6) 1-2-3-4-12-13-14-15-16-17-19 (7) 1-2-3-4-12-13-14-15-16-18-19(8) 1-2-3-4-5-11-19 (9)1-2-3-4-5-6-10-19(10) 1-2-3-4-5-6-7-9-19 (11) 1-2-3-4-5-6-7-8-19
    【解析】
    问题1本小题考查白盒测试中的判定覆盖法。判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得-次 “真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序一共有6个判定,所以满足判定覆盖一共就需要12个逻辑条件,这些条件详见上述答案。问题2:本题考查白盒测试方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:



    其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度。环路复杂度等于右图中的判定的节点个数加1。图中判定节点个数为10,所以V(G)=10+1=11。控制流程图的环路复杂性 V(G)一共有以下三种方法,但是最后一种最好用,不易出错。(1)控制流程图中的区域个数。(2)边数-结点数+2。(3)判定数+1。
    问题3:本小题考查白盒测试用例设计方法之基本路径法。涉及到根据控制流图和环路复杂度给出线性无关路径。线性无关路径:指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数,所以本题中有11条线性无关路径。这11条路径组成了问题2中控制流图的一个基本路径集。只要设计出的测试用例能确保这些基本路径的执行,就可以使程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。需要注意的是,基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。