krisana-antharith_dreamstime_93689313
代码Krisana Antharith梦境时间l93689313

掌控您的RISC-V CodeBase

1月25日,2022年
以不断增长的速度交付更复杂的软件会增加软件错误的风险,这可能会影响产品质量并导致安全问题。这在相对较新的RISC-V代码库中变得更加现实。

本文是一部分TechXchange开发高质量的软件

成员能够下载本文PDF格式。

你会学到什么:

  • 为其他项目重用代码库。
  • 为什么代码质量在你的RISC-V代码库中是一个大问题。
  • 可以应用于代码构建的主要编码标准是什么?
  • 为什么代码分析工具提供了最快的方法来编写更好的代码。


当我们谈论控制RISC-V CodeBase时,它真的有两个方面。第一个含义是重用您的Codebase以供未来的项目。第二方面是,代码质量差实际上是一个广泛的问题 - 有很多证据支持声称,编码实践直接涉及漏洞。

显然,每个开发人员和公司都必须提高代码质量,这样软件才能经受住时间的考验。换句话说,它需要是无缺陷的,或尽可能接近无缺陷。

重用代码

Boehm的Cocoomo1方法估计编写代码的相对成本如何受到修改重用软件的程度的显著影响(图1).x轴是您对要重用的代码所做的修改百分比,而y轴表示您在写新的代码时将是什么百分比。


请注意,对于代码的三个数据样本中的两个,您不必修改大部分据称重复使用的代码,以突然跳转到从头开始重写代码的50%。这里的关键点是,如果你真的想要重用代码,它必须具有非常高的品质和良好的设计成本效益。

关注代码质量

代码质量之所以是一个大问题,有几个原因。首先,根据开发组织的成熟度,您可以花费80%的时间进行调试。

如果您能够在缺陷进入正式构建之前快速地将其隔离,那么您将拥有较低的缺陷注入率,这意味着您可以更快地满足组织的质量度量标准。但这也意味着您的代码总体上剩下的bug更少,使其成为一个很好的重用候选代码,因为再次使用代码可以降低发现以前未检测到的bug的机会。

此外,高质量的代码更容易维护,因为缺陷更少——如果它遵循良好的软件工程原则——它将更容易扩展。因此,重用它确实可以让您更快地进行后续项目。如果你的申请需要,获得安全认证也会更容易。因此,更高的代码质量意味着更少的“技术债”来重用它。

可用编码标准

有许多编码标准可用,但只有少数被广泛使用。MISRA - C2是由汽车工业软件可靠性协会(Motor Industry Software Reliability Association)制定的C语言软件开发标准。它的目标是促进嵌入式系统的代码安全性、可移植性和可靠性,特别是那些用ISO C编程的系统。

MISRA C标准的第一版“车载软件C语言使用指南”于1998年出版,正式名称为MISRA C:1998。2004年和2012年都进行了更新,增加了更多的规则。还有一个基于c++ 2003的MISRA c++ 2008标准。

在Common Weakness Enumeration中也可以找到一些好的编码标准规则3.主教法冠。这个列表是在mitre.org上的人们做了一个调查,以找出开发人员意外地注入到他们的代码中的缺陷类型时开始的。令人惊讶的是,所有类型的开发人员——网络、应用程序、桌面或嵌入式——都容易犯同样的错误。因此,CWE诞生了,它列出了开发人员应该避免的常见陷阱。

例如,在C ++代码(甚至在C代码中)有没有析解的分配。另一个涉及没有原型化的功能,这是良好编码实践的一个有趣点。如果您没有原型函数,则在编译时,您不会严格地检查。

但是,您还可以具有较低的效率代码,因为C语言状态的规则在没有原型的情况下,所有参数都被推广到整数。如果您的MCU没有FPU,这可以调用铸造和浮点操作。这就是为什么你应该总是原型。但是CWE的主要观点是它识别风险和不良的编码行为。

SEI CERT C和c++4还要定义来自案例研究的常见漏洞,比如检查浮点数的越界条件,以及确保不覆盖const对象。它还规定了样式约定,以使代码更易于阅读和理解。

MISRA C 2012的实际例子

MISRA C 2012被广泛用于确保嵌入式应用程序的代码质量。让我们探讨一些规则和指令,以便更好地理解编码标准如何影响源代码。

例如,在指令4.6中,你不允许使用原始数据类型。一开始,这似乎是一件很奇怪的事情,但是当你理解了原因,它就变得很有意义了。不同的编译器对待像int这样的东西是不同的,包括它的大小和它的符号性。这也会使代码审查变得棘手。如果您是一个审查者,它还会使您怀疑代码的原始作者是否理解编译器如何解释代码。如果不使用基元类型,则可以使代码在编译器和体系结构之间保持不变。

大多数情况下,开发人员将使用像UINT16_T这样的东西,这告诉编译器是无符号16位数量,因为在变量类型中明确说明宽度和签名。这些是stdint.h的一部分。

另一个有趣的指示是规则13。它说AND或or运算符的右边不能包含副作用。中的代码片段图2可能看起来完全正确,但不是。


