鉴源论坛 · 观模丨形式化工程方法之需求建模(上)

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

版块 | 鉴源论坛 · 观模

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

引言:需求建模是整个软件开发、测试验证与维护的基础。经过长期研究与实践,工业界与学术界均意识到,采用形式化方法精确地描述软件需求,并确认其充分而准确地反映了人们对软件功能和运行场景的预期,是一种从源头确保软件质量的重要手段。

01

为什么需要需求建模

嵌入式控制软件作为电子产品中的主体,广泛地应用于诸多领域的控制系统中。如军事国防领域的轰炸机和洲际导弹;工业控制领域的分布式控制系统;人类生活领域的智能穿戴设备和汽车控制系统。而这些系统的安全性和可靠性都依赖这些嵌入式控制系统,如果这些嵌入式设备没有按照预期设计工作,则会导致不可预估的财务损失和人员伤亡风险。在1996年6月4日,欧洲安丽雅娜5型火箭因为惯性一个数据转换问题导致了火箭在发射40秒时发生了爆炸,造成了合计25亿美元的经济损失56。2003年8月14日,在美国电力检测和控制管理系统中,因为同一资源同时被分布式计算机系统访问引发了软件失效,造成了美国大面积停电,损失合计超60亿美元。2011年7月23日,甬温线由于其列车控中心设备在设计时存在严重的缺陷,当雷雨天气下,保险管遭雷击熔断后,中心采集驱动单元的数据不再更新错误的控制信号而导致的,并最终导致了18人死亡,190人受伤。

需求分析作为经典V字模型的第一步,也是最关键的一步,直接影响V字模型中后续的设计、开发以及编码阶段。如何通过高质量的需求来为嵌入式控制系统的安全性和可靠性保驾护航也备受关注。美国曾在1995年做过一个调研,对全国合计8000个软件调查的追踪结果表明,所有失败的项目中因为需求引发的占到了45%。在另一项研究中也发现,能在软件开发过程中的需求阶段发现问题相比于在编码后发现问题再进行修改代价的十分之一。

基于软件工程的理论和实践,开发工程师认识到通过采用有效的软件需求描述,从源头上确保控制系统的安全性和可靠性是一种行之有效的方法。

02

是什么让需求建模变得困难

尽管形式化方法对保证软件可信性展示了令人鼓舞的前景,然而,在当前的嵌入式控制软件开发领域,例如航空航天领域和轨道交通领域,形式化方法的实际应用仍是一个巨大的挑战,大量深层次的问题有待解决:

1)原始需求控制逻辑不清晰,描述不完备

在原有的需求文档中,由于软件中某些具体功能未能表达准确,这使得其他工程师无法通过查看需求文档对整个系统的架构和控制逻辑有着清晰的认知。因此,其他工程师也难以将控制流以及其中数据流逻辑特征从需求中完整抽取出来并进行分析,导致其中存在的一些潜在问题无法被及时发现。

很多需求描述本身存在不完备的问题,比如对某些输入的取值范围定义不明确以及某些变量的取值空间模糊等问题。特别是在原有的需求文档中,存在许多变量在使用前未严格定义。而这些变量往往直接使用在其功能需求的描述,并且工程人员也难以准确地给出其类型或者初始值。另一方面,需求文档在经过多个需求工程师的撰写修改后,会引入一些明细的逻辑错误,尤其是自然语言撰写的需求本身就存在模糊性以及二义性,对需求规约是一大挑战。

2)领域专用需求建模语言的缺乏

如何使用一种方法将需求文档中的自然语言向需求模型进行转换,并且能够使用精准的需求建模语言对其进行描述,是将形式化方法工程化的核心关键。从软件工程的角度出发,需求描述的质量将直接影响到后续软件的正确性以及可靠性。如何设计具有高可读性的需求建模语言来精准描述整个汽车控制系统的需求,并且需要让不论是需求工程师还是开发人员都能够在无需形式化背景的人快速上手正确理解都是需要考虑的问题。

3)需求确认方法的局限性

需求确认通常侧重于检查需求描述是否充分且准确反映了用户对软件功能的期望。当前在工业界常用的需求确认方法主要是需求文档的审查,学术界提出的其他方法包括规约的测试和动画等。但是,这些方法缺乏严谨性和系统性,特别是缺乏和形式化理论的有机融合,使得需求确认的效果往往不如人意。

03

一种面向机载控制软件需求建模的形式化工程方法

针对上述问题,我们提出了一套以形式化方法理论为基础能够使用在嵌入式控制系统的工程化方法,该方法有助于需求工程师快速实现对嵌入式软件需求的精确描述以及实现需求工程师对需求模型的确认。

