阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某嵌入式系统中,存在16路数据采集通道。为了提高数据采集的可靠性,对16路采集通道均采用双余度设计;为了监控采集通道是否发生故障,对各路双余度通道采集值进行比较。只有当该通道两个余度

admin2016-11-13  27

问题 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某嵌入式系统中,存在16路数据采集通道。为了提高数据采集的可靠性,对16路采集通道均采用双余度设计;为了监控采集通道是否发生故障,对各路双余度通道采集值进行比较。只有当该通道两个余度设备采集值均不小于45时,才表示该路通道正常。设计人员设计函数用于统计无故障通道数目,在该函数的设计中考虑了如下因素:
(1)采用如下数据结构存储通道号及采集值:

(2)当输入参数异常时,函数返回-1;
(3)若正确统计了无故障通道数目,则返回该数目;
(4)该函数需要两个输入参数,第一个参数是用于存储通道号及余度采集值的数组,第二个参数为通道总数目;
(5)调用函数sort()对存储通道号及余度采集值的数组进行排序处理。
开发人员根据上述要求使用ANSI C对代码实现如下(代码中每行的第一个数字代表行号):

【问题2】
请使用代码审查的方法找出该程序中所包含的至少4处错误,指出错误所在的行号和问题描述。

选项

答案[*]

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

最新回复(0)