Boost曾经被用于受监管的项目(FDA,FAA)吗?

时间:2013-12-21 00:23:37

标签: c++ boost medical

在最近发表评论时,我发现自己说,根据我的经验,Boost并未在受监管行业(FDA,FAA)中广泛使用。事实上,我不知道任何使用它或使用它的项目。但我知道,我的经验可能缺乏,所以我想知道任何人是否知道在医疗设备或航空飞行系统(照明,驾驶室控制,驾驶舱设备等。)。

我不确定这是一个正确的地方(也许是其他SO网站),但我认为这是一个很好的起点。

这不是关于是否应该在这些领域使用助推器的问题,这是一个关于是否有人知道它是否被使用的问题。

编辑一些可能有助于澄清这一点的示例项目:机舱照明系统,机舱管理系统,驾驶舱仪表,输液/食品/胰岛素泵,透析机,实验室诊断设备,血液中心数据收集一些是生命维持或潜在的飞行关键,一些收集数据,一些收集用于做出医疗决策的数据等,但我相信所有都被FAA / FDA作为受监管的设备。

编辑外部(未附带开发链)库经常被带入这些类型的项目以用于其他目的(图形库,驱动程序,USB堆栈等)。这些被视为{ {3}}。使用提升将属于这种方法。有人知道一个以这种方式使用boost的项目吗?

编辑 Boost是一个非常大的框架,具有多个组件。我正在寻找已经在项目中使用过的任何部分。例如“Boost智能指针”或“Boost Enable”或“Boost Array”或“Boost Optional”等。但用于“整体”,而不是部分。通过查看Boost代码并重新使用该想法不会使用;用作系统的整个组成部分(即法律意义上的)。

这是问题的核心,因为以这种方式使用意味着必须处理处理SOUP的权衡。这可能会将此问题置于此SO站点的范围之外...肯定的。

2 个答案:

答案 0 :(得分:11)

我认为我们在这里可以得到的最好答案是“是和否”。我会尝试解释原因。

Boost是许多组成图书馆的巨大保护伞。它们中的一些以各种方式相互依赖(例如,当更高级别的库需要由类型特征的Boost的较低级别部分提供的特征时)。这引发了对问题简单回答的有用性的质疑,因为如果Boost的三个部分已用于受监管的项目中,但它们的部分不同于您想要使用的部分,那么了解这一点并没有什么价值。而且我们永远不会知道关于所有部分的完整答案,因为你不能证明是负面的(并且有太多的部分可以期待“100%是”答案)。

Boost是(而且一直都是)迅速发展的。全部都会添加全新的库。 ASIO是一个很大的,直到最近才出现。这使得回答这个问题变得更加困难,因为随着时间的推移,Boost的某些部分很年轻,而且没有其他部分经过测试。此外,现有的库有时会经历向后不兼容的修订(例如,不久前的“Boost Filesystem 3”)。

Boost的许多部分最终不是通过传统的依赖项目而是通过复制粘贴来自Boost的代码,并且可能将其修改为品味(例如添加或删除对特定编译器的支持)。同样,Boost的许多部分最终都在项目中,因为Boost是许多新的C ++标准库特性的试验场,例如shared_ptr(C ++ 11)和unordered_map(TR1)。今天语言的一部分功能最初是Boost的一部分,因此许多人在不知情的情况下使用了“Boost代码”。

请注意,当代码转换为语言中的官方状态时,代码不会以某种方式变得更安全 - GCC具有在相同概念的Boost等效实现中不存在的错误。在考虑诸如“我们是否应该允许在我们的项目中使用Boost或者我们是否应该限制编译器供应商为我们提供的内容”这样的实际问题时,这很重要。如果您正在考虑使用最近由编译器供应商实现的功能(例如,在过去一年内),那么使用更成熟的第三方(例如Boost)实现可能会更好。

最后,因为这个问题的推动似乎是为了获得一些保证,使用Boost对于一个制作项目来说并不是一个坏主意:我当然会说通常使用Boost是好的和好的,带有巨大的警告您需要Boost的本地专家,他知道Boost的哪些部分不应该在您的域中使用。例如,Boost Spirit,Phoenix和Wave是图书馆的例子,这些图书馆已经在Boost工作了一段时间,但很少有人真正地,深刻地理解这些图书馆。使用你不完全理解的库代码(我们都这样做)是一回事,但是使用几乎没有人理解的代码是另一回事。

总之,我认为任何人都无法向您保证,您认为Boost适用于安全关键系统。您需要自己评估它,就像您需要评估自己的编译器供应商的软件,其他第三方依赖项以及您自己编写的代码一样。我已经使用了所有四类软件,根据我的经验,Boost比其他任何软件都有更少的关键错误,并且回归数比GCC或我自己的代码都少。

