技术文章和通讯

持续集成的仿真软件模型的验证万博1manbetx

大卫•Boissy保罗•城市Balasubramanian克里希纳,巴勃罗·罗梅罗Cumbreras,科林分支,杰迈玛Pulipati MathWorks


这个  由两部分组成的系列文章的第一篇文章。第1部分考察利用GitLab®版本控制和詹金斯®持续集成(CI)。第2部分,连续 集成验证  使用GitLab仿真软件模型万博1manbetx 看着使用版本控制和CI GitLab。

持续集成(CI)越来越流行,成为不可分割的一部分,基于模型的设计。但词是什么?它的好处是什么,它试图解决什么问题?如何仿真软件万博1manbetx®适合CI系统吗?和你如何最好的利用CI为你的项目吗?

如果您熟悉基于模型的设计但是新的词,你可能会问自己这些问题。在技术的这篇文章中,我们探讨一个共同的CI工作流和应用于基于模型的设计。然后,我们走过一个例子使用詹金斯工作流,GitLab,仿真软件测试™。万博1manbetx

在这个例子中是使用的项目可以下载

词是什么?

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

CI工作流图。开发人员和测试作者开发、测试、合并、审查并提交修改版本控制构建,测试,通过CI管道打包和部署。当完成,构建输出时,工件和报告

图1所示。CI工作流。

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

构建:源代码和模型成为对象文件和可执行文件。

测试:测试执行质量检验关。

包:可执行文件、文档、工件和其他可交付物被捆绑,交付给终端用户。

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

在一起,这四个步骤被称为CI”管道。“管道通常是自动化的,可能需要几分钟到几天完成,根据系统。值得注意的是,在这些步骤,许多构件创建、账单等材料,测试结果,和报告。

CI工作流通常搭配开发工作流相关的版本控制系统。在这些工作流程,开发人员常常让他们改变局部存储库和使用本地CI管道资格变更之前部署。

CI的好处是什么?

