形式化方法
大神E.W.Dijkstra曾提出一个著名论断:
程序测试只能证明错误的存在,但不能证明错误不存在。
-
起源及发展
- 是的,错误无法被避免,但可以尽可能减少。
时间 | 进程 |
---|---|
20世纪50年代后期 | J.Backus提出BNF描述Algol60语言的语法,出现了各种语法分析程序自动生成器以及语法制导的编译方法。 |
20世纪60年代后期 | 针对当时所谓“软件危机”。深入探讨程 序和程序开发过程的规律,建立严密的理论,以其用来指导软件开发实践——这一解决方法推动进一步发展 |
往后的研究和应用 | 形式化方法的发展趋势逐渐融入软件开发过程的各个阶段,从需求分析、功能描述(规约)、(体 系结构/算法)设计、编程、测试直至维护。 |
-
定义
- 形式化方法是一种有严格数学基础的软件和系统开发方法,支持计算机系统及软件的规约、设计、验证与演化等活动。 系统建模
- 系统从其运行方式上分为:串行系统和并发系统两大类。
-
形式验证 (Formal Verification)
- 形式验证分为两类:
1.以逻辑推理为基础的演绎验证。 | 2.以穷尽搜索为基础的模型检测。 |
---|---|
用逻辑公式描述系统性质,通过一些公理或推理规则来证明系统具有某些性质。 | 通过搜索待验证系统模型的有穷状态空间来检验该系统的行为是否具备预期属性的一种自动验证技术。 |
-
形式规约(Formal Specification)
-
它是对程序“做什么”(what to do)的数学描述,是用具有精确语义的形式语言书写的程序功能描述,它是设计和编制程序的出发点,也是验证程序是否正确的依据。
形式化方法术语
-
Specification(规范):
–>采用具有严格定义的形式和语义的记法形式,描 述软件设计(和实现)。 -
Reasoning and Analysis(推理和分析):
–>对形式化规范进行分析和推理, 确定它们的各种静态和动态性质 – 规范是否具有一致性和完整性,其中有没有矛盾,有没有遗漏? – 运行中不会出现某些不能容忍的状态(死锁、活锁等) – 找出其中的错误和缺陷等。 -
Refinement(精化):
–>从抽象的高层描述出发,严格保语义地推导出更接 近实现的包含更多细节的规范,最终得到正确实现了高层规范的可运行程 序(逐步求精技术的严格化,另一些软件技术也可以看作精化)。