答案 1 :(得分:9)

如果系统设计师在架构层面处理系统安全问题,我会说很多。

三重

例如,如果所采用的方法是与受信任的选民一起重复三次冗余,那么系统试验/测试将是批准实施的主要步骤。假设其中一个一式三份'开发团队选择使用Boost。如果整个系统通过了所有测试向量,那么人们可能会认为没有人需要通过Boost本身搜索实现错误。显然,如果所有三个一式三份都选择使用Boost,那么这将引起关注,因为那时测试向量的范围变得难以管理。

Triplication是处理使用软件资源(如编译器,库和程序员)的问题的标准方法,所有这些都存在错误风险。 Boost只是其中之一。有人可能会说Boost共享指针显然是一种降低程序员错误风险的方法。在这一轮中,这最有可能对整个系统有利。

重要,但不安全严重

有趣的地方是三重奏没有被使用,现在一个人真的不得不信任。有趣的是,许多系统似乎绕过问题的方式是说最终有一个人在控制谁监督并能够在系统错误的情况下进行干预。

例如,汽车行业有一套称为MISRA的编程规则。应该将ABS系统的软件写入此规则集,并且应该设置开发工具以对源代码强制执行这些规则。这个想法是,这将把未检测到的错误的风险降低到可接受的水平。而且因为最终有一个司机驾驶汽车,他们总是可以自己做节奏制动。因此,汽车行业避免了必须实施一式三份的ABS。

他们将相同的理念扩展到更复杂的汽车系统,如自适应巡航控制和自动驾驶汽车。就个人而言,我认为这样的延伸对于自驾车来说是不合理的。相关立法明确指出,它是“驱动因素”。如果这样的车辆发生了撞车事故(即你仍在驾驶它),那么有光泽的广告不会停留在这个重要方面。

在医疗设备领域也是如此;无论如何,应该是一名护士或有人监视病人,因此偶尔的监督会被监管所覆盖。无论如何,整件事情都很糟糕;虽然医疗设备的软件可能已经过测试和批准,但这些东西通常都是在嵌入式Windows XP上运行的。他们都联网并最终被计算机病毒等侵扰。美国食品和药物管理局不会让你有一个自动更新系统,只有设备供应商可以更新它,当然他们不能希望跟上。因此,你最终得到了一个经过良好编写的经过良好测试且运行良好的医疗软件,运行在操作系统安装之上,让所有世界各地的黑客在里面跑来跑去,上帝知道什么。我认为在这些情况下使用Boost不会增加整体系统风险。

因此,如果符合MISRA标准的工具链将Boost作为该工具链的一部分提供,那么我不明白为什么与提供标准C库的工具链有任何不同。如果工具链供应商正在对其进行认证,那么它与其他任何情况都没有区别。

这种方法存在缺陷。根据我的经验,我遇到了一个广泛使用的MISRA兼容工具链,当所有优化都打开时,编译器编译了垃圾对象代码。我实际上能够在反汇编中验证这一点。然后我看了一下工具链标准C库的源代码,它本身并没有写入MISRA规则集,而且它包含了明显的,可怕的错误。

然而,只要勾选项目设置中的MISRA复选框,就不会使用此工具链构建,测试和销售汽车ABS系统。将Boost添加到该工具链几乎不会使事情变得更糟。

无三重安全危险

最后的方法是没有三重并且没有人为监督。这真的很难,因为您需要正式证明工具链,操作系统,驱动程序,芯片等各个组件的正确性.AFAIK从未为真正的安全关键系统做过像核反应堆,飞行控制这样的系统航空电子设备,或其他系统,如果他们出错,肯定会杀人。

到目前为止,我唯一能说的就是Greenhill的编译器套件及其INTEGRITY操作系统。他们可以为您提供(大笔费用)正式的测试和验证证据,包括操作系统的每一行,所有库以及编译器,所有内容。如果有人试图建立一个真正的安全关键系统而不会出现三重作用,那将是一个起点。

我不认为他们已经完成了C ++ 11,虽然我已将Boost添加到他们的工具链中并且工作正常(它不是在我加速的安全关键系统中)添加)。

结论

当然,如果像Greenhills这样的服装具有当之无愧的良好声誉,可靠且经过全面测试的工具链可以提供Boost,那么我认为在受监管的系统中使用它会很有用。但是我怀疑整个Boost会以这种方式提供;他们更有可能遵循编译器标准。

我也知道GCC过去曾经过正式的编译器验证测试,因此可以用于重要事项。我预计,对于最近在Boost方面取得的变化,这将很快再次发生。