Simulink模型验证的持续集成
什么是CI?
CI的好处是什么?
可重复性。 CI管道为构建、测试、打包和部署提供了一致且可重复的自动化流程。 可重复的自动化允许开发人员专注于必要的工作并节省项目时间。 这也是降低风险的一个重要方面,通常是认证的要求。 质量保证。 手动测试是有效的,但它通常基于几天以前的快照,并且缺乏可重复性。 对于CI,更改总是根据最新的代码库进行测试。 缩短开发时间。 具有内置质量保证的可重复流程加快了高质量产品的交付。 自动化部署意味着您的代码始终为生产做好准备。 改进协作。 有了CI,开发人员就有了一个定义好的过程来管理变更集并将其代码合并到生产线中。 一致的流程使管理大型团队成为可能,并降低了培养新开发人员的成本。 审核就绪代码。 CI工作流提供了广泛的审核跟踪。 对于通过CI管道进行的每个更改,都可以确定谁进行了更改,谁对其进行了审阅,更改的性质,以及依赖关系、测试及其结果,以及在此过程中生成的任何数量的相关报告和工件。
基于模型的设计如何适应CI?
案例研究:在CI系统中验证、构建和测试Simulink模型
验证标准符合性:一个MATLAB单元脚本运行一个简单的模型顾问检查。 评估标准确保模型没有未连接的线。 构建模型:MATLAB单元测试文件为我们的模型构建生产SIL代码。 如果生成在没有警告的情况下成功,则通过评估标准。 执行测试用例:Simulink test中的一个测试套件使用几个驾驶场景来测试车道跟随控制器。 使用三个评估标准验证控制器的正常运行: 避免碰撞:在驾驶场景中,小汽车在任何时候都不会与领头车发生碰撞。 安全距离维护:自我车和领先车之间的时间间隔超过1.5秒。 两辆车之间的时间间隔被定义为计算出的车头时距与小汽车速度之比。 车道跟随:与车道中心线的横向偏差在0.2 m以内。
包工件:前面的每个阶段都会生成工件,包括一个ModelAdvisor报告、一个生成的可执行文件和一组可以存档以供将来使用或参考的测试结果。
工作流步骤
触发 在Jenkins中构建,并观察验证和构建阶段是否通过。 检测 Jenkins中的测试用例失败。 复制 我们桌面上的问题MATLAB。 解决问题 在模型中通过放宽评估标准。 本地测试 以确保测试用例通过。 合并和审阅 测试分支上的更改。 提交 更改为Git并在Jenkins中触发构建。 验证、构建和测试 在詹金斯。
工作流详细信息
我们从开始 触发 通过选择内置Jenkins 立即生成 Simulink检查检查和代码生成通过。
接下来,我们 发现 第二个验证阶段的测试用例失败。 测试用例 LFACC_Curve_CutInOut_TooClose(LFACC_曲线输入输出_关闭) 在测试套件中 车道跟随测试场景 不符合评估标准。
为了更好地理解失败,我们 复制 使用Simulink测试在本地发生故障。 我们打开测试文件 车道跟踪测试场景.mldatx 并运行测试用例 LFACC_Curve_CutInOut_Too关闭 请注意,它不符合安全距离评估标准。需要更灵活地确定领先车和自我车之间的时间间隔。
了解了问题后,我们现在 解决问题 。我们打开 车道跟随测试台示例.slx 模型并导航到碰撞检测/测试评估测试序列块。 第一项评估认为,自我和领跑者之间的时间间隔不应低于1.5秒,每次不应超过2秒。
全球评估 %确保自我车辆和领先车辆之间的时间间隔不低于 %1.5s,一次超过2s。 验证 ( 期间 (时间间隔<1.5, 秒 ) < 2); %验证未检测到碰撞 验证 (~碰撞); %验证车道中心线横向偏差的绝对值不超过0.2m %一次超过5秒。 验证 ( 期间 (abs(横向偏差)>0.2, 秒 ) < 5);
全球评估 %确保自我车辆和领先车辆之间的时间间隔不低于 %0.8s,一次超过5s . 验证 ( 期间 (时间间隔<0.8, 秒 ) < 5); %验证未检测到碰撞 验证 (~碰撞); %验证与车道中心线的横向偏差绝对值不超过0.2m %一次超过5秒。 验证 ( 期间 (abs(横向偏差)>0.2, 秒 ) < 5);
该问题在我们的模拟中似乎已修复。 为了确认,我们 本地测试, 保存模型并在测试管理器中重新运行测试。 请注意,它通过了新的评估标准。
我们已经解决了问题,并在本地进行了验证。 我们现在使用模型比较工具来 回顾 将更改提交到版本控制之前。
修复了错误后,我们使用MATLAB项目将这些更改推送到GitLab,并添加一条提交消息来记录评估标准的更改。
Jenkins构建运行。 我们看到了 验证、构建和测试 管道阶段现已过去。
使用示例:工具、资源和需求
配置系统
所需工具
詹金斯 安装版本2.7.3或更高版本。 Jenkins用于持续集成。 Jenkins的MATLAB插件 1.0.3或更高版本。 MATLAB、Simulink和SimulinkTest都利用此插件与Jenkins通信。 在GitHub上了解更多信息 . 需要其他插件: GitLab公司 账户。 GitLab用于源代码控制,并作为云服务提供。 MATLAB项目包括用于与GitLab通信的Git接口。
CI的许可证注意事项
单击 转换 .
单击 打开项目 完成后。
步骤2。 提交更改并将本地存储库推送到GitLab
在“项目”选项卡上,单击 远程 .
在GitLab中指定远程源站的URL。
单击 提交 执行初始提交。
单击 推动 将所有更改从本地存储库推送到远程GitLab存储库。
刷新GitLab仪表板并观察MATLAB项目的内容。
步骤3:创建测试分支
单击 分支机构 .
展开 分支和标记创建 部分,将分支命名为“Test”,然后单击 创建 .
观察 测试 在分支浏览器中。 从测试分支单击 交换机 然后 关闭 .
在MATLAB中选择 推动 将这些更改推送到GitLab,并观察GitLab中的测试分支。
将生成触发器配置为在向发出推送请求时运行生成 测试 GitLab中的分支。 在构建触发器部分中,选择 高级> 秘密令牌 。GitLab使用此令牌请求生成并向Jenkins进行身份验证。 记下秘密令牌和GitLab网络挂钩。
配置生成环境。 选择 使用MATLAB版本 并输入MATLAB根。
配置生成步骤。
步骤6。 发布HTML报告
第7步。 配置GitLab以触发Jenkins中的构建
步骤8。 配置Jenkins-to-GitLab身份验证
在选定API范围的GitLab上创建个人访问令牌。
复制令牌并在Jenkins配置系统下创建GitLab连接。
注意:连接可以在多个Jenkins作业上重用,如果用户至少具有“维护者”权限,则可以全局配置。
第9步。 将Jenkins集成到GitLab管道中
在Jenkins作业的General部分中选择GitLab Connection。
添加生成后操作以将生成状态发布到GitLab。
注意:此操作没有参数,将使用现有的GitLab连接在GitLab上发布构建状态,并为每个提交和合并请求创建双向可跟踪性。
步骤10:可视化基于需求的测试指标(R2020 b)
创建一个名为 收集模型测试结果。 米 基于如下所示的功能。 此功能将初始化度量引擎基础结构并收集所有可用的模型度量。
函数collectModelTestingResults() %R2020中增加的度量能力 如果存在(“公制”) metricIDs=[。。。 “ConditionCoverageBreakdown”“CoverageDataService”。。。 “决策覆盖分解”“执行覆盖分解”。。。 “MCDCCoverageBreakdown”“OverallConditionCoverage”。。。 “OverallDecisionCoverage”“Overall ExecutionCoverage”。。。 “总体MCDCCoverage”“RequirementWithTestCase”。。。 “RequirementWithTestCaseDistribution”“Requirement WithTestcasePercentage”。。。 “RequirementsPerTestCase”“Requirement PerTestCaseDistribution”。。。 “TestCaseStatus”“测试用例状态分布”。。。 “测试用例状态百分比”“测试用例标记”。。。 “TestCaseTagDistribution”“TestCase类型”。。。 “TestCaseTypeDistribution”“TestCase WithRequirement”。。。 “TestCaseWithRequirementDistribution”“TestCase WithRequrementPercentage”。。。 “TestCasesPerRequirement”“TestCasesPerRequirementDistribution”。。。 ]; %收集所有指标以进行初始协调 E=公制。 发动机(); 执行(E,metricID); 结束 结束
将此文件添加到项目和路径中。 配置Jenkins,通过调用新的 收集模型测试结果 功能两次。 第一个调用初始化与Simulink测试管理器的度量集成。 第二个使用导出的Simulink测试管理器结果收集度量结果。 点击 添加生成步骤 然后选择 运行MATLAB命令 再一次。 输入命令: openProject('SltestLaneFollowingExample.prj'); 集合模型测试结果 将此生成步骤放置在 运行MATLAB测试 生成步骤。 点击 添加生成步骤 然后选择 运行MATLAB命令 再一次。 再次输入命令: openProject('SltestLaneFollowingExample.prj'); 集合模型测试结果 将此生成步骤放置在 运行MATLAB测试 生成步骤。
检查 Simulink测试管理器结果 在中 运行MATLAB测试 生成步骤。
将度量结果归档到派生目录中。 您还必须存档导出的测试管理器结果,因为当加载回MATLAB时,它们将允许度量结果的完整导航。
下载存档的工件(派生目录和测试结果.mldatx文件)。 提取并复制到用于运行CI作业的同一版本项目的本地副本中。 在MATLAB中打开项目并启动模型测试仪表板。