试题一(15 分)阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。[说明]基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执行一次。以下代码由C++语言书写,请按要求回答问题。void ReadPara( CString temp ){if ( temp == ">=" )m_oper.SetCurSel( 0 );else{if ( temp == ">" )m_oper.SetCurSel( 1 );else{if ( temp == "==" )m_oper.Se

题目

试题一(15 分)

阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。

[说明]

基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执

行一次。以下代码由C++语言书写,请按要求回答问题。

void ReadPara( CString temp )

{

if ( temp == ">=" )

m_oper.SetCurSel( 0 );

else

{

if ( temp == ">" )

m_oper.SetCurSel( 1 );

else

{

if ( temp == "==" )

m_oper.SetCurSel( 2 );

else

{

if ( temp == "<=" )

m_oper.SetCurSel( 3 );

else

{

if ( temp == "<" )

m_oper.SetCurSel( 4 );

else

m_oper.SetCurSel( 5 );

}

}

}

}

return;

}

[问题1](6 分)

请画出以上代码的控制流图。

[问题2](3 分)

请计算上述控制流图的环路复杂度 V(G)。

[问题3](6 分)

请使用基本路径测试法为变量 temp 设计测试用例,使之满足基本路径覆盖要求。


相似考题
更多“试题一(15 分)阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。[说明]基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执行一次。以下代码由C++语言书写,请按要求回答问题。void ReadPara( CString temp ){if ( temp == "=" )m_oper.SetCurSel( 0 );else{if ( temp == "" )m_oper.SetCurSel( 1 );else{if ( temp == "==" )m_oper.SetC”相关问题
  • 第1题:

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

    下面是一个程序段(C语言),试设计基本路径测试的测试用例,设计出的测试用例要保证每一个基本独立路径至少要执行一次。

    函数说明:当i flag=0;返回i count+100

    当i flag=l;返回i count*10

    否则 返回 i count*20

    输入参数:int i count int i flag

    输出参数:int i retum

    程序代码如下:

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

    (2)采用基本路径测试法设计一组测试用例,保证每个基本独立路径都至少执行一次。


    正确答案:问题1: 解答: 根据程序的源代码容易画出对应的控制流图如图17-4所示。 (其中圈中的数字代表的是语句的行号) 问题2: 解答: 第一步根据上述控制流图计算该程序的环路复杂性。 由图可以看出判定节点数为3边数为10节点总数为8故 V(G)=10-8+2=4 或V(G)=3+1=4 第二步根据环路复杂度为4可确定4条基本独立路径。 Path1:4—24 Path2:4—6—8—24 Path3:4—6—13—15—22—4—24 Path4:4—6—13—19—22—4—24 第三步设计测试用例 根据上面4条基本独立路径可以设计测试用例如下: 测试用例1 输入数据:i_flag=0或者是i_flag0的某个值。 预期输出结果:i temp=0。 测试用例2 输入数据:i_count=1i_flag=0。 预期输出结果:i temp=101。 测试用例3 输入数据:i_count=1i_flag=1。 预期输出结果:i temp=10。 测试用例4 输入数据:i count=1i_flag=2。 预期输出结果;i temp=20。 但这些测试用例是可以简化的由于路径path1是path4的真子集所以path1是可以不要的。故针对该程序最少的测试用例数为3即上述测试用例2测试用例3测试用例4。
    问题1: 解答: 根据程序的源代码,容易画出对应的控制流图,如图17-4所示。 (其中圈中的数字代表的是语句的行号) 问题2: 解答: 第一步,根据上述控制流图计算该程序的环路复杂性。 由图可以看出,判定节点数为3,边数为10,节点总数为8,故 V(G)=10-8+2=4 或V(G)=3+1=4 第二步,根据环路复杂度为4,可确定4条基本独立路径。 Path1:4—24 Path2:4—6—8—24 Path3:4—6—13—15—22—4—24 Path4:4—6—13—19—22—4—24 第三步,设计测试用例 根据上面4条基本独立路径,可以设计测试用例如下: 测试用例1 输入数据:i_flag=0,或者是i_flag0的某个值。 预期输出结果:i temp=0。 测试用例2 输入数据:i_count=1,i_flag=0。 预期输出结果:i temp=101。 测试用例3 输入数据:i_count=1,i_flag=1。 预期输出结果:i temp=10。 测试用例4 输入数据:i count=1,i_flag=2。 预期输出结果;i temp=20。 但这些测试用例是可以简化的,由于路径path1是path4的真子集,所以path1是可以不要的。故针对该程序最少的测试用例数为3,即上述测试用例2,测试用例3,测试用例4。 解析:首先根据程序的源代码,画出控制流图。然后通过控制流图可以计算出该程序的复杂度,找出所有的独立路径,根据基本路径测试法设计测试用例。

  • 第2题:

    阅读下面的说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。

    [说明]

    阅读以下说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。

    windows Server 2003是一个多任务多用户的操作系统,能够以集中或分布的方式实现各种应用服务器角色,是目前应用比较广的操作系统之一。

    Windows内置许多应用服务功能,将下表中(1)~(5)处空缺的服务器名称填写在答题纸对应的解答栏内。

    (1)


    正确答案:域名(DNS)服务器
    域名(DNS)服务器

  • 第3题:

    阅读下列说明,回答问题1至问题3。

    【说明】

    使用基本路径法设计出的测试用例能够保证程序的每一条可执行语句在测试过程中至少执行一次。以下代码由C语言书写,请按要求回答问题。

    int IsLeap(int year)

    {

    if(year% 4==0)

    {

    if((year % 100==0)

    {

    if( year % 400==0'

    leap=1;

    eIse

    leap=0;

    }

    else

    leap=1;

    else

    leap=0;

    return leap;

    }

    请画出以上代码的控制流图。

    请计算上述控制流图的V(G)。

    假设的取值范围是1000<year<2001,请使用基本路径测试法为变量year设计测试用例,使之满足基本路径覆盖的要求。

    请帮忙给出每个问题的正确答案和分析,谢谢!


    问题 1 答案解析:控制流图
    控制流图 解析:绘制模块控制流图。
    模块控制流图是与程序流程图相类似的由许多节点和连接节点的边组成的一种图形,其中一个节点代表一条语句或数条语句,边表示节点间的控制流向,它显示了一个函数的内部逻辑结构。

    问题 2 答案解析:V(G)=4
    V(G)=4 解析:计算控制流图的环路复杂性v(G)。
    V(G)=(区域数)=(判断结点数)+1

    问题 3 答案解析:用例1:year是1000~2000之间不能被4整除的整数如1001、1002、1003等。 用例2:year是1000~2000之间能被4整除但不能被100整除的整数如1004、 1008、1012、1016等。 用例3:year是1000~2000之间能被100整除但不能被400整除的整数如1100、 1300、1400、1500、1700、1800、1900。 用例4:yew是1000~2000之间能被400整除的整数如1200、1600、2000。
    用例1:year是1000~2000之间不能被4整除的整数,如1001、1002、1003等。 用例2:year是1000~2000之间能被4整除但不能被100整除的整数,如1004、 1008、1012、1016等。 用例3:year是1000~2000之间能被100整除但不能被400整除的整数,如1100、 1300、1400、1500、1700、1800、1900。 用例4:yew是1000~2000之间能被400整除的整数,如1200、1600、2000。 解析:采用基本路径测试法,满足基本路径覆盖的要求。
    在进行程序的基本路径测试时,从程序的环路复杂性,可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。独立路径是指包括一组以前没有处理的语句或条件的一条路径。例如针对本题所对应的控制流图中,一组独立的路径如下。
    .path1:不能被4整除的整数
    .path2;被4整除但不能被100整除的整数.
    .path3:能被100整除但不能被400整除的整数
    .path4;能被400整除的整数
    路径path1、path2、path3和path4组成一个基本路径集。只要设计出的测试用例能够确保这些基本路径的执行,就可以使得程序中的每个可执行语句至少执行一次。

  • 第4题:

    阅读下列说明,回答问题 1 至问题 4 ,将解答写在答题纸的对应栏内。 【说明】 基于 Windows32 位系统分析下列代码,回答相关问题 。 void Challenge(char *str) { char temp[9]={0}; strncpy(temp,str,8); printf("temp=%s\n",temp); if(strcmp(temp"Please!@")==0){ printf("KEY: ****"); } } int main(int argc,char *argv[ ]) { Char buf2[16] Int check=1; Char buf[8] Strcpy (buf2, "give me key! !"); strcpy(buf,argv[1]); if(check==65) { Challenge(buf); } else { printf("Check is not 65 (%d) \n Program terminated!!\n",check); } Return 0; }

    【问题 1】(3 分) main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么? 【问题 2】(3分) 画出buf,check,buf2 三个变量在内存的布局图。【问题 3】(2分) 应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。 【问题4】(4分) 上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。


    正确答案:问题1
    1、堆栈。2、PUSH和POP。

    问题2

    问题3
           用户输入9个字符的字符串,使其满足条件:前8个字符为任意字符和第9个字符为大写字母A;

    问题4
           缓冲区溢出。使用安全函数strncpy()来代替strcpy()函数。

  • 第5题:

    阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

    【说明】

    逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现

    程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。

    【问题1] (6分)

    请给出满足100%DC(判定覆盖)所需的逻辑条件。

    【问题2] (10分)

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

    【问题3](4分)

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


    正确答案:
    本题考查白盒测试技术的应用。
    【问题1】
    本问题考查白盒测试用例设计方法:判定覆盖法。
    判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次
    “真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有6个判定,
    所以满足判定覆盖一共需要12个逻辑条件。
    【问题2】
    本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据代码绘
    制控制流图、计算环路复杂度。
    控制流图是描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的
    节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的
    条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,
    则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,
    if((filename[len-2]==’.’)&&(filename[len.1]=’c’))这条判断语句中的判定由两个条件
    组成,因此在画控制流图的时候需要拆开成两条判断语句。程序的环路复杂度等于控制
    流图中判定节点的个数加1,本题控制流图I中判定节点个数为7,所以V(G)=8。
    【问题3】
    本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据控制流
    图和环路复杂度给出线性无关路径。
    线性无关路径是指包含一组以前没有处理的语句或条件的路径。从控制流图上来
    看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程
    序的环路复杂度等于线性无关路径的条数,所以本题中应该有8条线性无关路径。
    参考答案

    【问题2]
    环路复杂度V(G)=8。

    线性无关路径:
    1.1-2-3-4-6-7-8-9-10-11-12-13-10......
    2.1-2-5-6-7-8-9-10-11-12-13-10.....
    3.1-2-3-5-6-7-8-9-10-11-12-13-10...
    4.1-2-3-4-6-8-9-10-11-12-13-10...
    5.1-2-3-4-6-7-8-10-11-12-13-10....
    6.1-2-3-4-6-7-8-9-10-15
    7.1-2-3-4-6-7-8-9-10-11-14-10.....
    8.1-2-3-4-6-7-8-9-10-11-12-10....

  • 第6题:

    试题三(共 15分)

    阅读以下关于嵌入式软件测试用例设计的叙述,回答问题 1至问题 3,将答案填入答题纸的对应栏内。

    【说明】

    某程序段的流程如图 3-1所示,x、y是两个变量,K、J 表示一段程序执行体,表 3-1 所示为本题可供选择的四组测试用例组。

    【问题1】(3分)

    简答以下问题。

    (1)条件覆盖的含义是什么?

    (2)路径覆盖的含义是什么?

    【问题 2】(2分)

    在程序测试用例设计中,有语句覆盖、条件覆盖、判定覆盖(分支覆盖)和路径覆盖等。其中,____是最强的覆盖准则。

    请把以下 4个选项中正确的选项序号填入上述空白处。

    ①语句覆盖

    ②条件覆盖

    ③判定覆盖(分支覆盖)

    ④路径覆盖

    【问题 3】(10 分)

    为了对图 3-1 所示的程序段进行覆盖测试,必须适当地选取测试用例组。实现判定覆盖至少应采用的测试用例组是 (1)和 (2) ,实现条件覆盖至少应采用的测试用例组是 (3) ;实现路径覆盖至少应采用的测试用例组是 (4) 和 (5)。

    请把以下 8个选项中正确的选项序号填入上述空白处。

    ① 试用例组Ⅰ和Ⅱ

    ②测试用例组Ⅱ和Ⅲ

    ③测试用例组Ⅲ和Ⅳ

    ④测试用例组Ⅰ和Ⅳ

    ⑤测试用例组Ⅰ、Ⅱ和Ⅲ

    ⑥测试用例组Ⅱ、Ⅲ和Ⅳ

    ⑦测试用例组Ⅰ、Ⅲ和Ⅳ

    ⑧测试用例组Ⅰ、Ⅱ和Ⅳ


    正确答案:

    试题三(共15分)
    【问题1】(3分)
    (1)条件覆盖是指设计足够的测试用例,使得被测程序每一个判定中的每个条件的所有可能结果至少出现一次。
    (2)路径覆盖是指设计足够的测试用例,使得被测程序中每条路径至少执行一次。

    【问题2】(2分)
    (1)④(路径覆盖)

    【问题3】 (10分)
    (1)⑤
    (2)⑧
    (3)⑦
    (4)⑤
    (5)⑧
    其中,第(1)、(2)题的答案顺序可互换,第(4)、(5)题的答案顺序可互换。

  • 第7题:

    ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]设有定义 #define ITEM struct item #define SIZE sizeof(ITEM) ITEM { int num; ITEM *next; }; ITEM *head=NULL; 下述函数定义实现按插表尾形式(即每一新表元素插入至当前所生成链表的表尾之后)生成一个正向线性链表。最后指向所生成链表表头的指针作为函数值返回。为生成一个线性链表,要求输入一批整型数据,并以-1作为结束标志。请填空完善程序。 ITEM *gene(ITEM *head) { ITEM *temp,*tail;/*tail指向当前链表尾结点*/ int intno; printf("Enter integer NO.,-1 to stop:\n"); scanf("%d",&intno); while (intno!=-1) { temp=(____(1)_____)malloc(SIZE); temp->num=intno; if (head==_____(2)_____) /*空表*/ { head=temp; tail=______(3)______; } else /*非空表*/ { ____(4)_______=temp; tail=temp; } scanf("%d",&intno); } return (_______(5)_______);


    正确答案:()
    (1)ITEM *   (2)NULL   (3)temp   (4)tail->next   (5)head
    本题是一典型的单链表建立的题目,创建一个指针和一个尾指,然后创建新结点,逐点加入,最后返回头指针。终止条件是输入的是否为“-1”,用一个while 循环来实现创建多个结点及链上。所以第一空处的语句是开辟新结点。固定句法,填入:ITEM *  。然后把刚输入的值保存在新结点的值域,再将新结点挂在头结点(指针),先要看头指针是不是空表,head==NULL;若是,则将头指针指新建的第一个结点,尾指针也指向它。若非空表,则将新建的结点挂在链表的尾结点的指针域上,故第(4)空要填:tail->next;然后尾指针指向它。依据题意要返回链表,故要将链表头指针head返回。

  • 第8题:

    阅读下列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中控制流图的一个基本路径集。只要设计出的测试用例能确保这些基本路径的执行,就可以使程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。需要注意的是,基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。

  • 第9题:

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



    问题1:(2分) 请简述基本路径测试法的概念。
    问题2:(8分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
    问题3:(3分)请给出【问题2】中控制流图的线性无关路径。


    答案:
    解析:
    问题1:答案:基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。
    问题2:答案:(1)控制流图如下图所示:



    (2)V(G)=4+1=5
    问题3:答案:(1) 1-2-3-8-10(2) 1-2-4-5-6-8-10(3) 1-2-3-4-5-6-8-10(4) 1-2-4-5-7-8-10(5) 1-2-3-8-9-10
    【解析】
    问题1:本小题考查基本路径法的概念。
    问题2:本题考查白盒测试方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:



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

  • 第10题:

    阅读下列程序,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C 语言编写的程序,按要求回答问题。
    main( ){int i,n; //1for(i=1;i<5;i++){ //2n=0;  if(i!=1) //3 n=n+1; //4 if(i==3) //5 n=n+1; //6  if(n==3) //7  printf("Hello!"); //8 }} //9 问题1:(4分)请给出满足100%DC(判定覆盖)所需的逻辑条件。问题2:(6分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。问题3:(5分)请给出【问题2】中控制流图的线性无关路径。


    答案:
    解析:
    问题1:
    1、i < 52、i >= 53、i != 14、i == 15、i == 36、i != 37、n == 38、n != 3
    问题2(1) 控制流图如下图所示:



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



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

  • 第11题:

    阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。[说明]逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之。以下代码由C浯言书写,请按要求回答问题。voidcal(intn){intg,s,b,q;if((n>1000)&&(n<2000)){g=n % 10;s=n % 100/ 10;b=n / 100 % 10;q= n / 1000;if((q+g) =={s+b ) ){printf("%-5d",n);}}printf("\n");return;}13、 [问题1](3分)请找出程序中所有的逻辑判断语句。14、 [问题2](6分)请分析并给出分别满足100%DC(判定覆盖)和100%CC(条件覆盖)时所需的逻辑条件。15、 [问题3](6分)假设n的取值范围是0<n<3000,请用逻辑覆盖法为n的取值设计测试用例,使用例集满足基本路径覆盖标准。


    答案:
    解析:
    13、逻辑判断语句:1.n>10002.n<20003.(q + g)=(s + b) 14、按照DC和CC的定义分析逻辑条件。



    15、可按以下步骤完成:1.画控制流图。2.计算V(G)=3。3.找出线性独立路径。4.按路径执行过程中的逻辑条件设计相应数据。

  • 第12题:

    阅读以下说明,回答问题1至问题4,将解答填入答题纸对应的解答栏内。
    【说明】
    某企业网络拓扑如图1-1所示,A~E是网络设备的编号。










    答案:
    解析:
    【问题1】参考答案:1.B,2.A,3.C 4.D【问题2】5.ethernet 1 6、59.74.221.254【问题3】7) C.deny 8、A 9.F【问题4】10)192.168.4.1
    11)192.168.100.0 12)设置接口的类型是trunk
    【解析】
    【问题1】试题分析:这是一道简单的概念题,考察我们对企业园区网络的基本拓扑结构的了解。通常的企业为了确保内部网络的安全,会设置防火墙,防火墙有3个区域,外网,内网和DMZ区。DMZ通常用于存放各种服务器。因此首先可以选出B这个位置是防火墙,A用于连接Internet,是路由器。DMZ区内部有多台服务器,需要使用交换机连接。【问题3】试题分析:这是网络工程师考试第一次考华为的设备配置,而我们考前准备的都是ios的命令。那这道题是不是很难呢,其实这道题非常简单,只要我们有IOS的命令经验,这道题完全可以自己凭经验做出来,题目出题也是以选择题的形式,因此更加容易,对于没有用过华为设备的考生来说,也是非常简单的。
    【问题4】试题分析:这道题同样是基本的配置,掌握基本命令即可。

  • 第13题:

    阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。

    【说明】

    本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当n=5时,对应的螺旋方阵如下:

    1 16 15 14 13

    2 17 24 23 12

    3 18 25 22 11

    4 19 20 21 10

    5 6 7 8 9

    【C++代码】

    include"stdio.h"

    include"iostream,h"

    int array[11][11];

    int temp;

    int ROW;

    void godown(int &m,int &a)

    {

    for(temp=1; temp<=ROW;temp++)

    if(array[temp][a]==0)

    array[temp][a]=(1);

    a++;

    }

    void goright(int &m,int &b)

    {

    for(temp=1;temp<=ROW;temp++)

    if(array[b][temp]==0)

    array[b][temp]=m++;

    b--;

    }

    void goup(int &m.int &c)

    {

    for(temp=ROW;temp>0;temp-)

    if(array[temp][c]==0)

    array[temp][c]=m++;

    c--;

    }

    void goleft(int &m,int &d)

    {

    for(temp=ROW;temp>0;temp--)

    if(array[d][temp]==0)

    array[d][temp]=m++;

    (2);

    }

    void main()

    {

    int a,b,c,d,max,m;

    cin>>ROW;

    cout>>end1;

    for(a=1;a<=ROW;a++)

    for(b=1;b<=ROW;b++)

    (3);

    m=1;

    a=d=1;

    b=c=ROW;

    max=(4);

    whiie(m<=max)

    {

    godown(m,a);

    (5) (m,b);

    goup(m,c);

    goleft(m,d):

    }

    for(a=1;a<=ROW;a++)

    {

    for(b=1;b<=ROW;b++)

    printf("%3d ",array[a][b]);

    cout<<end1;

    }

    }


    正确答案:(1)m++ (2)d++ (3)array[a][b]=0 (4)ROW*ROW (5)goright
    (1)m++ (2)d++ (3)array[a][b]=0 (4)ROW*ROW (5)goright 解析:本题考查C++中螺旋方阵的实现。
    题目要求在用户输入该方阵的行列数后,自动生成对应的螺旋方阵。首先我们来简单分析一下螺旋方阵的特点,顾名思义,其基本结构是成螺旋形状的,按照螺旋的方向数值逐渐增大,直到最中间的一点结束。程序中分别用4个函数来实现其螺旋方向向下、向右、向上和向左时,数组中相应元素的变化,结合程序可以发现数组的初值是全0。
    第(1)空在螺旋方向向下的实现函数中,当螺旋方向向下时,二维数组中列不变而逐行加1,从程序中可以看出此空所在行的作用就是用来改变数组中元素的值,结合整个程序知道变量m中存放的是当前位置的数值,因此,此空答案为m++。
    第(2)空在螺旋方向向左的实现函数中,当螺旋方向向左时,二维数组中行不变而随列下标temp的变化逐列加1,直到数组元素不为0,这个时候说明已经到了被螺旋线经过的列,因此,要往后退一列即列下标变量d加1,此空答案为d++。
    第(3)空在一个二重循环下面,程序声明了一个二维数组且没有初值,结合程序可以推断出此空的任务就是给数组赋初值。而根据上面的分析,数组的初值应该是全0,因此,此空答案为array[a][b]=0。
    第(4)空很明显是给变量max赋初值,这要求先去弄清楚变量max的作用。由语句while(m=max)我们可以推断出变量max中存放的是最大的数据项,而一个n阶的方阵中最多有n×n个元素,从程序中可以知道,这是一个ROW阶的方阵,因此,此空答案为ROW*ROW。
    第(5)空是调用上面的4个函数,根据螺旋方阵的生成规则,应该是先向下,接着向右,再向上,最后向左,结合程序我们知道此空是调用向右的函数。因此,此空答案为goright。

  • 第14题:

    试题一(共15分)

    阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。

    【说明】

    某网吧拓扑结构如图 1-1 所示,可提供影视、游戏竞技、视频聊天等多种服务,采用VLAN 划分来区分不同的服务。

    问题 1】(2分)

    网吧要求实现千兆接入,可采用的方式为 (1) 。

    (1)备选答案:

    A. FTTx

    B. ADSL

    C. PSTN拨号


    正确答案:A

  • 第15题:

    【说明】 使用基本路径法设计出的测试用例能够保证程序的每一条可执行语句在测试过程中至少执行一次。以下代码由C语言书写,请按要求回答问题。 int isLeap (int year) { if (year % 4 == 0) { if (year % 100 == 0) { if ( year % 400 == 0) leap = 1; else leap = 0; } else leap = 1; } else leap = 0; return leap; } 【问题1】(3分) 请画出以上代码的控制流图。

  • 第16题:

    阅读以下关于软件测试的说明,回答司题l至问题3,将解答填入答题纸的对应

    栏内。

    【说明】

    使用在汽车、飞机中的嵌入式软件, 日于直接影响人的生命及财产安全,测试要求

    更为严格。语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖是通常对这类软件的要求。

    以下是一段C语言代码,请仔细阅读并回答相关问题:

    【问题1】(6分)

    请根据测试要求,简要说明语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖的含义。

    将答案填写在答题纸的对应栏中。

    【问题2】(5分)

    画出以上代码的流程图,将答案填写在答题纸的对应栏中。

    【问题3】(4分)

    请根据【说明】中的C语言代码,计算满足MC/DC覆盖要求的用例数量及条件取

    值范围,将答案填写在答题纸的对应栏中.


    正确答案:
    试题三分析
    本题考查嵌入式软件测试的基本知识.
    语句覆盖要求设计足够多的测试用例,运行被测程序,使得程序中每条语句至少被
    执行一次。定覆盖(分支覆盖)要求设计足够多的测试用例,运行被测程序,使得程序
    中的每个判断的“真”和“假”都至少被执行一次。条件覆盖要求设计足够多的测试用
    例,运行被测程序,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一
    次为真值,有一次为假值。MC/DC覆盖要求每个条件的取值都有覆盖,每个判定值都有
    覆盖且每个条件都能独立影响判定结果,各覆盖率的含义如表2.5所示。

    【问题2]
    本问题考查程序流程图的画法。注意开始、结束的符号。
    根据源代码,程序流程图如下。

    【问题3]
    本问题考查MC/DC覆盖率判定的综合运用。
    MC/DC与代码中的逻辑运算有关。本题代码中的逻辑运算为x>0&&y>0。根据
    MC/DC的定义,MC/DC覆盖要求每个条件的取值都有覆盖,每个判定值都有覆盖且每
    个条件都能独立影响判定结果。对于a&&b这样的逻辑运算,真值表如下。

    对测试用例1和测试用例2,条件a不变,因为条件b的不同而导致结果的不同,
    因此条件b独立影响判定的结果。对测试用例2和测试用例3,因为条件b不变,条件a
    的不同而导致结果的不同,因此条件a独立影响判定的结果。综合以上,对逻辑运算a&&
    b应产生三个测试用例,包括:(True,False)、(True,True)、(False,True)。
    所以本题用例数量:3个;条件取值范围:(x>0andy<=0)、(x<=0andy>0)及(x>0
    andy>0)。
    参考答案

    【问题2]
    【问题3]
    用例数量:3个;
    条件取值范围:
    (x>0andy<=0)、(x<=0andy>0)及(x>0andy>0)

  • 第17题:

    阅读下列说明和C代码,回答问题l至问题3.将解答写在答题纸的对应栏内。

    【说明】

    计算一个整数数组a的最长递增子序列长度的方法描述如下:

    假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长

    递增子序列的长度,则数组a的最长递增子序列的长度为器;其中b[i]满足最优子结构,可递归定义为:

    【c代码】

    下面是算法的c语言实现。

    (1)常量和变量说明

    a:长度为n的整数数组,待求其最长递增子序列

    b:长度为n的数组,b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度,

    其中0≤i<n

    len:最长递增子序列的长度

    i.j:循环变量

    temp,临时变量

    (2)C程序

    include <stdio . h>

    int maxL (int *b. int n) {

    int i. temp =0;

    For(i = 0; i < n; i++){

    if (b[i] > temp )

    Temp= b[i];

    }

    Return temp;

    【问题l】(8分)

    根据说明和C代码,填充C代码中的空(1)~(4)。

    【问题2】(4分)

    根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示)。

    【问题3】(3分)

    已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值。


    正确答案:
    本题考查算法设计与分析以及用C程序设计语言来实现算法的能力。此类题目要求考生认真阅读题目对问题的描述,理解算法思想,并会用C程序设计语言来实现。【问题1】根据题干描述,用一个数组b来记录数组a每个子数组的最长递增子序列的长度,即b[i]记录a[0..i]的最长递增子序列的长度。首先,只有一个元素的数组的最长递增子序列的长度为1,即给b[0]直接赋值1。因此,空(1)处填写“b[0]=1”。两重for循环中,第一重是从a数组的第二个元素开始,考虑每个子数组a[0....II]的最长递增子序列的长度,第二重是具体的计算过程。考虑子数组a[0..I],其最长递增于序列的长度应该等于子数组a[O.i-l]中的比元素a[i]小的元素的最长递增子序列的长度加1,当然,可能存在多个元素比元素a[i]小,那么存在多个最长递增子序列的长度,此时,取最大者。因此,空处填写j<i”,即考虑子数组a[O...i-l]。空(3)处填写“a[j]<=a[i]”,要求元素值小于等于a[i]而且目前的长度应该小于当前考虑的子数组的最长子序列长度。空(4)处填写“b[i]=len+1”。简单的说,程序是根据题干给出的公式来实现的。另外,计算的过程不是采用递归的方式,而是以一种自底向上的方式进行的【问题2】从题干说明和C程序来看,这是一个最优化问题,而且问题具有最优子结构,一个序列的最长递增子序列由其子序列的最长递增子序列构成。在计算过程中采用了自底向上的方式来进行,这具有典型的动态规划特征。因此采用的是动态规划设计策略。C程序中,有两重for循环,因此时间复杂度为。【问题3】输入数组为数组a={3.10,5,15,6,8},很容易得到,子数组a[0...0],a[0..1].…,a[0....5]的最长递增子序列的长度分别为l,2,2,3,3,4,因此答案为b={I,2,2,3,4}。该题可以根据题干说明、C代码来计算。由于输入很简单,答案也可以从输入直接许算出来。试题四参考答案【问题1】(1)b[0]=I(2)j<i(3)a[j]<=a[i](4)b[i]=len+1【问题2】(5)动态规划(6)【问题3】b={1,2,2,3,3,4}

  • 第18题:

    阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。

    [说明]

    逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之。以下代码由C浯言书写,请按要求回答问题。

    void cal (int n)

    {

    int g, s, b, q;

    if( (n>1000) && (n<2000) )

    {

    g=n % 10;

    s=n % 100 / 10;

    b=n / 100 % 10;

    q= n / 1000;

    if( (q+g) =={ s + b ) )

    {

    printf("%-5d",n);

    }

    }

    printf("\n");

    return;

    }

    请找出程序中所有的逻辑判断语句。

    请分析并给出分别满足100%DC(判定覆盖)和100%CC(条件覆盖)时所需的逻辑条件。

    假设n的取值范围是0<n<3000,请用逻辑覆盖法为n的取值设计测试用例,使用例集满足基本路径覆盖标准。

    请帮忙给出每个问题的正确答案和分析,谢谢!


    问题 1 答案解析:逻辑判断语句: 1.n>1000 2.n2000 3.(q + g)=(s + b)
    逻辑判断语句: 1.n>1000 2.n2000 3.(q + g)=(s + b)

    问题 2 答案解析:按照DC和CC的定义分析逻辑条件。
    按照DC和CC的定义分析逻辑条件。

    问题 3 答案解析:可按以下步骤完成: 1.画控制流图。 2.计算V(G)=3。 3.找出线性独立路径。 4.按路径执行过程中的逻辑条件设计相应数据。
    可按以下步骤完成: 1.画控制流图。 2.计算V(G)=3。 3.找出线性独立路径。 4.按路径执行过程中的逻辑条件设计相应数据。

  • 第19题:

    阅读下列说明和C代码,回答问题,将解答填入答题纸的对应栏内。
    【说明】
    计算一个整数数组a的最长递增子序列长度的方法描述如下:
    假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度为 ;其中b[i]满足最优子结构,可递归定义为:

    【C代码】
    下面是算法的C语言实现。
    (1)常量和变量说明
    a:长度为n的整数数组,待求其最长递增子序列
    b:长度为n的数组,b[i]记录以a[i](0≤ilen:最长递增子序列的长度
    i, j:循环变量
    temp:临时变量
    (2)C程序

    #include int maxL(int*b, int n) {int i, temp=0;for(i=0; itemp) temp=b[i]; } return temp;}int main() { int n,a[100], b[100], i, j, len; scanf("%d", &n); for(i=0;i
    【问题1】(8分)
    根据说明和C代码,填充C代码中的空(1)~(4)。
    【问题2】(4分)
    根据说明和C代码,算法采用了 (5) 设计策略,时间复杂度为 (6) (用O符号表示)。
    【问题3】(5分)
    已知数组a={3,10,5,15,6,8},据说明和C代码,给出数组b的元素值。


    答案:
    解析:
    【问题1】
    (1)b[0]=1
    (2)j(3)a[j]<=a[i]
    (4)b[i]=len+1
    【问题2】(4分)
    (5)动态规划法
    (6)O(n2)
    【问题3】(5分)
    B={1,2,2,3,3,4}

  • 第20题:

    阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
    逻辑覆盖法是设计白盒测试用例的主要方法之一,它通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
    gz_open (const char*mode) { char*p= (char*)mode; //1 char fmode[4]; char*m=fmode; char smode= '\0'; charlevel='\0\'; intstrategy=0; do { if (*p=='r') //2 smode -'r'; //3 if (*p>='O'&&*p<='9') { //4,5 level=*p-'0'; //6 } else if (*p=='f') { //7 strategy=1; //8 }else { //9 *m++=*p; } *p++; //10 }while (m!=fmode+sizeof (fmode)); //11 }
    1、请给出满足100%DC(判定覆盖)所需的逻辑条件。
    2、请画出上述程序的控制流图,并计算其控制流图的环路复杂度VG.。
    3、假设函数gz_open的参数mode是由26个小写字母'a'-'z'、数字'0'-'9'以及空格组成的字符串,请使用基本路径测试法构造1个测试用例,使之覆盖所有基本路径。


    答案:
    解析:


    本题考查白盒测试法的应用。
    本问题考查白盒测试用例设计方法中的判定覆盖法。
    判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次"真"值和"假"值,从而使程序的每一个分支至少都通过一次。本题中程序有4个判定,所以满足判定覆盖一共需要8个逻辑条件,如下表所示。



    控制流图



    环路复杂度V(G)=6
    [解析] 本问题考查白盒测试用例设计方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。
    控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:



    根据题中程序绘制的控制流图如下所示。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,if(*p>='0'&&*p<='9')这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。



    环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数。环路复杂度等于图中判定结点的个数加1,图中判定结点个数为5,所以V(G)=6。


    3、构造一个6个字符构成的字符串(设为x,y,z,u,v,w 6个字符),使得每个字符覆盖一条基本路径。其中,x='r',y='f',z∈['0'-'9'],u<'0',v>'9'并且v!='f',w任意,这6个字符可任意排列。例如,mode="rOf aa"。
    [解析] 本问题考查白盒测试用例设计方法中的基本路径法。涉及到的知识点包括:根据控制流图和环路复杂度设计测试用例。注意环路复杂度只是测试用例数的上限。
    本题中程序的环路复杂度为6,因此测试用例上限为6,但本题程序比较特殊,只需要一个测试用例即可实现。例如,构造一个6个字符构成的字符串(设为x,y,z,u,v,w6个字符),使得每个字符覆盖一条基本路径即可。其中,X='r',y='f',z∈['0'-'9'],u<'0',v>'9'并且v!='f',w任意,这6个字符可任意排列。

  • 第21题:

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




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


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



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



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



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

  • 第22题:

    阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 逻辑覆盖法是设计白盒测试用例的主要方法之一,它通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。 gz_open (const char*mode) { char*p= (char*)mode; //1 char fmode[4]; char*m=fmode; char smode= '\0'; char level='\0\'; int strategy=0; do { if (*p=='r') //2 smode - 'r'; //3 if (*p>='O'&&*p<='9') { //4,5 level=*p-'0'; //6 } else if (*p=='f') { //7 strategy=1; //8 }else { //9 *m++=*p; } *p++; //10 }while (m!=fmode+sizeof (fmode)); //11 } //127、请给出满足100%DC(判定覆盖)所需的逻辑条件。8、请画出上述程序的控制流图,并计算其控制流图的环路复杂度VG.。9、假设函数gz_open的参数mode是由26个小写字母'a'-'z'、数字'0'-'9'以及空格组成的字符串,请使用基本路径测试法构造1个测试用例,使之覆盖所有基本路径。


    答案:
    解析:
    7、

    8、控制流图

    环路复杂度V(G)=6
    9、
    构造一个6个字符构成的字符串(设为x,y,z,u,v,w 6个字符),使得每个字符覆盖一条基本路径。其中,x='r',y='f',z∈['0'-'9'],u<'0',v>'9'并且v!='f',w任意,这6个字符可任意排列。例如,mode="rOf aa"。
    【解析】
    7、本题考查白盒测试法的应用。 本问题考查白盒测试用例设计方法中的判定覆盖法。 判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有4个判定,所以满足判定覆盖一共需要8个逻辑条件,如下表所示。

    8、本问题考查白盒测试用例设计方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。 控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:



    根据题中程序绘制的控制流图如下所示。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,if(*p>='0'&&*p<='9')这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。



    环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数。环路复杂度等于图中判定结点的个数加1,图中判定结点个数为5,所以V(G)=6。9、
    本问题考查白盒测试用例设计方法中的基本路径法。涉及到的知识点包括:根据控制流图和环路复杂度设计测试用例。注意环路复杂度只是测试用例数的上限。 本题中程序的环路复杂度为6,因此测试用例上限为6,但本题程序比较特殊,只需要一个测试用例即可实现。例如,构造一个6个字符构成的字符串(设为x,y,z,u,v,w6个字符),使得每个字符覆盖一条基本路径即可。其中,X='r',y='f',z∈['0'-'9'],u<'0',v>'9'并且v!='f',w任意,这6个字符可任意排列。

  • 第23题:

    阅读下列说明,回答问题l至问题3,将解答或相应的编号填入对应栏内。[说明] 逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。 getit( int m) { int i, k; k=sqrt(m); for ( i=2; i<=k; i++) if (m % i=0) break; if ( i>=k+1 ) printf( "%d is a selected number\n", m); else printf( "%d is not a selected number\n", m ); }10、请找出程序中所有的逻辑判断子语句。11、请将满足100%DC(判定覆盖)所需的逻辑条件填入下表。



    12、请画出上述程序的控制流图,并计算其控制流图的环路复杂度VG.。假设函数getit的参数m取值范围是150<m<160,请使用基本路径测试法设计测试用例,将参数m的取值填入下表,使之满足基本路径覆盖要求。



    答案:
    解析: