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

    文章

    221

    浏览量

    60137
  • 代码
    +关注

    关注

    27

    文章

    3397

    浏览量

    65173
  • 形式化
    +关注

    关注

    0

    文章

    3

    浏览量

    674
收藏 人收藏

    评论

    相关推荐

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

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

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

    工程化设计能力。什么是工程化首先什么是工程化?百度一下:工程化是在较短的时间内多人合作,做出一
    发表于 11-09 06:37

    监控系统中控制软件的工程化设计与实现

    工程化设计方法,介绍了模块程序设计和结构程序设计的基本原理,具体分析了在电锅炉微机控制系统中,采用模块程序设计和结构
    发表于 03-18 10:33 21次下载

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

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

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

    形式化描述方法_陈鹏
    发表于 03-14 17:10 2次下载

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

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

    CSS工程化实践成果分析

    工程化不断进步。本文将从CSS模块、namespace约束、CSS in JS方案三个方面逐步深入解读CSS在工程化领域取得的成果
    发表于 09-27 15:10 0次下载

    Web服务系统的形式化的语义模型

    形式化的语义模型。Web服务作为范畴理论中的对象节点,服务间的交互
    发表于 01-09 15:14 0次下载
    Web服务系统的<b>形式化</b>的语义模型

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

    方法,如数值计算方法和符号方法等,都存在计算不精确或者不完备等问题,高阶逻辑定理证明是验证系统正确的一种严密的形式化方法.在高阶逻辑证明工具HOL-Light中建立了几何代数系统的形式化模型,主要包
    发表于 01-16 18:09 0次下载

    无人机无线通信协议的形式化认证综述

    形式化认证综述
    发表于 06-25 11:04 9次下载

    基于工程化参数优化的遥测伺服系统

    工程化参数优化的遥测伺服系统
    发表于 06-30 15:57 6次下载

    嵌入式系统工程化设计

    工程化设计能力。什么是工程化首先什么是工程化?百度一下:工程化是在较短的时间内多人合作,做出一
    发表于 11-04 10:21 15次下载
    嵌入式系统<b>工程化</b>设计

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

    形式化方法技术团队历年来在航空、航天和轨交等领域的成功应用经验,本专题将围绕“形式化方法”特别是形式化方法工程化应用,组织一系列文章,探讨形式化方法背后的动因和关键技术及行业应用。 01 传统软件工程面临的困
    的头像 发表于 06-10 10:49 492次阅读
    <b>形式化</b><b>方法</b>背后的动因和关键技术及行业应用

    形式化方法基本原理初探

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

    TPT19新特性之形式化需求:自动生成测试用例

    形式化需求的主题上,我们又向前迈进了一步。 如今,已经可以使用TPT自动评估
    的头像 发表于 04-23 14:38 0次阅读
    TPT19新特性之<b>形式化</b>需求:自动生成测试用例

    下载硬声App