12

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

4

6 回答 6

12

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

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

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

粗略估计:
熟练使用 PC-Lint 需要 2 - 3 天。
使现有代码符合 MISRA 的初步阶段:首先花费 10% 到 25% 的时间编写代码。
保持代码符合 MISRA:代码开发增加了 5% 到 10%。其中一半的成本是改变编码人员的习惯以遵循“MISRA 方式”做事。另一半是代码测试和检查的额外成本,以确保符合 MISRA。

于 2008-09-15T15:11:25.610 回答
8

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

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

于 2008-09-15T13:55:23.250 回答
4

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

于 2008-09-15T13:47:16.080 回答
3

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

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

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

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

于 2008-09-15T23:19:53.330 回答
3

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

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

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

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

于 2008-11-10T11:19:12.487 回答
1

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

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

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

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

于 2012-08-28T13:19:10.787 回答