Algorithm 关键系统是否有软件保证?

Algorithm 关键系统是否有软件保证?,algorithm,correctness,mission-critical,Algorithm,Correctness,Mission Critical,是否有系统或软件是用正确性证明来开发的?还是所有的关键系统都是通过积极的代码审查和测试周期开发的?请参阅,了解他们是如何为航天飞机开发软件的 摘录: 但是这个软件能做多少工作是很重要的 不是什么让它引人注目。什么 值得注意的是 软件工作。这个软件永远不会 撞车。不需要这样 重新启动。这个软件没有bug。 它是完美的,和人类一样完美 人类已经取得了成就。考虑这些 统计:最新三个版本的 程序——每42万行长 每个错误只有一个。最后11名 此软件的版本总数为 有17个错误。商业节目 同等的复杂度将有5

是否有系统或软件是用正确性证明来开发的?还是所有的关键系统都是通过积极的代码审查和测试周期开发的?

请参阅,了解他们是如何为航天飞机开发软件的

摘录:

但是这个软件能做多少工作是很重要的 不是什么让它引人注目。什么 值得注意的是 软件工作。这个软件永远不会 撞车。不需要这样 重新启动。这个软件没有bug。 它是完美的,和人类一样完美 人类已经取得了成就。考虑这些 统计:最新三个版本的 程序——每42万行长 每个错误只有一个。最后11名 此软件的版本总数为 有17个错误。商业节目 同等的复杂度将有5000 错误


看看Walter Bright的这篇专栏文章,他基本上认为编写完美的软件几乎是不可能的,因此,在现实世界中,为高完整性应用程序编写代码通常涉及到一系列QA难题。有时候,这些问题实际上与正确使用软件有关

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

航空业必须遵循DO-178B,这也是ISO-9000标准中关于类固醇的规定。您必须生成大量文档并证明它们之间的可追溯性。我不知道美国联邦航空管理局是否和美国食品和药物管理局有相同的质量保证方法

问题是,没有人真正知道如何生产出符合其要求的软件。因此,我们采用了一种货物崇拜的方法,在这种方法中,我们制作了大量的文档,希望这将使我们的软件具有高质量。的确,高质量软件通常有明确的需求和简单的逻辑体系结构,但这并不意味着编写“需求文档”或“体系结构文档”将改善问题


证据表明,对代码正确性影响最大的因素是创建代码的团队。但是,您不能对团队编写法律约束。因此,负责规定质量的人员必须在流程上写下约束条件,模糊地希望这会产生类似的效果。

是的,有一些系统是通过正确性证明开发出来的。Praxis已经用SPARK Ada做了很多年了,现在我们用C和Escher C验证器来做。它不是万能的,因为即使我们证明代码满足规范,通常也很难确定规范是否适合相关的应用程序


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

公平地说,你可能还应该引用其中的一句话,它说这可能是美国最昂贵的软件开发公司:),但绝对是一本有趣的读物。@vs-当你谈论政府机构时,这可能是不言而喻的;)正确性证明的问题在于,您只能根据正式规范来证明它是正确的。然而,正如您所说,您无法证明正式规范是正确的,您只能对其进行审查。这意味着您需要能够1:理解正式规范,2:像程序员一样思考,以及3:充分理解问题领域以发现不匹配的审阅者。所有3组的交点通常为空。