6
实践中的正式程序验证
作为软件工程师,我为工业产品编写了大量代码。相对复杂的东西,包括类,线程,一些设计工作,但也有一些性能折衷的地方。我做了很多测试,对测试感到厌倦,所以我对正式证明工具(例如Coq,Isabelle)产生了兴趣……我可以使用其中之一来正式证明我的代码没有错误并且可以完成吗用它?-但是,每当我检查其中一种工具时,我都不敢相信它们可用于日常软件工程。现在,那只能是我,而我正在寻找有关的指针/观点/想法:-) 具体来说,我的印象是,要使这些工具之一对我有用,就需要大量投资才能向证明者正确定义所考虑程序的对象,方法...。然后我想知道,鉴于证明者必须处理的所有事情,证明者是否会不仅仅耗尽精力。或者,也许我将不得不摆脱副作用(那些证明工具似乎对声明性语言确实非常有用),我想知道这是否会导致无法使用“经过验证的代码”,因为它不会很快,或者足够小。另外,我不能奢侈地更改使用的语言,它必须是Java或C ++:我不能告诉老板我从现在开始要使用OXXXml进行编码,因为它是OXXXml中唯一的语言。我可以证明代码的正确性... 拥有更多形式验证工具经验的人可以发表评论吗?再说一遍-我很喜欢使用正式的证明工具,我认为它们很棒,但是我给人的印象是它们位于象牙塔中,而Java / C ++的低谷使我无法达到……(PS:I也喜欢 Haskell,OCaml ...不要误解:我是声明性语言和形式证明的粉丝,我只是想看看我如何切实地将其用于软件工程) 更新:由于涉及的范围很广,让我们尝试以下更具体的问题:1)是否有使用证明来证明工业Java / C ++程序正确性的示例?2)Coq是否适合该任务?3)如果适合使用Coq,我应该先用Coq编写程序,然后再从Coq生成C ++ / Java吗?4)这种方法可以处理线程和性能优化吗?