ScholarGate
助手

程序分析与验证

程序分析与验证运用严谨的技术来推断程序的行为,检测错误或证明软件符合其规范。

用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
下载幻灯片
Learn & explore
视频即将推出

Definition

程序分析是在不运行程序所有输入的情况下,自动推导程序行为属性的过程;程序验证则是通过证明或穷尽检查,确定程序满足形式化规范的过程。

Scope

该领域涵盖程序自动化和半自动化推理:静态分析和数据流技术、作为可靠近似统一框架的抽象解释、有限状态和并发系统的模型检测,以及使用证明助手的演绎验证。它涉及可靠性、精度与可判定性之间的权衡,以及这些方法在构建可信软件中的应用。

Sub-topics

Core questions

  • 尽管存在不可判定性,如何可靠地计算程序属性?
  • 分析如何在精度和可扩展性之间进行权衡?
  • 何时可以对系统的正确性进行穷尽检查而非测试?
  • 如何构建和机器验证完整的函数正确性证明?

Key theories

抽象解释
Cousot夫妇建立了一个格论框架,其中可靠的静态分析被推导为程序语义的近似,统一了许多分析并保证了它们的可靠性。
时态逻辑模型检测
Clarke、Emerson和Sistla展示了如何通过穷尽探索状态空间,自动验证有限状态并发系统是否符合时态逻辑规范。
机械化端到端验证
Leroy的已验证编译器表明,可以使用证明助手证明现实软件的正确性,并提供编译保留程序行为的机器验证保证。

Clinical relevance

程序分析与验证是支撑大规模发现错误和安全漏洞、认证安全关键航空电子和汽车软件、以及生产机器验证编译器和操作系统内核的工具的基础。它们将正确性从基于测试的信心转变为可证明的保证。

History

数据流分析与优化编译器一同出现于20世纪70年代,同年Cousot夫妇引入了抽象解释。模型检测于20世纪80年代初由Clarke和Emerson以及独立的Queille和Sifakis提出,后来获得了图灵奖。21世纪初,大规模工业静态分析和机械化验证取得了成功,例如CompCert和seL4。

Debates

分析的可靠性与实用性
工具开发者们争论分析是应该完全可靠,报告所有可能的错误但可能产生许多误报,还是为了减少噪音和提高可扩展性而故意不可靠,这种张力塑造了工业界的错误发现工具。

Key figures

  • Patrick Cousot
  • Radhia Cousot
  • Edmund Clarke
  • E. Allen Emerson
  • Xavier Leroy

Related topics

Seminal works

  • cousot1977
  • clarke1986
  • leroy2009
  • nielson1999

Frequently asked questions

静态分析与验证有何区别?
静态分析在没有完整规范的情况下自动推断近似属性(例如可能的空指针解引用),而验证则证明程序满足精确的形式化规范,通常需要更多努力并提供更强的保证。
如果正确性是不可判定的,分析如何工作?
分析通过计算可靠近似来规避不可判定性:它们可能会报告一些实际上不可能发生的情况,但绝不会遗漏它们所验证属性的真实违规。

Methods for this concept

Related concepts