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

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

版块 | 鉴源论坛 · 观模

引言:需求建模是一种从源头确保软件质量的重要手段。需求建模可分为需求规约和需求确认两个部分,前者通过严格设计的形式化语言精确地将需求文档转换为了形式化规约,后者使用基于模型的技术对形式化规约进行多方面的验证以确保需求文档的正确性、有效性以及完备性。

01

前 言

在上一次的文章(《形式化工程方法之需求建模(上)》点击阅读详情)中,我们介绍了一种用于引导机载控制系统的形式化规约和需求确认的形式化工程方法,并着重介绍了该形式化工程方法中的需求模型提取部分。本文将继续介绍剩下的需求模型确认部分。

02

需求模型确认

需求确认的目的是为了通过确保需求文档的正确性、有效性以及完备性来保证后续工程实现的整个系统是正确可靠的,并作为通过在需求阶段发现问题来减少研发成本的重要手段。经典的需求确认有需求审查、需求规约的动画化和需求规约的测试等方式,而需求审查是作为使用最为广泛的一种确认方式。虽然需求审查本身易推广,但因为其本身存在对需求审查人员要求比较高以及耗时等局限性存在难以得到普及。我们提出了一种基于模型的需求模型确认方法,该方法主要包含以下四个部分:模型确认、基于模型的测试用例生成、模型仿真、性质验证。 

(1)模型确认

模型确认主要是以图形化的方式来展示构建好的需求模型中的一些关键信息,为了更好地帮助工程人员发现需求中的问题,我们针对变量和模式流建立了2种关系图:变量之间的影响关系和模式之间的迁移关系,我们将这2种关系使用变量影响关系图和模式迁移关系图进行表达。

图一.png

图1 变量依赖关系图

变量影响关系图用节点表示不同的变量,用箭头表示变量间的影响关系,箭头指向被影响的变量。箭头上标注的条件表示特定条件下的变量直接影响关系。

图二.png

图2 模式迁移关系图

而模式迁移关系图用节点表示不同的模式,用箭头表示模式间的迁移关系,箭头指向要迁移到的模式。箭头上标注的条件表示特定条件下的迁移关系。在状态迁移图中还可以通过选定想要观察的状态进一步观察此状态的各迁移条件,分析状态迁移图以及状态迁移关系来确认模型是否符合预期。可以快捷地帮助需求工程师判断需求功能的描述是否存在缺失。 

(2)基于模型的测试用例生成

在航空领域中对测试用例的覆盖准则有严格的要求,测试用例需要满足DO-333标准:测试用例需满足MC/DC覆盖准则的要求。根据DO-333认证标准的要求,我们提出根据形式化需求自动生成符合MC/DC覆盖准则的测试用例,并辅以真值表帮助人工检查生成测试用例的正确性。该方法还可以帮助发现模型本身的一些错误。生成满足MC/DC覆盖准则的测试用例的方法针对的是模型中的每个模块。对于模块中的计算逻辑,通过算法收集满足MC/DC覆盖准则的约束并将其输入Z3约束求解器中求解来得到测试用例。

图三.png

图3 约束有误的示例

图3展示了一个条件错误的示例,通过对该例子进行基于MC/DC覆盖准则的测试用例约束与求解,可以得到如表1所示的结果。

表1测试用例

表一.png

表1中空白的一项因为条件约束有错,无法求出测试用例。在模型检查的过程中,根据MC/DC覆盖准则生成测试用例,如果有无法生成测试用例的情况,那么就代表模型中的控制算法有错,说明原需求文档的控制逻辑有误。

(3)模拟仿真

模拟仿真操作是在基于需求建立的模型基础上结合上外部输入来使得需求模型模拟真实系统在实际运行中的本质过程,在模拟系统在实际运行过程中,会再以动图的形式实时模拟状态的变化,并提供每个数据各个周期的值。也正是由于其可以根据需求模拟真实执行过程,并记录该系统下每个周期的状态以及变量的值,可以做到代替传统测试中测试人员根据所测需求来进行的手动计算,避免因为人工计算引发的一些不必要的错误,提高了计算的准确性和效率。控制工程师给定的物理环境模拟器是一个确定性系统,即给定相同的输入序列,必然得到同样的输出序列。在此假设下获得可执行程序的方法的模拟结果。模拟执行示意图如图4所示。

图四.png

图4 模拟执行示意图

