技术文章和通讯

持续集成以验证Simulink模型金宝app

由David Boissy,Paul Urban,Krishna Balasubramanian,Pablo Romero Cumbreras和Colin Branch,Mathworks


持续集成(CI)越来越受欢迎,成为基于模型的设计的组成部分。但是ci是什么?它有什么好处,它试图解决的问题是什么?Simulink如金宝app何如何®适合CI生态系统?您如何为您的项目提供最佳利用CI?

如果您熟悉基于模型的设计,但CI新建,您可能会问自己这些问题。在这篇技术文章中,我们探索了一个共同的CI工作流程,并将其应用于基于模型的设计。然后,我们使用Jenkins™,Gitlab走过该工作流程的示例®,和Simu金宝applink Test™。

该示例中使用的项目是可供下载

什么是ci?

CI是一种敏捷方法的最佳实践,在这种实践中,开发人员定期将他们的源代码更改提交并合并到中央存储库中。然后自动构建、限定和发布这些“变更集”。图1说明了这个基本CI工作流以及开发工作流。

图1所示。CI工作流。

在工作流的开发部分,模型和测试被开发、验证、合并、评审并提交到开发人员桌面上的版本控制系统。然后,版本控制系统触发工作流的自动CI部分。CI工作流的关键部分是:

构建:源代码和模型变成了目标文件和可执行文件。

测试:测试作为质量门进行。

包裹:可执行文件、文档、工件和其他可交付内容被捆绑在一起,以交付给最终用户。

部署:包被部署到生产环境中。

在一起,这四个步骤称为CI“管道”。管道通常是自动化的,具体情况可能需要几分钟到数天才能完成,具体取决于系统。值得注意的是,在整个步骤中,创建了许多文物,例如材料账单,测试结果和报告。

CI工作流程通常与与版本控制系统相关的开发人员工作流配对。在这些工作流程中,开发人员通常会在本地存储库中保持更改,并使用本地CI管道在部署之前符合其更改。

CI的好处是什么?

已实施CI的团队通常报告以下福利:

  • 重复性。CI管线为建筑,测试,包装和部署提供一致和可重复的自动化过程。可重复的自动化允许开发人员专注于必要的工作并节省项目的时间。它也是风险降低的一个重要方面,通常是认证的要求。
  • 质量保证。手动测试是有效的,但它通常基于天龄快照并缺乏可重复性。使用CI,始终针对最新的代码库进行更改。
  • 减少开发时间。具有内置质量保证的可重复流程导致高质量产品的速度更快。下载188bet金宝搏自动部署意味着您的代码始终准备好。
  • 改进的协作。使用CI,开发人员具有定义的过程,用于管理更改集并将其代码合并到生产线中。一致的过程使管理大型团队成为可能并降低新开发人员升高的成本。
  • Audit-ready代码。CI工作流提供广泛的审计跟踪。For every change making its way through the CI pipeline, it’s possible to identify who made the change, who reviewed it, and the nature of the change, as well as dependencies, tests and their results, and any number of related reports and artifacts generated along the way.

基于模型的设计如何适应CI?

按照设计,CI工作流和工具是与语言和领域无关的。这意味着挑战是CI工具、系统和过程说话基于模型的设计——换句话说,就是制作Simulink金宝app®和相关工具通用语CI工作流程。

这可以通过将基于模型的设计的三个关键组件集成到CI工作流程中:验证,代码生成和测试(图2)。基于模型的设计强调早期验证,将其映射到CI管线,并在构建阶段之前的验证阶段映射。代码生成在构建阶段进行。通过模拟和生成代码的静态分析可以在测试阶段进行动态测试。

图2。映射到CI管道的基于模型的设计。

下面是我们如何ci工作流程说话基于模型的设计:

发展。MATLAB®、S金宝appimulink、编码器和工具箱用于开发活动。MATLAB项目用于组织工作、协作和与版本控制系统的接口。

测试。金宝appSimulink Check™用于在模拟和代码生成之前执行模型质量检查。金宝appSimulink Test™用于开发、管理和执行基于模拟的测试。金宝appSimulink Coverage™用于测量覆盖率和评估测试有效性。然后,质量检查、测试结果和覆盖率指标可以用作开发人员确定其工作质量的质量门。

合并。MATLAB的比较文件和文件夹功能用于比较和合并MATLAB文件。模型比较工具用于比较和合并Simulink模型。金宝app

审查。回顾是在将更改提交到版本控制系统之前质量过程的最终步骤。此处审核了对Matlab脚本和Simulink模型的更改。金宝app在提交之前还将其作为最终质量门审查的测试结果。

提交。MATLAB项目提供了一个版本控制系统的接口。

核实。金宝appSimulink检查,用于本地验证的相同工具,用于CI系统内的自动验证。

构建。MATLAB编码器™,Simu金宝applink编码器™,嵌入式编码器®用于生成用于软件在环(SIL)测试的代码。

测试。金宝appSimulink测试,使用用于本地测试的相同工具,用于CI系统内的自动化测试。

包和部署。打包是将可执行文件、文档、工件和其他可交付内容打包以交付给最终用户的地方。部署是软件包的发布。在基于模型的设计的工作流程中,这些阶段在组织和组之间有很大的不同,并且经常涉及将不同的构建和认证工件捆绑到准备交付给其他团队的产品中。

现代开发工具和实践使开发人员能够尽早创建更强大的系统和测试功能。当CI系统集成到工作流程中时,自动化单元级测试和系统级测试。这意味着开发人员可以专注于开发新功能,而不是验证功能已正确集成。

下面的案例研究描述了一个集成了CI和基于模型的设计的工作流。

案例研究:在CI系统中验证,金宝app构建和测试的Simulink模型

在此示例中,我们使用基于模型的设计与CI在汽车通道跟随系统上执行基于要求的测试(图3)。

图3。Lane-following系统模型。

我们将使用的管道(图4)与每个Jenkins构建执行。

图4.道路后示例的管道。

计划中的阶段如下:

  1. 验证符合标准:一个MATLAB Unit脚本运行一个简单的Model Advisor检查。评估标准确保模型没有未连接的线路。
  2. 构建模型:一个MATLAB单元测试文件为我们的模型构建产品SIL代码。如果构建成功而没有警告,则评估标准通过。
  3. 执行测试用例:Simulink test中的测试套件使用几个驾驶场景来测金宝app试车道跟踪控制器。用三个评价标准来验证控制器的运行是否令人满意:
    • 避免碰撞:在驾驶场景中,自我车不与领先车发生碰撞。
    • 安全距离维护:自助式汽车和铅轿车之间的时间差距高于1.5秒。两辆车之间的时间间隙被定义为计算出的通道和自我汽车速度的比率。
    • 下车道:与车道中心线横向偏差在0.2米以内。
  4. 包工件:上一个阶段中的每一个都会产生工件,包括模型顾问报告,生成的可执行文件,以及可以存档以供将来使用或引用的一组测试结果。

工作流程步骤

工作流包括以下步骤(图5):

  1. 扳机在Jenkins中构建并观察到验证和构建阶段通过。
  2. 检测Jenkins中的测试用例失败。
  3. 复制我们桌面Matlab上的问题。
  4. 解决问题在模型中通过放松评估标准。
  5. 在本地测试确保测试用例通过。
  6. 合并和审查测试分支的变化。
  7. 犯罪Git的变化并在Jenkins中触发构建。
  8. 验证,构建和测试詹金斯。

图5.示例工作流程。

左上角显示了我们第一次失败的CI循环。它显示了CI测试失败、局部复制、标准放松和CI工作流成功完成。

工作流细节

  1. 我们首先开始触发通过选择在Jenkins中构建现在建立.Simu金宝applink检查检查和代码生成通过。
  1. 接下来,我们探测第二验证阶段的测试用例故障。测试案例lfacc_curve_cutinout_tooclose.在测试套件lanefollowingtestscenarios.失败评估标准。
  1. 为了更好地理解失败,我们复制使用Simulink测试本地故障。金宝app我们打开测试文件lanefollowingtestscenarios.mldatx.并运行测试用例lfacc_curve_cutinout_tooclose..请注意,它失败了安全距离评估标准。需要更具灵活性在建立铅轿厢和自助式汽车之间的时间差距。
  1. 随着对这个问题的了解,我们现在解决问题.我们打开lanefollowtingtestbenchexample.slx.模型并导航到碰撞检测/测试评估测试序列块。第一个评估断言,自我和铅轿车之间的时间间隙不应在低于1.5秒后倾斜超过两秒钟。

这种评估对正在测试的激进驾驶机动有太多的限制。出于本例的目的,我们放宽了评估标准,以确保时间间隔每次不会低于0.8秒,时间间隔每次不会超过5秒。

  1. 这个问题在我们的模拟中已经修复。确认,我们在本地测试,保存模型并在测试管理器中重新运行测试。注意,它通过了新的评估标准。
  1. 我们已经修复了这个问题并在本地进行了验证。我们现在使用模型比较工具审查将它们提交到版本控制之前的更改。

我们还可以使用模型比较工具的发布功能来查看代码。

  1. bug修复后,我们将这些更改推到GitLab With MATLAB项目中,并添加一个提交消息来注意评估标准的更改。

然后我们注意到GitLab中的最新提交。

Gitlab会自动触发Jenkins的构建。Jenkins项目仪表板显示构建状态和进度。

  1. 詹金斯构建运行。我们看到验证,构建和测试管道阶段现在通过。

我们现在可以启动合并请求以将测试分支中的更改合并到主分支中。在Gitlab中,在存储库下我们选择分支机构,然后单击合并请求在测试分支上最新提交的旁边。

我们完成表单并提交合并请求。

作为分支的所有者,我们可以通过单击merge按钮来接受合并请求。所有更改现在都在主分支上捕获。

使用示例:工具,资源和要求

以下部分概述资源来帮助您入门,您将需要的工具以及应如何配置它们。

配置系统

Jenkins是我们的CI系统,GitLab是我们的版本控制系统。MATLAB、Jenkins和GitLab必须被配置成协同工作。下面的教程将帮助您进行设置。

配置我们的MATLAB项目

配置Jenkins.

配置GitLab触发Jenkins

本教程专门针对GitLab和Jenkins,但其概念也适用于其他版本控制和CI系统。

需要工具

本例中需要准备的工具如下:

CI的许可考虑因素

如果您计划在许多主机或云上执行CI,请联系continuous-integration@mathworks.com求助。注意:Mathworks编码器和编译器产品等变下载188bet金宝搏革产品可能需要客户端访问许可证(CAL)。

附录:配置Matlab,Gitlab和Jenkins

步骤1.配置MATLAB项目以使用源控制

我们示例中的第一步是配置我们的项目以使用GitLab的源代码控制。

  1. 创建一个名为的新目录mbdexamplewithgitandjenkins.,将示例加载到它中,打开matlab项目MBDExampleWithGitAndJenkins.prj
  2. 在GitLab中,创建一个将作为远程存储库的新项目。它的名字mbdexamplewithgitandjenkins.并记录其托管的URL。
  3. 在MATLAB中,转换项目使用源代码控制。在“项目”选项卡上,单击使用源代码控制

