阅读以下关于某嵌入式系统多路数据采集的说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某嵌入式系统中,存在16路数据采集通道,为了提高数据采集的可靠性,对16路采集通道均采用双余度设计,为了监控采集通道是否发生故障,对各路双余度通

admin2016-11-11  32

问题 阅读以下关于某嵌入式系统多路数据采集的说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
    某嵌入式系统中,存在16路数据采集通道,为了提高数据采集的可靠性,对16路采集通道均采用双余度设计,为了监控采集通道是否发生故障,对各路双余度通道采集值进行比较,只有当该通道两个余度设备采集值均不小于45时,才表示该路通道正常。设计人员设计函数num of passer用于统计无故障通道数目,在该函数的设计中考虑了如下因素:
    (1)采用如下数据结构存储通道号及采集值:
    Struct value
    {unsigned int    No;    //通道号,1到16
    unsigned short  Value1;  //余度1采集值
    unsigned short  Value2;  //余度2采集值
    }
    (2)当输入参数异常时,函数返回-1;
    (3)若正确统计了无故障通道数目,则返回该数目;
    (4)该函数需要两个输入参数,第一个参数是用于存储通道号及余度采集值的数组,第二个参数为通道总数目。
    开发人员根据上述要求使用ANSI C对代码实现如下(代码中第一个数字代表行号):
    1)unsigned int num_of_passer(struct value array[],unsigned int num)
    {
    2)    unsigned int n=0;    //循环变量
    3)    unsigned int counter;    //无故障通道数目
    4)    if((array==NULL)||(num==0)||(num>16))
    5)    return-i;    //当输入参数异常时,函数返回-1
    6)    for in=0;  n<=num;  n++)
           {
    7)    if((array[n].Value1>45)&&((array[n].Value2>45)))
    8)    counter=counter+1;
       }
    9)    return counter;
        }
【问题1】
嵌入式软件中通常使用圈复杂度来衡量程序的可维护性(一般要求圈复杂度不大于10),请计算函数num_of_passer的圈复杂度。

选项

答案圈复杂度:7

解析 控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。
    在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。
    嵌入式软件中通常使用圈复杂度来衡量程序的可维护性,一般要求圈复杂度不大于10。函数num_of_passer的流程图如下图3-1所示。

有以下3种方法计算圈复杂度:
1.没有流程图的算法:
    基数为1,碰到以下项加1:
    分支数(如if、for、while和do while);SWitch中的case语句数;
    如果条件是2个复合条件的话,则加2,否则加1。
    2.给定流程图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。
    3.给定流程图G的圈复杂度V(G),定义为V(G)=P+l,P是流图G中判定结点的数量。
    按第1种没有流程图的算法,函数num of passer中一个for,两个if,但是一个if是3个复合条件应该加3,另一个if是两个组合条件,应该加2,所以圈复杂度为基数(1)+for(1)+if(3)+if(2)=7,圈复杂度为7。
    按第2种圈复杂度V(G),定义为V(G)=E-N+2算法,函数num of passer流程图中E为16,N为11,所以V(G)=16-11+2=7。
    按第3种圈复杂度V(G),定义为V(G)=P+1,函数num of passer流程图中P为6,所以V(G)=P+1=6+1=7。
    上述3种算法中的任意方法,函数num_of_passer的圈复杂度都计算为7。
转载请注明原文地址:https://jikaoti.com/ti/f6I7FFFM
0

最新回复(0)