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

admin2015-05-21  27

问题 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
    逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
    int XOR(char*filename,unsigned long key){
    FILE*input=NULL,~output=NULL;    //1
    char*outfilename=NULL;
    int len=strlen(filename);
    unsigned char buffer;
    if((filename[1en一2]==’.’)&&(filename[1en一1]==’C’)){//2,3
    outfilename=new char[len+1];    //4
    strcpy(outfilename,filename);
    outfilename[len一2]=’\0’;
    }
    else{  //S
    outfilename=new char[len+5];
    strcpy(outfilename,filename);
    strncat(outfilename,“.C”,2);
    }
    input=fopen(filename,“rb”);
    if(input==NULL){    //6
    cout<<”Error opening file”<    delete[]outfilename;
    outfilename=NULL;
    return 1;
    }
    output=fopen(outfilename,”wb”);
    if(output==NULL){    //8
    cout<<”Error creating output file”<delete[]outfilename;
    outfllename=NULL;
    return 1;
    }
    while(!feof(input)){    //1 0
    if(fread(&buffer,Sizeof(unsigned char),1,input)!=1){//11
    if(!feof(input)){    //12
    delete[]outfilename;    //13
    outfilename=NULL;
    fclose(input);
        fclose(output);
    return 1;
    }
    }
    else{     //14
    buffer^=key;
    fwrite(&buffer,sizeof(unsigned char),1,output);
    }
    }
    fclose kinput;    //15
    fclose(output);
    defete[]outfilename;
    return 0;
    }
请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。

选项

答案环路复杂度V(G)=8。 [*]

解析 本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据代码绘制控制流图、计算环路复杂度。
    控制流图是描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,
if((filename[len-2]=‘.’)&&(filename[len一1]=‘c’))这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。程序的环路复杂度等于控制流图中判定节点的个数加1,本题控制流图中判定节点个数为7,所以V(G)=8。
转载请注明原文地址:https://jikaoti.com/ti/7FI7FFFM
0

最新回复(0)