成功进行福建省体彩网审查的10个问题

多年来,我在审查福建省体彩网时注意到了一些常见的陷阱。他们’无论公司的规模大小或开发过程的成熟程度如何(我都有机会为公司进行软件审查,这些公司从具有严格而官僚化流程的公司到那些“先射后”的公司)。为了帮助减轻这些常见问题,在审查C福建省体彩网以帮助查找潜在的bug缠身区域时,可以提出10个问题。

问题1 –程序生成时是否没有警告?

未经成功编译,无法将福建省体彩网加载到目标上。成功的编译需要程序员努力消除语法错误,以使编译器满意并使其创建输出文件。但是编译器可以构建应用程序而不会出错,但仍然可以发现其他异常,例如隐式强制转换,它会报告为警告。因此,要真正成功地编译程序,不仅应包括零错误的编译,还应包括零警告的编译。成功编译的定义似乎很明显,但是无法解决警告是一个错误,我仍然会从绿色工程师和高级工程师中看到这一错误。我看到的最坏的情况是收到了100多个警告!最令人不安的情况只有一种:将无符号整数转换为浮点数的简单隐式强制转换警告。

问题2 –是否有任何阻止功能?

我认为,微控制器(MCU)的主要目的之一是能够处理实时事件。 MCU应该能够以非常确定的方式处理这些事件,并且可以对其进行测量和验证。但是,我经常看到的常见错误之一是编写驱动程序或某些应用程序福建省体彩网段,使其进入循环或调用延迟功能的时间较长。但是循环或延迟会阻止任何其他福建省体彩网在处理器上运行,从而有可能损害确定性。按钮反跳功能是一个臭名昭著的例子。许多轮询操作都没有读取GPIO引脚或设置中断,而是读取该引脚,然后输入20、30,甚至40毫秒的延迟,然后再次读取该引脚。以图1为例。在没有RTOS的环境中,这种延迟是实时系统的死亡。

2016年-09-figure1

问题3 –是否有潜在的无限循环?

谁在他们的头脑中会故意在他们的福建省体彩网中加入无限循环? (当然不包括任务或应用程序中需要的那些’的主循环。)然而,网络上和来自硅供应商的许多示例福建省体彩网都表现出无限循环故障行为。例如,将数据写入闪存或EEPROM的福建省体彩网通常将监视硬件标志是否完成。示例福建省体彩网将创建一个 在继续操作之前,先在标志上循环以达到特定状态。但是,如果硬件发生故障且标志从未设置,则福建省体彩网将陷入无限循环!这样的一个例子可以在图2中看到。

2016年-09-figure2

可以解决此无限循环故障的一种方法是让循环监视系统滴答声,或者限制循环可以执行的次数,最后确定发生错误。这些补救措施允许在硬件发生故障的情况下将错误处理内置到系统中。尽管普遍认为,硬件(和软件)确实会失败。

问题4 –是否应将此功能参数设置为 const?

程序员往往不使用 const 尽可能多地使用它们,尤其是在函数参数方面。将传递的函数参数声明为 const 这是防止该变量在函数中被意外修改的好方法。为什么要让未来的开发人员意识到他们不应该修改该系统关键变量,而只能使用它呢?

问题5 –福建省体彩网是’圈复杂度小于10?

监控功能 ’圈复杂度度量是帮助限制函数复杂度的好方法。此度量标准直接关系到要测试每个分支的功能上需要执行的最少测试用例数。不仅如此,该指标还可以真正告诉开发人员在编写或修改功能时需要记住多少。由于大多数人一次只能跟踪7到9件事,因此将循环复杂度保持在10以下是一个很好的选择,可以帮助降低错误率。

问题6 –有 外部 受到自由使用的限制 静态的?

C语言默认变量’s scope to 外部。此默认值是隐式的。在模块中声明的变量,不使用 静态的 有很大的隐形 外部 坐在它前面。摆脱那种看不见的唯一方法 外部 是放置一个可见的 静态的 在声明的前面。这种做法的另一个好处是使变量在作用域内成为局部变量,有助于数据隐藏和封装。寻找隐式的最常见地方 外部s是模块级变量声明。

问题7 –全部完成 if … 其他 if … 条件句以 其他?

在switch语句中必须使用默认情况。如果不存在默认情况,则静态分析工具会抱怨。开发人员可以很容易地看到,如果条件保证在各种情况下都可以使用switch语句,则可能存在意外情况或被忽略的情况,而该情况应该具有默认的全部情况。这适用于 如果……否则…… 有条件的。如果要检查两个或多个条件,如果这些情况均不满足当前条件,该怎么办?决赛 其他 该语句中的行为与switch语句中的默认情况一样。

问题#8 –是否存在断言和/或输入/输出检查?

我记得在高中编程课程中很早就读过的一课是,应检查函数的输入和输出,以确保它们有效。不幸的是,尽管进行了这种教学,嵌入式软件开发人员还是倾向于忽略这种计算机科学的智慧。嵌入式软件开发人员应在其福建省体彩网中添加断言,以验证其对程序的假设’在某些时候的行为是正确的。应该对入站和出站数据执行边界检查。记住那句老话“垃圾进垃圾出?”

问题9 –是否有头部护板?

标头防护是一个简单的宏,可确保标头文件在翻译单元中的包含次数不超过一次。防护罩可防止 #包括 指令。不包括标题防护可能会导致一些非常奇怪的静态分析行为。更重要的是,使用防护可防止出现多个定义错误。

问题10 –是否使用浮点数学?

在嵌入式系统中,浮点数学的使用可能是一个棘手的话题。资源受限的微控制器通常不包含浮点单元(FPU)。这种缺席意味着处理器只有一种执行浮点计算的方法:使用库函数。用于浮点数学运算的库函数通常很慢且效率低下,它们不一定具有确定性的行为,并且可能导致福建省体彩网大小膨胀。由于这些原因,开发人员应仔细考虑何时在微控制器中使用浮点。他们还应该执行其他测试,并应考虑其他方法,例如查找表,缩放和定点数学。

结论

许多工程师发现福建省体彩网审查非常无聊,但实际上很有趣。我发现咨询是其中一个非常有趣的方面,因为执行福建省体彩网审查可能是一个非常令人兴奋的时刻。每个程序员对于嵌入式软件开发以及我们都喜欢和讨厌的C语言都有自己独特的看法和见解,因此总有一些东西需要学习。尽管开发人员正在实施许多洞察力以及不同级别的检查和平衡,但错误仍然存​​在。这十个问题解决了开发嵌入式软件时的常见错误和误解,应在每次福建省体彩网审查时进行检查。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.