模拟仿真的过程是:首先进行初始化,为全局变量设置初值,为各个基本模式的计算过程创建相应的任务,启动物理环境模拟器;然后进入控制回路。在该回路中,首先调用物理环境模拟器的接口,从环境采集数据,更新输入变量;然后执行当前模式相对应的计算任务,计算任务由一系列模块组成。如果计算任务完成,则开始检查模式切换条件,调用物理环境模拟器的接口驱动执行机构,然后进入下一次迭代。如果计算任务因为超时被挂起,则调用物理环境模拟器的接口驱动执行机构,然后进入下一次迭代,直接继续未完成的执行计算任务。

(4)性质验证

性质验证是一种经典的用于验证模型是否满足给定性质的技术。一个非常流行的性质描述语言是 LTL,其可以用于描述线性执行的系统。航空航天领域的发动机控制软件和飞行器控制软件均是典型的线性运行的系统。然而,由于飞行器的执行被随机的环境变量所影响,导致传统的模型检查技术不能够直接适用。与此同时,需求工程师们需要一种不需经过模拟仿真即可找到需求中错误的方法,具体来说,用户需要验证一个性质,希望知道在所得到的需求模型之中,该性质是否始终满足,若不满足,则给出其反例。为了解决工业上的实际性质验证需求,我们提出了一个简易版本的性质验证方法用于进行静态时全局的性质验证。性质验证的框架如图5所示。

图五.png

图5 性质验证框架

用户选择待验证的需求条目,工具将自动抽取待验证需求条目中的控制流路径,形成所有路径的集合。然后对模型中每一条路径进行分析,收集路径中的约束条件。根据用户撰写的性质,将用户的性质取反后与路径中的约束条件做合取操作得到待验证的性质。对待验证的性质进行求解,得到验证结果,验证结果包括收集到的路径数量,满足性质的路径的数量,不满足性质的路径数量,并针对不满足性质的路径提供反例来说明在何种情况下不满足性质。将该验证结果反馈给用户后,用户可以根据该结果扩大或缩小待验证的需求条目集合,进行更进一步的性质验证。

在该方法中,路径收集本质上是为了收集路径中的约束条件,为了保障约束条件的准确性,我们使用了符号执行的方法进行路径的收集。在路径收集的过程中主要是为了得到所有的状态路径集合,每个状态路径中维护了该路径下的符号表、内存模型和约束条件。由于在路径收集的过程中已经排除了不可达路径,因此当路径收集结束后,遍历所有的状态路径,根据用户撰写的性质,将用户的性质取反后与可达路径做合取操作得到待验证的性质。将合取得到的表达式输入给求解器进行求解。如果Z3求解器无法得到解,说明该性质在该路径的取值域内是成立的,将该状态路径归类于满足性质的可达路径。反之,如果 Z3求解器得到了解,说明该性质在该路径的取值域内存在不成立的情况,将该路径归类于不满足性质路径。针对所有的状态路径,如果它们在要验证的性质下都属于满足性质路径,那么认为该性质在需求模型中是满足的;只要存在任意一条可达路径属于不满足性质路径,那么认为该性质在需求模型中是不满足的。最终将不满足性质的路径的反例返回给用户查看。

这种简易版本的性质验证方法在实际实现时存在的问题如下: 

· 路径收集问题:在路径收集时,由于在该模型语言中路径的概念存在于各个模块之中,类比于C语言中的函数的话,那么函数的先后执行情况预先并不可知,导致收集到了大量系统实际运行时根本不会执行的路径。 

· 状态爆炸问题:为了解决赋值语句对于条件的影响变化的问题,最终使用了符号执行的技术进行路径的收集,然而,当嵌套的分支过多时,比如当三个模块都发生十几层的嵌套时,会使路径收集工作无法正常完成。

基于上述问题,目前该性质验证仅能用于少量模块间的全局系统性质验证。

· 实验结果:为了验证该形式化工程方法的可行性并展示其有效性,我们将其应用到真实的航空发动机控制软件的需求分析中。实验中有2名经验丰富的工程师全程参与。在将非形式化需求逐步转化成形式化规约的过程中,因为工程师对领域知识非常熟悉,需求规约的构建大约用时2个月。该控制软件的形式化需求规约是一份包含了10个模式、152个模块、1145个变量的Microsoft Word文件。在规约转化成原型的过程中,一共发现了78个语法错误、72个变量遗漏、23个变量类型错误。在进行图形化审查时,一共生成了152个变量依赖关系图、152个变量模块依赖关系图、152个模块模式依赖关系图、1个模式迁移关系图。另外,通过对需求模型的分析,一共生成2342条基于MC/DC覆盖准则的测试用例。通过合作方提供的外部数据,我们顺利完成了需求模型的模拟执行,与合作方通过Matlab模拟的情况一致。

