×

使用BLAST进行软件验证。 (英语) Zbl 1023.68532号

Ball,Thomas(编辑)等人,《模型检查软件》。第十届国际SPIN研讨会,美国俄勒冈州波特兰,2003年5月9日至10日。诉讼程序。柏林:斯普林格。莱克特。注释计算。科学。2648, 235-239 (2003).
摘要:BLAST(Berkeley Lazy Abstraction Software verification Tool)是一个验证系统,用于使用自动属性驱动构造和软件抽象g的模型检查来检查C程序的安全属性。BLAST实现了一个抽象模型检查细化循环,以检查程序中指定标签的可达性。抽象模型是使用谓词抽象动态构建的。然后检查此模型的可达性。如果没有指向指定错误标签的(抽象)路径,BLAST将报告系统是安全的,并生成简洁的证明。否则,它会使用程序的符号执行来检查路径是否可行。如果路径可行,BLAST将路径输出为错误跟踪,否则,它使用路径的不可行性来细化抽象模型。BLAST缩短了从抽象到验证再到细化的循环,通过“惰性抽象”将这三个步骤紧密集成。这种集成可以通过避免从循环的一个迭代到下一个迭代的重复工作,在性能上提供显著优势。
我们现在更详细地描述该算法。在内部,(C)程序被表示为控制流自动机(CFA),它是在边上带有运算符的控制流图。惰性抽象算法由两个阶段组成。在前向搜索阶段,我们构建了一个可达树,它表示程序的可达抽象状态空间的一部分。树的每个节点都由CFA的一个顶点和一个公式(称为可达区域)标记,该公式是由一组有限的抽象谓词构成的布尔组合。最初,抽象谓词集是空的。树的边缘对应于CFA的边缘,并由基本程序块或假设谓词标记。节点的可达区域根据抽象谓词描述程序的可达状态,假设执行遵循标记从树根到节点的边的指令序列。如果我们发现树中的错误节点是可访问的,那么我们将进入第二个阶段,检查错误是真实的还是由于我们的抽象过于粗糙(即,如果我们通过限制自己使用一组特定的抽象谓词而丢失了太多信息)。在后一种情况下,我们要求定理证明器建议新的抽象谓词,以排除特定的伪反例。然后,只在包含虚假错误的最小子树中添加新的抽象谓词,从而对程序进行局部优化;搜索从优化后的点继续,而不触及该子树之外的可达性树部分。
因此,好处是三方面的。首先,我们只抽象状态空间的可达部分,它通常比整个抽象状态空间小得多。其次,我们能够在状态空间的不同部分具有不同的精度,这实际上意味着在每个点上处理更少的谓词。第三,我们避免对状态空间的某些部分重新进行模型检查,因为我们知道这些部分没有来自较粗抽象的错误。此外,从BLAST构造的可达集中,可以挖掘出足以证明安全性的不变量,并可以构造简短、形式化、易于检查的正确性证明。BLAST已经成功验证并发现了多达60000行代码的大型设备驱动程序违反安全属性的行为。BLAST的测试版已经发布,可从http://www.eecs.berkeley.edu/tah/爆炸。
关于整个系列,请参见[Zbl 1019.00013号].

MSC公司:

68号30 软件工程的数学方面(规范、验证、度量、需求等)

软件:

爆炸
PDF格式BibTeX公司 XML格式引用
全文: 链接