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

admin2016-11-11  26

问题 阅读以下关于某嵌入式系统多路数据采集的说明,回答问题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;
        }
【问题2】
作为测试人员,请参照表3-1序号1的方式使用代码审查的方法找出该程序中所包含的至少3处错误。

选项

答案[*]

解析 代码审查是不执行软件代码,而通过阅读软件代码发现代码可能存在的错误的过程。代码审查的测试内容包括检查代码和设计的一致性;检查代码执行标准的情况;检查代码逻辑表达的正确性;检查代码结构的合理性;检查代码的可读性。通过对说明的阅读,按照说明中描述的要求进行函数num of passer的代码审查。
    阅读第1行代码,函数返回值定义为unsigned int;而在说明的第(2)条描述了当输入参数异常时,函数返回一1;这样发现说明和代码不一致,显然代码定义的unsigned int不能返回.1,此为第1处错误。修改函数返回值的定义为int类型即可。
    阅读第3行代码,定义了无故障通道数目counter,在定义时未进行初始化,并且在第8行使用前依然未初始化。这就导致counter的初值为非确定值,可能出错,此为第2处错误。在第3行定义counter时初始化为0或者在使用前进行初始化为0均可。
    阅读第4行代码,对模块输入参数进行合法性检查,num合法值为1至16;然后查找使用num之处,在第6行对num进行了使用,但第6行使用时却从0开始,而且是小于等于num,这就意味着如果第4行num值为最大值16,在第6行就需要循环判断17次(0到16),而本题的说明中描述很清楚,最多就16路通道,此为第3处错误。但此问题的更改有两种方案,方案1可以更改第4行num>16为num>=16,缩小此参数的合法范围;方案2可以更改第6行n<=num为n<num减少循环次数。
    阅读第7行代码,对每个通道采集的双余度值进行有效性判断。按照说明,当余度设备采集值均不小于45时,才表示该路通道正常;但代码中使用当余度设备采集值均大于45时,表示该路通道正常,在对边界点45的处理上与说明不一致,此为第4处错误。将第7行代码中的两个“>”符号修改为“>=”即可与说明一致。
转载请注明原文地址:https://kaotiyun.com/show/xQWZ777K
0

相关试题推荐
最新回复(0)