形式化方法

计算机科学发展主要涉及软硬件发展,其关键科学问题之一是保证软件和硬件及其集成系统的正确性,即系统满足需求规约。在许多应用领域,软件和硬件的安全性和可靠性均受到高度关注。随着硬件运算速度越来越快、性能越来越高、体系结构越来越复杂,系统软件和应用软件的功能需求也随之变得高度复杂。如何开发正确可靠的软件和硬件系统一直是自1960年代以来计算机科学发展的巨大挑战。形式化方法就源自于解决上述挑战。形式化方法以严格的数学结构定义程序的语义及计算系统的功能与行为,以形式逻辑的语言、推理证明和验证为工具将计算机软(硬)件系统需求规约、设计、实现和验证的开发、评测和认证等活动建立在坚实的数学基础上。它正以不同程度和方式愈来愈多地应用在计算系统生命周期的各阶段,包括各种芯片和硬件的设计,并在处理软件开发复杂性和提高软件可靠性方面显示出无可取代的潜力。

  1. 形式化方法的历史回顾
    早在1949年,Turing的论文“Checking a large routine”即讨论了程序的验证问题。但形式化方法真正兴起是在1960年代末和1970年代初Floyd-Hoare逻辑、Dijkstra的谓词转换演算以及Scott的指称语义理论等奠基性工作之后。自此,形式化方法成为程序设计和软件工程理论基础的重要组成部分,并先后出现了一批有重要影响的工作。

大体而言,形式化方法的发展历程经历了以下几个阶段:
围绕形式语言和形式语义学的基础研究(1930至今);围绕形式规约和开发的方法学研究(1970至今);围绕形式验证技术的工程化研究(1980至今);以可验证软件为目标的多学科交叉研究(2000至今)。
2. 形式化方法的基本体系
形式化方法是由形式规约语言(包括形式语义与模型语言及其理论)、形式规约与转换(包括模型构造、精化与抽象解释)、形式验证、形式化方法工具等形成的一个整体。其中,形式规约语言是基础,形式化方法中,软件制品是基于规约语言编写/变换的形式规约或形式模型;形式精化和验证是保证规约和模型变换以及开发正确性的技术,形式语义与模型理论是保证一个形式化方法正确性(一致性及相对完备性)的基础,是联接形式规约、精化和验证的数学纽带;形式化工具是系统设计和开发中正确并有效使用形式化方法的需要和实践。
基于形式化方法进行软件开发的基本框架如下图。通过需求分析得到初始形式规约Spec1;然后,经过逐步求精或者转换,得到一系列精化后的形式规约(Spec2,…,Specn);最后,可转换或综合生成得到系统的程序代码实现。

2.1 形式规约
形式规约是由形式规约语言描述的系统模型或者系统需要满足的性质。前者是模型规约,后者是性质规约。形式规约是形式化方法的基础。

当用形式规约描述需求时,其一致性是判定需求规约正确性的重要依据,需求的要求是避免自我矛盾,含有矛盾的需求是无法实现的。同时,规约的不完备性(under-specification)可以给予实现者更多实现方法、功能和性能平衡上的空间。但是,不完备的需求也可能导致开发的系统不满足用户的需求。
形式规约和建模支持关注点分离(separation of concerns)和分而治之(divide and conquer)的一般工程原则,也支持不同抽象层次的规约或建模。如下图所示,不同/相同的规约语言来描述系统的不同的侧面(如数据模型、交互行为、动态行为等),即所谓的多维视角规约方式,不同层次规约之间的关系由形式精化/抽象关系刻化,而精化(或抽象)也可以由构件分解(或组合)实现。这也是模型驱动的系统开发的核心思想。

