前言:Simulink模型是嵌入于Matlab之中的一个模块化开发工具,它在嵌入式领域和应用层逻辑的搭建上享有声誉。并且,Simulink与C语言一样有着一套标准化的开发流程,因此它也具备安全性、可靠性、可移植性等优势。而在本篇文章中,则是对建模时的需求管理和可靠性验证做一个初步介绍与学习。
目录
一、Requirements Management是什么?
1.1 简介
1.2 需求管理内容
1.3 需求管理的呈现
二、Requirements Management&&SimulinkTest交叉验证
2.1 根据模板定制需求
2.2 根据需求创建模型
2.3 创建需求管理
2.3.1 打开需求编辑器
2.3.2 创建需求管理集
2.3.3 添加需求集
2.3.4 加载需求
2.3.5 绑定需求
2.4 验证需求管理
2.4.1 创建测试框架
2.4.2 创建测试工程
2.4.3 绑定测试框架
2.4.4 配置测试用例
2.4.5 添加测试用例
2.4.6 需求与测试用例交叉验证
三、需求定位
3.1 需求功能块链接与测试用例快速定位
3.2 需求追溯图查看
总结
一、Requirements Management是什么?
1.1 简介
Requirements Management--需求管理,这是部署于MATLAB中的一款需求管理APP。它可以根据word或者Excel来管理,也可以通过其内置的ReqIF文件或者IBM配置来进行需求管理。并且,它要求每一条需求都必须有对应的功能块与之对应,否则会出现需求不达标的状况。当需求与对应的功能块关联之后,每一条需求便可视为超链接可以快速定位对应的功能块,同时需求管理器内部也会生成拓扑图辅助我们查看需求对应的所有功能块即一个需求可以被多个功能块使用。


1.2 需求管理内容
以Excel进行需求管理为例,它包含如下信息:
1、自定义ID,即每条需求对应的序号,方便后续的管理操作进行定位,如果不定义则由系统默认但是不利于管理。
2、摘要,即每条需求的简略概括。
3、描述,即每条需求的详细介绍包括但不限于从定义到实现的完整过程
4、理由,即每条需求的目的
5、关键字,即为每条需求的匿名,也方便后续的管理中进行定位
6、创建者,即杜撰人。
7、创建日期,即需求的生日。
8、修改者,即修改人。
9、修改时间,即发生变更的日期
10、自定义属性,此项为一个类即用户可以自定以除以上9种的任意属性,但是不管定义成什么,定义多少,都会被归为自定义属性那一块。此项可以自行探索与拓展。
11、忽略,被标记为忽略的列不会被写入需求管理的任意属性里。
那么可以根据以上信息创建Excel的需求管理模板,而需求内容的编辑需严格遵守属性定义,否则无法被写入。以下仅强调描述和理由的规则,其它规则可自行探索。
规则如下:这两个的内容必须为有序即需以'数字.'的形式开头。可自行琢磨。最终的表格模板如下:
1.3 需求管理的呈现
以案例中的加法运算需求为例,当完成绑定后,依据图一信息,可以在功能块的右上角快速查看需求,同时Verified表示当前需求是否通过测试,如果没有则为红色,否则为绿色。Implemented表示当前需求是否被绑定,如果没有则为空白,否则为蓝色。
依据图二信息,可以看出所有与需求绑定的功能块与测试用例,并且可以通过点击进行快速定位。