问题是,只有当左边的表达式为假时,右边才会执行。只有这样,指针p才会后加1。问题是,在编写代码时很容易出现这种错误行为。此外,任何审查、测试或维护代码的人都必须理解您如何编写代码的后果。很明显,这段代码中的注释会有所帮助,但事实是,它很少有良好的文档记录。

第14条规定,如果陈述的陈述或虽然陈述必须括起来(图3)


很难判断z=1语句是否打算成为else块的一部分。这是因为它与前面的语句在同一层缩进。如果它的目的是这样的,这是一个bug,因为它显然没有按照它所写的方式进入代码块。该规则有助于防止这种类型的编码错误。它只是MISRA C中可用的200多个规则中的一个小示例,这些规则可以使您的代码更加可靠和可移植,从而使您的设计经得起未来的考验。

快速编写更好代码的方法

提高代码质量的最快方法是使用代码分析工具。事实上,如果您正在做一个功能安全认证的应用程序,则需要使用静态分析。

这些类型的工具可以帮助您找到代码中最常见的缺陷来源。然而,它们也可以帮助您发现开发人员在编写代码时往往不会考虑或担心的问题,特别是当他们只是为了让某些东西工作而构建脚手架代码时。这些类型的工具确实可以帮助您开发更好的代码,因为它们执行编码标准。

根据静态分析解决方案的质量,它们可以在您仍在办公桌上检查代码时检查许多其他潜在问题。为了了解它是如何工作的,让我们检查一下C-STAT静态分析工具(它被内置于用于RISC-V的IAR嵌入式工作台中)的运行情况。

C- stat的规则来源于MISRA C 2004和2012的规则集,MISRA c++ 2008的规则集,MITRE的公共弱点枚举(CWE),以及SEI CERT C。图4显示可启用或用于强制遵守编码标准的可用规则。


它可以钻取分类,只选择我们觉得适用于我们的项目的规则。此外,可以在组,文件,函数甚至单个线路级别覆盖这些选择,以便在所检查的内容上提供完整的粒度。

一旦配置了工具,就可以分析项目(或组或单个源文件)(或文件)。分析完成后,可以钻取每个文件来验证已触发的问题:

检测到问题CERT-ERR33-C_c in图5是证书C规则的一部分。大多数规则都是不言自明的,但是在用户指南中或在类似的上下文敏感的帮助(F1)中可以找到更多信息图6



从帮助窗口中,可以获得问题的完整描述,这是一个bug的确定程度与如果该bug出现时发生的严重程度之间的对比,以及它违反的所有编码标准。最重要的是,在底部,就像图7-可以看到1-3个代码示例,展示了一个糟糕的示例,以及如何纠正它,使其通过检查,使代码更健壮。这有助于快速消除静态分析在源代码中发现的缺陷。


自动化工作流

确保代码质量对于开发人员在桌面上工作的开发人员很重要。然而,更重要的是,用于CI / CD管道的现代和可扩展的构建服务器拓扑中的代码质量,包括虚拟机,容器(Docker)和跑步者。

代码分析工具应该很好地扩展,以便为在全球各地的不同地点展开的大队和团队可以轻松实现确保遵守规划标准的自动任务。图8介绍Linux - Ubuntu下C-STAT静态分析工具的使用方法。对于许多自动化工作流,跨平台支持是提高开发团队效率的标准。


从代码分析中获得帮助

静态分析的一个主要的理论上的好处是,它不会影响系统的性能,因为在执行分析时,它甚至没有运行系统。它也独立于测试套件的质量。毕竟,在运行代码中找到特定的错误取决于使用特定的数据集在程序中执行特定的路径。然而,理论上,静态分析工具可以检查代码中的所有可能路径。

通过在开发周期早期引入代码质量控制或在重用代码和未来校样源代码的同时,可以最小化错误的影响。提供使用具有明确定义的编码标准的RISC-V设备的开发人员指尖的静态分析可以帮助他们在开发期间找到源代码中的问题,其中错误的成本小于发布的产品。

阅读更多文章TechXchange开发高质量的软件

参考

1.https://en.wikipedia.org/wiki/cocomo.

2.https://www.misra.org.uk/misra-c/

3.https://cwe.mitre.org/

4.https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices?focusedCommentId=88044413

受欢迎的合作伙伴内容

LMR36506

LMR36506 3-V至65-V,0.6 - Aultra-Small Synchronous降压转换器,具有4μAIQ数据表(Rev.A)

3-V至36-V,2-A,低IQ同步降压调节器

TJMAX in 4-mm2 HotRod QFN datasheet(数据表)11 page - lmr436x0,36 - v, 1-A/2-A Buck Converter with <3µA IQ at 150°C

4.5-V至17-V,10-A同步SWIFT™降压转换器

4.5-V至17-V,10-A同步SWIFT™降压转换器

使用远程微控制器调试器的工业自动化设备的速度配beplay体育手机登录置

3月3日,2021年3月
beplay体育手机登录工业自动化设施正在增加使用基于微控制器的单板计算机(SBC)来控制设施操作......

声音你的意见!

本网站要求您注册或登录后发表评论。
尚未添加任何评论。想要开始对话?
Baidu