鉴源论坛·观模丨形式化方法的工业应用:轨交领域

作者 | 王依玲 上海控安可信软件创新研究院系统建模组

版块 | 鉴源论坛 · 观模

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

引言:前面几期文章介绍了形式化方法的发展历史和具体技术,并从整体的角度介绍了形式化方法的工程化。本文将聚焦于轨交领域,从领域专用的需求撰写与分析工具Prema入手,介绍形式化方法在工业中的实际应用。 

01

背 景

随着城市日新月异的发展,轨道交通的建设与分布越来越成为城市交通便捷、经济发达的重要标志。“十三五”时期,城市轨道交通运营里程已达 6600 公里,预计到 2025 年,超大城市的轨道站点 800 米半径覆盖通勤比例将不小于 30%。轨道交通的控制软件决定了系统运行的安全性,如果控制软件没有按照预期方式运行,则存在引发财产损失和人员伤亡的可能性。因此轨道交通控制软件的质量安全攸关,国家也对此出台了严格的安全标准。

在轨道交通领域中,列车自动控制系统 (Automatic Train Control,ATC)系统包括三部分,ATP(Automatic Train Protection,列车自动防护系统),ATO(Automatic Train Operation, 列车自动运行系统),和 ATS(Automatic Train Supervision,列车自动监控系统),它通过自动地防止列车司机的失误来提供高水平的列车安全。如图1所示,ATO 是控制列车自动运行的系统,由车载设备和地面设备组成;ATP是为了确保列车一旦超过规定速度,立即施行制动的系统,它也是由车载设备和地面设备所组成;ATS 系统是为了完成对列车的自动监控的系统,它由控制中心、车站、车场以及车载设备组成。三者的关系是,ATO 系统在 ATP 系统的保护下,根据ATS 的指令实现列车运行的自动驾驶、速度的自动调整和列车车门的自动控制。

7311.jpg

图1 列车自动控制系统结构

需求分析是软件设计的基础,是软件开发活动中最为关键最早开始的环节。需求文档中包含着列车控制系统的功能描述,可以通过对列车控制系统需求进行分析,发现需求中系统的功能描述错误。经过长期的研究和实践,学术界和工业界都意识到从需求阶段开始对列车控制系统的功能需求进行检查的必要性。然而目前的工业界中,人工检查自然语言描述的列车控制系统需求不但低效,而且无法确保功能需求的正确性。

02

形式化建模方法概述

采用自然语言进行需求描述会存在二义性,所以某些对撰写者来说清晰无误的表述,完全可能被其他人理解成其他意思。导致不同的开发者对相同的需求和设计产生模棱两可的理解,从而导致开发效率的降低。为了避免这种情况的发生,我们采用标准的形式来描述需求和设计。这种标准形式一般以数学语言为基础。这种标准化的描述规范就构成了形式化方法的基础。

形式化方法是建立在数学基础上的针对数字化系统进行规格说明撰写、软件开发、软件验证的技术。它的数学基础包括形式逻辑,离散数学和机器可识别语言。形式化模型是一种无二义性的用数学语法和语义刻画的模型,是一种对软件诸多方面的抽象表达形式,用于后续的分析、仿真和代码生成(在有些条件下,直接从模型生成代码可能无法实现)。应用形式化方法的基础是对即将开发的软件建立一个形式化模型。

形式化方法包含两项主要分支,形式化规格说明技术和形式化验证技术,而形式化验证技术又分为定理证明和模型检查两个分支,如图2所示。

7312.jpg

图2 形式方法的构成

在学术界和工业界,学者和工程人员为了保证列车安全运行,主要有从以下方面对轨道交通控制系统的研究:形式化需求描述、建立模型和验证、对系统进行仿真。这三者并不是孤立的,经常结合在一起研究,如利用形式化方法对系统的需求进行描述,然后建立模型、分析验证。

为了实现采用形式化方法保障轨道交通控制系统安全的目的,我们提出了一种针对轨道交通控制系统的需求建模形式化工程方法,并开发了一个集需求撰写及分析功能于一体的工具Prema(Precise Requirements Editing, Modeling and Analysis 精确需求撰写,建模与分析)用于辅助形式化工程方法的应用。

03

轨交领域解决方案Prema

Prema对形式化技术的应用主要包含两个方面,形式化需求规格说明和模型检查。为了可以对需求进行形式化描述,我们提出了适配轨道交通领域的CASDL语言。对形式化语言描述的系统需求进行需求建模后,可以在需求模型中验证布尔表达式描述的约束性质是否成立。

Prema工具界面运行主界面图如下图3所示,图中主要分为左边部分的编辑栏和右边部分的展示栏。用户可以在左边撰写需求,同时在右边区域实时显示最终生成的文档样式,在编辑区域上方还有一些快捷工具以供用户撰写需求。

7313.jpg

图3  Prema工具界面

3.1 形式化需求规格说明

用户在左侧编辑栏用CASDL语言撰写形式化需求,以下对CASDL语言规范进行简单介绍。

由于轨道交通领域的控制系统通常周期性运行,CASDL中的cycle有着用于表示目前系统的运行进行到了哪一个周期的特殊含义,其语法可以表示为如下形式: 