二、Requirements Management&&SimulinkTest交叉验证
2.1 根据模板定制需求
假设需求如下并将其保存至工作路径:
2.2 根据需求创建模型
根据数学运算需求创建外部子系统,根据四则运算需求在其内部创建子系统,那么最终功能块如下所示:
2.3 创建需求管理
2.3.1 打开需求编辑器
路径:APP-需求管理编辑器
2.3.2 创建需求管理集
步骤:新建需求管理集-选择名字和路径-点击保存。如果界面为空白在最右侧会有一个向导。
2.3.3 添加需求集
需求添加方式一,步骤如下:
步骤一、右击需求名字-选择添加需求
步骤二、点击后会自动创建一条需求,其中索引为系统默认不可更改,ID可以自定义,其余内容可在右侧编辑添加
步骤三、根据需求数量重复步骤二即可。
需求添加方式二,步骤如下:
步骤一:点击需求-点击导入-文档类型选择电子表格
选择文档路径后出现以下界面,需关注配置列和支持外部源更新两个选项
步骤二,配置列与外部源更新:
配置列功能主要是对导入的excel表格做一个映射操作。点击配置列后后出现一个窗口,它会将表格的内容全部映射出来,我们需要根据规则在用作那一行给每一列手动选择对应的映射属性,下图是已经配置完成的模板,可以参考。
在配置窗口下方还有一个指定导入的行,顾名思义就是可选择性的导入需求。
以上配置完成后点击确定即可。
若选择支持外部源更新,即当发生需求变更时修改表格内容然后更新即可。若不选择支持外部源更新即当需求变更时需在需求编辑界面进行修改,而表格的修改不会影响到需求。
步骤三,需求集
当完成创建后会如下图所示出现一个需求集,可以通过鼠标点击对应的需求查看属性映射是否正确。
如果需要查看其余的属性可以右击属性列-选择属性-在隐藏列选择查看的属性后添加确定即可。
至此,便完成需求集的全部创建。需要注意的是以上操作是基于表格从空白直接创建需求集,也可先创建需求集再导入需求,这个操作可自行探索,大同小异。
2.3.4 加载需求
需求集的每一条需求需要绑定对应的功能块才能正常进行管理,因此接下来需要在模型搭建界面进行操作。
打开需求管理器:APP-需求管理器-点击后会在下方出现需求管理的窗口,如果没有可以通过模型画布右下角的透视图进入。
然后加载需求集:点击需求管理器处的打开需求集-选择创建的需求集
完成加载后界面如下:
添加其余的查看属性:右键需求集-选择实现和验证状态,如下所示,由于未绑定功能块,此时进度条都为空白。
2.3.5 绑定需求
假设已有对应的功能块,接下来对其进行绑定。
方案一,右键需要绑定的功能块-需求-根据当前操作选择(自行探索)
方案二,选择对应的需求拖拽至目标功能块(推荐)
需求链接成功后如下所示,功能块的右上角会出现类似文件的图标并可以打开查看需求,需求管理器内对应的需求实现进度条会变成蓝色。
接下来重复操作,完成所有需求的绑定,最终效果图如下:
至此,完成了所有的需求与对应功能块的绑定。但是目前为止只完成了上述需求管理的一半操作。还有一个操作就是需求验证,可以看到验证进度条依旧是白色表示没有任何操作链接。因此接下来完成需求的验证。
2.4 验证需求管理
对需求管理的验证需要用到另外一个工具-SimulinkTest。这也是APP中的一个内置工具,它可以为子系统内的功能块创建测试用例并进行验证。由于本文核心不在于此,因此仅描述如何使用该项工具来进行需求管理的验证。如果对该项工具想有进一步的了解可以等待后续文章或者自行查询资料。
2.4.1 创建测试框架
测试框架是独立于原功能块的测试模型,测试模型的变更不会影响原模型,但测试模型的输出结果可以作为原模型的测试结果。 步骤如下:
第一步:右键目标功能块-测试框架-为目标功能块创建-保持默认选择点击确定即可
第二步:重复上述操作,完成所有功能块测试框架的创建。创建完成后可以在测试框架管理中查看已成功创建的测试框架。
2.4.2 创建测试工程
第一步:进入SimulinkTest,APP-SimulinkTest-Simulink测试管理器
第二步:创建测试工程,左上角新建-从电子表格创建测试
数据配置界面选择创建用于指定数据的测试模板文件后点击下一步
系统界面选择当前所属模型-从创建的框架中任选一个(可以选择空白框架,但由于没必要所以直接用实际的测试模型)后点击下一步
属性界面如果是第一次使用建议全部选中然后下一步
场景界面指定测试场景的数量实际上就是待创建excel中sheet的数量,指定场景的基名称实际上就是sheet的名字,根据需求配置即可然后点击下一步
在生成的测试界面配置测试文件和电子表格的保存路径后点击完成即可开始创建测试项目。
创建中...
创建完成后界面如下,后续的操作都是在测试套件和测试用例下完成的。其中测试套件和测试用例的名称可以修改。
2.4.3 绑定测试框架
在测试用例下展开需求,然后点击添加
在打开的界面中点击新建-在文档类型中选择Requirements Toolbox-点击使用当前
在文档索引界面选择对应的需求然后应用,如果提示回调错误说明模型中选中的模块与此处不符,只需要双击此处的需求即可。建议直接双击。
然后在需求界面点击应用-观察测试用例的需求是否与此处一致,如果一致点击确定即可,如果不一致重复操作。
完成上述操作后回到模型画布界面观察,由于当前只绑定了一个需求且未进行测试,因此下方Verified列表仅数学运算的进度条为黄色标识,其表示已链接测试用例但未测试,最上面两列只有一部分黄色表示需求未全部绑定。
2.4.4 配置测试用例
在测试用例的右侧找到输入选项,然后点击编辑
点击编辑后会打开表格,需要了解如下信息:
1、time即运行时间,左侧time为输入信号执行时间,右侧time为输出信号执行时间,为了方便分析,一般需要手动将右侧time复制到左侧time
2、端口分为左侧输入端口和右侧输出端口,他们以第二个time分割开。其中输入输出的数据容量应该保持一致即与time的操作一样。
举例,假设测试的功能逻辑为输入值+1,那么在表格中如果在time=0时的u8AddInport为0,u8AddOutport=1,那么该时间段的测试用例就是通过的。如果在time=0.2时的u8AddInport为1,u8AddOutport=1,那么该时间段的测试用例就是失败的,需要检查。其余的端口测试类似。
3、那么经过修改后的表格最终如下,保存后即可开始测试。
2.4.5 添加测试用例
在已有的测试组中添加测试用例与从空白工程新建测试用例略有不同,因此单独描述,以添加Add功能块为例,如下:
选中测试组-新建-基线测试(其余测试用例的用法可自行探索)
新建的测试用例需要完善以下信息。需求绑定、测试框架和测试模型选择、输入参数映射、基线准则映射。相关配置区域如下所示:
需要注意的是,上述缺省的配置建议先完善模型和测试框架,然后填补其余信息。各区域的操作如下:
1、模型与框架的选择与前面空白测试用例创建的操作一致,选择对应的路径即可
2、需求绑定操作与前面一致
3、输入参数可以基于原表新建,也可以进行映射(此处推荐映射)
输入参数映射操作如下,首先点击添加
然后添加基于空白工程创建的表格
然后在选择文件后弹出的提示框中点击映射输入,显示成功映射后点击下方添加即可
基线准则的操作与添加输入的操作一致,只是需要将不需要的端口取消即仅保留当前测试框架相关联的端口。
最终配置如下
剩下的需求链接与添加Add一致,只需根据框架保留对应的输出端口即可。
完成所有配置后,最终结果图如下,蓝色表示所有需求均有功能块链接,黄色表示所有需求均有测试用例链接但是未进行测试。
2.4.6 需求与测试用例交叉验证
由于上述已经将相关配置完成,此处可以先直接运行观察测试结果
1、只运行ProjectFunction1_MathSubsystem_Test,结果如下:SimulinkTest结果为绿色,表示测试通过。
模型中仅数学运算进度条为绿色,表示仅该项需求测试通过
2、运行所有的测试用例,结果如下:SimulinkTest结果为绿色,表示测试通过。
模型中所有需求的进度条均绿色,表示需求测试通过。
3、在表格中修改测试用例,结果如下:
仅修改表格中Add的输出端口参考数据等于输入数据,SimulinkTest中MathSubsystem和Add的测试用例出错,表示该项需求测试未通过。同时,由于Add、Sub、Multiply、Div为MathSubsystem的内部子系统,因此也可以判定配置的映射关系无误。
模型中数学运算和加法运算的需求进度条为红色,表示需求测试未通过。则验证了需求管理和SimukinkTest的链接无误。
三、需求定位
3.1 需求功能块链接与测试用例快速定位
可以在需求管理器中选择需要查看的需求,右侧链接中会出现实现者和验证者信息。其中实现者为链接的模型功能块,通过点击可以快速跳转;验证者为SimulinkTest中的测试用例,通过点击可以快速跳转。
3.2 需求追溯图查看
在需求管理器中选择需要查看的需求,然后点击上方的可追溯图
结果如下,图中会将链接的功能块以实现的标签展示出来,链接的测试用例以验证的标签展示,这里面的功能块也可通过点击快速跳转。
总结
在本篇文章中简单的描述以下两点:
1、基于Requirements Management简单描述了如何基于表格创建模型需求、管理需求、链接需求。
2、基于SimulinkTest简单描述了如何使用它对创建的测试框架进行验证、如何将对应的需求链接至功能块。
以上只是对于模型需求管理的简单描述,根据项目不同,还有很多细节需要把控和优化,还有很多使用技巧需要探索。但总而言之,通过上述的工具链,在模型搭建的架构上已经可以比较规范了,需要达到非常标准的建模规范,还需要了解如MAAB建模规范等标准。
最后,由于篇幅过长,本文章到此结束啦,欢迎各界大佬前来斧正。以下是文章工程的地址并且已上传资源,欢迎自取学习。
GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。
https://gitcode.com/SYW-OPEN/Simulink_5498/tree/Simulink/%E9%9C%80%E6%B1%82%E7%AE%A1%E7%90%86