我们以机载控制系统为研究对象,将该形式化工程方法应用在航空领域,提出了一套用于引导机载控制系统的形式化规约和需求确认的形式化工程方法。

图一.png

图1 形式化工程方法框架

整体的形式化工程方法主要划分为两个模块:需求模型提取以及需求模型的确认。本文主要介绍需求模型的提取。

04

需求模型提取

需求模型提取总共经历三个阶段:

1) 由工程师根据其工程经验和专业知识使用自然语言人工编写原始的自然语言需求。

2) 根据具体的领域特征,研制一种具有针对性的形式化描述模板,此模板本质是对用户输入自然语言进行一定的规整化,形成特定的形式化需求呈现形式,方便工程人员在不需要学习形式化知识的前提下就可以使用形式化描述需求。

3) 对于目标系统的需求文档进行深度调研,提取该领域软件的特征,提出面向该领域的需求描述语言,该语言具有严格的形式化语法及语义,使用该语言将半形式化需求文档完全规约化,得到形式化需求规约,形式化需求规约可经由需求确认的方法来确保需求文档的正确性、有效性以及完备性。

图二.png

图2 需求模型提取

自然语言需求

基于模型开发的软件大部分的都是从需求的获取以及分析着手,但是因为对系统的预期功能在软件开发初期往往都不够明确,并且每个参与者的知识背景也不尽相同,因此采用易于人交流和理解的自然语言完成初期的需求文档的设计能够更加便于需求分析人员与领域工程人员的交流,其文档可读性也会比用符号表示的形式化文档有明显的优势。 

但自然语言在有着可读性高和易于理解的好处的同时也存在着模糊性以及二义性的问题,可能会存在对同一句话不同的人也有着不同的理解。比如,处于初始化状态连续执行超过250ms,则故障等级增加一级。对于这条需求就可能会引发一个歧义性,一旦处于初始化状态连续执行达到了一秒钟,那么风险等级应该增加一级还是应该增加四级呢,这种问题积累下来将为后续的开发和测试埋下了不少隐患。

半形式化需求

传统的使用自然语言撰写的需求因为其通俗易懂的特点而广泛使用,然而由于自然语言描述存在显而易见的二义性和模糊性,我们必须将其转换为更精确的半形式化需求模型。规定半形式化需求文档中,任何数据结构必须是形式化定义的,即变量的数据类型被精确描述。而变量之间的关系可以仍然是非形式化的。半形式化需求模型主要基于工程上可行性的考虑,为此我们提出了如图3所示的需求文档模板。该模板包含了对于数据结构或系统结构等易于形式化的系统特征的精确描述。

图三.png

图3 半形式化需求文档模板示例

从软件工程的角度来说,建模者对软件功能的理解往往是伴随着文档撰写而逐渐清晰,因此文档必然需要多次变更修改。如果直接撰写形式化需求,不仅技术上困难,其变更也会带来巨大的时间和成本损失。反之,我们提供半形式化需求阶段,建模者只需要先关注变量的数据结构特征,而暂时以自然语言表述其关联关系,待建模者确认需求文档确实已经充分描述了功能以后,再将其向完全形式化模型转化。在此过程中,即使系统功能发生变化,其修改的代价也是可以接受的。另一方面,当数据结构清晰之后,需求分析者对于功能的理解也随之深入,更有利于撰写需求规约。

形式化需求

考虑到嵌入式工业控制系统具有对功能正确性可靠性要求高、控制数据流结构复杂以及周期执行的特点,将这样的信息处理系统的需求定义包含以下特点:

1. 变量集合:ACSDL 软件需求将不同来源的信息和数据都定义为了对应的信息变量,根据这些信息变量的值,来进行相应的处理。因此,ACSDL软件需求是一系列变量的集合。

2. 面向计算:嵌入式工业控制系统每个模块都是结合实时的物理环境数据来执行的计算任务。其中涉及到包含逻辑操作以及数值的计算等大量的计算。

3. 周期性:工业软件的运作是一个连续的动态的过程,ACSDL 为了及时地对软件进行控制,需要不间断的获取各类信息,并及时的进行响应。然而机器本身是离散的,为了模拟这种连续性的要求,ACSDL 系统将物理时间切分成一些很短的时间间隔,即周期(Cycle)。并严格要求在一个周期内,需求变量的状态是不变的。

4. 状态机驱动:嵌入式工业控制系统的会根据每个周期所处的实际状态,来进行不同的计算任务以及状态间的切换来实现实际的控制效果。