● md :: = (cycle, Block, DefBlock, DataDictionary)

● Block :: = (identifier, Precondition, initial, State, Transition)

● DefBlock :: = (name, identifier, Tasks)

● Tasks :: = CFG

● Transition ::= (Source, Target, Condition, Action)

● DataDictionary ::= (V)

CASDL包含4个部分。Block部分描述的是系统状态迁移情况,在Block里由唯一的identifier来对它进行标识,Precondition用于判断系统状态迁移的条件是否满足,initial用于表示系统状态迁移前的值,State中存储了所有发生了状态值改变的变量值,Transaction描述了状态转换的具体过程,描述该过程的结构也在上述中被表述出来。其中,Source和Target分别代表状态改变前的值和状态改变后的值,Condition里记录的是发生状态迁移的需要满足的条件集合,最后一项Action则记录了该状态转换过程如何发生。 

DefBlock描述的是计算模块,它包含了模块名称name,唯一的标识identifier,以及由控制流组成的计算任务Tasks。

Dictionary里记录了在需求文档建模过程中出现的变量。 

如图4所示为用CASDL书写的示例,该例子中红色部分表示的是展示状态迁移情况的Block部分,它没有返回值,只更改状态变量的取值,使系统所处的状态发生改变,即状态迁移。其中State后跟随的(k-1)表示第k-1个周期。黄色部分展示的是描述计算任务的defBlock部分。

7314.jpg

图4 Block与DefBlock示例

CASDL同样定义了一些表达式用于描述DefBlock中面向计算的任务的计算过程,表达式的语法如下所示: 

● SExpr :: = Const | Var | f(n)(SExpr) 

● BTerm :: = True | False | p(n)(SExpr) 

● IExpr :: = (after | duration)(BTerm,SExpr)

● BExpr :: = BTerm | ¬BExpr | BExpr ∨ BExpr | BExpr ∧ BExpr

其中,语句表达式由一个常量,一个变量或者多个语句表达式组成,布尔变量的取值为True或False或者从状态表达式的值推导而来。间隔表达式主要用于描述与时间有关的需求片段,比如在某个时间段或者在某个时间段后值为布尔值或者是某个语句表达式的计算值。而布尔表达式则由布尔值,布尔值的非值,或值或者与值组成。 

同时CASDL也定义了几种语句结构:

● stmts :: = pStmt | cStmt

● pStmt :: = aStmt | skip

● aStmt :: = x := SExpr

● cStmt :: = stmts | if BExpr then stmts else stmts

语句集合包含复合语句或者是单独的语句,其中pStmt由赋值语句或者skip语句组成,赋值语句可以表示为一个变量被赋予了一个表达式的值,而复合语句由语句集合构成或者由一个选择语句结构构成。 

总体来说,CASDL与工程师的使用习惯相符合,学习和理解成本很低, 这种类python的语言容易令人接受,不过其语义与python仍有不同,如k在CASDL中是一个特殊的字母,它代表了系统运行的周期。 

3.2 模型检查

在需求撰写完成后,Prema工具提供静态分析、状态机模拟执行、需求性质验证等功能用于验证撰写需求的正确性。需求性质验证即模型检查。

需求性质验证是在需求检查无语法错误后,对需求模型进行诸如不变式或者可达性之类的验证。其主要目的在于分析有影响关系的某些变量之间发生了变化,是否一定会影响到相关变量的变化,这对于理解和分析需求逻辑关系有着至关重要的作用。性质验证的流程图如图5所示:

7315.jpg

图5 性质验证流程图

Prema性质验证界面如图6所示,用户可选择之前使用过的配置选项,也可以重新选择。在该验证界面中,用户选择需要验证哪些需求条目,选择完毕后,单击Go按钮会生成完整的验证界面。

7316.jpg

图6 性质验证界面示意图

工具会根据用户所选择的需求条目生成变量关系图,提醒需求工程师该需求条目所描述的内容,同时也避免错误地勾选了需求条目。在确定选取了正确的需求条目后,在性质撰写区撰写所需要验证的性质,目前验证的性质仅支持布尔表达式。填写完初始状态(可以不填)和性质后,可以点击check按钮来验证所填写的性质是否是布尔表达式。

用户选取了所要验证的需求条目和性质,单击Verify按钮后,界面展示验证结果。需求工程师可根据反馈的信息查看需求是否满足了性质,如果没有满足性质,则会给出不满足该性质时的反例。 

通过使用Prema工具,能够有效消除需求语句的模糊性和二义性,并保证需求的正确性。

04

总 结

近年来通过不断地努力,形式化方法不仅仅在学术界取得很大的发展,同样在工业界也已得到大量的应用。形式化方法首先需要定义领域相关的需求描述语言,这种语言可以完全覆盖该领域中的所有需求特征。其次通过建立的描述语言来刻画和描述需求模型,并提供与之配套的算法来对需求模型进行分析与验证。由于轨道交通领域对于控制系统有着严格要求,这为形式化方法的应用提供了前提。在未来,形式化方法将更好地与工业实践结合,为工业安全保驾护航。