团队实现了CI通常报告以下好处:

  • 可重复性。CI管道为建筑提供了一个一致的和可重复的自动化流程,测试,包装,和部署。可重复的自动化允许开发人员集中精力在一个项目中必要的工作,节省时间。也是降低风险的一个重要方面,通常是一个认证要求。
  • 质量保证。手工测试是有效的,但它通常是基于几天大的快照和缺乏可重复性。与CI,变化总是测试最新的代码库。
  • 减少开发时间。与内置的可重复的过程质量保证导致更快地交付高质量的产品。s manbetx 845自动部署意味着代码总是生产做好准备。
  • 改进的协作。使用CI,开发人员有一个已定义过程来管理变更集和将他们的代码合并到生产线。一致的流程管理大型团队可能和降低成本的增加新的开发人员。
  • Audit-ready代码。CI工作流程提供了一个广泛的审计跟踪。每改变通过CI管道,可以确定谁做了更改,谁审核它,和性质的变化,以及依赖关系,测试及其结果,生成任意数量的相关报道和工件。

    基于模型的设计如何融入词?

    通过设计,CI工作流和工具是语言,独立于领域的。这意味着挑战CI工具,系统和流程说话基于模型的设计,换句话说,使仿真软件万博1manbetx®和相关工具通用语CI的工作流。

    可以通过将基于模型设计的三个关键组件集成到CI工作流:验证、代码生成和测试(图2)。基于模型的设计强调早期验证,映射到CI管道与验证阶段之前的构建阶段。代码生成发生在构建阶段。通过仿真和动态测试生成的代码可以做静态分析的测试阶段。

    一个基于模型设计的插图C我触发工作流的变化模型C我管道验证改变,构建、测试、打包和部署的工件。

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

    这是我们如何的概述CI工作流说话基于模型的设计:

    发展。MATLAB®仿真万博1manbetx软件,程序员,工具箱用于开发活动。MATLAB项目是用于组织工作、协作与版本控制系统和接口。

    测试。万博1manbetx模型检查™是用于执行模型质量检查前仿真和代码生成。万博1manbetx仿真软件测试是用于开发、管理和执行基于仿真的测试。万博1manbetx仿真软件覆盖™是用来测量覆盖和评估测试有效性。质量检查,测试结果,和覆盖率指标可以作为开发人员资格工作的质量检验关。

    合并。MATLAB的对比文件和文件夹的特性是用来比较和合并MATLAB文件。模型比较工具是用来比较和合并模型模型。万博1manbetx

    审查。审查质量过程的最后一步之前更改提交给版本控制系统。改变MATLAB脚本和Simulink仿真模型进行了综述。万博1manbetx测试结果从资格预审也回顾了最后提交前质量检验关。

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

    核实。万博1manbetx模型检查,同样的工具用于本地验证,用于在CI系统自动验证。

    构建。MATLAB编码器™,仿真软件万博1manbetx编码器™,嵌入编码器®用于生成代码software-in-the-loop (SIL)测试。

    测试。万博1manbetx仿真软件测试,用于本地测试相同的工具,用于在CI系统自动化测试。

    打包和部署。包装是可执行文件、文档、工件和其他可交付物被捆绑起来,交付给终端用户。部署的版本打包的软件。在工作流模型设计、组织和团体之间的这些阶段差别很大,通常涉及不同构建和认证构件捆绑成一个产品准备交付给其他球队。

    现代开发工具和实践使开发人员能够创建更健壮的系统和测试功能尽早并且经常。当一个CI系统集成到工作流、单元级测试和系统级测试自动化。这意味着开发人员可以专注于开发新功能,无法正确验证功能被集成。

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

    案例研究:仿真软件模型验证、万博1manbetx构建和测试在CI系统

    在这个示例中,我们使用基于模型的设计与CI执行基于需求的测试在一个汽车lane-following系统(图3)。

    离开了,截图显示Lane-Following示例模型仿真软件。万博1manbetx吧,截图显示鸟瞰图Lane-Following示例模型在仿真软件的范围。万博1manbetx

    图3。Lane-following系统模型。

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

    图显示执行的操作在一个管道Lane-Following例子,包括验证标准的兼容性,构建模型,并执行测试用例,在秩序,所有三个步骤导致包构件。

    图4。管道lane-following例子。

    管道的阶段如下:

    1. 验证标准的兼容性:MATLAB脚本运行一个简单的模型单元顾问检查。评估标准确保模型没有无关的行。
    2. 建立模型:一个MATLAB SIL代码的单元测试文件构建生产我们的模型。评估标准通过没有警告如果构建成功。
    3. 执行测试用例:测试套件在仿真软件测试使用几个驾驶场景测试lane-fol万博1manbetxlowing控制器。三个评估标准是用于验证满意的控制器的操作:
      • 防撞:自我车不会撞上领先汽车驾驶期间任何时候的场景。
      • 安全距离维护:自我之间的时间差距汽车和上面的领导的车是1.5秒。两辆车之间的时间间隔定义为的比值计算进展和自我汽车速度。
      • 莱恩:外侧的中心线偏离车道0.2米内。
    4. 包构件:之前的每个阶段产生的工件,包括模型顾问报告,生成的可执行文件,和一组测试结果,可存档,以供将来使用或参考。

    工作流步骤

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

    1. 触发一个构建在詹金斯和观察,验证和构建阶段通过。
    2. 检测一个测试用例失败在詹金斯。
    3. 繁殖这个问题在我们的桌面MATLAB。
    4. 修复这个问题在模型中通过放松评估标准。
    5. 在本地测试确保测试用例通过。
    6. 合并和审查更改测试分支。
    7. 提交这种变化在詹金斯Git和触发一个构建。
    8. 验证、构建和测试詹金斯。
    图显示用户可以提交修改版本控制,引发CI管道。更改验证,构建、测试、打包和部署。如果一个阶段失败,用户可以提交到版本控制按照前面的步骤。

    图5。工作流示例。

    我们第一次没有通过CI循环在左上方。它显示了CI测试失败,当地繁殖,标准放松,并成功完成CI工作流。

    工作流细节

    1. 我们首先触发一个构建在詹金斯通过选择现在构建。模型检查万博1manbetx检查和代码生成。
    詹金斯仪表板下拉菜单的一个屏幕快照。构建现在被选中。
    1. 接下来,我们检测在第二个验证阶段测试用例失败。测试用例LFACC_Curve_CutInOut_TooClose在测试套件LaneFollowingTestScenarios失败的评估标准。
    截图一个失败的总结。
    1. 更好地理解失败,我们繁殖局部使用仿真软件测试失败。万博1manbetx我们打开测试文件LaneFollowingTestScenarios.mldatx和运行测试用例LFACC_Curve_CutInOut_TooClose。注意,不能安全距离评估标准。更多的灵活性在建立领先汽车和自我之间的时间差距汽车是必需的。
    仿真软件测试窗口的屏幕截图通过评万博1manbetx估标准。
    1. 了解的问题,我们现在修复这个问题。我们打开LaneFollowingTestBenchExample.slx模型和导航到碰撞检测/测试评估测试序列块。第一次评估断言自我之间的时间差距,导致汽车不应低于1.5秒一次超过2秒。
    GlobalAssessments%确保自我车辆和车辆之间的时间差距并不低于% 1.5 s超过2 s。验证(持续时间(time_gap < 1.5,证券交易委员会)< 2);%确认没有检测到碰撞验证(~碰撞);%验证车道中心线的横向偏差的绝对值不超过0.2 m %超过5 s。验证(持续时间(abs (lateral_deviation) > 0.2,证券交易委员会)< 5);

    这个评估是攻击性驾驶限制太多操作测试。对于本示例中,我们放松评估标准,以确保差距不低于0.8秒的时间超过5秒。

    GlobalAssessments%确保自我车辆和车辆之间的时间差距并不低于% 0.8 s超过5 s验证(持续时间(time_gap < 0.8,证券交易委员会)< 5);%确认没有检测到碰撞验证(~碰撞);%验证车道中心线的横向偏差的绝对值不超过0.2 m %超过5 s。验证(持续时间(abs (lateral_deviation) > 0.2,证券交易委员会)< 5);
    1. 这个问题似乎固定在我们的模拟。确认,我们在本地测试,保存模型和运行测试的测试经理。注意,它通过新的评估标准。
    仿真软件测试窗口的屏幕截图通过评万博1manbetx估标准。
    1. 我们有固定的本地和验证问题。我们现在使用模型比较工具审查更改之前的版本控制。
    截图显示的比较新旧变化模型比较工具。

    我们也可以使用发布特性模型的比较工具来检查代码。

    截图显示的比较新旧变化时发布的特性模型比较工具使用。
    1. bug修复,我们把这些变化与MATLAB GitLab项目,添加一个提交消息要注意改变评估标准。

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

    在詹金斯GitLab自动触发一个构建。詹金斯项目仪表板显示了构建状态和进展。

    詹金斯项目仪表板的一个屏幕快照显示通过加载栏构建状态和进展。
    1. 詹金斯的构建。我们可以看到,验证、构建和测试现在通过管道阶段。

    我们现在可以开始合并请求合并的变化测试分支到主分支。在GitLab,下存储库我们选择分支机构然后单击合并请求下一个最新提交测试分支。

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

    作为分公司的主人,我们可以接受请求通过单击合并合并按钮。所有更改正在拍摄的主要分支。

    截图显示的信息合并请求成功时出现。

    使用例子:工具、资源和需求

    以下部分概述资源来帮助你开始,你需要的工具,以及如何对它们进行配置。

    配置系统

    詹金斯是利用我们的CI系统和GitLab作为我们的版本控制系统。MATLAB,詹金斯,必须配置GitLab一起工作。下面的教程将帮助设置。

    配置我们的MATLAB项目

    配置詹金斯

    配置GitLab触发詹金斯

    教程是特定于GitLab和詹金斯,但可以适用于其他版本控制的概念和CI系统。

    所需的工具

    以下这个例子所需工具:

    CI许可证注意事项

    如果你计划来执行CI在许多主机或云,接触continuous-integration@mathworks.com寻求帮助。注意:转型MathWorks等产品s manbetx 845®编码器和编译器产品可能需要客户访问许可s manbetx 845证(CALs)。

    附录:配置MATLAB, GitLab,詹金斯

    步骤1。将MATLAB项目配置为使用源代码控制

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

    1. 创建一个新目录命名MBDExampleWithGitAndJenkins,该示例加载到它,打开MATLAB项目MBDExampleWithGitAndJenkins.prj
    2. 在GitLab,创建一个新的项目,将远程存储库。它的名字MBDExampleWithGitAndJenkins和记录的URL主持。
    3. 在MATLAB中,将项目转换为使用源代码控制。在项目选项卡上,单击使用源代码控制
    截图显示项目选项卡在MATLAB中,“使用源代码控制”按钮选择。

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

    源控制信息的弹出一个屏幕快照。集成存储库设置为none,位置不适用。州没有源代码控制系统检测到项目根目录和有一个按钮说向源代码控制添加项目。
    1. 点击转换
    弹出添加到源代码控制中。源码控制工具Git和选择项目根目录。有一个转换按钮。
      1. 点击开放项目当完成。
      截图显示文件被添加到源代码控制中。文件已经通过所有检查和一个“打开项目”按钮。Git和几个按钮和菜单物流出现了。

      这个项目正在本地Git源代码控制。

      步骤2。GitLab提交修改,推动本地存储库

      1. 在项目选项卡上,单击远程
      的一个屏幕快照MATLAB项目与“远程”选项卡中高亮显示。
      1. 指定的URL远程GitLab起源。
      设置远程弹出的一个屏幕快照。它有一个表格用于指定一个U R L起源遥远。给定的U R L是模糊的和有一个validate按钮以及一个OK按钮在底部。

      点击验证确保连接到远程存储库成功并单击好吧。这个项目现在是配置与GitLab推和拉的变化。

      1. 点击提交执行一个初始提交。
      MATLAB项目选项卡的一个屏幕快照提交按钮高亮显示。
      评论提交消息的窗口的屏幕截图作为初始提交。
      1. 点击从本地存储库将所有更改远程GitLab库。
      截图的MATLAB项目选项卡按钮选中。
      1. 刷新GitLab仪表板,观察MATLAB项目的内容。
      截图GitLab仪表板的空项目是更新的内容之前。

      步骤3:创建测试分支

      在这一步我们创建一个测试部门进行测试和验证与主干合并前的变化。

      1. 点击分支机构
      MATLAB与分支项目选项卡的一个屏幕快照按钮选择。
      1. 扩大创建分支和标签节中,分支的名字并点击“测试”创建
      截图的分支与分支和标签创建窗口部分扩大。分支测试和创建的名称旁边的按钮,可它可以用来创建一个分支。
      1. 观察测试浏览器的分支。从测试点击分支开关然后关闭
      分支机构的一个屏幕快照窗口,选中当前分支测试。旁边一个开关按钮,可它可以用于开关现有分支测试分支。下面提供了一个关闭按钮,可用于关闭该窗口。
      1. 在MATLAB选择推动这些变化在GitLab GitLab并观察测试分支。
      截图显示GitLab仪表板。选择测试分支,和相应的显示内容的分支。

      第四步:配置詹金斯调用MATLAB

      1. 安装两个必需的插件:
        • GitLab插件这个插件允许GitLab触发詹金斯GitLab UI构建和显示他们的结果。
        • MATLAB插件——这个插件与Jenkins和MATLAB集成提供了詹金斯接口调用MATLAB和Simulink仿真。万博1manbetx
      2. 选择新项目和创建一个新的自由泳项目命名MBDExampleUsingGitAndJenkins
      3. 在源代码管理,启用Git,詹金斯GitLab库,并输入测试建立分支。注意:登录名或密码和GitLab API标记是必需的。
      1. 配置构建触发运行构建时将请求的测试在GitLab分支。在建立触发器部分选择先进的>秘密令牌。这个令牌使用GitLab与詹金斯请求构建和验证。记下的秘密令牌和GitLab webhook。
      1. 配置构建环境。选择使用MATLAB版本并输入MATLAB根。
      1. 配置构建步骤。

      点击添加构建步骤并选择运行MATLAB命令。输入的命令openProject (“SltestLaneFollowingExample.prj”);LaneFollowingExecModelAdvisor
      打开项目顾问检查和运行模型。

      点击添加构建步骤并选择运行MATLAB命令一次。输入命令:openProject (“SltestLaneFollowingExample.prj”);LaneFollowingExecControllerBuild

      点击添加构建步骤并选择MATLAB运行测试。选择利用测试结果Cobertura代码覆盖率完成构建配置。

      第5步。出版挖掘结果

      点击添加post-build行动>公布挖掘结果。进入相对路径,利用测试结果将发表。

      这个动作解析水龙头测试结果时,使他们可以利用扩展测试结果被选中。执行测试用例的输出包含概述,总结结果,从MATLAB控制台和日志。

      仪表盘上的下拉菜单的截图和T P扩展测试结果突出显示。

      水龙头插件还收集最新的测试执行的结果和显示一个健康图如下所示。您可以访问任何先前构建通过单击图。

      T P图测试结果显示詹金斯构建数字x轴和轴上的T P测试计数。测试是颜色编码为失败了,过去了,跳过或去做。随着建设数量的增加,通过测试的数量上升。

      步骤6。发布HTML报告

      点击添加post-build行动>发布HTML报告。进入相对根路径的HTML报告将发表和索引页面的文件名的路径。

      添加尽可能多的条目有HTML报告发表。在这个场景中,有两个网络报道:顾问总结模型和代码生成报告。这是用MATLAB内置函数创建标准的报告。你可以添加自定义的HTML报告。

      你会发现链接对应一份报告最后构建每个HTML页面主要詹金斯报告工作。如果你激活复选框“总是最后构建”链接发布选项下,插件将发布报告最后构建不管构建状态。如果这个复选框不激活,插件只会链接到最后一个“成功”的构建。

      步骤7。配置在詹金斯GitLab触发一个构建

      配置GitLab触发自动构建在詹金斯新一轮攻势发生在主分支上。要做到这一点,导航设置>人则。使用webhook URL和詹金斯在构建提供的秘密令牌触发配置和选择推动事件

      注意:使用一个URL中的完全限定域名部分代替localhost GitLab可以找到詹金斯安装。

      截图的人则弹出U R L表单填写,秘密令牌场空,和推动事件的检查了下“触发”的形式填写触发器。

      测试下拉,选择推动事件测试的集成。GitLab将显示消息“钩成功执行:HTTP 200”和詹金斯将开始构建。

      项目的一个屏幕快照钩子与启用弹出webhook细节。

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

      发布GitLab詹金斯自动构建状态,您必须配置Jenkins-to-GitLab身份验证。

      1. 创建一个个人访问令牌与API GitLab选择范围。
      弹出的屏幕截图为个人访问令牌的形式添加名称、有效期、令牌叫GitLabToJenkins和范围。在“范围”、“p我检查,资助完整的读/写访问的p。
      1. 令牌和副本创建一个GitLab连接在詹金斯配置系统。
        注意:可以重用连接多个詹金斯工作和可能在全球范围内配置如果用户至少有“维护者”的权利。

      第9步。整合詹金斯GitLab管道

      詹金斯融入GitLab管道必须配置GitLab连接GitLab詹金斯和发布工作状态。

      1. 选择GitLab连接的通用部分詹金斯的工作。
      1. 添加一个post-build GitLab行动发布构建状态。
        注意:这个动作没有参数,将使用现有的GitLab连接GitLab发布构建状态,为每个提交和合并创建双向可追溯性的要求。
      添加的一个屏幕快照post-build行动GitLab显示发布构建状态。有一个高级选项按钮。

      第十步:可视化基于需求的测试指标(R2020b)

      基于需求的测试指标让你的地位和质量评估基于需求的测试活动。度量结果可以使用模型可视化测试仪表板。

      1. 创建一个文件名为collectModelTestingResults.m基于如下所示的函数。这个函数将引擎初始化指标基础设施和收集所有可用的模型指标。
      collectModelTestingResults()函数%度量功能添加到R2020a如果存在(“标准”)metricIDs = […“ConditionCoverageBreakdown”“CoverageDataService”…“DecisionCoverageBreakdown”“ExecutionCoverageBreakdown”…“MCDCCoverageBreakdown”“OverallConditionCoverage”…“OverallDecisionCoverage”“OverallExecutionCoverage”…“OverallMCDCCoverage”“RequirementWithTestCase”…“RequirementWithTestCaseDistribution”“RequirementWithTestCasePercentage”…“RequirementsPerTestCase”“RequirementsPerTestCaseDistribution”…“TestCaseStatus”“TestCaseStatusDistribution”…“TestCaseStatusPercentage”“TestCaseTag”… "TestCaseTagDistribution" "TestCaseType"... "TestCaseTypeDistribution" "TestCaseWithRequirement"... "TestCaseWithRequirementDistribution" "TestCaseWithRequirementPercentage"... "TestCasesPerRequirement" "TestCasesPerRequirementDistribution"... ]; % collect all metrics for initial reconcile E = metric.Engine(); execute(E, metricIDs); end end
      1. 将此文件添加到您的项目和道路。
      2. 配置通过调用新的詹金斯收集度量结果collectModelTestingResults函数两次。第一次调用初始化指标与仿真软件的集成测试经理。万博1manbetx第二收集度量结果使用导出的模型测试经理的结果。万博1manbetx
        1. 点击添加构建步骤并选择运行MATLAB命令一次。输入命令:openProject (“SltestLaneFollowingExample.prj”);collectModelTestingResults
          这之前的构建步骤MATLAB运行测试构建步骤。
        2. 点击添加构建步骤并选择运行MATLAB命令一次。输入命令:openProject (“SltestLaneFollowingExample.prj”);collectModelTestingResults
          位置在这个构建步骤MATLAB运行测试构建步骤。
      1. 检查万博1manbetx结果仿真软件测试经理MATLAB运行测试构建步骤。
      弹出窗口的一个屏幕快照的构建步骤。仿真软件的形式测试经理结果万博1manbetx满是文件路径。
      1. 存档的度量结果导出目录。您还必须归档导出测试经理的结果,因为他们将允许完整的导航回MATLAB加载时的度量结果。

      点击添加post-build行动并选择存档的工件。输入路径/ * *,matlabTestArtifacts / * .mldatx归档保存到该目录的所有文件。

      注:查看这些结果在MATLAB在另一台机器的测试机器上,执行以下操作:

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

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

      詹金斯®如果慈善机构公司的注册商标。

      2022年出版的