0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

形式化方法的工程化

上海控安 来源:上海控安 作者:上海控安 2023-03-24 11:01 次阅读

作者 |张志鹏上海控安可信软件创新研究院研发工程师

版块 |鉴源论坛 · 观模

01背 景

形式化方法是基于严格的数学基础,通过采用数学逻辑证明来对计算机软硬件系统进行建模、规约、分析、推理和验证,是用于保证计算机系统正确性以及安全性的一种重要方法。经典的形式化语言和相应的建模方法有VDM[1]、Z[2]、Object-Z[3]、B[4]、Event-B[5]、TLA+[6],在软件工程领域确立了较大的影响力且有较成功工业界应用。如Event-B曾成功用于巴黎地铁的设计与开发,Amazon也将 TLA+用于Web Services的设计与开发。尽管形式化方法已经通过这些案例表现出了巨大潜力,但是由于对大型嵌入式控制软件进行形式化规约的构建过于复杂,以及开发成本过高等问题,难以在工业界进行规模化的应用。其根本性的难点在于缺少一套将形式化方法与软件工程有机融合,并能够对其进行形式化建模的工程方法,引导工程人员从原始的以自然语言描述的需求出发,适应软件需求变更等常见情况,逐步构建精确描述系统功能的形式化需求规约,并提供相应技术实施需求确认以保证需求规约充分而准确地刻画了期望的功能。

02形式化方法工程化面临的挑战

形式化验证技术发展至今,有着三种较为成熟的方法,其基本原理以及特点如表1所示:

pYYBAGQdC9eAZk7IAAFgv3Hczm4322.png

表1形式化方法

传统的形式化方法自动化程度较低且理论性较强,在实际应用中利用其直接进行形式化验证存在着不小的障碍。目前随着模型驱动开发以及形式验证工具的发展,形式化验证的自动化程度得到了显著的提高。

“基于模型的软件开发方法”作为一个崭新的技术,使用如图1所示的“Y”型开发流程。在其开发周期中,工程人员将模型作为核心,从而可以更加关注设计与需求的本身,同时在设计时可以对所建立的模型进行仿真测试,以尽早发现所存在的问题。并且针对设计到编码实现的过程,可以由代码自动生成技术完成,有效地降低引入人工错误的可能。

poYBAGQdC_CAXQPEAABJpRYJpmU007.png

在基于模型的开发方法中,建模语言和建模工具是其最重要的支柱。而形式化方法则能提供建模语言与建模工具的支持。形式化方法被认为是保证软件需求质量的重要手段,主要思想是建立形式化规约,用形式化规约语言精确地描述用户对软件的需求,通过对规约的逐步精化和验证得到可信的软件系统[7,8]。形式方法包含两项重要技术:形式化规约(formal specification)与形式化验证(formal verification)。前者关心的是形式化建模,即关注如何用精确的、无二义性的数学语言来书写形式化规约用以描述软件需求。后者根据数学方法例如定理证明或模型检验(model checking)等手段,对已建立的形式化规约进行分析,确认其是否满足期望的性质,最大程度地发现需求模型中不一致和二义性等错误,从而根本上保证软件的可靠性[9]。下面以一个工业中的具体案例来介绍形式化方法在实际中的应用场景,使用形式化建模验证和形式化验证工具来验证某操作系统的调度系统安全性。

03形式化方法工程化实例

调度系统从需求到源码实现分为三个部分:需求规范、架构设计和源代码。为保证对调度系统的充分验证,基于模型检测、SAT/SMT solver、CSP、Hoare逻辑等技术对这三部分均进行了形式化建模和相应的形式化验证。需求规范部分进行了形式化需求转换,并依据形式化需求和系统架构获得设计模型。而后使用形式化验证工具VCC、CBMC和PAT分别从单元级、模块级和系统设计级对系统构建的模型进行形式化验证。

3.1 调度系统的形式化建模

形式化建模主要是根据调度系统的需求文档和架构设计来定义系统的CSP模型。首先是对调度系统需求的形式化建模,流程如图2所示:

poYBAGQdEW6ADC0TAAB_FnFMxic086.png

图2 需求形式化建模流程

● 在底层需求的基础上进行需求的精化得到形式化需求;

● 将形式化需求基于类型进行功能需求和非功能需求的划分;

● 针对功能需求构建出系统模型,其中每条功能需求逻辑都在系统模型的进程中进行了详细描述;

● 针对非功能需求构建出其语义等价的模型约束;

● 将系统模型和性质结合构成整个形式化需求的需求模型。

在系统建模阶段,需要对底层需求描述的内容人工转化为形式化需求,在此过程中对系统需求进行进一步精化和建模,便于后续的工具进行相应的分析与验证工作。

然后根据调度系统的架构设计得到的任务状态迁移模型如下图3所示,使用CSP语言来描述系统行为。使用CSP对该模型采用如下建模步骤:

(1)定义模型所需的变量和常量;

(2)描述各个进程内任务行为;

(3)描述进程转换信息

(4)定义验证目标。