考虑到嵌入式工业控制系统的特征,为了有效描述航空发动机的嵌入式控制软件需求,我们提出了一种轻量级的形式化建模语言ACSDL,用于撰写最终的形式化需求规约。ACSDL对于控制软件有良好的描述能力,包括支持时间周期等诸多领域特征。

在完成了对半形式化文档的检查之后,工程人员可以采用ACSDL语言将规约完全形式化,即通过ACSDL语言将每个功能输入和输出变量之间的关系予以精确化定义,并将所有全局约束条件等予以形式化定义。    

图四.png

图4 形式化需求文档实例

图4展示了图3所示功能的形式化描述。一般来说,构建形式化描述的过程,对工程人员来说是促使他们对需求内涵进行思考的过程。一些模糊的需求在这个过程中被逐步明晰。

05

总 结

本文主要介绍了形式化工程方法中的需求建模技术,该方法有助于需求工程师快速实现对嵌入式软件需求的精确描述以及实现需求工程师对需求模型的确认,从源头上保证软件的正确性。本文具体介绍了需求建模技术中的需求模型提取部分,剩下的需求确认部分将在后续文章中介绍。

主要参考文献:

[1] 佚名. 阿丽亚娜5型火箭——首发失利 空中爆炸[J]. 航空知识, 1996(7):50-50. 

[2] 席琳. 形式化方法在构件组装实时系统中的应用研究[D]. 郑州大学, 2012:1-1. 

[3] 程平, 刘伟, 陈艳. 我国可信软件产业的发展现状与应对策略[J]. 科技进步与对策, 2010(03):51-54. 

[4] 钟新文. 甬温铁路动车追尾 40人遇难[J]. 广东交通, 2011, 2011(4):48-48. 

[5] Filax M ,  Gonschorek T ,  Ortmeier F . Correct Formalization of Requirement Specifications: A V-Model for Building Formal Models[C]// International Conference on Reliability, Safety and Security of Railway Systems. Springer International Publishing, 2016. 

[6] 王知强. 管理信息系统入门与提高[M]. 清华大学出版社, 2005:190-190.

[7] Meditskos G ,  Bassiliades N . Structural and Role-Oriented Web Service Discovery with Taxonomies in OWL-S[J]. IEEE Transactions on Knowledge and Data Engineering, 2010, 22(2):278-290.

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

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

相关文章

Linux之Shell

第 1 章 Shell 概述 1)Linux 提供的 Shell 解析器有 [zhaohadoop101 ~]$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh2)bash 和 sh 的关系 [zhaohadoop101 bin]$ ll | grep bash -rwxr-xr-x. 1 root root 941880…

JVM--- 垃圾收集器详细整理

目录 一、垃圾收集需要考虑的三个事情: 二、垃圾回收针对的区域 三、如何判断对象已死 1.引用计数算法: 2.可达性分析算法 四、引用 五、生存还是死亡? 六、回收方法区 七、垃圾收集算法 1.分代收集理论 2.标记-清除算法 3.标记-复制算…

【qt创建线程两种方式】

QT使用线程的两种方式 1.案例进度条 案例解析: 如图由组件一个进度条和三个按钮组成,当点击开始的时候进度条由0%到100%,点击暂停,进度条保持之前进度,再次点击暂停变为继续,点击停止按钮进度条停止。 案…

案例:CentOS8 在 MySQL8.0 实现半同步复制

异步复制 MySQL 默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主节点如果 crash 掉了,此时主节点上已经提交的事务可能并没有传…

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、log4net.config代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net…

Java学习24--异常

异常 软件运行过程中的各种意料之外叫做Exception&#xff0c;比如要读取的文件找不到&#xff0c;准备联网发现没网&#xff0c;等着int参数来了个String 注意Error和exception不一样&#xff0c;error错的比较猛&#xff0c;一般是直接把JAVA整个搞崩了&#xff0c;比如内存…

数据结构通讲

目录 集合源码详解 一、常见数据结构讲解 1. 线性数据结构 1.1 数组 1.2 队列 1.3 链表 1.3.1 单向链表 1.3.2 双向链表 1.4 栈 2. 非线性数据结构 2.1 树 2.2 二叉树 2.2.1 概念介绍 2.2.2 遍历操作 2.2.3 删除节点 2.2.4 查找局限性 2.2.5 AVL&#xff08; …

linux kernel 内存踩踏之KASAN_SW_TAGS(二)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 上一篇简单介绍了标准版本的KASAN使用方法和实现&#xff0c;这里将介绍KASAN_SW_TAGS和KASAN_HW_TAGS 的使用和背后基本原理&#xff0c;下图是三种方式的对比&#x…

