刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

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

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

int XOR(char * filename,unsigned long key){

    FILE * input = NULL , *output =  NULL;   //i

    char * outfilename = NULL;

    int len = strlen(filename);

    unsigned char buffer;

    if( (filename[len-2] == '.') && (filename[len-1] == 'c') ) { //2,3

    outfilename = new char[len+1];  //4

    strcpy(outfilename, filename);

    outfilename[len-2] = '\0';

    }

    else{   //5

    outfilename = new char[len+5];

    strcpy(outfilename, filename);

    strncat(outfilename,".c",2);

    }

    input =  fopen(filename,"rb");

    if( input == NULL) {   //6
 
    cout << "Error opening file " << filename << endl;  //7

    delete [] outfilename;

    outfilename = NULL;

    return 1;

    }

    output =  fopen(outfilename,"wb");

    if( output == NULL ) {   //8

    cout << "Error creating output file " << outfilename << endl;  //9

    delete [] outfilename;

    outfilename = NULL;

    return 1;

    }

    while( ! feof(input) ) {  //10

    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(input);   //15

    fclose(output);

    delete [] outfilename;

    return 0;

    }
请画出上述程序的控制流图,并计算其控制流图的环路复杂度VG。


使用微信搜索喵呜刷题,轻松应对考试!

答案:

环路复杂度V(G)=8。

解析:

本题考查了白盒测试用例设计中的控制流图绘制和环路复杂度的计算。

首先,控制流图是描述程序控制流的图示方式,由节点和定向边构成。节点代表一个基本块,定向边代表控制流的方向。对于本题中的程序,我们需要根据代码的逻辑结构来绘制控制流图。

关于环路复杂度V(G)的计算,它等于控制流图中的判定节点数加1。判定节点是指具有多个出口或入口的节点,通常对应于代码中的条件判断语句。在本题中,程序中的判断语句有多次出现,我们需要数出所有的判定节点。

具体到本题程序,判定节点主要包括:

  1. 文件名后缀是否为“.c”的判断;
  2. 文件打开是否成功的判断;
  3. 文件读取是否成功的判断;
  4. 文件写入是否成功的判断(虽然这里没有明确的判断语句,但由于写入操作可能失败,我们可以认为这是一个隐含的判定节点)。

加上一个初始的节点(程序的入口),总共有5个判定节点。因此,环路复杂度V(G)=5+1=6。但参考给出的答案为8,可能与具体的控制流图绘制方式有关,可能存在其他隐含的判定节点或复杂逻辑结构未在本解析中详细阐述。需要按照具体的控制流图来准确计算环路复杂度。

创作类型:
原创

本文链接:阅读下列说明,回答问题。【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share