嵌入式软件的Misra标准

时间:2020-03-05 18:53:29  来源:igfitidea点击:

我要求使大量代码符合MISRA。
第一个问题:有人可以根据经验为通过嵌入式系统编写良好的代码做出一个估计。我了解"写得好"的定义不明确且含糊不清,因此我要求进行原始估算。
第二个问题:有关可定制(即禁止显示特定警告)并在自动构建环境(即命令行界面)中使用的工具的任何建议
其他可以帮助完成此任务的有用建议。
谢谢伊利亚。

解决方案

回答

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

回答

如果遵循相当好的编程习惯,那么使代码与Misra兼容就不会太麻烦。如果我们要使之遵循的代码具有一些怪异而奇妙的指针算法,则我们可能会发现某些指针规则有些棘手。

我是格雷格对PC Lint的推荐,但是开源Splint也值得一看,尽管在它们之间(以及编译器的警告系统),我估计我们仍然只能涵盖80%的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符合性的代码测试和检查的额外费用。

回答

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

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

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

附带说明,其他商业静态分析工具也可能也执行了MISRA。据报道(根据他们的销售代表),Klocwork做到了。

回答

我们也有类似的问题,需要对Misra规则进行改造。我们在一个大型项目中遇到一些代码质量问题,因此决定使用MISRA来提高代码质量。

我们使用支持MISRA C规则的Green Hills编译器。也有独立的检查器。根据我们要执行的操作,在所有规则上执行终止操作可能会有些麻烦。我们一次启用了一条规则,使人们有时间修复有限数量的类似问题,否则我们将完全被大量错误所淹没。

由于我们的警告是由编译器而不是独立工具生成的,因此我们在开发过程中不仅在运行检查器时都会看到错误。随着我们继续开发,我们使我们的代码合规,而不是一in而就。这也可以防止旧习惯破坏新代码,使我们以后必须重新处理代码。

有时很难使旧代码符合要求,因为没人确切知道代码的工作方式。希望我们有单元测试。