FEATURED · 精选文章

嵌入式SAFe落地指南:多团队协同、CI/CD与硬件管理实战

发布时间 / 2026/8/30 19:25:26
来源 / 创域科博编辑部
栏目 / 资讯中心
嵌入式SAFe落地指南:多团队协同、CI/CD与硬件管理实战 打开招聘软件搜“嵌入式软件工程师”你会发现一个有意思的现象JD 里的技能清单还是那些老面孔——C 语言、RTOS、Linux 驱动、I2C/SPI、内存泄漏排查。但面试聊到最后很多公司开始追问另一种能力你所在团队多少人多团队并行时怎么保证集成不崩固件版本混乱了怎么排查这些问题的背后已经不是一个“嵌入式八股文”能回答的了。这篇文章想聊一个在嵌入式圈子里讨论度还不算高、但正在成为复杂系统研发标配的话题嵌入式 SAFe 大规模敏捷开发。先说我的判断SAFe 不是互联网大厂的项目管理专属工具它恰恰是嵌入式复杂系统研发最缺的那套“多团队协同框架”。过去很多嵌入式团队靠“核心工程师人肉协调”来推进项目团队超过 50 人、模块超过十几个之后这套打法一定会失效。SAFe 提供的不是更多会议而是一种能把硬件依赖、工具链差异、验证周期长这些嵌入式老问题显性化的方法。读完这篇文章你会知道 SAFe 到底是什么、和 Scrum 有什么区别、嵌入式场景下哪些经验可以直接用、哪些必须改造以及落地时最需要准备的工程基础设施是什么。文章不会给你一个放之四海而皆准的模板但会给你一个足够清晰的落地路线图。1. 为什么“嵌入式 SAFe”是一个绕不开的话题过去十年嵌入式行业发生了两个被低估的变化。第一个变化是软件体量。原来一个 MCU 项目几千行 C 代码就能搞定一个工程师从需求到发布全包。现在一台智能座舱域控制器、一个机器人主控、一套汽车车身域控系统代码量轻松上几十万行甚至百万行。代码量大了之后单打独斗的模式立即失效取而代之的是多个特性团队并行开发。第二个变化是系统耦合度。传统嵌入式开发很像“串行流水线”硬件先做出来驱动跟上应用最后。这种模式节奏慢但简单。现在的嵌入式系统更像一个“软件定义硬件”的系统——硬件还没完全定型软件团队已经要在仿真环境里开发真正联调时十几个模块要同时集成任何一个接口变化都可能引发连锁问题。这两个变化叠加结果就是嵌入式项目的复杂度已经从“单点技术复杂度”变成了“组织协作复杂度”。但很多团队的研发流程还停留在“伪敏捷”阶段有站会有两周迭代但跨团队之间依然靠口头约定接口集成期依然混乱。这样的团队不是不需要敏捷而是需要一种能把多个 Scrum 团队对齐到同一个节奏、同一个目标的规模化敏捷方法。SAFe 要解决的核心问题就是“多个团队如何同步、集成和交付一个复杂系统”。这也是为什么现在部分嵌入式头部企业的招聘开始关注候选人的软件工程素养、CI/CD 经验、多团队协作经验。嵌入式岗位的竞争正在从“你会不会写驱动”转向“你能不能在一个复杂的软硬件系统里稳定交付”。2. SAFe 是什么一套“把敏捷放大到组织层”的框架SAFe 全称 Scaled Agile Framework直译是“规模化敏捷框架”。它不是一种具体的开发方法而是一整套用于组织多团队敏捷开发的模式集合。理解 SAFe先要理解它和 Scrum 的区别。Scrum 解决的是“一个团队如何按固定节奏交付”的问题。它强调迭代、站会、评审、回顾通常适用于 5 到 10 人的单团队。SAFe 解决的是“几十个团队如何协同交付一个大型系统”的问题。它把 Scrum 团队作为基本单元在团队之上增加了一层“项目群”和“项目组合”的管理结构。对比维度ScrumSAFe适用规模单个团队5-10人多个团队几十到几百人核心时间盒Sprint通常2-4周PIProgram Increment通常8-12周主要关注点团队内迭代交付跨团队依赖、系统集成、节奏对齐关键活动Sprint计划、评审、回顾PI Planning、系统演示、Inspect Adapt是否涉及投资组合通常不涉及Portfolio层可涉及SAFe 里几个反复出现的核心概念先在这里建立直观印象ARTAgile Release Train敏捷发布火车一组敏捷团队加上产品经理、系统架构师、发布火车工程师等角色围绕同一个产品持续交付。ART 像一列火车所有团队按照同一个时间表前进到站就发车不会等某个团队。PIProgram Increment项目群增量ART 的时间盒通常 8 到 12 周。每个 PI 结束时会有一个硬性的集成和演示节点。PI Planning每个 PI 开始时举行的计划活动所有团队聚在一起对齐目标、识别依赖、分配任务是 SAFe 最重要的仪式。Solution Train当系统规模大到需要多个 ART 时用 Solution Train 来协调这些 ART。System Team专门负责环境搭建、系统集成、端到端验证的团队。在嵌入式场景下这个团队几乎必不可少。SAFe 官方提供了几种配置从轻到重分别是 Essential SAFe、Large Solution SAFe、Portfolio SAFe、Full SAFe。对一个嵌入式团队来说最务实的起点是 Essential SAFe先把 PI、ART、PI Planning 跑起来。一上来就上 Full SAFe流程负担会直接压垮团队。3. 嵌入式研发为什么比互联网更需要规模化敏捷很多人听到 SAFe 会觉得这是互联网软件公司的玩法跟嵌入式没关系。这个印象需要纠正。互联网软件的构建、部署、验证几乎可以脱离硬件运行所以它的持续集成相对容易。嵌入式系统的最大难点在于软件无法脱离硬件单独验证硬件迭代周期又远慢于软件迭代周期。举一个典型场景。一个汽车电子项目车身控制模块由 A 团队负责座舱域控制器由 B 团队负责底层 BSP 和驱动由 C 团队负责。三个团队使用不同的编译工具链依赖同一块开发板的多个版本。A 团队想联调发现板子已经被 C 团队占用B 团队的代码已经写完但接口定义和 A 团队不一致直到集成时才暴露等到所有模块合在一起测试团队发现问题定位到具体模块又花了两周。这种场景下问题不在某个工程师能力不足而在多个团队的节奏、依赖、接口和验证机制没有被系统管理起来。SAFe 的价值是在团队之上建立一套“同步机制”PI Planning 强制所有团队在同一个时间点对齐目标和依赖避免“各做各的”。系统演示强制每个 PI 结束时有可运行的系统状态而不是“代码写完但没跑过”。系统团队负责持续集成避免“集成地狱”集中在项目末期。另外嵌入式软件架构本身也在变化。从传统的“超级大循环”轮询架构到事件驱动架构从裸机到 RTOS再到嵌入式 Linux、多核异构软件运行时的动态性和模块化程度越来越高。架构升级意味着团队划分、接口设计和集成策略也要跟着变化。如果一个系统已经从超级大循环升级到了事件驱动架构但研发流程还停留在“大循环式”的串行瀑布那瓶颈一定不在代码而在流程。所以我的结论是嵌入式引入 SAFe 的核心不是开会而是建立三个能力可预测的节奏、可验证的集成、可追溯的需求。这三点恰好是 SAFe 的框架骨架。4. 嵌入式 SAFe 落地从 PI Planning 到能力拆解SAFe 落地一般从 PI Planning 开始。PI Planning 通常持续两天所有相关团队集中参与。时间不长但要真正跑通前期的准备工作远比会议本身重要。嵌入式团队的 PI Planning除了常规的需求梳理、任务拆分、风险识别之外还需要增加几项特殊内容硬件配额确认每个团队在 PI 期间需要哪些开发板、哪些测试台架分别在哪个时间段使用。这件事必须在 PI Planning 前提前确认否则计划做到一半发现硬件不足。工具链版本冻结交叉编译工具链、第三方库、IDE 版本要提前统一。嵌入式项目的工具链碎片化非常严重不冻结版本集成阶段必然踩坑。BSP / 驱动版本依赖应用团队依赖的平台版本要提前声明。平台团队要明确承诺这个 PI 内哪个版本可用。安全与认证需求边界如果产品涉及安全认证需求拆解时要提前标记安全相关项确保每个安全需求都能追溯到测试用例。在 PI Planning 中需求和任务通常用 Capability能力、Feature特性、Story用户故事三层结构来管理。下面用一份 YAML 配置示意这个结构实际项目中可以用 Jira、Polarion、CodeBeamer 等工具承载但结构本质是一致的。# pi-plan.yaml pi: id: PI-2025-02 duration_weeks: 10 sprint_length_weeks: 2 hardware_quota: - board: bcm_evb_v3 quantity: 6 owner: hardware_pool available_from_week: 3 - board: infotainment_hmi_v2 quantity: 4 owner: hardware_pool available_from_week: 5 capabilities: - id: CAP-101 name: 车身控制模块固件升级 owner: Body Team features: - id: FEAT-1011 name: Bootloader 双区升级 stories: - 作为OTA服务端我希望目标设备支持双区备份以便升级失败可回滚 - 作为安全测试我希望对升级包做签名校验以便防止非法固件写入 - id: FEAT-1012 name: 升级状态上报 stories: - 作为监控系统我希望收到设备上报状态以便在云端展示升级进度这段配置的核心不是格式而是它把“硬件资源”和“需求结构”放在了一起。PI Planning 结束时每个团队都应该能回答三个问题这个 PI 我们要交付什么依赖哪些硬件和平台谁会在哪个时间点卡住我们如果做不到说明 PI Planning 只是走了一遍过场。5. 嵌入式 CI/CD不是“把代码编译一遍”那么轻巧SAFe 能不能在嵌入式团队真正落地很大程度取决于 CI/CD 基础设施。没有可靠的 CI/CDSAFe 的固定节奏会变成一场灾难——每个 PI 结束你根本拿不出可运行的系统。但嵌入式 CI/CD 和互联网 CI/CD 有本质区别。互联网的构建产物是一个服务或一个镜像部署到服务器就可以验证嵌入式的构建产物是固件镜像验证需要烧录到目标硬件测试结果受硬件状态、连接方式、外设环境的影响。一个嵌入式团队要建立 CI至少需要包含这几个阶段交叉编译静态代码分析主机端单元测试固件打包真机或 HIL 冒烟测试下面是一份 GitLab CI 的.gitlab-ci.yml示例展示嵌入式固件流水线的基本骨架。# .gitlab-ci.yml stages: - build - static-analysis - unit-test - package - hw-smoke variables: TARGET: cortex-m4 CROSS_COMPILE: arm-none-eabi- BUILD_DIR: build build-firmware: stage: build script: - cmake -S . -B $BUILD_DIR -DCMAKE_TOOLCHAIN_FILEtoolchain-arm-none-eabi.cmake - cmake --build $BUILD_DIR --target firmware.elf -j$(nproc) artifacts: paths: - $BUILD_DIR/firmware.elf - $BUILD_DIR/firmware.bin expire_in: 1 week static-analysis: stage: static-analysis script: - cppcheck --enableall --stdc99 --suppressmissingIncludeSystem src/ - ./tools/check_style.sh src/ needs: - build-firmware unit-test-host: stage: unit-test script: - cmake -S tests -B $BUILD_DIR/tests -DCMAKE_BUILD_TYPEDebug - cmake --build $BUILD_DIR/tests - ctest --test-dir $BUILD_DIR/tests --output-on-failure needs: - build-firmware package-firmware: stage: package script: - ./scripts/package_fw.sh $BUILD_DIR/firmware.bin - sha256sum $BUILD_DIR/firmware.bin $BUILD_DIR/firmware.bin.sha256 artifacts: paths: - $BUILD_DIR/firmware.bin - $BUILD_DIR/firmware.bin.sha256 needs: - build-firmware hw-smoke: stage: hw-smoke script: - ./scripts/flash_and_check.sh /dev/ttyUSB0 $BUILD_DIR/firmware.bin only: - main needs: - package-firmware这份配置里build-firmware用交叉编译工具链完成编译static-analysis跑静态检查在嵌入式安全相关项目中这一步通常对应 MISRA C/C 规则的检查unit-test-host在主机环境跑单元测试好处是不需要目标板就能快速反馈package-firmware打包固件并生成哈希hw-smoke在合并到 main 分支时执行真机烧录冒烟。注意hw-smoke我这里特意只配置成在 main 分支执行因为真机资源是有限的不能让每次提交都去抢占硬件台架。一个容易踩坑的地方是很多人把 CI 只理解成“能编译通过”。在嵌入式项目里编译通过只是最基础的一关。如果你没有静态分析、没有主机端单元测试、没有硬件冒烟测试那 CI 能带来的信心增量非常有限。另外固件版本可追溯性非常关键。规范的做法是每次构建都记录 Git commit、版本号、编译时间、编译工具链版本并把固件哈希一起归档。下面这段脚本可以加入打包阶段#!/usr/bin/env bash set -euo pipefail FW_BIN${1:-build/firmware.bin} VERSION_TAG${CI_COMMIT_TAG:-unknown} GIT_COMMIT${CI_COMMIT_SHA:-$(git rev-parse HEAD)} echo 固件文件: ${FW_BIN} echo 版本标签: ${VERSION_TAG} echo Git提交: ${GIT_COMMIT} echo 二进制大小: $(stat -c %s ${FW_BIN}) bytes echo 签名哈希: $(sha256sum ${FW_BIN} | awk {print $1})把这个脚本挂到package-firmware阶段之后每次产出一个固件都会生成一份对应的元数据。没有这套机制PI 结束做系统演示时你可能连“当前烧到板子上的固件是哪个版本”都说不清楚。6. 硬件依赖怎么破软件先行、硬件配额与 HIL 验证硬件是嵌入式团队最容易卡住的资源。SAFe 的 PI Planning 可以规划需求但规划不了硬件的“物理时间”。所以嵌入式团队必须把硬件资源管理提到一个非常显性的位置。常见的做法是三层验证策略第一层仿真 / 虚拟化平台。在有真实硬件之前通过模拟器或虚拟原型跑业务逻辑、单元测试、部分集成测试。速度最快能解决大部分逻辑问题。第二层HILHardware-in-the-Loop硬件在环。把真实的控制器或真实 MCU 连接到仿真环境输入输出通过 IO 接口模拟验证实时性、信号时序、外设交互。第三层真机集成。把固件烧录到真实设备上做整机验证。这三层正好对应验证成本从低到高、反馈速度从快到慢的梯度。一个成熟的嵌入式团队应该把事情尽量往前两层推把真机时间留给真正需要真机的问题。但即便有仿真和 HIL硬件的“物理配额”依然是瓶颈。一个 PI 内有多个团队每块开发板只有一个使用时间冲突是常态。不把这个冲突显性化PI 计划就是纸面计划。这里可以引入一个简单但实用的“硬件预约”机制。用一个 Python 脚本管理开发板预约就是一个很轻量的起步方案#!/usr/bin/env python3 import json import sys BOOKING_FILE hardware_bookings.json def load_bookings(): try: with open(BOOKING_FILE, r, encodingutf-8) as fp: return json.load(fp) except FileNotFoundError: return {boards: {}} def book(board_id, requestor, start_date, end_date): bookings load_bookings() board bookings[boards].setdefault(board_id, {records: []}) new_record {requestor: requestor, start: start_date, end: end_date} for record in board[records]: if not (new_record[end] record[start] or new_record[start] record[end]): print(f冲突{board_id} 在 {start_date} ~ {end_date} 已被 {record[requestor]} 占用) sys.exit(1) board[records].append(new_record) with open(BOOKING_FILE, w, encodingutf-8) as fp: json.dump(bookings, fp, ensure_asciiFalse, indent2) print(f{board_id} 预约成功{start_date} ~ {end_date}预约人{requestor}) if __name__ __main__: book(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])调用方式python3 hardware_booking.py bcm_evb_v3 body_team 2025-04-01 2025-04-14这个脚本粗粒度地解决了“谁在什么时间段用哪块板子”的冲突问题。真实团队可以在此基础上扩展成完整的日历系统或工单系统甚至接入 CI让流水线在指定开发板空闲时才触发真机测试。注意硬件预约要有边界不能只靠自觉。在团队规模不大时一个共享表格可能就够团队规模上来之后需要在工具上做权限管控尤其是价格昂贵的 HIL 台架必须有使用记录和审批流程。硬件配额和“最小权限”原则在嵌入式研发里同样成立。7. 多团队协作中的角色与会议别照搬互联网模式SAFe 定义了不少角色和会议但嵌入式团队落地时不能照搬必须根据自身特点调整。先看角色。互联网项目的 ART 通常按业务模块划分团队每个团队都能独立开发、独立部署。嵌入式项目的一个显著差异是存在一个“平台/基础软件团队”它不直接交付用户可见功能但所有上层团队都依赖它。在嵌入式 SAFe 的 ART 里通常会包含几类团队平台/BSP 团队负责 Bootloader、BSP、驱动、芯片适配向应用团队提供稳定的软件平台。特性团队如车身控制、座舱显示、OTA 升级等按功能划分负责具体业务逻辑。系统团队负责环境搭建、持续集成、HIL 维护、系统集成验证、版本发布。这个团队在嵌入式场景下优先级非常高。如果你所在的组织有多个 ART还会有一个 Solution Train 层来协调 ART 之间的依赖。但这属于 SAFe 的 Large Solution 配置不是每个团队都要上。从 Essential SAFe 起步就够。再看会议。SAFe 里PI Planning、系统演示、Inspect Adapt 是关键活动。嵌入式团队容易出现的两个问题一是“演示走形式”。互联网团队演示时直接打开页面点一圈嵌入式团队如果没有做好系统集成演示时可能根本没有可运行的硬件环境。建议把“系统演示”改成“集成演示 硬件演示日”的组合甚至把 HIL 台上的真实运行状态投影出来让大家看到的不只是 PPT而是固件在真实 MCU 上跑起来的结果。二是“Scrum of Scrums 变成汇报会”。这个会议应该只讨论跨团队的依赖和阻塞但很多团队开成了“各团队轮流读进度”。要改变这个会议的性质最好的办法是让每支团队自己上报“阻塞项”和“依赖风险”而不是汇报“完成了什么”。还有一个嵌入式特有的协作问题需求与验证的闭环。嵌入式项目往往涉及安全标准和认证要求需求需要可追溯。SAFe 的 Capability-Feature-Story 三层结构本质上就是在需求层面建立追溯链。如果需求管理工具和测试用例管理工具没有打通即使流程再规范审计时也会出问题。这里提醒一句不要试图在第一个 PI 就把所有 SAFe 仪式全部跑完。先跑 PI Planning、系统演示、Inspect Adapt 三个核心仪式其他都可以留到第二个 PI 再逐步加进来。8. 常见误区与坑为什么很多嵌入式团队引入 SAFe 失败SAFe 在嵌入式领域不是没有失败案例而是失败得非常典型。整理几个高频问题。问题现象可能原因排查方式解决方案会议变多交付变慢把 SAFe 理解成“加会议”没有同步建设工程能力评估每个会议是否有明确输出物先建设 CI/CD、单元测试、需求追溯再叠加 SAFe 仪式PI Planning 做完了执行时还是乱硬件依赖、工具链版本没有提前冻结检查 PI Planning 是否包含硬件配额和依赖清单引入硬件预约机制提前确认 BSP 版本代码合并就崩集成遥遥无期没有持续集成各团队各自开发集成集中到 PI 末查看分支合入频率和 CI 失败率建立共享主干分支每天合并哪怕功能不完整硬件等不到团队闲置硬件资源没有纳入计划管理查看硬件占用日历是否提前规划用“软件先行 仿真 HIL”分流验证需求需求拆成任务清单没有验收标准Story 没有可验证的完成定义检查每条 Story 是否有明确的验收条件每条 Story 必须包含测试要点或验收标准安全感缺失每个版本都手忙脚乱固件版本没有可追溯性检查是否能快速定位某个固件的 Git commit 和构建信息构建流水线自动记录版本、哈希、工具链信息一上来就上 Full SAFe流程负担过重组织规模没到那个程度评估团队数量和系统复杂度从 Essential SAFe 起步用 Inspect Adapt 持续调整这些误区的核心指向同一个问题SAFe 不是银弹它是一面镜子照出的是工程基础是否扎实。如果一个团队连统一的交叉编译环境都没有连单元测试都没有跑过直接上 PI Planning 只会放大混乱。从另一个角度看SAFe 落地失败也不完全是流程问题。很多时候嵌入式工程师对“敏捷”的态度是排斥的觉得开发板还没到敏捷个什么这种心态可以理解但现实是越依赖硬件的团队越需要提前用仿真、Mock、HIL 把软件验证路径打通。所谓“大规模敏捷”本质上不是为了让人更忙而是为了让依赖更少、反馈更快。9. 学习路径与职业建议懂硬件的软件工程化人才更稀缺如果你已经意识到这套体系的重要性接下来的问题是怎么学。我的建议分三个阶段。第一阶段把嵌入式基本功打牢。C 语言、指针、内存管理、中断、RTOS 原理、Linux 驱动基础、ARM 架构基础这些依然是硬通货。面试中大量的“嵌入式八股文”考察的就是这些底层能力。不要因为关注敏捷就忽略技术深度没有技术深度的流程认知是空中楼阁。第二阶段补软件工程能力。Git 分支管理、自动化构建、单元测试、静态分析、CI/CD 工具链。很多嵌入式工程师的代码能力不差但工程习惯很差这是最值得投入的方向。可以找一个自己熟悉的小型嵌入式项目给它搭一套完整的 CI 流水线跑编译、静态检查、单元测试、固件打包。这个过程会让你真正理解“工程化”的含义。第三阶段学规模化敏捷方法。先理解 Scrum 和看板再学习 SAFe 的核心概念和框架结构。可以关注 SAFe 官方框架网站了解最新的实践指导也可以根据自己团队的实际情况把学到的理念用在“团队内一个小范围试点”上。至于 SAFe 认证建议作为系统学习的路径而不是面试的敲门砖——认证本身不稀缺稀缺的是你能否在实际项目中推动落地。面试时如果被问到“你在嵌入式项目里怎么处理多团队协作”不要只回答“我们用 Jira 管理任务”。你可以从三个角度展开我们如何用 PI 节奏对齐交付目标如何通过 CI 流水线保证代码随时可集成如何使用硬件预约机制解决开发板资源争用。这三个角度每一个都比“我会背 SAFe 术语”更有说服力。嵌入式行业不缺会点灯、会写驱动的人缺的是能在复杂软硬件系统里同时理解技术细节和组织协同的人。SAFe 未必是你职业发展的必经之路但理解它至少能让你在看到一个复杂系统研发项目时知道问题可能出在流程、依赖还是工程设施上。这种判断力才是未来十年嵌入式工程师真正的分水岭。如果你所在团队正好面临多 ECU 协同、多团队并行、集成困难这些典型痛苦我的建议很直接不要急着推行全套 SAFe先把三件事做扎实——建立可重复的 CI 流水线把硬件资源变成可预约的显性配额把需求拆到可以验证的颗粒度。这三件事做完你自然会发现SAFe 的那些“仪式”其实只是把已经在做的好事用一套统一的节奏固定下来。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