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