主要参考文献:

[1] 光明网. 《“十四五”全国城市基础设施建设规划》印发[EB/OL].(2022-08-03)[2022-8-16].https://m.gmw.cn/baijia/2022-08/03/35929147.html. 

[2] 王秀超.列车控制系统需求文档的模型抽取与分析[D].贵阳:贵州大学,2017 

[3] 韦群,王钰.软件缺陷及其对软件可靠性的影响分析[J].计算机应用与软件.2011, 28(1):145-149. 

[4] 包丹珠.轨道交通系统需求分析与一致性测试[D].上海:华东师范大学, 2016

[5] 刘阳.面向轨道交通控制系统的需求模型分析与验证[D].上海:华东师范大学,2017

[6] 郑寒月.面向轨道交通控制领域的基于需求的测试用例自动生成方法研究[D].上海:华东师范大学,2021

[7] Huang Y , Feng J , Zheng H ,et al.Prema: A Tool for Precise Requirements Editing, Modeling and Analysis[J].  2019.DOI:10.1109/ASE.2019.00128.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57464.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24届华东理工大学近5年自动化考研院校分析

今天给大家带来的是华东理工大学控制考研分析 满满干货~还不快快点赞收藏 一、华东理工大学 学校简介 华东理工大学原名华东化工学院,1956年被定为全国首批招收研究生的学校之一,1960年起被中共中央确定为教育部直属的全国重点大学&#…

U盘删除的文件如何恢复?只需要这3个方法!

“谁来救救孩子啊!u盘里好多重要的文件,不小心被弟弟全部删除了,u盘里删除的文件还能不能恢复呀?快给我出出主意吧,感谢大家!” 随着u盘的使用越来越频繁,很多朋友会将重要的文件都保存在u盘里。…

PowerDesigner数据库设计工具使用笔记

简单记录下这个数据库设计工具的使用,在开发中设计数据库过程用得上,好记性不如烂笔头Q 显示窗口 工具类View >ToolBox 即可 选择数据库SQL语句类型是MySQL还是Orale以及版本 顶部栏中的Database 选中 第一个选项 change current DBMS 更改SQL…

Linux 中使用 verdaccio 搭建私有npm 服务器

安装 Node Linux中安装Node 安装verdaccio npm i -g verdaccio安装完成 输入verdaccio,出现下面信息代表安装成功,同时输入verdaccio后verdaccio已经处于运行状态,当然这种启动时暂时的,我们需要通过pm2让verdaccio服务常驻 ygiZ2zec61wsg…

jupyter文档转换成markdown

背景 上一篇文章**《如何优雅地用python生成模拟数据》**我就使用jupyter写的,这个真的是万能的,可以插入markdown格式的内容,也可写代码,关键是像ipython一样,可以分步执行。 我可以这样自由的写我的博客内容&#x…

不用手动编程!ChatGPT帮你轻松实现单片机按键输入功能

从今年年初,OpenAI发布的ChatGPT已摧古拉朽之势席卷全球,短短两个月注册用户数就超过1亿人,是全世界增长速度最快的应用。很多人都说今年是AI元年,其实也是有一定道理的,之前的AI门槛相对较高,很多人没有机…

我的Python教程:使用Pyecharts画关系节点图

示例源码1 from pyecharts import options as opts from pyecharts.charts import Graphnodes [{"name": "结点1", "symbolSize": 10},{"name": "结点2", "symbolSize": 20},{"name": "结点3&qu…

Java实现Google cloud storage 文件上传,Google oss

storage 控制台位置 创建一个bucket 点进bucket里面,权限配置里,公开访问,在互联网上公开,需要配置角色权限 新增一个访问权限 ,账号这里可以模糊搜索, 角色配置 给allUser配置俩角色就可以出现 在互联…

APT60DQ20BG-ASEMI快恢复二极管APT60DQ20BG

编辑:ll APT60DQ20BG-ASEMI快恢复二极管APT60DQ20BG 型号:APT60DQ20BG 品牌:ASEMI 封装:TO-3P 恢复时间:≤35ns 正向电流:60A 反向耐压:200V 芯片个数:双芯片 引脚数量&…

SQL server 与 MySQL count函数、以及sum、avg 是否包含 为null的值

sql server 与 mysql count 作用一样。 count 计算指定字段出现的个数, 不是计算 null的值 获取表的条数 count(n) n:常数 count(1),count(0)等 count(*) count(字段) 其中字段为null 不会统计在内。 avg(字段)、sum(字段) 跟count(字段)…

cn.hutool.core.date.DateUtil.beginOfDay 方法的作用和使用

cn.hutool.core.date.DateUtil.beginOfDay 方法的作用是返回指定日期的开始时间,即将时、分、秒和毫秒部分设置为 0。 使用 beginOfDay 方法时,可以按照以下步骤进行操作: 导入 cn.hutool.core.date.DateUtil 类。创建一个 java.util.Date …

实现 cpolar 内网穿透

简介 cpolar是一种安全的内网穿透云服务,可以将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务。它是一款内网穿透软件,使用简单,只需一行命令即可将内网站点发布至公网,方便给客户演示…