poYBAGQdEYaAdzo2AADyCv8Htf0182.png

图3任务状态迁移模型

图中显示了调度系统的六种任务状态,包括Ready(就绪态),Running(运行态),Int(中断态),Suspend(挂起态),Dormant(睡眠态),Null(空状态)。其中Null空状态是任务在任务模块初始化后的状态,任务被创建后由空状态迁移到Dormant睡眠态。任务创建完毕开始执行调度,睡眠态的任务可以迁移到Ready就绪态进入就绪队列等待调度执行,进而迁移到Running运行态;或者被挂起迁移到Suspend挂起态;处于运行态的任务若被高优先级的任务抢占会迁到Int中断态;而所有其他任务状态在运行任务删除调用后,都会返回到Dormant睡眠状态。

3.2 调度系统的形式化验证

为了保证验证的充分性,使用VCC、CBMC对源代码进行形式化验证分析从而验证系统源代码的准确性与一致性。使用PAT工具对系统设计需求进行建模,验证系统中的死锁、活性等安全性质,并根据来自高层需求中的性质验证系统设计需求是否满足高层需求。验证结果如下:

源代码验证模块:在验证了调度系统内所有的单元的函数和子模块后,发现了许多测试不能发现的类型不匹配、变量溢出、除0错误、分支不可达、数组越界、指针内存安全性等问题。

系统设计验证:调度系统应该满足任务间调度的无死锁,且在中断情况下的正确执行。待验证的性质主要包含以下三条:

(1)对于任务调度的无死锁,使用PAT中提供的deadlockfree性质来验证;

(2)对于任务调度的安全性性质,这里定义为在任意时刻,只有一个任务处于运行状态;

(3)对于任务调度的活性性质,满足调度系统的优先级执行原则,不会出现优先级反转。

验证结果如下图4所示:

poYBAGQdEaCAHv8UAAFgC0FkBgE315.png

图4 PAT验证结果

模拟了1147592状态后,

(1)系统无死锁性质验证通过;

(2)系统未能够执行到同时有两个任务处于运行状态错误状态,系统的安全性性质满足;

(3)系统未能够执行到优先级反转的错误状态,因此系统的活性性质得到满足。

若存在调度系统的迁移关系发生改变等异常情况时,PAT也能验证出调度系统的错误,并给出错误的路径实例,存在死锁的验证结果如下图5所示:

pYYBAGQdEbWAflkxAAG2dPjedbY262.png

图5 PAT死锁验证结果

04总 结

经过调度系统的形式化验证发现了调度系统实现过程中的部分问题,源代码模块的问题是真实存在的问题,在某个函数或某个模块的代码实现中,该函数或模块的输入依赖于其他部分的传递,可能真实的场景下不会发生上述问题,但形式化验证可以发现这些测试发现不了的错误。系统设计验证模块可以发现系统设计中存在缺陷的地方,可以验证系统设计需要满足的各种性质,并可以注入特殊情况性质来验证系统设计的完备性与安全性,存在错误时,查看具体的错误路径来改善系统设计架构。

综上所述,形式化工程方法,就是以软件形式化方法理论为基础,以系统化的工程方法引导工业界工程人员构建高质量的软件模型,用以引导后续的代码编写和相关测试分析。并选取了工业实际场景中的某操作系统的调度系统的形式化验证工作作为典型的形式化方法的工程化案例,应用了形式化方法的需求分析、建模与验证,由此验证了形式化方法的可行性与有效性。

参考文献:

[1]JPL, NASA. Formal methods guidebook –nasa. http://eis.jpl.nasa.gov/quality/Formal Methods/.

[2]Hall, Using Formal Methods to Develop an ATC Information System, IEEE Software, vol. 13, no. 2, Mar., pp. 66-76, 1996.

[3]C. Jones, Systematic Software Development Using VDM. Prentice Hall, Second Edition, 1990.

[4]J.M.Spivey, The Z Notation: A Reference Manual. Prentice Hall International (UK) Ltd, Second Edition, 1998.

[5]G.Smith. The Object-Z Specification Language. Advancesin Formal Methods, Kluwer Academic, 2000.

[6]Chaudhuri K, Doligez D, Lamport L, et al. Verifying Safety Properties With the TLA+ Proof System[J]. Lecture Notes in Computer Science, 2010, 6173:142-148.

[7]METEOR-S: Semantic Web Services and Processes, http://lsdis.cs.uga.edu/proj/meteor/, 2015.

[8]Paradkar et al., Automated functional conformance test generation for semantic web services, IEEE Int. Conf. Web Services (2007) pp. 110–117.

[9]王戟,詹乃军,冯新宇,等.形式化方法概貌[J].软件学报,2019,(01):33-61[37].


审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 建模
    +关注

    关注

    1

    文章

    280

    浏览量

    60495
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736
  • 形式化
    +关注

    关注

    0

    文章

    4

    浏览量

    692
