嵌入式开发:设计安全可靠的嵌入式系统最佳实践

更新时间: 2023-01-21 14:20:07来源: 粤嵌教育浏览量:2394


时间限制给嵌入式开发人员带来了在严格的时间表内完成项目需求的压力,在许多情况下,时间表是不够的。此外,人们对嵌入式软件的可靠性、准确性和性能的期望高于实时计算。我们还需要考虑嵌入式软件在其上运行的实际目标硬件的约束。软件符合性和认证要求通常是由工业强加的,以解决安全和保障问题。嵌入式系统的软件开发项目面临着各种各样的挑战。

 

过程标准提供了过程、验证方法和最佳实践,以确保软件安全、安全和高质量。其中包括:

DO-178B/C(航空电子设备)

ISO 26262(汽车)

IEC 62304(医疗)

IEC 61508(工业)

EN 50128(轨道)

 

软件验证和确认是遵守过程标准的重要组成部分。这是一个涉及不同软件测试技术的过程,可能是严格的、昂贵的和耗时的。

采用一两种软件测试技术不会解决问题。在开发生命周期中使用各种自动化方法将会节省的时间和金钱。这也将有助于建立一个可靠的声誉,这是无价的。

 

嵌入式软件开发的自动化测试方法

自动化对于测试嵌入式软件至关重要,因为手动方法容易出错且耗时。让我们来讨论一下对嵌入式开发团队有帮助的重要的自动化测试方法。

 

1.静态代码分析

首先,建议总是将静态代码分析作为第一种测试方法。执行静态分析的一个极好的优点是,可以在项目的任何阶段引入和使用它。即使项目是不完整的和部分编码的,静态代码分析也是有效的,因为不需要代码执行。

 

引入静态分析的最大挑战是大量的代码会产生大量的警告将静态分析集成到项目中时,建议关注以下几点

尽快提高团队效率。

尽量减少团队被所有静态分析警告淹没的机会。

 

这并不是为了降低这些警告的重要性,然而,大多数嵌入式开发人员没有修复现有或遗留代码的特权。

因为有各种编码符合性标准(MISRA C:2012AUTOSAR C++14SEI CERTCWE等),所以从目标开始。如果安全是关键目标,那么启用所有与安全相关的规则,禁用不太重要的规则,并启用内置安全编码标准之一(如CERT C/C++)是有意义的。




2.动态分析方法或运行时错误检测

如前所述,一种测试方法是不够的。仅通过静态分析不可能识别所有错误或缺陷。动态分析方法或运行时错误检测也是一种测试实践。

这个测试应该与需求相联系。它检查运行的代码,暴露架构和行为缺陷、其他弱点和/或安全漏洞,包括内存泄漏等等。

嵌入式开发团队可以在不同层次的软件抽象中应用这种类型的测试。从测试每个单独的单元或功能开始,然后集成额外的软件部分。最终软件测试系统作为一个整体或黑盒。这通常表现在众所周知的V-model软件生命周期中。

 

3.结构化代码覆盖率

在动态分析方法中,覆盖了其他可以应用的技术,比如结构化代码覆盖。

简而言之,结构覆盖是为了确定系统是否经过充分测试而对已经执行和记录的代码的识别。如果可以通过测试用例的执行来确定已经被执行的代码,那么未被覆盖或未被执行的代码暴露了对额外测试的需求。

 

如果的符合性需求是获得100%的代码覆盖率,那么将需要至少通过单元测试和手动测试的方式来执行覆盖率。虽然我们可以继续揭示其他测试方法,如回归、性能、压力、APIUI、验收等等,但是让我们深入到嵌入式系统测试的现代部署中。

 

4.持续集成和持续交付

在过去的几年中,一个越来越受欢迎的话题是持续集成和持续交付(CI/CD)CI/CD是每夜集成的软件开发实践(将较小的构建单元组合成应用程序、库或组件)目的是构建可测试的软件,用于持续交付和早期检测构建/集成问题和错误。

 

嵌入式开发开发中的CI/CD通常受到应用程序开发所没有的约束。除了目标硬件平台的物理和计算约束之外,还有合规性约束。嵌入式软件市场对极长生命周期的安全性有着独特的要求。产品可以在市场上保留几十年。



今天,一些组织将静态分析合并到他们的CI/CD现代开发工作流程中。自适应通常围绕基于Git的开发环境,采用动态方法进行分支和合并,其中开发人员可以指定一个父/引用分支来与他们当前的开发分支进行比较,并自动比较和计算用于分析的增量。

 

因此,不需要在整个项目上运行分析,这可能需要相当长的时间,甚至几个小时,它可以在最少的文件集上运行。这缩短了评估会议和聚焦的持续时间。然后,可以解决编码违规问题并进行补救,以获得干净、安全和可靠的构建。




5.集装箱化的开发环境

另一种类型的现代化来自于集装箱化的开发环境。开发工具的容器化部署正在成为嵌入式开发团队的有力工具

尽管最初开发容器是为了解决微服务和基于web的应用程序的部署问题,但最近它们在嵌入式团队中受到了欢迎。尤其是对于使用容器来管理复杂工具链的大型团队。

 

当涉及到管理复杂的开发环境时,尤其是在安全关键领域,团队通常会面临以下挑战,这些挑战使用容器很容易解决

将整个团队的升级同步到工具的最新版本,比如编译器、构建工具链等等。

对库或软件开发工具包(SDK)的新安全补丁作出动态反应,等等。

确保所有团队成员的工具链和自动化基础设施(CI/CD)的一致性。

能够对开发环境进行版本控制,并恢复它以服务于通过特定工具链认证的产品的旧版本。

 

总结

如果希望简化嵌入式开发团队工作流程、削减成本并缩短上市时间,那么了解嵌入式安全和安全关键系统开发中的挑战、解决方案和现代方法对非常重要。


免费预约试听课