繁体   English   中英

嵌入式软件的 Misra 标准

[英]Misra standard for embedded software

我需要使大量代码符合 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 规则- rest 可能需要手动审查代码。

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

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

我们使用支持 MISRA C 规则的 Green Hills 编译器。 也有独立的检查器可用。 根据您想要执行的操作,打开所有规则可能有点过头了。 我们一次打开一个规则,让人们有时间解决有限数量的类似问题,否则你会完全被错误的数量所淹没。

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

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

我使用了一个名为QAC的商业工具。 该工具能够执行MISRA

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

我怀疑初级工程师最多需要一周(4-5 天)来设置它(假设他们决心让它按你的意愿工作)。

另一方面,其他商业 static 分析工具也可能具有 MISRA 实施。 据报道(根据他们的销售代表), Klocwork确实如此。

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

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

但是,这并不总是可行的——尤其是在尝试对代码进行逆向工程以符合准则时。 在这种情况下,我建议您专注于必需的规则,并将咨询视为奖励......成本v收益也适用于此!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM