未来的3种实用方法 - 证明您的物联网设备

尽管在物联网环境中可能会使用嵌入式设备,但目前许多设备并未要求符合安全或安全标准。但是在物联网开发的敏捷世界中,在代码已经编写和测试之后,合规性要求可能会更晚。那么您如何为嵌入式物联网设备的未来做好准备?

术语物联网(IoT)是指发布和/或消费数据的网络使能设备,组件或服务的系统。物联网应用正在成为我们生活中不可或缺的一部分:从工业机器人和手术器械到自动驾驶汽车和自主飞行无人机。如今,这些设备中的许多设备已经影响了用户的安全性,隐私性和安全性。在某些情况下,故障成本是致命的,因此将这些设备构建为现行标准至关重要。
虽然最好从一开始就将合规性活动嵌入到软件设计中,但众所周知,严格的开发流程(特别是在没有自动化的帮助下)会影响产品上市时间。没有多少开发人员喜欢在正常工作时间之外进行额外测试和记录可追溯性,因此务实,敏捷和快节奏的团队通常无法通过在他们“可能需要它”的前提下建立合规性而失去动力。未来。相反,许多团队选择“在他们到达时跨越那座桥梁”。
不幸的是,没有魔法棒或银弹可以追溯性地“使”符合规范。这些组织正在努力学习的是,在项目结束时增加合规性的成本比开发初始工作产品的成本高出几个数量级。
那么,您今天可以采取哪些低影响力的行动来为满足明天的严格合规要求做好准备?

行动1:了解您的技术债务

了解您的项目目前的位置非常重要。技术债务的数量是由于代码复杂性以及代码中当前存在的任何剩余编码标准和安全违规而导致的潜在返工成本。这笔债务欠下来的代码清理,修复和测试。掌握项目所处位置的方法之一是使用自动静态代码分析。静态分析可提供对代码库质量和安全性的深入了解,并列举编码标准违规(如果适用)。
不幸的是,许多使用C和C ++开发嵌入式应用程序的团队仍然依赖于他们的编译器或手动代码审查来捕获问题,而不是采用静态分析。一些团队由于各种原因而难以采用静态分析工具,例如发现它们嘈杂且难以使用,或者由于紧急的日常事务而未能将其用于日常开发过程。一种常见的(误)感觉是,确定哪些违规行为值得修复所花费的时间大于实际修正的价值。
但我们发现,在项目后期面临功能安全审计时,采用一小组关键和强制性规则的团队在重新编写代码时花费的时间要少得多。通过实施例如CERT C安全编码指南,通过构建安全性从头开始构建安全可靠的系统要容易得多。你可以从小做起。CERT具有复杂的优先级系统(使用严重性,可能性和修复成本,每个级别为3个等级,总共27个级别),如果使用自动化测试工具,通常可以在预配置的仪表板中轻松查看合规性状态。
静态分析还通过收集有助于管理安全性和安全性的数据点来帮助组织了解其技术债务。经理可以轻松评估重要问题,例如:
  • 我的基线是什么?我的代码库中存在多少非关键编码标准违规?
  • 趋势数据:每次构建都会报告新的和已修复的违规行为?我们变得越来越好吗?
  • 今天我的代码复杂度是多少?它在增长吗?
一些标准要求测量圈复杂度,以使其低于某个阈值。复杂性度量标准也可用于估计测试工作量 - 例如,您需要证明100%分支级别覆盖率以符合IEC 61508 SIL 2所需的测试用例数量将与函数的McCabe Cyclomatic Complexity成比例。
以下是显示项目MISRA合规性的仪表板示例:

CERT C的情况也是如此:

查看代码度量标准的价值可能有助于揭示更复杂的区域以进​​行额外的代码审查,并监控测试覆盖这些区域的程度。以下是Metrics Dashboard的示例:

所以你可以从基础开始。一旦团队对管理最严重的错误感到满意,您就可以增加标准违规的范围。并非所有规则都是“一成不变”的,因此决定项目编码标准中的规则是非常重要的。至少,在几个关键编码标准(例如MISRA强制性或CERT C规则)中采用强制性规则集,使得连接设备的未来安全性和安全性论证变得更加容易。

行动2:建立可定性的单元测试框架并测量代码覆盖率

大多数实用工程师倾向于同意盲目地为所有功能创建单元测试并不能提供良好的投资回报率。但是,如果您的团队可以访问单元测试框架作为项目沙箱的一部分,那么这是一项有价值的投资。当工程师认为需要单独测试某些复杂的算法或数据操作时,可以智能地使用单元测试。在开发单元测试的过程中也有很大的价值 - 我们从组织中看到的是,简单编写和执行单元测试的做法使代码更加健壮和更好地设计。
当出现安全或安全合规性要求时,组织可以通过临时添加工作人员来快速提高单元测试工作量。但是为了快速扩展这种努力,单元测试框架和过程应该已经在项目过程中被理解和记录。考虑到未来合规性的可扩展单元测试框架的共同特征是:
  • 符合特定安全标准的预期用途(例如通过TÜV证书)
  • 集成到自动构建系统中
  • 报告所需的代码覆盖率指标(例如MC / DC)
  • 记录每个构建和随时间执行的测试的结果和覆盖范围
  • 适用于多个项目和团队
关键的一点是部署所有未来安全标准所需的测试技术,但规模最小。如果出现认证需求而不是从头开始,则更容易扩展。

行动3:隔离关键功能

构建嵌入式系统需要考虑大量“功能”:简单性,可移植性,可维护性,可伸缩性和可靠性,同时解决延迟,吞吐量,功耗和大小限制之间的权衡问题。在构建可能与大型物联网生态系统相连的系统时,许多团队并没有优先考虑其他一些质量因素的安全性和安全性。
为了使未来的安全合规性更容易(并遵循良好的架构实践),您可以在时间和空间上分离组件。例如,您可以设计一个系统,其中所有关键操作都在单独的专用CPU上执行,而在另一个上运行所有非关键操作 - 从而提供物理隔离。另一种选择是采用Separation Kernel Hypervisor和Microkernel概念。还有其他选择,但关键是采用关键分离,深度防御和混合关键性分离的关键架构方法。这些方法不仅减少了遵守安全和安全标准所需的工作量,而且还提高了应用程序的质量和弹性。例如,以下是一些隔离关键代码的方法:
  • 空间域:
    文件
    模块
    目录
  • 执行域:
    线程,RTOS任务,管理程序
    CPU核心,单独的CPU
将关键功能与非关键功能分开可缩小未来验证工作的范围,以证明合规性。

摘要

物联网生态系统中的许多边缘设备提供的关键服务可能符合未来的安全和安全标准。当然,在不知道是否需要的情况下,试图遵守标准要求并不是一种具有成本效益的策略。为了为未来做好准备,组织可以采用关键设计技术,单元测试方法和静态分析工具,并收集指标以支持未来需求。如果足够早地启动,软件团队可以将这些方法无缝地应用到现有流程中。尽早开始使用正确的方法,可以在以后进行扩展,以防止在开发,测试和部署软件代码时需要几乎艰巨的努力。

用户喜欢...