03

总 结

本文主要介绍了形式化工程方法中需求建模技术的需求确认部分,我们设计了一种基于模型的需求确认技术,包括模型确认、基于模型的测试用例生成、模型仿真、性质验证。

我们提出的形式化工程方法在实际航空发动机软件开发项目中展现了优于工业界传统手工审查方法的缺陷发现能力和提供了直观地展示需求中变量关系的能力,进一步佐证了形式化方法在嵌入式控制软件领域的良好前景。未来随着更多技术的发展,我们会继续致力于更为系统化、更能被工业界工程人员接受的嵌入式控制软件形式化规约构建方法和工具链。

主要参考文献:

[1] Youn Kyu Lee, Hoh Peter In, Rick Kazman. Customer Requirements Validation Method Based on Mental Models[C] // Proc of Software Engineering Conference, 2015:199-206.

[2] Aceituna D, Do H, Lee S W. SQ^(2)E:An approach to requirements validation with scenario question[C] //Proc of 2010 Asia Pacific Software Engineering Conference,2010: 33-42.

[3] Li M, Liu S. Integrating Animation-Based Inspection Into Formal Design Specification Construction for Reliable Software Systems[J]. IEEE Transactions on Reliability, 2016, 65(1): 88-106.

[4] Aceituna D, Do H, Lee S W. Interactive requirements validation for reactive systems through virtual requirements prototype[C] // Proc of Model-Driven Requirements Engineering Workshop, 2011:1-10.  

[5] Wang H, Liu S, Gao C. Study on model-based safety verification of automatic train protection system[C] // Proc of Asia-Pacific Conference on Computational Intelligence and Industrial Applications, 2009: 467-470.

[6] Ahmad E, Dong Y W, Larson B, et al. Behavior modeling and verification of movement authority scenario of Chinese Train Control System using AADL[J]. Science China Information Sciences, 2015, 58(11):1-20.

[7] Miao W, Pu G, Yao Y, Ting S, et al. Automated Requirements Validation for ATP Software via Specification Review and Testing[M] // Formal Methods and Software Engineering. Berlin : Springer International Publishing, 2016:26-40. 

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

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

相关文章

手撕LRU 最近最少使用缓存淘汰策略 + LinkedHashMap

LRU 最近最少使用缓存淘汰策略 1 LRU 算法就是一种缓存淘汰策略2 手撕LRU3 LinkedHashMap 常见面试题 1 LRU 算法就是一种缓存淘汰策略 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢&#x…

“Kimi概念”降温,长文本“担不起”大模型的下一步

Kimi火了…… 这是这波AI浪潮中,国内创业公司第一次真正“破圈”。最明显的标志是,在二级市场中,Kimi已被市场作为一个概念板块来对待,它们被称之为“Kimi概念股”。在之前爆炒的板块中,可能有华为产业链、苹果产业链&…

SV-7045VP sip网络草坪音箱 室外网络广播POE供电石头音箱

SV-7045VP sip网络草坪音箱 室外网络广播POE供电石头音箱 18123651365微信 SV-7045VP SIP网络草坪音箱 sip POE石头音箱 描述 SV-7041VP是深圳锐科达电子有限公司的一款防水网络草坪音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出…

ESD保护二极管ESD9B3.3ST5G 以更小的空间实现强大的保护 车规级TVS二极管更给力

什么是汽车级TVS二极管? TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护,防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中,由于车辆启…

机器学习——神经网络简单了解

一、神经网络基本概念 神经网络可以分为生物神经网络和人工神经网络 (1)生物神经网络,指的是生物脑内的神经元、突触等构成的神经网络,可以使生物体产生意识,并协助生物体思考、行动和管理各机体活动。 (2)人工神经网络,是目前热门的深度学习的研究…

【第二部分--Python之基础】02

