logo Parasoft 行业资讯(一) 我也要发布文档

3种切实可行的方法来验证您的IoT设备


尽管在IoT上下文中嵌入式设备具有潜力,但目前并不需要许多设备符合安全标准。但是在物联网开发的敏捷世界中,在已经编写和测试了代码之后,合规性要求可能会晚得多。那么,如何为嵌入式物联网设备的未来做好准备?

物联网(IoT)术语是指发布和/或使用数据的具有网络功能的设备,组件或服务的系统。物联网应用正成为我们生活中不可或缺的一部分:从工业机器人和手术器械到自动驾驶汽车和自动驾驶无人机。今天,这些设备中的许多设备已经可以影响其用户的安全性,隐私权和安全性。在某些情况下,故障的代价是致命的,因此,按现行标准制造这些设备至关重要。

尽管最好从一开始就将合规性活动嵌入软件设计中,但众所周知的事实是,严格的开发流程(尤其是没有自动化的帮助)会影响产品上市时间。没有多少开发人员喜欢在正常工作时间之外进行额外的测试和记录可追溯性,因此,务实,敏捷和快节奏的团队通常不能以在计划中“可能需要”为前提建立合规性来失去动力。未来。取而代之的是,许多团队选择“在到达那座桥时越过那座桥”。


不幸的是,没有魔术棒或银弹可以追溯“使”代码兼容。这些组织正在努力学习的是,在项目结束时增加合规性的成本要比开发初始工作产品的成本高几个数量级。

那么,为了满足明天的严格合规性要求,您今天可以采取哪些低影响的措施?


措施1:了解技术债务


了解您的项目目前的位置非常重要。技术债务的金额是由于代码复杂性以及代码中当前存在的任何剩余编码标准和安全性违规导致的潜在返工成本。该债务归因于随后的代码清理,修复和测试。掌握当前项目状况的一种方法是使用自动静态代码分析。静态分析可深入了解代码库的质量和安全性,并列举适用的编码标准违规情况。

不幸的是,许多使用C和C++开发嵌入式应用程序的团队仍然依靠他们的编译器或手动代码审查来发现问题,而不是采用静态分析。一些团队出于各种原因而努力采用静态分析工具,例如发现它们嘈杂且难以使用(如果您学习了正确的入门方法,就不会有问题),或者无法将其用于日常开发过程中由于紧急的日常事务。常见的(误)理解是,确定哪些违规值得解决所花费的时间大于实际修复的价值。

但是我们发现,在项目后期面对功能安全审核时,采用少量关键性和强制性规则的团队花费更少的时间来重新编写代码。通过实施(例如)CERT C安全编码准则,从根本上构建安全可靠的系统要容易得多。您可以从小处着手。 CERT拥有完善的优先级划分系统(使用严重性、可能性和补救成本,每三个级别,总共27个级别),并且,如果您使用Parasoft工具,则可以在预配置的仪表板中轻松查看合规性状态。

静态分析还可以通过收集数据点来帮助组织了解其技术欠债,这些数据点可以帮助管理层实现安全合规。管理人员可以轻松评估重要问题,例如:


  • 我的基准是多少?我的代码库中存在多少个非关键编码标准冲突?
  • 趋势数据:每个版本都报告新的和固定的违规?我们是好还是坏?
  • 我今天的代码复杂度是多少?它在增长吗?


一些标准要求测量圈复杂度,以使其保持在一定阈值以下。复杂性指标也可以用于估计测试工作——例如,您需要证明100%分支级别覆盖以符合IEC 61508 SIL 2的测试用例数量,将与该函数的McCabe环复杂性成比例。

下面是一个仪表板示例,显示了Parasoft DTPParasoft的报告和分析中心)中项目对MISRA的遵守情况:

这与CERT C相同:

查看代码指标的价值可能有助于揭露更复杂的区域,以便进行其他代码审查,并监视测试对这些区域的覆盖程度。这是度量指标仪表板的示例:

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


措施2:建立合格的单元测试框架并衡量代码覆盖率


大多数务实的工程师倾向于同意盲目地为所有功能创建单元测试并不能提供良好的投资回报率。但是,如果您的团队可以将单元测试框架作为项目沙箱的一部分进行访问,则这是一笔宝贵的投资。当工程师认为需要单独测试某些复杂算法或数据操作时,可以智能地使用单元测试。在开发单元测试的过程中,还有一个重要的价值——我们从组织中看到的是,简单地编写和执行单元测试的做法会使代码更健壮和设计更好。

当出现安全性或安全性合规性要求时,组织可以通过临时增加人员来迅速提高单元测试的工作量。但是,为了迅速扩大工作量,在整个项目过程中应该已经理解并记录了单元测试框架和过程。考虑到未来合规性的可伸缩单元测试框架的共同特征是:


  • 符合给定安全标准的预期用途(例如通过TüV证书)
  • 集成到自动化构建系统中
  • 报告所需的代码覆盖率指标(例如MC/DC)
  • 记录每次构建并随时间推移执行的测试的结果和覆盖范围
  • 可用于多个项目和团队


关键要点是部署未来安全标准要求的所有测试技术,但要以最小的规模进行。当出现认证需求时,这比从头开始更容易扩展。


措施3:隔离关键功能


设计嵌入式系统需要考虑很多“缺点”:简单性、可移植性、可维护性、可伸缩性和可靠性,同时还要解决延迟、吞吐量、功耗和大小限制之间的折衷。在设计可能会连接到大型IoT生态系统的系统时,许多团队并未将安全性和安全性放在其他一些质量因素之上。

为了使将来的安全合规性变得更容易(并遵循良好的架构实践),您可以在时间和空间上分离组件。例如,您可以设计一个系统,其中所有关键操作都在单独的专用CPU上执行,而所有非关键操作都在另一个CPU上运行,从而实现物理隔离。另一个选择是采用“分离内核管理程序”和“微内核”概念。还有其他选择,但是关键是采用关键架构方法,将关注点分离、纵深防御和尽早混合关键性分离。这些方法不仅减少了遵守安全标准的工作量,而且还提高了应用程序的质量和弹性。例如,以下是一些隔离关键代码的方法:


  • 空间域:
    • 档案
    • 模组
    • 目录
    • 图书馆
  • 执行域:
    • 线程,RTOS任务,管理程序
    • CPU核心,独立的CPU


将关键功能与非关键功能分开可以减少将来为证明合规性而进行的验证工作的范围。


总结


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