收藏 人收藏

    评论

    相关推荐

    鉴源论坛 · 观模丨形式化验证——以操作系统任务调度算法验证为案例

    形式化方法为软件开发过程提供了一种较为透彻的思维方式,该方式可以用于工程化系统设计,并且可以很好地帮助工程人员建立系统抽象模型,从而进行系统精化和验证。
    的头像 发表于 11-09 11:25 166次阅读
    鉴源论坛 · 观模丨<b class='flag-5'>形式化</b>验证——以操作系统任务调度算法验证为案例

    形式化方法的工业应用:航空领域

    本文主要探讨了形式化方法在航空领域中的工业应用。航空领域作为安全攸关领域,其机载系统软件的开发有着高度复杂和严格的安全标准要求,以确保其安全可靠性。
    的头像 发表于 08-21 15:45 696次阅读
    <b class='flag-5'>形式化</b><b class='flag-5'>方法</b>的工业应用:航空领域

    单片机工程化

    请问大神,新手求教,就是用keil软件对单片机进行程序编写的时候,有的时候打到几百行,必须得进行分段的处理,也就是模块吧,比如说延时一个程序,传感器一个程序,最后将他们联系起来完成整个工程,可是我
    发表于 02-21 23:10

    嵌入式系统工程化设计要注意哪些方面

    嵌入式系统工程化设计7——计算机可靠性设计原创·林超100前一讲高可靠性是嵌入式系统的关键设计因素,但是讲到的内容是普适性的,对任何带电子设备的设备都需要。但是针对信息处理和控制的嵌入式计算机
    发表于 11-08 06:51

    嵌入式系统工程化设计的相关资料分享

    了行业的飞速发展,可以说这个行业在风口上。但是,也发现我们的行业的不足,基础严重依赖国外,企业设计能力参差不齐,从业人员培训费时费力,导致产品可靠性低下,项目遭受重大损失。解决这一问题,需要提升我国嵌入式计算机工程化设计能力。什么是工程化首先什么是
    发表于 11-09 06:37

    形式化方法和测试技术及其在安全中的应用

    本文回顾和讨论了形式化方法和测试技术,以及形式规格说明可以用于测试用例生成、测试顺序确定的途径;并提出了将形式化方法和测试技术应用于安全保密
    发表于 06-11 10:49 25次下载

    基于Petri网的安全协议形式化分析

    本文提出了一种基于 Petri网 的安全协议形式化描述和安全性验证的方法. 该方法的特点是,利用逆向状态分析判定协议运行过程中可能出现的不安全状态,利用Petri 网的状态可达性分析判
    发表于 06-20 15:37 29次下载
    基于Petri网的安全协议<b class='flag-5'>形式化</b>分析

    一种服务网络拓扑结构的形式化描述方法_陈鹏

    一种服务网络拓扑结构的形式化描述方法_陈鹏
    发表于 03-14 17:10 2次下载

    一种形式化的学习过程建模_钟伟平

    一种形式化的学习过程建模_钟伟平
    发表于 03-19 11:45 0次下载

    软件形式化开发的水波优化方法

    形式化方法有助于从根本上提高软件系统的质量与可靠性,但其开发成本往往过于高昂.一种折衷的办法是在软件系统中选取关键性部件进行形式化开发,但目前尚无非常有效的定量选择方法.将软件系统中的
    发表于 01-15 15:47 0次下载

    基于几何代数的高阶逻辑形式化建模

    计算和建模分析的传统方法,如数值计算方法和符号方法等,都存在计算不精确或者不完备等问题,高阶逻辑定理证明是验证系统正确的一种严密的形式化方法
    发表于 01-16 18:09 0次下载

    VaaS平台已支持区块链平台智能合约的形式化验证

    VaaS形式化验证平台,采用了多种形式化验证方法,具有验证效率高、自动化程度高、人工参与度低、易于使用、支持多个合约开发语言、可支持大容量区块链底层平台的形式化验证等优点。
    发表于 12-14 10:18 981次阅读

    形式化方法背后的动因和关键技术及行业应用

    上海控安形式化方法技术团队历年来在航空、航天和轨交等领域的成功应用经验,本专题将围绕“形式化方法”特别是形式化
    的头像 发表于 06-10 10:49 930次阅读
    <b class='flag-5'>形式化</b><b class='flag-5'>方法</b>背后的动因和关键技术及行业应用

    形式化方法基本原理初探

    形式化方法是基于严格的数学基础,通过采用数学逻辑证明来对计算机软硬件系统进行建模、规约、分析、推理和验证,是用于保证计算机软硬件系统正确性以及安全性的一种重要方法
    的头像 发表于 01-30 16:42 710次阅读
    <b class='flag-5'>形式化</b><b class='flag-5'>方法</b>基本原理初探

    形式化方法的工业应用:轨交领域

    文将聚焦于轨交领域,从领域专用的需求撰写与分析工具Prema入手,介绍形式化方法在工业中的实际应用。
    的头像 发表于 08-08 15:20 309次阅读
    <b class='flag-5'>形式化</b><b class='flag-5'>方法</b>的工业应用:轨交领域