点击将项目添加到源代码控制

  1. 点击转变
    1. 点击开放项目完成后。

    该项目现在处于本地Git源代码控制之下。

    步骤2。提交更改并将本地存储库推到GitLab

    1. 在“项目”选项卡上,单击偏僻的
    1. 在GitLab中指定远程源的URL。

    点击证实要确保与远程存储库的连接成功并单击好的.该项目现在配置为使用Gitlab推送和拉动变化。

    1. 点击犯罪执行初始提交。
    1. 点击将所有更改从本地存储库推到远程GitLab存储库。
    1. 刷新Gitlab仪表板并遵守MATLAB项目的内容。

    第3步:创建测试分支

    在这一步中,我们创建了一个测试分支,用于在与主分支合并之前测试和验证更改。

    1. 点击分支机构
    1. 扩大分支和标签创建部分,名称分支“测试”,然后单击创建
    1. 在分支浏览器中观察Test。从Test分支中单击开关然后关闭
    1. 在Matlab选择将这些更改推到GitLab,并观察GitLab中的Test分支。

    第4步:配置Jenkins调用MATLAB

    1. 安装两个必填插件:
      • Gitlab插件-这个插件允许GitLab触发Jenkins构建并在GitLab UI中显示结果。
      • MATLAB插件- 此插件将Matlab与Jenkins集成并提供Jenkins接口来调用Matlab和Simulink。金宝app
    2. 选择新项目并创建一个名为MBDExampleUsingGitAndJenkins
    3. 在源代码管理下,使能Git,Point Jenkins指向我们的Gitlab存储库,然后输入测试建立分支。注意:需要登录或密码和GitLab API令牌。
    1. 配置构建触发器,以便在向GitLab中的Test分支发出推请求时运行构建。在“构建触发器”部分中选择先进>秘密令牌.GitLab使用这个令牌来请求构建并使用Jenkins进行身份验证。记下秘密令牌和GitLab webhook。
    1. 配置构建环境。选择使用matlab版本并输入MATLAB根。
    1. 配置构建步骤。

    点击添加构建步骤并选择运行MATLAB命令.输入命令OpenProject('sltestlanefollowingexample.prj');lanefollowingexecmodeladvisor.
    打开项目并运行模型顾问检查。

    点击添加构建步骤并选择运行MATLAB命令再次。输入命令:OpenProject('sltestlanefollowingexample.prj');LaneFollowingExecControllerBuild.

    点击添加构建步骤并选择运行matlab测试.选择利用测试结果Cobertura代码覆盖范围填写构建配置。

    第5步。出版挖掘结果

    点击添加构建后操作>发布TAP结果.输入将发布点击测试结果的相对路径。

    此操作解析TAP测试结果,并使它们在选择TAP扩展测试结果时可见。输出包含执行的测试用例的概述、结果摘要和来自MATLAB控制台的日志。

    TAP插件还收集最新测试执行的结果,并显示如下所示的健康图。您可以通过单击图表访问任何以前的构建。

    步骤6。发布HTML报告

    点击添加后构建操作>发布HTML报告.输入HTML报告将被发布的相对根路径,以及该路径中索引页的文件名。

    添加所有要发布的HTML报告的条目。在这个场景中,有两个web报告:模型顾问摘要和代码生成报告。这些是用MATLAB内置函数创建的标准报告。您可以添加自定义HTML报告。

    您将找到一个报告链接,与主Jenkins作业页面上的每个HTML报告相对应的举报链接。如果在发布选项下激活复选框“始终链接到上次构建”,则该插件将发布最后一个构建的报告,而不管构建状态如何。如果未激活此复选框,则该插件只能链接到最后一个“成功”构建。

    步骤7。配置GitLab以触发Jenkins中的构建

    配置Gitlab以在主分支上发生新推送时触发Jenkins的自动构建。为此,导航到设置>Webhooks..使用Jenkins提供的WebHook URL和jenkins提供的秘密令牌在构建触发器配置中,然后选择推动事件

    注意:在URL部分使用完全限定的域名来代替localhost,这样GitLab就可以找到Jenkins安装。

    在里面测试下拉,选择推动事件测试集成。Gitlab将显示“成功执行的挂钩:HTTP 200”,Jenkins将开始构建。

    步骤8。配置Jenkins-to-GitLab身份验证

    要在Gitlab上自动发布Jenkins构建状态,您必须配置Jenkins-to-Gitlab身份验证。

    1. 使用选定的API范围在GitLab上创建个人访问令牌。
    1. 复制令牌并在Jenkins Configure System下创建一个GitLab连接。
      注意:连接可以在多个Jenkins作业中重用,如果用户至少拥有“维护者”权限,则可以全局配置连接。

    步骤9.将Jenkins集成到Gitlab管道中

    要将Jenkins集成到GitLab管道中,必须在Jenkins中配置GitLab连接,并将作业状态发布到GitLab。

    1. 在Jenkins作业的常规部分中选择Gitlab连接。
    1. 添加后构建操作以将构建状态发布到Gitlab。
      注意:此操作没有参数,将使用现有的GitLab连接在GitLab上发布构建状态,并为每个提交和合并请求创建双向跟踪。

    步骤10:可视化基于要求的测试指标(R2020B)

    基于需求的测试指标让您评估基于需求的测试活动的状态和质量。可以使用模型测试仪表板将指标结果可视化。

    1. 创建一个名为collectModelTestingResults.m基于下面所示的函数。这个函数将初始化指标引擎基础架构并收集所有可用的模型指标。
    函数collectmodeltingresults()%在R2020A中添加的%度量能力如果存在('metric')MetricIds = [...“ConditionCoverageBreateDrown”...“DecondedCoverageBreateBrea”...“McDCCoverageBreateBreake”......“McDccoverageBreakDown”......“SaleConditionCoverage”......“SalidEcisionCoverage”“OverallexecutionCoverage”...“ResementWithTestCaseDistRibution”的“Residmemcdcomoverage”......“ResignderTestCaseDistrage”的要求“ResignderTestCaseDistRibution”...“TestCasestatusDistribution”...“TestCasestatusPercentAction”“TestCaseTag” ...... “TestCaseTagDistribution” “TestCaseType” ...... “TestCaseTypeDistribution” “TestCaseWithRequirement” ...... “TestCaseWithRequirementDistribution” “TestCaseWithRequirementPercentage” ...... “TestCasesPerRequirement” “TestCasesPerRequirementDistribution” ...];%收集初始协调e = metric.engine()的所有指标;执行(e,MetricID);结束
    1. 将此文件添加到项目和路径中。
    2. 配置Jenkins,通过调用new来收集度量结果CollectModeltestingResults.函数两次。第一个调用初始化与Simulink Test Manager的度量集成。金宝app第二种方法使用导出的Simulink Test Manager结果收集度量结果。金宝app
      1. 点击添加构建步骤并选择运行MATLAB命令再次。输入命令:OpenProject('sltestlanefollowingexample.prj');CollectModeltestingResults.
        在此之前定位这一构建步骤运行matlab测试建立步骤。
      2. 点击添加构建步骤并选择运行MATLAB命令再次。再次输入命令:OpenProject('sltestlanefollowingexample.prj');CollectModeltestingResults.
        将这个构建步骤放置在运行matlab测试建立步骤。

    III。查看金宝appSimulink测试管理器结果运行matlab测试建立步骤。

    1. 将度量结果归档到派生目录中。您还必须归档导出的测试管理器结果,因为它们将允许在加载回MATLAB时对Metric结果进行完整导航。

    点击添加后构建操作并选择存档的工件。进入路径/ * *, matlabTestArtifacts / * .mldatx归档保存到该目录的所有文件。

    注意:要在Matlab上查看Matlab,而不是测试机器以外的机器,请执行以下操作:

    • 下载归档的伪像(派生目录和测试结果.mldatx文件)。
    • 提取并复制到用于运行CI作业的同一版本的本地副本。
    • 在MATLAB中打开项目并启动模型测试仪表板。

    CI产生的结果将显示在指示板

    2021年出版的