0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何优化安全和业务关键型嵌入式软件开发

李丽华 来源:hrtuoyu 作者:hrtuoyu 2022-07-30 14:59 次阅读

开发安全或业务关键型软件只需要更多的知识和努力,以确保以不牺牲质量的方式使用工具和技术。

任何优化软件开发过程的尝试都将不可避免地遇到质量、资源和时间之间的古老权衡。这个三重约束对于项目经理来说是众所周知的,格言是只有三分之二才有可能成功。

当然,没有一家公司真的想在质量上妥协,但对于安全关键型或业务关键型软件而言,风险更高,因为在质量上妥协可能会导致严重的财务或危及生命的后果,因此主要关注点必须放在质量上对于此类项目。那么,当项目的性质要求软件质量必须是最重要的时候,您如何优化嵌入式软件开发呢?

培养质量文化
质量文化将减少实现优质产品的开销,并意味着在生产高质量软件时需要更少的有意识的思考和努力。

幸运的是,通过遵循一些简单的原则,发展质量文化相对容易。质量文化倾向于促进透明度和所有权。他们还将测试和质量控制视为开发过程的重要组成部分,而不是最后的开发步骤。

有效的质量文化的基石是良好的沟通。技术包括从每日例会到报告错误时提高清晰度的所有内容,以便在修复错误时不太可能犯错误。跨职能团队和团队之间的密切沟通也有助于促进质量文化,并确保所有利益相关者对质量和安全目标有很好的理解。

优化您的软件开发方法
现代软件开发方法,如敏捷和 DevOps,被广泛认为比传统的瀑布方法产生更快的结果。所有主要的软件安全标准(例如,IEC 61508、ISO 26262 和 DO-178C)都将软件开发定义为一个线性过程,v 模型在左侧显示需求定义,在右侧显示测试,如下图所示:

这使得在开发安全关键软件时很难摆脱线性瀑布方法。现代敏捷开发实践侧重于频繁发布,这可能会给安全关键型软件的开发带来问题,因为每个发布都需要经过正式的验证和/或认证流程。同样,DevOps 原则(例如持续部署)在涉及硬件时会变得更加复杂。

但是,仍然可以利用许多 DevOps 和敏捷原则来创建一种简化的、更具迭代性的方法来开发安全关键型和业务关键型嵌入式项目。

Shift-left
在项目开发生命周期中较早(左)移动工作量通常会导致整体工作量减少。花更多时间确保软件需求和设计正确可减少生产问题并避免将时间花在浪费性的开发活动上。左移的测试方法的原理是,更早地发现错误意味着可以更快、更容易、更便宜地修复它们。这主要是因为,如果测试被延迟,依赖项变得难以解除。

Shift-left 可以增量地应用于大型和复杂的系统。敏捷通过在敏捷方法中为每个冲刺或迭代使用迷你 v 模型来进一步实现这一点。

编写高质量的需求
定义明确的需求需要正确、完整、分解、明确和逻辑一致。这将有助于避免昂贵的返工和受挫的利益相关者。

为确保完整性,根据实际用例验证需求或按照某些敏捷方法中的建议创建故事很有用。通过分解将需求定义到适当的详细程度也有助于确保低层次的需求集中在单一的概念上。一旦定义了一组需求,最好检查它们的逻辑一致性。使用模板来鼓励语法一致性有助于使这些检查更容易,从而在需求重叠或冲突时变得明显。

从硬件开始 在软件设计过程的早期考虑硬件对于确保不浪费精力至关重要。同样,尽早修复应用程序编程接口 (API) 功能等通信接口也是一个好主意。

