虽然可以对开发过程进行许多调整以加快认证速度,但一切都从代码质量开始。但是如何确保代码质量呢?幸运的是,有一些简单的方法可以让你快速升级代码质量的游戏。
从标准中获得帮助
你知道在C99中,大约有190种不同的歧义存在于代码规范中吗?我们的意思是,在C99中,有190种不同的语法上合法的C结构没有在C语言规范中说明出来。当你使用C18时,情况会变得更糟,在c++中更是如此,你开始引入多重继承和虚继承的概念。当然,编译器必须将源代码转换为具体的代码,因此它必须选择对代码含义的解释,并使用它运行。
实际上,这意味着不同的编译器可以以不同的方式解释源代码。在高可靠性系统中,这是一场噩梦,特别是因为许多追求功能安全认证的公司为了便于测试,在多个平台上交叉编译代码。可以想象,这可能会对获得认证所需的时间造成不利影响,因为您必须围绕所有这些情况进行测试,以证明代码的可重复性和可靠性。
我们要怎么熬过去?简单的答案是在代码中避免这些歧义。但是我们怎么做呢?使用像MISRA这样的编码标准是解决问题的快速方法,因为它们被设计用来防止代码中常见的那些类型的陷阱。它们还促进安全可靠的编码实践,以减少代码中的缺陷数量。但我们如何确保遵循这些标准呢?幸运的是,功能安全标准为我们提供了一种完成这项任务的方法。
标准需要代码分析
实际上,每个功能安全标准都要求对代码进行静态分析,并强烈建议对代码进行运行时(或动态)分析。这些标准中覆盖面最广的是IEC 61508,它一般涵盖了与安全相关的系统。
在该标准的C.4.2节中,对于任何高于安全完整性级别(SIL) 1的内容,都不建议使用C语言,而不使用消除模糊和危险行为的编码标准。换句话说,如果您希望为您的产品获得SIL 2-4认证,那么您必须使用静态分析来使您的代码更加健壮。这是为什么呢?这些静态分析工具可以迫使开发人员实现像MISRA这样的编码标准。此外,静态和运行时分析可以帮助您提高代码质量,快速指出您何时进入危险的编码行为,特别是前面提到的编码标准歧义。
然而,这些类型的自动化工具也会对您的认证时间表产生巨大的影响。许多组织使用难以配置、难以使用的代码分析工具,这些工具被降级为运行在构建服务器上的每晚构建的一部分。
这样的场景并没有太大的帮助,因为开发人员无法获得关于他们刚刚编写的代码的错误的即时反馈。此外,有时来自这些工具的警告消息是不可理解的。因此,开发人员浪费时间试图弄清楚它们的意思,以及如何纠正代码以消除警告。
如果您可以在开发过程中运行代码分析—并且在将其签入正式构建之前—那么缺陷就好像从未发生过一样。您为您的项目获得了一个较低的缺陷注入率,这是认证实体喜欢看到的,因为这意味着您拥有一个非常成熟的开发组织。
让代码分析成为日常工作流程的一部分
代码分析工具越容易配置和使用,开发人员就越有可能和更快地使用它们,并意识到它们的好处。有这些自动化工具作为开发人员工具箱的一部分,意味着你可以检查和改进代码质量写应用程序,当你“区”的理解这部分代码是为了做什么,以及它如何与系统中其他模块。为了有效地做到这一点,必须将这些工具集成到日常工作流程中。
当我查看其他人关于集成代码分析的说法时,我发现谷歌发表了一篇文章,"在谷歌构建静态分析工具的经验,"在ACM通信,看看代码分析的优点。尽管这篇文章对它们的整个代码库(包括C、c++和Java)采取了一个整体的观点,但它们的结果非常清楚:
编译器错误会在开发过程的早期显示出来,并集成到开发人员的工作流程中。我们已经发现,在谷歌中,扩展编译器检查集对提高代码质量是有效的。”
作者指出,将静态分析检查移到编译器的工作流程中,并使它们作为错误出现,极大地提高了对工具结果的关注,这最终意味着他们的代码具有更高的质量。接下来,他们谈到了一份针对最近遇到编译器错误的开发者的调查报告,以及针对同样问题收到补丁的开发者的调查报告:
“谷歌开发人员认为,在编译时标记的问题(相对于签入代码的补丁)可以捕捉到更重要的错误;例如,调查参与者认为在编译时标记的74%的问题是‘真正的问题’,而在签入代码中发现的问题只有21%。”
这篇文章还讨论了将代码分析作为工作流程的一部分的重要性,指出当他们通过一个静态分析工具自动地运行提交并邀请工程师查看分析仪表板时,很少有工程师会坚持到底。在编译过程中提供即时反馈,使得静态分析更容易使用,也更难忽略。因此,他们选择在每个人的工作流程中默认地集成静态分析。他们相信,代码分析工具要想成功,开发人员必须觉得他们从使用这些工具中获益,并且喜欢使用这些工具。
但是,将代码分析添加到工作流中,您期望看到什么样的结果呢?一是提高应用程序的整体安全性——高代码质量可以消除诸如缓冲区溢出、非法指针等漏洞,如本文所述,”通过静态分析工具展览会改进软件保证.”
虽然这本身是使用代码分析的一个令人信服的理由,但有时很难使人们相信“一盎司的预防抵得上一磅的治疗”这一格言。您经常需要更重要的结果来说服开发人员和管理人员相信代码分析的优点。
一个斯蒂芬·瓦格纳的论文d其他人使用经验数据来计算代码分析工具与传统测试在不同代码基础上的优势。他们的结果很能说明问题:在769个已识别的缺陷中,76%是通过代码分析工具发现的,只有4%是通过传统测试发现的(剩下的20%是通过代码复查发现的)。
如果您能够在开始测试之前消除75%的错误,那么您能以多快的速度实现软件的平均故障时间(MTTF)目标?答案是“非常快”。光是在测试上节省的时间和金钱就足以让在代码分析工具上的投资物有所值,更不用说在上市时间上的节省了。这些是功能安全认证实体喜欢看到的过程类型,因为它大大降低了最终产品进入该领域的缺陷风险。
高质量的代码加速你的功能安全之路
加速功能安全认证过程的关键是提高代码质量。通过提高代码质量,您可以降低缺陷注入率,这意味着您可以更快地达到软件发布标准。因此,对于功能安全认证实体来说,您的开发组织看起来非常成熟。虽然您永远无法确切地知道应用程序中还剩下多少缺陷,但是您可以通过尽早且经常地使用代码分析工具来最小化缺陷的数量。
Shawn Prestridge是美国现场应用工程师团队的领导者IAR系统.