二、运算符与程序流程控制 1、运算符 1.1 算术运算符 算术运算符用于组织整数类型和浮点类型的数据,有一元运算符和二元运算符之分。 一元算术运算符有两个:(正号)和-(负号),例如&#xff1…

【C++11】thread线程库

【C11】thread线程库 目录 【C11】thread线程库thread类的简单介绍函数指针lambda表达式常用在线程中 线程函数参数join与detach利用RAII思想来自动回收线程 原子性操作库(atomic)atomic中的load函数:atomic中对变量进行原子操作的一些函数 CAS(Compare-And-Swap)无…

Git学习笔记之基础

本笔记是阅读《git pro》所写,仅供参考。 《git pro》网址https://git-scm.com/book/en/v2 git官网 https://git-scm.com/ 一、git起步 1.1、检查配置信息 git config --list查看所有的配置以及它们所在的文件 git config --list --show-origin可能有重复的变量名…

科技云报道:从“算力核弹”到生成式AI,新纪元还有多远?

科技云报道原创。 “我们需要更大的GPU”! 3月19日凌晨,一年一度的“AI风向标”重磅会议——GTC 2024如期而至。 英伟达CEO黄仁勋在大会上发布了包括新一代加速计算平台NVIDIA Blackwell、Project GR00T人形机器人基础模型、Omniverse Cloud API、NVI…

【prompt六】MaPLe: Multi-modal Prompt Learning

1.motivation 最近的CLIP适应方法学习提示作为文本输入,以微调下游任务的CLIP。使用提示来适应CLIP(语言或视觉)的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。在这项工作中,我们提出了针对视觉和语言分支的多模态提示学习(MaPLe),以…

大数据开发(日志离线分析项目)

大数据开发(日志离线分析项目) 一、项目需求1、使用jqueryecharts的方式调用程序后台提供的rest api接口,获取json数据,然后通过jquerycss的方式进行数据展示。工作流程如下:2、七大角度1、用户基本信息分析模块2、浏览…

【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征

文章目录 0. 实验环境1. 理论基础1.1 滤波器(卷积核)1.2 PyTorch:卷积操作 2. 图像处理2.1 图像读取2.2 查看通道2.3 图像处理 3. 图像去模糊4. 图像去噪4.1 添加随机噪点4.2 图像去噪 0. 实验环境 本实验使用了PyTorch深度学习框架,相关操作…

openGauss学习笔记-252 openGauss性能调优-使用Plan Hint进行调优-Scan方式的Hint

文章目录 openGauss学习笔记-252 openGauss性能调优-使用Plan Hint进行调优-Scan方式的Hint252.1 功能描述252.2 语法格式252.3 参数说明252.4 示例 openGauss学习笔记-252 openGauss性能调优-使用Plan Hint进行调优-Scan方式的Hint 252.1 功能描述 指明scan使用的方法&#…

【计算机操作系统】深入探究CPU,PCB和进程工作原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【二叉树】Leetcode 102. 二叉树的层序遍历【中等】

二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点) 示例1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 解题思路…

elasticsearch基础应用

1._cat接口 | _cat接口 | 说明 | | GET /_cat/nodes | 查看所有节点 | | GET /_cat/health | 查看ES健康状况 | | GET /_cat/master | 查看主节点 | | GET /_cat/indices | 查看所有索引信息 | es 中会默认提供上面的几个索引,表头…

Spring 自定义 CustomQualifier

为什么写这篇文章 Spring 支持类型注入,并且可以通过Qualifier 或者Mate 调整类型注入的范围。但是通过自定义注解结合现有的 Qualifier 使用起来有种种困难。 将 Qualifier 融合在自定义注解中,在使用 AliasFor 遇到问题仅仅检查注解中的一部分内容是否…

外包干了10天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Tomcat下载安装以及配置

一、Tomcat介绍 二、Tomcat下载安装 进入tomcat官网,https://tomcat.apache.org/ 1、选择需要下载的版本,点击下载 下载路径一定要记住,并且路径中尽量不要有中文 8、9、10都可以,本博文以8为例 2、将下载后的安装包解压到指定位…

【小黑送书—第十四期】>>重磅升级——《Excel函数与公式应用大全》(文末送书)

今天给大家带来AI时代系列书籍:《Excel 2019函数与公式应用大全》全新升级版,Excel Home多位微软全球MVP专家打造,精选Excel Home海量案例,披露Excel专家多年研究成果,让你分分钟搞定海量数据运算! 由北京…