在为安全或业务关键型项目选择或设计硬件时,还值得考虑用于测试的硬件可用性的时间范围。当然,最好让选定的硬件可用于测试,但这并不总是可行的,因为有时硬件是并行开发的。在这些情况下,主机然后目标测试可能是一种可行的解决方案,或者在模拟器上进行测试(如果有的话)。当需要在这些不同的环境中执行测试时,可以使用条件编译(例如,#ifdef 等 C 指令),从而避免重复测试的需要。

让领域专家参与需求定义
确保正确的人员正在审查需求并验证它们的正确性和完整性是至关重要的。领域专家的示例包括业务分析师、技术专家、营销和最终用户。从广泛的角度考虑需求有助于从一开始就正确地定义它们。

领域专家应确保指定的需求真正捕捉到应用程序或设备的目标。他们还应该检查需求是否与编写它们要实现的业务、功能和安全目标相匹配。或者,对于较低级别的需求,将它们追溯到满足这些目标之一的较高级别的需求。

为确保优化此流程,不同角色将需要不同级别的需求数据;例如,业务分析师将验证的需求不会分解到与开发人员将验证的需求相同的级别。需求管理工具 (RMT) 可用于确保以清晰和有组织的方式向所有利益相关者提供他们所需的需求数据。将需求保留在 RMT 中还可以通过清楚地显示更高级别和更低级别需求之间的可追溯性来帮助分解。

优化项目范围
在项目的设计阶段,值得注意的是质量和范围的区别。产品的质量是安全或业务关键项目中不能牺牲的东西;但是,可能有缩小范围的空间。大多数安全标准都建议尽可能简单地设计系统,因为这使它们更容易测试,更不用说实施、维护和适应了。

简单的设计
应用程序和固件/硬件之间的内存管理和分层的必要性通常意味着代码复杂性是嵌入式开发中的一个问题。但是,限制使用全局变量和避免嵌套 if 语句(超过两个或三个)等编码实践有助于限制代码复杂性并提高可维护性。MISRA C/C++ 等语言子集可以提供一种有用的方法来提高程序的安全性和可移植性。

确保代码是模块化的有助于防止脆弱的设计,避免具有过长实现的函数,并旨在通过松散耦合使组件具有内聚性。架构分析矩阵是识别组件依赖关系的有用方法,并且可以使用工具来自动生成它们。通过应用分层等技术优化交互也有助于保持嵌入式代码的可管理性。

静态分析
第一个验证阶段很可能是静态分析。此技术可用于在代码执行之前发现代码问题。静态分析工具提供有关代码潜在问题的即时反馈。静态分析解决方案应提供有关影响可靠性、可维护性和可移植性的代码的信息。静态分析还可用于强制执行 MISRA C/C++ 等编码标准。

自动化测试生成
验证的下一阶段是在单元级别动态测试代码并执行检查以确保行为符合需求中的定义。创建这些详细的测试很耗时,但很有必要。现代测试工具可以自动生成这些低级测试。这通常通过解析代码和生成单元测试来实现所需的结构代码覆盖率。

自动生成的测试向量不仅可以驱动代码,还可以检查函数之间传递的参数、可访问的全局数据的值、调用顺序和返回值。此过程还将确保生成一套全面的测试,涵盖已在代码中实现的所有功能。这些生成的测试需要根据软件单元设计需求进行验证,以确保需求得到验证。

使用持续集成
一旦创建了一组通过的测试,它们就可以不断地重新运行,以识别在增强或重构代码时引入的任何回归错误。这个基线安全网减少了对耗时且昂贵的系统测试的依赖,并且更加彻底并准确地识别错误的位置。

持续集成可用于将代码集成到具有自动单元、集成以及系统级测试(如果可能)的共享存储库中。这可以大大加快开发速度,因为每次构建代码时运行回归测试提供了一个非常快速的反馈循环。它还使合并代码分支更容易,从而减少破坏现有代码的机会。

pYYBAGLhH7CAStgUAAA2J7O8X0g046.jpg


图 3:持续集成过程(来源:QA Systems Ltd)

在设置持续集成环境时,重要的是优化运行的测试,以确保您拥有一套全面但精简的测试,这些测试运行速度快,同时仍执行必要的检查。分析代码更改的影响以识别并仅运行受影响的测试有助于优化此过程。自动测试生成也可以是一个好方法,只需单击一个按钮即可创建一套初始的精益回归测试。

保持硬件循环
持续集成的一个目标是持续部署,当涉及到硬件时,这可能很难实现。嵌入式平台上的测试引入了不同于本地主机测试的挑战,例如内存不足、缺乏可用功能(例如文件 I/O)、中断处理以及编程语言的非标准扩展。尽管可以使用变通方法来解决这些问题中的许多问题,但如果可以通过事先计划来避免它们,则效率会更高;例如,通过确保选择具有“内存蠕变”能力的目标并确保硬件有足够的准备来测试软件。

调用控制技术,例如存根(有时称为模拟),是一种标准且有用的方法来管理对不可用对象(例如,硬件)的调用。诸如“包装”之类的高级技术可用于拦截呼叫。这对于集成测试检查返回路径并使用返回值或替换它非常有用。这允许在添加对象时验证对象之间的交互。该技术对于模拟无法实现的现实条件(例如硬件故障)也特别有用。

简化需求可追溯性
所有安全标准都需要测试和需求之间的可追溯性证据。将需求与测试用例匹配的过程很难自动化。对于以自然语言定义的需求,将需求翻译成代码的可靠解释水平仍然远远超出当前机器学习 (ML) 的水平。但是,可以使用一些工具来提高记录需求可追溯性的手动过程的效率。

需求可追溯性经常出现的一个问题是对不断变化的需求的管理。在这里,使用工具来突出显示更改以及与修改后的需求相关的测试用例是非常宝贵的。

编写易于
维护的测试 在重构代码时维护测试也是一个重大问题,因为即使是很小的更改也会破坏测试。单元和集成测试非常依赖源代码结构,因此在更改代码时它可能很脆弱(在某些情况下甚至没有构建),并且修复它们可能很耗时。在这里,测试工具可用于识别影响测试的代码更改和自动化测试维护,包括根据对代码所做的更改提供测试的自动重构。

明智地投资
通过以适合您项目的方式选择上述技术的组合,优化您的开发过程是可行的,即使在质量上不可能妥协。但是,所有优化都需要一定程度的投资,这可能涉及开发新流程、改进工具或增加开发团队的规模。

可以有效地开发安全或业务关键型软件,当然也不能幸免于现代开发技术。只需要更多的知识和努力来确保以不牺牲质量的方式使用工具和技术。

QA Systems是欧洲领先的安全关键市场软件质量解决方案提供商。我们的工具用于自动化单元测试、代码覆盖、集成测试和静态分析。所有工具均由 SGS TüV 独立认证,可用于所有主要安全标准(ISO 26262、IEC 61508、IEC 62304、EN 50128 和 IEC 60880)的安全相关软件开发的最高完整性级别,并且符合 DO 等标准-178B/C。QA Systems 最近在马萨诸塞州波士顿开设了第一家北美办事处,以更好地帮助北美客户加速开发符合安全标准的关键业务软件。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304763
  • 软件开发
    +关注

    关注

    0

    文章

    612

    浏览量

    27353
  • 安全
    +关注

    关注

    1

    文章

    340

    浏览量

    35690
收藏 人收藏

    评论

    相关推荐

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备中。这些系统的关键特点是它们与硬件的紧密集成
    的头像 发表于 12-09 09:38 232次阅读

    一文了解嵌入式软件开发的对象

    以前应用场景很单一,嵌入式开发可能谈不上面向对象开发。但现在,做嵌入式开发,没有面向对象开发,你就有点落伍了。 本文结合个人经验和周立功《抽象接口技术和组件
    的头像 发表于 11-15 10:31 322次阅读
    一文了解<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>的对象

    你认为嵌入式软件开发的尽头是什么?

    嵌入式软件开发的“尽头”是一个富有哲理且多维度的概念,因为它不仅关乎技术发展的极限,还涉及到行业应用、市场需求、技术融合与创新等多个方面。从几个不同的视角来看
    的头像 发表于 09-18 09:42 459次阅读
    你认为<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>的尽头是什么?

    EsDA,一站嵌入式软件

    ,旨在提高嵌入式软件开发的效率、性能和可扩展性。EsDA全称是嵌入式系统设计自动化,它是一个由AWorksLP、AWStudio、AXPI、AWTK、ZWS等多种软件
    的头像 发表于 09-15 08:10 278次阅读
    EsDA,一站<b class='flag-5'>式</b><b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>

    节点、跨平台开发,AWFlow让嵌入式开发变得更简单

    国产化趋势对嵌入式软件开发构成挑战,导致软件移植和适配需求激增,影响开发效率。AWFlow软件通过节点化和跨平台
    的头像 发表于 08-02 08:25 361次阅读
    节点<b class='flag-5'>式</b>、跨平台<b class='flag-5'>开发</b>,AWFlow让<b class='flag-5'>嵌入式开发</b>变得更简单

    嵌入式软件开发与AI整合

    嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展,嵌入式系统越来越多地集成了AI算法,以实现更复杂的智能功能。以下是关于嵌入式
    的头像 发表于 07-31 09:25 691次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>与AI整合

    嵌入式软件开发招聘

    本帖最后由 jf_19082533 于 2024-7-26 13:56 编辑 寻求:嵌入式软件工程师 要求:3年以上开发经验,音视频领域应用层开发 地址:北京市昌平区 邮箱:10
    发表于 07-26 13:44

    嵌入式开发者的未来

    和测试这些产品的硬件和软件。汽车行业:现代汽车包含大量的嵌入式系统,例如车载娱乐系统、发动机控制单元、自动驾驶系统等。在这个领域,工程师可以从事嵌入式软件开发、系统集
    的头像 发表于 06-23 08:10 360次阅读
    <b class='flag-5'>嵌入式开发</b>者的未来

    德国Embedded World 2024大会关键盘点:亮点演讲Static Sentiment Analysis(静态情感分析)和汽车软件开发的现状

    Sentiment Analysis(静态情感分析)和汽车软件开发的现状 今年,Perforce参与了两场演讲,讨论了2024年的嵌入式软件趋势和嵌入式开发的未来。
    的头像 发表于 04-28 23:27 1069次阅读
    德国Embedded World 2024大会<b class='flag-5'>关键</b>盘点:亮点演讲Static Sentiment Analysis(静态情感分析)和汽车<b class='flag-5'>软件开发</b>的现状

    AMD Vitis™ Embedded嵌入式软件开发套件的功能和特性概述

    Vitis Embedded 是一款独立的嵌入式软件开发套件,主要用于为 AMD 自适应 SoC 和 FPGA 中的 AMD 嵌入式处理子系统(基于 ARM 的子系统和 AMD MicroBlaze)
    的头像 发表于 04-08 10:50 916次阅读
    AMD Vitis™ Embedded<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>套件的功能和特性概述

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 679次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>设计的原则分享

    嵌入式软件开发应该掌握哪些知识?

    嵌入式软件开发应该掌握哪些知识? 一、 什么是嵌入式软件嵌入式软件通常是指
    发表于 02-19 11:23

    嵌入式软件开发软件开发的区别

    嵌入式软件开发软件开发是两个不同的概念,它们在一些关键方面有着明显的区别。嵌入式软件开发是指
    的头像 发表于 01-22 15:27 2266次阅读

    聊一聊嵌入式C语言

    作为一名嵌入式软件开发者,熟练掌握嵌入式C语言对我的日常工作至关重要。
    的头像 发表于 01-22 09:28 542次阅读

    基于功能安全的汽车嵌入式软件单元验证技术研究

    随着汽车嵌入式软件功能的不断叠加,软件复杂性不断提升,对汽车嵌入式软件安全性提出了更高要求,基
    的头像 发表于 01-07 11:27 1042次阅读
    基于功能<b class='flag-5'>安全</b>的汽车<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>单元验证技术研究