首页 > 汽车技术 > 正文

谈谈代码静态分析

2021-01-08 09:55:45·  来源:汽车ECU开发  
 
这是数字化的风险之一:网络犯罪分子在自动驾驶汽车中发现安全漏洞,并操纵油门或制动。随着车辆中软件占比越来越高,与安全漏洞相关的风险也会增加。长期以来,
这是数字化的风险之一:网络犯罪分子在自动驾驶汽车中发现安全漏洞,并操纵油门或制动。随着车辆中软件占比越来越高,与安全漏洞相关的风险也会增加。长期以来,全面分析和符合编码标准已成为必不可少的。静态代码分析可以在这方面提供帮助,因为正确使用代码,可以显着提高代码质量。

在讨论功能安全时,绕不开ISO26262。车辆中大多数软件组件必须得到相应的认证,对于这些软件组件,ISO26262建议在软件编码要遵循编码规范。汽车领域最成熟的编码标准莫过于MISRA C,MISRA C中的编码规则构成了高水平源码质量的基础,如果不严格执行编码标准,则很难获得功能安全认证,但是鉴于当前软件的复杂性很高,如果不使用自动化工具,这将是一项艰巨的任务。

近年来,静态代码分析越来越受汽车行业重视。适当的工具可以在编码过程中检查代码是否满足编码规则,如果不满足,立即显示违反的规则,并提示修改措施,这样可以帮助开发人员遵守编码规则。这样一来可以在开发阶段就避免潜在的问题,从而节省时间和精力,还能保证产品的质量。

尽早引入代码静态分析

“尽早”意味着在流程中引入静态代码分析的最佳时间是尽可能早的。理想情况下,应在开始编码之前部署合适的工具。然而,实际上,汽车行业的软件开发项目很少是从头开始。取而代之的是,开发是基于现有的代码进行的,例如来自开源,第三方开发人员或以前的项目的代码。在这种情况下,应尽早追溯并引入相应的工具,然后在整个开发过程中持续使用,这样就可以确保至少将来的代码从一开始就满足代码规范的要求。
在准备部署静态代码分析工具时,应该考虑软件集成的需求,例如开发人员使用的编译器?该工具如何与版本管理系统一起使用?如何与现有的工具链进行融合?最好的商业工具将允许灵活的部署方案,并与其他流行的开发工具顺利集成。

静态代码工具部署:第一步在开发人员的电脑桌面

静态分析器直接安装在开发人员的电脑上。这种解决方案可以在源代码编写的时候实时检测代码是否符合相关的编码规范(如图1)。如果某些代码不符合当前设定的编码规则,则开发人员会看到提示窗,以便开发人员可以更正此问题。由于提供了有关如何编写代码才能符合MISRA C规范的即时反馈结果,开发人员在中长期进行了培训,使其更加合规,慢慢的效率也就提高了。


图1 静态代码分析
另外分析工具也会检查当前代码组件是否存在客观错误。这样可以调高源码质量,从而节省时间和成本,例如潜在错误存在源码中的时间越长,则需要追溯检查已执行的流程和对其修复的成本就越高。更不用说如果部署在最终的产品中,它可能会成为安全漏洞,

第二步:构建在服务器上
在持续集成流程的形式中,进一步的分析流程将在服务器部署的帮助下执行。这通常是夜间在服务器上分析,涉及完整的项目分析,包括白天签入的所有代码部分。除了来自单个开发人员代码的检查,项目作为一个整体也会被检查。服务器部署的核心是深度数据流分析。这模拟了每个可能的执行路径的执行,而不是实际创建一个可执行程序。相反,它创建了一个软件的行为模型,可以用来监控变量及其在运行时将被分配的值。数据流分析还可以识别冗余代码,或永远不被执行的代码,这类代码可能会指向设计错误。另外在硬件资源严格受限的嵌入式系统中,它们可能会占用宝贵的存储空间。

在服务器分析过程中识别出的任何错误或冲突都会被标记以供审查。理想情况下,所使用的分析工具应该集成到一个问题管理系统中。这允许自动整理问题,并且分发给相应的开发人员,以便在第二天进行修复。另外也有可能发现了团队已知的问题,或者与各自项目无关的问题,例如,项目中根本没有使用特定的MISRA规则。即使这些与故障排除无关,也可以使用一个复杂的分析工具来确保对它们进行正式的文档化。如果进行了审核,团队可以很容易地证明该问题不是一个被忽略的错误,而是一个经过考虑的已知偏差,并且不会对车辆的正确运行产生风险。

为了在实践中使该解决方案达到最高的有效性,在引入和使用过程中要注意多个方面,这一点很重要。分析的效率随着工具针对特定工作环境、特定目标和特性的定制程度的提高而提高。

一般来说,引入这样的工具也需要进行个别的微调。如果不这么做,大多数时候可以检测出目标错误,但同时也存在风险。解决方案会产生大量的误报。没有优化配置的工具可能会产生许多误报,这需要时间和精力来优化工具。这可能会产生挫折感,并降低对工具的信心。因而开发人员可能不太愿意使用这个工具,这将不可避免地导致更多的安全问题出现在最终产品中。

另外一个潜在的风险在于静态分码分析工具引入时,未对开发人员进行培训,导致开发人员不能准确的分析报出的原因,另外也要认识到静态代码分析的局限性,例如,它不能根据开发人员的实际意图来检查一段代码,例如,如果一个函数是用来计算面积,但是开发人员写成图2所示,静态代码分析不会检测到一个错误,除非使用的变量出现了溢出。为使代码分析在实践中达到比较好的效果,汽车专家不应低估所需的努力训练开发人员的重要性。


图2 静态分析工具可能检测到可能的溢出,但无法确定该功能没有执行预期的操作

一旦正确的先决条件已经就位,在实践中成功使用静态代码分析的思路就清晰了。具体的好处可以用数字来衡量,并在整个项目中直接监控。可以度量质量指标,并将其与代码的快照关联起来,以构建随着时间推移的进度图。

最后就可以成为项目经理或者是管理者汇报项目的指标,例如错误数量随时间变化的报告,或者显示自引入解决方案以来,代码复杂性降低了多少。最终每个人都最终受益于改进代码质量:开发人员负担减小,不要因为莫名其妙的问题抓破头脑;汽车制造商可以得到满足合规要求的产品,并且获得不错的口碑,最后消费者使用的车辆更加安全。 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号