2.2形式验证
形式验证常见的有两种形式:一种是推理“系统模型规约是否满足其性质规约”,另一种是推理“系统的一个模型规约是否与另一模型规约有精化或等价关系”。形式验证方法主要包括演绎式的定理证明和算法式的模型检验。
基于定理证明的形式验证将“系统满足其规约”这一论断作为逻辑命题,通过一组推理规则,以演绎推理的方式对该命题开展证明。形式验证把待证明的性质直接作为了一个数学定理来证明。模型检验由Clarke和Emerson、Queille和Sifakis在1980年代初各自独立提出,其基本思想是检验一个结构是否满足一个公式要比证明公式在所有结构下均被满足容易得多。模型检验通过自动遍历系统模型的有穷状态空间来检验系统的语义模型与其性质规约之间的满足关系(如下图)。

3. 形式化方法的应用
自90年代后,形式化方法在硬件设计验证上取得了成功,其效果也得到了工业界的认可。1992年,Clarke团队利用SMV验证了IEEEFuturebus+标准896.1-1991中Cache一致性协议,结果发现了一些过去未发现的潜在错误。SRI和Rockwell Int’l合作使用PVS系统规约和验证了AAMP5指令,发现了微处理器设计中若干微码的错误。Intel的Kaivola团队在Intel Core i7验证项目中,利用形式化方法验证了Core execution cluster,在Intel建立了算术功能验证的金标准。
由于形式化方法本身是有开销的,故合理考量其应用的经济性是必须的。根据形式化程度的不同,形式化方法应用首先应确定是在整个系统中应用亦或只在关键部分应用。确定了应用的系统范围或边界之后,即可在相关部分中不同程度地应用形式化方法。形式化方法在安全攸关系统(航空、航天、核、铁路等领域)中往往得到较多的应用,一些软件安全性保证标准,例如DO-178B、DO-178C、DO-333、Common Criteria、SIL1-4都在最(较)高层对形式化方法在系统开发中的使用提出了要求。在其他应用领域中,可以考虑使用一些融合其他方法与形式化方法的轻量级形式化方法。
4. 形式化方法面临的挑战与未来
形式化方法对于提高软件质量的作用已经形成共识,但是形式化方法的应用度仍然进展缓慢。形式化方法本身的复杂性增加了软件系统的设计复杂度。故形式化方法的首要挑战是发展形式化方法的应用形态,包括技术形态和工具形态,提高形式化方法的易用性、有效性和扩展性,降低形式化方法的应用门槛。
程序设计语言和程序正确性是形式化方法发展的最初源泉。面向程序设计语言和代码,研究和运用形式化方法、技术与工具是一个重要的方向。围绕程序代码的形式验证技术的发展趋势将会明显,验证将成为程序设计环境的一部分。程序设计语言与规约语言的融合将成为趋势。
近10来年,形式化方法进入一个振兴的阶段,工具起到了决定性的作用。构建更可用和鲁棒的工具,以支持大规模规约的并行语义分析和验证,构建可复用的形式规约库和方法社区,推动形式化方法工具和可复用库设施的进步,包括工具的集成、工具的无形化、规约与验证资产,是形式化方法努力的方向。
教育是形式化方法持续发展的重要推手。我国的形式化方法教育现状调查结果指出,需要加强专业教育中形式化方法认知。在计算思维养成中,在程序设计、数据结构等基础课增加形式化概念的讨论,在离散数学、算法、软件工程等后续专业课程突出形式化方法与主流方法的关系和结合,对于形式化方法的推广和水平提高是非常重要的。
5. 结束语
形式化方法可以严格分析、处理、证明计算机系统和程序及其性质,对于确保系统正确性和提高可信性具有基础性的作用。形式化方法的应用已经取得了长足的进步,实践证实了其在大规模程序设计中起到了一个直接的指导作用,提供了形式化开发的概念框架和基本理解、促进了目前的最佳实践,其成果深刻地影响了未来软件学科的发展方向。同时,形式化方法需要适应软件定义使能的软件新形态,适应软件作为社会基础设施的地位,在基础概念、规约、验证和工具等方面进一步发展,并与人工智能、网络空间安全、量子计算、生物计算等领域和方向交叉、融合。

原文链接地址:http://www.jos.org.cn/html/2019/1/5652.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值