我需要使大量代码符合 MISRA 要求。
第一个问题:有人可以给一个 估计 用于根据经验传递编写良好的嵌入式系统代码。我知道“写得好”的定义不明确且模糊,所以我要求进行原始估计。
第二个问题:对可定制(即允许抑制特定警告)并在自动构建环境(即命令行界面)中使用的工具的任何建议
任何其他可以帮助完成此任务的有用建议。
谢谢伊利亚。

有帮助吗?

解决方案

我还强烈推荐 PC-Lint。如果您碰巧使用 Visual Studio 编译代码,我推荐使用 Riverblade 的插件“Visual Lint”。如果无法在 Visual Studio 中编译代码,仍然可以从命令行运行 PC-Lint,效果良好。

某些嵌入式系统编译器提供 MISRA 合规性测试作为编译器警告。我使用IAR编译器进行Arm7/Arm9开发。它在编译器设置中提供了一个易于配置的 MISRA 合规性检查表。

很难想出一条经验法则来估计编写一些符合 MISRA 要求的良好代码所需的时间。很大程度上取决于程序员现有的编码习惯以及他们最初遵循 MISRA 规则的程度。

粗略估计:
2 - 3 天即可熟练掌握 PC-Lint 的使用。
使现有代码符合 MISRA 的初步通过:10% 到 25% 的时间首先花在编写代码上。
保持代码符合 MISRA 标准:5% 到 10% 投入到代码开发中。其中一半成本用于改变编码员的习惯,以遵循“MISRA 方式”做事。另一半是代码测试和检查的额外成本,以确保 MISRA 合规性。

其他提示

如果您遵循相当好的编程实践,那么使代码符合 Misra 规范并不是一件很麻烦的事。如果您试图遵守的代码有一些奇怪而美妙的指针算术,您可能会发现某些指针规则有点棘手。

我赞同 Greg 对 PC Lint 的推荐,但开源 Splint 也值得一看,尽管在它们(以及编译器的警告系统)之间,我估计您仍然只能覆盖 80% 的 Misra 规则- 其余的可能需要手动进行代码审查。

我使用 PC Lint 对 C 和 C++ 代码进行静态分析。它可以配置为显示哪些 MISRA 规则被违反,并且它有一个命令行界面。

我使用过一个名为的商业工具 质量保证委员会. 。该工具能够强制执行 米斯拉

它有一个命令行界面,因此您可以将其设置为从自动构建环境运行。要应用的规则是可配置的,但希望有人花一些时间来设置它。MISRA 的执行非常简单并且运作良好。有人告诉我(这只是第三手资料),这是一些机构(例如 FDA)用来评估代码的工具之一。与大多数静态分析工具一样,需要处理噪声(误报)。上次我使用它时,它没有一个好的方法来标记/阻止误报再次发生(不更改它所抱怨的代码)。

我怀疑初级工程师最多需要一周(4-5 天)的时间来完成设置(假设他们决心让它按照您想要的方式工作)。

顺便说一句,其他商业静态分析工具也可能有 MISRA 强制执行。据报道(根据他们的销售代表), 克洛克沃克 做。

我们在改造 Misra 规则时也遇到了类似的问题。我们在一个大型项目中遇到了一些代码质量问题,并决定使用 MISRA 来提高代码质量。

我们使用支持 MISRA C 规则的 Green Hills 编译器。还有独立的检查器可用。根据你想要做什么,切换所有规则可能有点过头了。我们一次打开一个规则,让人们有时间修复有限数量的类似问题,否则你会被大量的错误完全淹没。

由于我们的警告是由编译器生成的,而不是由独立工具生成的,因此您在开发时会看到错误,而不仅仅是在运行检查器时看到错误。随着我们继续开发,我们的代码变得兼容,而不是一蹴而就。这也可以防止旧习惯破坏新代码,导致您稍后必须再次修改代码。

有时很难使旧代码兼容,因为没有人确切知道代码是如何工作的。我希望你有单元测试。

我明白这是一个老问题,但为了任何其他考古学家(或搜索者)的利益,重要的是要记住 MISRA 提供 指导方针 不应总是盲目遵循这一点。

我建议在编写新代码时牢记 MISRA;因此,保持合规性会容易得多。

然而,这并不总是可能的 - 特别是在尝试对代码进行逆向工程以满足准则时。在这种情况下,我建议您关注必需的规则,并将建议视为奖励......成本与收益也适用于此!

另外,请记住,存在偏差过程 - 最好保持干净且可维护的偏差代码,而不是设计一些合规但难以辨认的意大利面条。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top