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

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

版块 | 鉴源论坛 · 观模

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

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.mzph.cn/news/773767.shtml

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

相关文章

PASSL代码解读[01] readme

介绍 PASSL 是一个基于 PaddlePaddle 的视觉库,用于使用 PaddlePaddle 进行最先进的视觉自监督学习研究。PASSL旨在加速自监督学习的研究周期:从设计一个新的自监督任务到评估所学的表征。 PASSL 主要特性: 自监督前沿算法实现 PASSL 实现了…

为什么requests不是python标准库?

在知乎上看到有人问:为什么requests不是python标准库? 这确实是部分人困惑的问题,requests作为python最受欢迎的http请求库,已经成为爬虫必备利器,为什么不把requests直接装到python标准库里呢?可以省去第…

学习使用xbox手柄控制小乌龟节点移动

使用xbox手柄控制小乌龟,首先要下载joy功能包,发布sensor_msgs话题也就是手柄和ros通信的话题。 下载的步骤就根据官方文档即可 joy/Tutorials/ConfiguringALinuxJoystick - ROS Wiki 这里我提供一下具体步骤 第一步 安装joy 首先安装对应系统版本的…

山东省正规等保测评机构名称以及地址一览表

山东省正规等保测评机构名称以及地址一览表 序号:1 名称:山东新潮信息技术有限公司 地址:济南市二环东路东环国际广场A座2701室 序号:2 名称:联通数字科技有限公司山东省分公司 地址:山东省济南市市中…

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

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

Java是用什么语言写的?PHP呢?

Java底层是C语言。 Sun公司研发人员根据嵌入式软件的要求,对C进行了改造,去除了留在C的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。而后,经过迭代更新&#xff0c…

SV-7041VP SIP塑料壳sip音箱支持POE供电(白色弧形)

SV-7041VP SIP塑料壳sip音箱支持POE供电 (白色弧形) 一、描述18123651365微信 SV-7041VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可…

一些常用的正则(持续更新)

常用正则合集 1、匹配字符串中的所有标签&#xff0c;拆分字符串并且将标签作为单独一项 1、匹配字符串中的所有标签&#xff0c;拆分字符串并且将标签作为单独一项 /(<\/?.?>)/g splitStringByTags 函数接受一个参数 inputString&#xff0c;然后使用正则表达式/(&l…

QT的 纯代码+注释 学习笔记

QT学习笔记链接 更新到数据库操作为止..ing

微信怎么恢复聊天记录?效果惊人的3个方法

微信作为我们日常生活中最常用的即时通讯工具之一&#xff0c;承载着我们与亲友之间的重要沟通记录。然而&#xff0c;不可避免地会遇到误删聊天记录的情况&#xff0c;可能是因为手误、设备问题或其他原因。 当我们发现重要的聊天记录不见了&#xff0c;往往会感到焦虑和困扰…

题目:求和(蓝桥真题)

问题描述&#xff1a; 解题思路&#xff1a; 暴力超时&#xff0c;S变换得S a1*(a2.....an) a2*(a3....an) .... an-1*an。因此只需要求出括号内前缀和再相加求和即可。时间复杂度大大减小。 注意点&#xff1a;ans和前缀和的大小要开long long。 题解&#xff1a; #includ…

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使用的方法&#…

论文:Term-Weighting Approaches in Automatic Text Retrieval翻译笔记(自动文本检索中的术语加权方法)

文章目录 论文标题&#xff1a;自动文本检索中的术语加权方法摘要1. 自动文本分析2. 词权重规范3. 术语加权实验4 推荐4.1 查询向量4.2 文档向量 论文标题&#xff1a;自动文本检索中的术语加权方法 论文链接&#xff1a;https://www.cs.colostate.edu/~howe/cs640/papers/sal…

javaWeb健康管理系统

一、引言 1.1 设计背景 紧张的工作节奏、教学和科研的压力、个人不良的工作生活习惯、以及伴随工作压力而来的家庭关系、人际关系紧张等因素使得高校群体成为慢性病的高发群体[1]。学生入学的定期体检&#xff0c;教职工人入职体检&#xff0c;以及所有学生和教职工的定期体检…

Leetcode 3.26

Leetcode Hot 100 一级目录1.每日温度 堆1.数组中的第K个最大元素知识点&#xff1a;排序复杂度知识点&#xff1a;堆的实现 2.前 K 个高频元素知识点&#xff1a;优先队列 一级目录 1.每日温度 每日温度 思路是维护一个递减栈&#xff0c;存储的是当前元素的位置。 遍历整个…

宁波中墙建材预制混凝土模板、铝合金模板、方木有啥区别?可送奉化鄞州海曙慈溪杭州湾前湾北仑

宁波中墙建材预制混凝土模板、铝合金模板、方木有啥区别&#xff1f;可送奉化鄞州海曙慈溪杭州湾前湾北仑 预制混凝土模板、铝合金模板和方木是三种不同的建筑模板材料&#xff0c;它们各自拥有独特的特性和用途。 预制混凝土模板&#xff1a;这种模板通常是由工厂预制的混凝土…

LeetCode-热题100:34. 在排序数组中查找元素的第一个和最后一个位置

题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1…

各种编程语言的优缺点

当谈论编程语言时&#xff0c;我们进入了一个充满激情和争议的领域。每种编程语言都有其独特的优点和局限性&#xff0c;适用于不同的场景。让我们简要评价一些主流编程语言&#xff0c;探讨它们的优缺点和应用领域。 来来来,老铁们,男人女人都需要的技术活 拿去不谢:远程调试,…

LeetCode-热题100:33. 搜索旋转排序数组

题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], n…

第三十四章 配置服务器访问

文章目录 第三十四章 配置服务器访问添加应用程序路径应用程序路径配置参数 第三十四章 配置服务器访问 本页介绍如何配置 网关连接的应用程序。对于这些配置任务&#xff0c;可以使用 Web Gateway 管理页面。其他文章介绍了如何配置默认设置和服务器。 每个Web 应用程序都必…