1. 课程导入与全景认知
在基于模型的设计(Model-Based Design,MBD)流程中,Simulink 模型往往承担了从算法设计、控制策略验证到代码生成的核心角色。当模型数量从几个增长到几十、上百个,当一次改动可能牵动多个子系统与多个测试用例时,靠人工点击“运行仿真”、肉眼比对波形的方式就难以为继。持续集成(Continuous Integration,CI)与自动测试(Automated Testing)正是为了解决这一规模化和可重复性问题而引入的工程实践。
简单来说,Simulink 持续集成是指:每当模型或相关脚本发生变更并提交到版本库后,由服务器或本地流水线自动触发一系列动作——拉取代码、加载模型、执行测试、生成报告、归档结果,并把成功或失败反馈给开发者。Simulink 自动测试则是这套流水线中最核心的执行环节,它用可重复、可判定的测试用例替代人工观察,对模型的功能、接口、边界条件进行验证。二者结合,形成“改动—验证—反馈”的快速闭环。
它的价值可以归纳为三点。第一是回归防护:模型重构、参数调整、库更新后,历史测试能立刻告诉你是否破坏了原有行为。第二是可追溯性:每个测试结果都与具体的模型版本、需求条目、测试用例绑定,便于审计与问题定位。第三是效率与一致性:夜间批量执行数百个测试,比人工逐个打开模型可靠得多,也避免了“忘记跑某个用例”的疏漏。
要理解这套体系,先要看清它的整体结构。下图给出了一条典型的 Simulink 持续集成与自动测试链路:从开发者提交变更开始,经过版本库触发、流水线调度、模型加载与测试执行,最终输出报告与反馈。图中同时标出了各环节使用的代表性工具,帮助建立工具链全景认知。
从图中可以看到,整条链路可以拆成四个阶段:开发与提交、触发与调度、测试执行、结果与反馈。前两个阶段解决“什么时候跑、由谁跑”的问题,后两个阶段解决“跑什么、结果怎么用”的问题。橙色虚线表示失败后的反馈回路——测试不通过时,流水线会把失败信息回传给开发者,形成闭环。这正是持续集成区别于“一次性测试”的关键:它不是一次动作,而是一个持续运转的循环。
在工具链层面,可以按职责分为四层。建模与仿真层是 Simulink 与 Stateflow,负责被测试对象的构建;测试编写层是 MATLAB Unit Test 框架与 Simulink Test,负责把验证意图写成可执行、可判定的代码;执行与调度层是 Jenkins、GitLab CI 或 Azure DevOps 等流水线工具,配合 MATLAB 的批处理模式在无界面环境下运行;报告与追溯层则通过 Test Manager、Requirements Toolbox 等生成测试报告、覆盖率数据和需求追溯矩阵。理解这四层的分工,后续章节中遇到具体工具时就不会迷失位置。
本课程的整体路线也遵循这条链路展开:先完成环境搭建与版本控制准备,再学习如何编写结构良好的自动测试用例,接着把测试接入流水线,然后引入覆盖率度量与需求追溯,最后讨论多模型、多版本、多团队协作下的工程化落地。每一章都会围绕一个可操作的目标推进,而不是停留在概念介绍。
需要特别强调的是,持续集成与自动测试并不是“额外负担”,而是把原本分散、易遗漏的验证工作固化成可重复执行的资产。一次投入编写测试,换来的是每次改动后的即时反馈。随着课程推进,你会逐步体会到:真正困难的不是让测试跑起来,而是设计出既能覆盖关键行为、又便于维护和扩展的测试集。这也是本课程希望帮你建立的核心能力。