Ps:焦点堆栈

焦点堆栈 Focus Stacking是一种摄影和图像处理技术&#xff0c;通过合并多张在不同焦距拍摄的照片来创建一张具有更大景深的图像&#xff0c;特别适用于微距摄影、风景摄影和任何需要在整个场景中保持尖锐对焦的情况。 ◆ ◆ ◆ 拍摄注意事项 1、使用三脚架 为了确保图像之间…

【Node-RED】安全登陆时,账号密码设置

【Node-RED】安全登陆时&#xff0c;账号密码设置 前言实现步骤密码生成setting.js 文件修改 安全权限 前言 Node-RED 在初始下载完成时&#xff0c;登录是无账号密码的。基于安全性考虑&#xff0c;本期博文介绍在安全登陆时&#xff0c;如何进行账号密码设置。当然&#xff…

git相关内容

一.git安装 该操作相信不用介绍了&#xff0c;为什么用yum&#xff0c;大家也是非常清楚的。 如果是root账户&#xff1a;yum -y install git 如果是普通账户&#xff1a; sudo yum -y install git 二.git和gitee/github区别 Git&#xff08;读音为/gɪt/&#xff09;是一个…

CDP和Chrome

CDP和Chrome CDP和WebDriver Protocol WebDriver和 Chrome DevTools Protocol&#xff08;CDP&#xff09; 是用于自动化浏览器的两个主要协议&#xff0c;大多数的浏览器自动化工具都是基于上述其中之一来实现的。可以通过这两种形式来和浏览器交互&#xff0c;通过代码来控…

语义分割-基础知识

1.cls_iou计算: cls0_iou预测正确的像素个数/&#xff08;预测为该类别的像素个数真实标签为该类别的像素个数-预测正确的像素个数&#xff09; mean_iou各个类别的像素预测准确值相加/像素总个数2.转置卷积(Transposed Convolution) 转置卷积不是卷积的逆运算 转置卷积也是卷…

Java on VS Code 2024年1月更新|JDK 21支持!测试覆盖率功能最新体验!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Visual Studio Code for Java 2024年的第一期更新&#xff01;提前祝愿大家春节快乐&#xff01;在本博客中&#xff0c;我们将有…

Vue+Vite项目初建(axios+Unocss+iconify)

一. 创建项目 npx --package vue/cli vue 项目成功启动后&#xff0c;进入http://localhost:3200&#xff0c;即可进入创建好的页面(假设启动端口为3200) 二. 测试网络通讯模块 假设有本地服务器地址localhost:8000提供接口服务&#xff0c;接口为localhost:8000/token&#…

使用 apt 源安装 ROCm 6.0.x 在Ubuntu 22.04.01

从源码编译 rocSolver 本人只操作过单个rocm版本的情景&#xff0c;20240218 ubuntu 22.04.01 1&#xff0c;卸载原先的rocm https://docs.amd.com/en/docs-5.1.3/deploy/linux/os-native/uninstall.html # Uninstall single-version ROCm packages sudo apt autoremove ro…

openresty (nginx)快速开始

文章目录 一、什么是openresty&#xff1f;二、openresty编译安装1. 编译安装命令1.1 编译完成后路径1.2 常用编译选项解释 2. nginx配置文件配置2.1 nginx.conf模板 3. nginx常见配置一个站点配置多个域名nginx配置中location匹配规则 三、OpenResty工作原理OpenResty工作原理…

蓝牙BLE学习-概述

1. 简介 1.1 蓝牙发展历程 蓝牙&#xff0c;直接来自于一位国王的名字--King Harald ‘Bluetooth Gromsson。这位国王因两件事留名于史&#xff0c;其一是在公园958年统一了丹麦和挪威&#xff0c;其二是在其死后&#xff0c;其牙齿呈现出暗蓝色的颜色&#xff0c;因而得名蓝牙…

【MATLAB GUI】 1. 普通按钮、静态文本和可编辑文本

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 文章目录 初步认识普通按钮静态文本和可编辑文本设计一个简易计算机 初步认识普通按钮 任务要求&#xff1a;点击一次“100”按钮&#xff0c;按钮上的文字值就递增1&#xff1b;点击“close”按钮&…

RIP协议详解

​RIP是最早的动态路由协议&#xff0c;虽然已经过时并且很少使用&#xff0c;但是可以通过学习RIP并且和ospf等现在正在使用的路由协议对比&#xff0c;了解其工作原理和过时原因&#xff0c;具有很强的学习性。 一、RIP协议简介 RIP&#xff08;Routing Information Protoc…