关键系统中是否有任何软件保障?

时间:2009-02-13 01:33:38

标签: algorithm correctness mission-critical

是否有系统或是否有软件可以开发并提供正确的证据来备份它?或者所有关键系统都是仅通过积极的代码审查和测试周期开发的?

4 个答案:

答案 0 :(得分:5)

对于高完整性应用程序的编码,在现实世界中,通常涉及跳过一堆QA箍。有时这些箍实际上与软件设置有关。

美国的医疗器械行业受到FDA的监管。他们发布了一系列涵盖“设计”的法规,其中包括所有软件开发。这些规定基本上是类固醇的ISO 9000。您必须拥有一堆文档,这些文档由审阅者编写,标记,更新评论意见并由高级经理签字。由于法规有法律支持,FDA希望看到这些记录未被篡改的证据,例如在您看到测试结果给出后,写出测试的“预期结果”。因此,您必须拥有一个完全安全的CM系统,或者必须在纸上签名并注明日期(包括源代码)。 FDA检查员具有真正的执法权力;如果他们认为合适,他们可以用武装的联邦元帅检查你的源代码。然而,他们不是软件专家:他们的工作不是判断您的代码质量,只是为了确保您遵守所有规定。

航空业必须遵循DO-178B,这也是类固醇的ISO-9000。您必须生成大量文档并证明它们之间的可跟踪性。我不知道FAA是否采用与FDA相同的质量保证方法。

问题在于没有人真正知道如何制作能够达到预期目标的软件。因此,我们有一种货物崇拜的方法,我们生产大量的文件,希望这将使我们的软件充满质量。确实,质量软件通常具有明确的要求和简单的逻辑架构,但这并不意味着编写“需求文档”或“架构文档”将改善问题。

证据表明,对代码正确性影响最大的因素是创建代码正确性的团队。但是,您无法为团队编写法律约束。因此,具有强制质量工作的人不得不在过程中编写约束,而模糊地希望这会产生类似的效果。

答案 1 :(得分:4)

请参阅They Write The Right Stuff,了解他们如何为航天飞机开发软件。

摘录:

  

但该软件的工作量是多少   不是什么使它显着。什么   令人瞩目的是它的表现如何   软件工作。这个软件从不   崩溃。它永远不需要   重新启动。该软件没有错误。   它是完美的,和人类一样完美   众生已经实现了。考虑这些   统计:最后三个版本   程序 - 每个420,000行长   每个只有一个错误。最后11   该软件的版本总计   17个错误。商业计划   相当的复杂性将有5,000   错误。

答案 2 :(得分:2)

是的,有开发的系统有正确性证明。 Praxis多年来一直使用SPARK Ada做这个,现在我们用C和Escher C Verifier来做这件事。它不是灵丹妙药,因为尽管我们证明代码符合规范,但通常很难确定规范是否适合相关应用。

更广泛采用正式证据的障碍之一是现有的航空软件标准DO-178B对正式技术不友好。目前正在进行的DO-178C重写应该可以解决这个问题。

答案 3 :(得分:1)

查看Walter Bright的这一专栏,基本上认为编写完美的软件几乎是不可能的,所以the best thing to do is fail fast and build in redundancy.