
座舱软件开发行业普遍采用一种分层、分域的混合开发模式(敏捷开发+瀑布)。
✅ 为什么座舱软件需要敏捷?(敏捷的用武之地)
- 上层应用 快速迭代需求旺盛:
· 用户对娱乐系统、语音助手、导航、App生态的需求变化极快,类似移动互联网应用。传统瀑布模型无法满足这种快速迭代和用户反馈循环。
· HMI(人机交互) 的设计和体验优化,极度需要通过短周期、可演示的迭代来收集用户反馈。
- 应对不确定性和技术探索 :
· AI算法(如语音识别、计算机视觉)、感知融合等模块,本身具有研发和试错特性。敏捷的迭代周期非常适合这种探索式开发。
- 系统复杂性要求持续集成与验证 :
· 座舱系统涉及多个软硬件供应商,敏捷提倡的持续集成 是保证大量代码能及时集成、并早期发现兼容性问题的关键。
⚠️ 为什么不能完全敏捷?(挑战与约束)
- 安全合规是硬约束:
· 功能安全(ISO 26262 ASIL) 要求严格的流程、文档和追溯性。这与敏捷的"轻量文档"理念有冲突。任何代码修改都必须进行安全影响分析和回归测试。
· 信息安全 也要求严谨的流程和审计。
- 硬件依赖与长周期:
· 软件开发和测试严重依赖硬件(如ECU、传感器、芯片)。硬件开发周期长、成本高,无法为每个为期两周的Sprint都提供新的硬件。
· 硬件在环测试 是核心环节,但环境搭建复杂,无法像纯软件那样随意部署。
- 严格的供应链与供应商管理:
· 不同软件模块可能由不同供应商提供,需要严格的接口定义和合同约束。敏捷所倡导的"随时改变需求"在跨公司合作中难以实现。
- 冗长的认证与测试周期:
· 车规级软件在量产前必须经过一系列极端环境测试、耐久测试和认证。这些测试周期可能长达数月,无法嵌入到一个短的Sprint中。
🚀 如何实施:混合开发模式
为了解决上述矛盾,业界普遍采用 "前端敏捷,后端瀑布" 或 "分层敏捷" 的混合模式。其核心思想是:在受控的框架内拥抱变化。
1.架构分层与解耦
这是实施混合开发的基础。您的架构图完美地支持了这一点:
· 应用算法软件 & 功能软件(上层):非常适合敏捷。
· HMI开发、应用软件、AI模型训练、数据地图服务等,可以组建Scrum团队,进行2-4周的Sprint迭代,快速原型和验证功能。
· 系统软件 & 硬件平台(底层):偏向瀑布与V模型 。
· 操作系统移植、BSP开发、驱动开发、AutoSAR中间件配置等,需要更严格的计划、设计和验证,与硬件开发节奏强绑定。这里强调接口先行和架构稳定性。
2. 基于模型的系统工程与敏捷结合
· 使用 AutoSAR工具链(如DaVinci) 或 Simulink 在项目早期定义稳定的系统架构 和软件组件接口。
· 一旦接口冻结,各个组件内部的实现就可以采用更敏捷的方式并行开发。
---
*我们来深入解构 "**基于模型的系统工程(MBSE)*与敏捷结合" 这一关键方法。这是在汽车行业应对复杂性、保证质量并实现并行开发的典范实践。
核心理念:用"契约"解耦"规划"与"执行"
您可以将其理解为一种 "城市规划" 与 "建筑施工" 的关系:
· MBSE(基于模型的系统工程) 扮演 "城市规划局" 的角色。它负责绘制精确的、标准化的城市蓝图(系统架构),定义道路宽度、管道接口、功能区划分(软件组件接口)。
· 敏捷开发 扮演 "各个建筑队" 的角色。他们在蓝图规定的范围内,可以灵活、快速地建造自己负责的楼盘(软件组件实现)。
两者通过 "接口契约" 进行解耦。一旦契约冻结,双方便可并行工作。
---
第一阶段:MBSE - 定义不可撼动的"架构契约"
这个阶段的目标是创建一个单一、权威、无歧义的系统模型,作为所有后续开发的唯一真理来源。
使用的工具与产出:
1. 架构设计工具:
· AutoSAR 工具链(如Vector DaVinci,* ETAS ISOLAR): 这是汽车行业的黄金标准。您不是在写文档,而是在一个图形化工具中 "画" 出系统架构。
· Simulink/System Composer: 在算法和控制系统建模方面尤为强大。
2. 关键建模活动与产出:
· 定义软件组件: 在工具中创建代表"语音识别"、"导航规划"、"仪表渲染"等的SWC。
· 定义端口和接口: 为每个组件定义 "提供接口" 和 "需求接口" 。这就像定义了插头的规格(是USB-C还是HDMI)。
· Sender-Receiver 接口: 用于传递数据(如 VehicleSpeed 数据,由感知组件发送,仪表组件接收)。
· Client-Server 接口: 用于请求服务(如 HMI 组件调用 Navigation 组件的 CalculateRoute(destination) 服务)。
·定义运行实体和可运行对象: 描述组件内部的具体**++功能块++** 及**++其触发条件++** (如周期性的、被事件触发的)。
· 系统资源分配: 将软件组件映射到具体的ECU上,并定义总线通信矩阵。
3. 核心产出物:"接口冻结"
· 这个阶段的最终产出不是一堆Word文档,而是机器可读的 ARXML 文件。这个文件是描述整个系统架构的标准化XML文件,它就是这个项目的 "架构契约"。
· "接口冻结" 意味着这个 ARXML 文件被基线化,任何对其的修改都必须通过一个严格的 变更控制委员会 来评审。这保证了基础的稳定性。*
---
第二阶段:敏捷 - 在契约下的并行"实现"
一旦"契约"签订,各个功能团队就可以开始他们敏捷的、并行的开发工作。
如何实现并行开发?
1. 自动代码生成:
· 组件框架代码: AutoSAR工具(如 DaVinci Developer)可以从 ARXML 文件中自动生成每个软件组件的头文件和骨架代码。例如,它为"导航组件"生成 Navigation.h 和 Navigation.c,其中已经包含了 CalculateRoute 函数的空实现。
· 通信代码: RTE(运行时环境)的代码也会被生成,这些代码负责处理组件之间的所有通信细节。开发者无需关心数据是如何在总线上传输的,他们只需要调用生成的API。
2. 团队分工明确:
· 导航团队: 拿到 Navigation.c 的框架后,他们的敏捷团队可以专注于实现 CalculateRoute 函数内部的路径规划算法。他们可以使用Scrum,每个Sprint都优化算法性能。
· 仪表团队: 同时,仪表团队拿到框架后,可以专注于实现HMI的动画和渲染逻辑,以敏捷的方式不断优化用户体验。
· 语音团队: 同样,他们可以专注于语音识别模型的优化和集成。
3. 依赖模拟与契约测试:
· 在开发初期,导航团队可能还没有真实的语音组件来调用它。但他们可以基于 "契约" 创建一个 "模拟的"或"桩" 语音组件,这个模拟组件严格按照 ARXML 中定义的接口来返回值,从而让导航团队的开发和测试得以进行。
· 团队可以编写 "契约测试",持续验证自己的实现是否始终符合架构定义的接口。
---
一个具体的工作流程示例
背景: 需要开发"语音控制导航"功能。
1. MBSE阶段(城市规划局):
· 系统架构师使用 DaVinci Configurator工具,在系统中创建三个软件组件:VoiceAssistant, Navigation, HMI。
· 定义接口:
· VoiceAssistant 提供一个 Client-Server 接口 RouteCalculationRequest,包含一个操作 requestRoute(destination)。
· Navigation 需求这个 RouteCalculationRequest 接口。
· Navigation 提供一个 Sender-Receiver 接口 NavigationStatus,包含一个数据元素 currentRoute。
· HMI 需求这个 NavigationStatus 接口以显示路线。
· 架构师导出并基线化 ARXML 文件。"接口冻结"。
2. 并行敏捷开发阶段(建筑施工队):
· 代码生成: 所有团队从CI服务器获取最新的 ARXML。AutoSAR工具为每个团队生成各自的组件框架代码。
· 语音团队(敏捷岛A): 在生成的 VoiceAssistant.c 中实现 requestRoute 函数,主要是接收语音指令,解析出目的地,然后调用 Navigation_requestRoute(destination) 这个自动生成的RTE函数。他们专注于提升语音识别的准确率。
· 导航团队(敏捷岛B): 在生成的 Navigation.c 中实现路径规划算法。他们创建一个模拟的 VoiceAssistant 桩,以便在HIL台架可用前就能测试自己的算法。
· HMI团队(敏捷岛C): 实现如何接收并美观地显示 currentRoute 数据。
3. 集成与测试(安全沙盒):
· 各团队完成一个Sprint后,将代码提交到 CI/CD流水线。
· 流水线会自动:
· 从权威的 ARXML 重新生成系统集成代码。
· 编译所有团队的最新代码。
· 部署到 HIL测试台架。
· 运行自动化测试用例,例如:"测试语音指令'去机场'能否成功触发导航规划并在HMI上显示路线"。
· 由于接口是预先定义且稳定的,这种集成测试可以非常早、非常频繁地进行,快速发现组件内部逻辑的问题,而不是接口不匹配这种低级错误。
总结:MBSE与敏捷结合的优势
· 降低耦合与风险: 将容易引发冲突的"接口定义"与相对独立的"内部实现"分离,大幅减少团队间的阻塞和等待。
· 保证系统一致性: ARXML 作为单一真理来源,确保所有团队在同一个蓝图下工作,避免集成时的"惊喜"。
· 实现真正的并行: 为"敏捷岛"模式提供了坚实的技术基础,各个团队可以真正同时开工。
· 提升质量: 自动生成的代码避免了手写通信代码容易引入的错误,让开发者更专注于核心业务逻辑。
这种 "MBSE规划,敏捷实现" 的模式,完美地解决了汽车软件工程中 "前期架构稳定性" 与 "后期开发灵活性" 之间的矛盾。
3. 规模化敏捷框架的应用
对于整个智能座舱项目,可以采用规模化敏捷框架来协调多个敏捷团队和瀑布式团队:
· SAFe: 非常适用于汽车行业。它提供了"项目群增量"的概念,将较长的开发周期(如8-12周)作为一个固定的时间盒,在此期间,所有团队(敏捷和瀑布)同步节奏,共同致力于一批已规划好的特性。
· LeSS: 另一个适用于大型项目的规模化敏捷框架。
我们详细展开 规模化敏捷框架,特别是 SAFe 和 LeSS 在智能座舱开发中的应用。这是将之前所有概念(敏捷岛、安全沙盒、MBSE)串联起来,进行大规模协同的指挥调度系统。
---
为什么需要规模化敏捷框架?
想象一下,智能座舱项目涉及:
· 10+个敏捷团队:HMI、语音、导航、仪表、音响、空调控制、AI算法、T-Box...
· 多个外部供应商:提供地图数据、语音引擎、特定驱动等。
· 瀑布式团队:负责底层BSP、Hypervisor、AutoSAR中间件的团队。
如果没有一个顶层的协调框架,会出现:
· 团队各自为战:依赖关系混乱,A团队等B团队的接口,B团队等C团队的功能。
· 集成周期漫长且痛苦:只在项目末期才尝试将所有部件拼凑在一起,发现大量集成冲突。
· 目标不一致:团队不清楚自己的Sprint目标如何贡献于整个项目的发布目标。
规模化敏捷框架就是为了解决这些协同难题而生的。
---
1. SAFe - 适用于汽车行业的"企业级敏捷列车"
SAFe 提供了一套非常结构化、层次化的模型,尤其适合像汽车行业这样需要高度计划性和安全合规性的大规模组织。
核心概念:项目群增量
PI (program increment项目群增量)是SAFe的灵魂。它是一个固定的、通常为 8-12周 的时间盒,在此期间,所有的团队(敏捷和瀑布)都同步他们的工作节奏,共同完成一组预先规划好的、高层次的目标。
PI的核心活动是 PI Planning(项目群增量规划会),这是一个为期两天的、所有关键人物都必须到场的大型面对面会议。
一个生动的智能座舱PI案例
项目目标:在下一个整车平台中,实现"无缝多屏联动"体验(例如,将导航路线从中控屏"甩"到仪表盘)。
角色设定:
· 产品经理:代表客户和商业价值。
· 系统架构师:代表技术可行性,已使用MBSE工具完成了初步架构设计。
· 发布火车工程师:PI的流程负责人。
· 10个敏捷/瀑布团队。
PI 执行流程:
1. 【PI规划前 - 准备】
· 产品经理准备好 项目群代办列表------一份包含"多屏联动"、"新语音引擎集成"等大型特性的列表。
· 系统架构师准备好 架构跑道 和 架构愿景------例如,定义好用于跨屏通信的新总线信号和API。
2. 【PI规划第一天 - 发布愿景与团队规划】
· 管理层发布业务背景和项目愿景:"我们的竞争对手已具备此功能,我们必须领先。"
· 产品经理逐一介绍项目群代办列表中的特性。例如,介绍"多屏联动"的具体验收标准。
· 系统架构师介绍架构愿景,说明技术实现方案。
· 各团队分散开,基于收到的信息,为自己团队的PI目标进行初步规划。他们会识别出:
· 依赖:HMI团队需要仪表团队提供一个新的显示接口。
· 风险:底层图形驱动团队(瀑布式)可能无法在PI中期提供所需的性能优化。
3. 【PI规划第二天 - 整合与承诺】
· 依赖关系协调会:各团队大声说出自己发现的依赖和风险。RTE和经理们现场协调,例如,敦促仪表团队优先开发那个接口。
· 制定团队PI目标:每个团队最终确定自己在本PI周期内承诺完成的目标。
· 团队信心投票:所有团队成员对完成这些目标进行信心投票,确保承诺是集体做出的。
4. 【PI执行期间 - 同步与检视】
· 各团队回到自己的"敏捷岛",进行各自的Sprint迭代(通常是5个双周Sprint)。
· 每周举行一次 Scrum of Scrums 会议,各团队派代表同步进度,并持续解决新出现的依赖和障碍。
· 系统演示:在每个Sprint结束后,集成所有团队的工作成果,在 "安全沙盒"(如HIL台架)上进行一次全系统的演示,展示"多屏联动"功能的进展。
5. 【PI结束 - 系统演示与复盘】
· 最终的系统演示:向所有干系人展示在本PI内实现的所有功能。这是一个真正的、集成在目标硬件上的、可工作的系统增量。
· 量化度量:检查预先定义的业务目标和技术目标的完成情况。
· PI复盘会:回顾整个PI的过程,识别改进点,并在下一个PI中实施。
SAFe的优势:
· 强同步性:通过PI规划,让所有人朝着同一个目标前进,极大减少了集成风险。
· 可视化管理:依赖和风险被提前暴露和解决。
· 包容性强:能很好地容纳瀑布式团队(如硬件驱动团队),只要他们承诺在PI的时间盒内交付特定产出。
---
2. LeSS - "极简主义"的大规模Scrum
LeSS 的理念是:"Scrum很简单,规模化Scrum也应该保持简单。"它本质上是将单团队的Scrum规则应用到多个团队上,强调整体产品导向和去中心化。
核心原则:
· 一个产品待办列表:整个智能座舱只有一个产品待办列表,而不是每个团队一个。
· 一个产品负责人:对整个座舱软件的价值负责。
· 一个完成的定义:所有团队遵守同一个严格的"完成"标准(必须通过所有测试,包括系统级测试)。
· 同步的Sprint:所有团队在同一个Sprint周期内开始和结束。
LeSS在智能座舱中的运作案例
同一个目标:实现"无缝多屏联动"。
角色设定:
· 一个产品负责人。
· 2-8个功能完整的特性团队。LeSS强调团队是"特性团队"而非"组件团队"。即,一个团队可以端到端地完成一个特性,涉及HMI、中间件、甚至部分驱动调整。
LeSS执行流程:
1. 【Sprint规划第一部分 - 整体规划】
· 所有团队的代表(或全体成员)与产品负责人一起,从单一产品待办列表中挑选下一Sprint要完成的条目。大家共同讨论如何协作完成"多屏联动"这个大特性,可能会将其拆分成多个任务,由不同团队认领。
2. 【Sprint规划第二部分 - 各团队详细规划】
· 各团队分散开,为自己认领的任务进行详细的Sprint规划。
3. 【Sprint执行期间】
· 各团队独立工作,但强调直接沟通。如果HMI团队需要仪表团队的一个接口,他们会直接找过去沟通,而不是通过经理。
· 鼓励 "旅行者" 和 "社区" 实践:团队成员(特别是测试和架构师)可以在不同团队之间流动,帮助解决问题和传播知识。
4. 【Sprint结束】
· 总体Sprint评审会:所有团队一起参加,展示整个产品(集成后的座舱系统)在一个Sprint内取得的增量。重点不是看每个团队做了什么,而是看整个产品发生了什么变化。
· 总体Sprint复盘会:所有团队一起复盘,找出影响整个产品开发的系统性问题和改进点。
LeSS的优势与挑战:
· 优势:极其简单,管理费用低,强烈鼓励团队协作、消除筒仓,对变化响应极快。
· 挑战:对团队成熟度、自律性和技能全面性要求极高(需要全栈工程师)。在组件依赖性强、安全要求极高的汽车领域,实施难度较大。
---
SAFe vs. LeSS 在智能座舱中的选择
维度 SAFe LeSS
哲学 计划与协调 涌现与适应
结构 结构化、层次化 极简、扁平化
协调机制 通过PI规划、SoS等正式事件 通过团队间直接沟通、共享活动
团队类型 允许特性团队和组件团队共存 强制要求特性团队
适合场景 大型、传统、安全至上的组织,需要整合软硬件和供应商 产品导向明确、团队高度成熟、组织变革决心强的环境
比喻 一列按精密时刻表运行的火车 一支配合默契的爵士乐队
结论:
对于大多数传统汽车制造商和一级供应商而言,SAFe因其提供的结构、规划和协调能力,往往是一个更稳妥、更容易被管理层接受的选择。它能够将MBSE定义的架构、敏捷岛的开发活力、以及安全沙盒的质量管控,有效地整合到一个可预测的发布节奏中。而 LeSS 则更像一个终极理想,适用于那些已经具备深厚敏捷基因并愿意进行彻底组织变革的团队。
4. "敏捷岛"与"安全沙盒"
· 在稳定的架构和预定义的接口之下,各个功能团队(如语音团队、导航团队、仪表团队)可以在自己的"敏捷岛"内使用敏捷方法进行开发。
· 同时,为代码和测试建立"安全沙盒"(如完善的CI/CD流水线、HIL测试台架),确保任何提交的代码都能自动进行基础的功能安全和集成测试,防止敏捷开发破坏系统稳定性。
好的,我们来详细解构这两个核心概念------"敏捷岛" 和 "安全沙盒"。这是在汽车软件,特别是智能座舱这种复杂系统中成功实施敏捷开发的关键模型。
1. "敏捷岛" - 赋予团队在约束下的自由
核心思想: 在预先设定的、稳固的"边界"之内,给予功能团队高度的自治权和敏捷性,让他们能够快速迭代,而不用担心破坏整个系统。
"岛"的边界是如何定义的?
这个"岛"的边界是由系统架构严格划定的,主要包括:
· 预定义的接口:
· API接口: 功能软件层提供的基控API、AI模块API等。例如,导航团队不需要知道语音识别的内部实现,只需要调用 VoiceAssistant.startNavigation(destination) 这个预定义的接口。
· 通信接口: 基于中间件(如AutoSAR、ROS 2 DDS)定义的标准化Topic/Service/Message。例如,仪表团队订阅"车辆速度"这个话题,而不关心数据是来自哪个控制器。
· 数据接口: 明确的数据格式和协议,如CAN/LIN/Ethernet信号数据库(DBC, ARXML文件)。
· 稳定的抽象层:
· 硬件抽象层和操作系统层为上层应用提供了稳定的运行环境。只要++这些抽象层不变,上层应用就可以自由发展。++
"岛"内如何运作?
· 独立的敏捷团队: 语音、导航、仪表每个团队都是一个独立的Scrum或Kanban团队。
· 独立的 backlog 和迭代: 每个团队有自己的产品待办列表,根据自己的节奏进行2-4周的Sprint迭代。
· 专注于业务价值: 团队可以全力优化自己的功能模块(如提升语音识别率、设计更炫酷的动画),而无需被底层细节困扰。
· 可独立演示的增量: 每个Sprint结束时,团队应该能拿出一个可工作的、集成了最新功能的软件版本,并在模拟环境或专用硬件上进行演示。
比喻: 这就像一栋公寓楼。建筑结构和管道线路(系统架构)是固定的、安全的。但每个公寓(敏捷岛)内的住户(开发团队)可以按照自己的喜好和节奏装修家具、安排生活,只要不破坏承重墙和主管道。
---
2. "安全沙盒" - 确保自由不会导致混乱
核心思想: 建立一个自动化的、受控的验证环境 ,任何"岛"上产生的++代码变更,在融入主干之前++ ,都必须在这个"沙盒"中经过一系列严格的自动化测试 ,确保其安全性和兼容性。
++这个"安全沙盒"的本质就是一套高度自动化的 CI/CD 流水线++,并集成了车规级特有的测试手段。
"安全沙盒"的关键组成部分:
1. 持续集成服务器:
· 如 Jenkins, GitLab CI。它监听所有代码仓库的提交(git push)。
2. 质量门禁: 这是"沙盒"的安检系统。每一次代码提交都必须通过以下关卡才能被合并:
· 静态代码分析: 使用 SonarQube, Coverity 等工具,自动检查代码质量、复杂度、是否符合编码规范(如MISRA C/C++),并发现潜在的安全漏洞。
· 单元测试: 自动化运行大量单元测试用例,确保基础逻辑正确。
· 组件测试/集成测试: 在模拟环境中,测试该团队开发的组件与其他组件的交互是否符合接口定义。
· 风格/格式检查: 如使用 clang-format 确保代码风格统一。
3. 自动化测试台架 - 沙盒的核心:
· 硬件在环测试台架: 这是车规级开发的灵魂。当代码通过基础门禁后,CI系统会自动将其部署到一个真实的或代表性的座舱硬件上。
· 做什么? 在HIL台架上运行一整套回归测试用例。这些用例可能包括:
· 功能测试: 新功能是否按预期工作?
· 非功能测试: 性能是否达标(如启动时间)?内存使用是否在预算内?
· 集成测试: 导航的语音指令是否能正确唤醒语音模块并启动导航?
· 诊断测试: 能否正确上报故障码?
· 价值: 在投入昂贵的实车测试前,在实验室里尽可能早地发现集成问题和硬件相关问题。
4. 门禁反馈与报告:
· 任何一步失败,都会立即通知提交代码的团队。报告会明确指出是哪个测试用例失败、性能下降了百分之多少、哪里有内存泄漏等。
· "失败即停止":如果门禁不通过,代码无法合并到主干,从而保证了主干代码的"永远可发布"状态。
---
"敏捷岛"与"安全沙盒"的协同工作流程
我们以一个导航团队想要优化路径规划算法为例:
1. 岛内开发: 导航团队在自己的代码分支上,使用敏捷方法进行开发和初步测试。
2. 发起合并请求: 开发完成后,团队发起一个 Pull Request,请求将代码合并到主干。
3. 进入安全沙盒: CI系统被触发,开始执行"沙盒"流程:
· 步骤1: 自动运行静态代码分析和单元测试。
· 步骤2: 如果通过,CI系统将新代码编译、链接,生成一个完整的系统镜像。
· 步骤3: 将这个新镜像自动刷写到 HIL测试台架 上。
· 步骤4: HIL台架自动执行上千个预定义的测试用例,包括检查新的路径规划算法是否会影响仪表盘的显示延迟、是否会与语音控制模块冲突等。
4. 结果反馈:
· 情况A(通过): 所有测试绿灯。CI系统自动批准合并请求,导航团队的代码被安全地集成到主干。
· 情况B(失败): HIL测试发现新算法导致系统启动时间超过了规定的1.5秒。CI系统标记失败,并生成详细报告给导航团队。团队必须在本"岛"内修复问题后,重新走流程。
总结
· "敏捷岛" 解决了 "开发效率" 问题,通过在稳定边界内授权团队,实现了快速迭代和创新能力 。
· "安全沙盒" 解决了 "系统质量" 问题,通过自动化的、严苛的门禁测试,确保了任何局部的"敏捷"都不会以牺牲整个系统的稳定性、安全性和性能为代价。
二者结合,构成了在现代汽车软件复杂系统中实现 "速度与安全并存" 的工程范式,是"车规级敏捷"得以落地的技术基石。
📋 一个简化的混合开发流程示例
- 概念与规划阶段(瀑布):
· 定义产品路线图、系统架构、安全目标。
· 输出:稳定的系统接口定义、需求规范、安全概念。
- 增量开发阶段(分层敏捷+瀑布):
· 底层团队(BSP, 中间件): 按照V模型进行开发,提供稳定的基础平台和API。
· 上层应用团队(HMI, AI, 应用): 以PI为周期,进行敏捷开发。每个Sprint结束时都能产生一个可演示、可测试的集成版本。
· 持续集成/持续测试: 所有团队的代码都持续集成到一个统一的平台上,并通过HIL、仿真等进行自动化回归测试。
- 系统验证与发布阶段(瀑布):
· 当所有功能开发完成,进入严格的系统集成测试、车辆测试、认证和量产发布阶段。这个阶段变更控制极其严格。
✅ 结论
智能座舱软件开发不仅能用敏捷,而且必须吸收敏捷的核心理念(迭代、反馈、拥抱变化)来应对快速变化的市场需求。
然而,成功的秘诀在于 "混合"------在安全合规和硬件约束的框架内,在架构解耦的基础上,对上层可变度高的软件部分实施敏捷开发, 而对底层基础软件和硬件相关部分采用更传统的、严谨的工程方法。最终通过规模化敏捷框架(如SAFe) 和强大的CI/CD与自动化测试基础设施,将整个价值链有效地串联和协同起来。
架构分成与解耦、基于模型的系统功能与敏捷结合、规模化敏捷框架的应用和敏捷岛与安全沙盒这四者不是四个并列的概念,而是一个从宏观到微观、从规划到执行的完整系统工程体系。它们环环相扣,共同确保了智能座舱这类复杂系统能够高质量、高效率、可预测地完成开发。
让我们先厘清区别,再看它们如何协同工作。
一、四者的核心区别与定位
我们可以用一个 "城市规划与建设" 的比喻来清晰地理解它们的区别:
概念 核心职责 要解决的问题 比喻
-
架构分层与解耦 设计城市布局 系统如何组织才能不混乱、易协作? 城市规划图:划分住宅区、商业区、工业区,并规划好主干道。
-
基于模型的系统工程 制定建筑规范与市政标准 如何确保所有建筑和管道能无缝对接? 市政法规与施工蓝图:定义道路宽度、管道接口、电缆规格,生成标准的施工图纸。
-
敏捷岛与安全沙盒 各区施工与质量监理 如何让各施工队快速干活且不破坏整体? 施工队与监理公司: · 敏捷岛:各区的施工队在蓝图内自由发挥。 · 安全沙盒:监理公司检查每一车建材,确保符合标准。
-
规模化敏捷框架 市政府协调会议 如何让全市几十个施工队步调一致? 市政府协调会:定期开会,同步进度,解决资源冲突,确保所有工程为同一目标服务。
二、四者如何配合:一个完整的智能座舱开发流程
我们以开发一个 "基于AI的疲劳驾驶监测系统" 为例,串联整个流程。
第1步:架构分层与解耦(画城市规划图)
· 活动:系统架构师开始设计。
· 决策:这个功能需要哪些层?
· 硬件层:需要一个新的高性能红外摄像头。
· 系统软件层:需要新的摄像头驱动和安全的视频流处理通道。
· 功能软件层:需要一个新的AI视觉模块来处理视频流,一个驾驶员状态监控模块来做出决策。
· 应用算法层:需要HMI来显示警告,需要决策规划来触发应对措施(如座椅震动)。
· 成果:一张清晰的架构图,明确了各层的边界和职责。AI视觉模块只需要通过标准接口提供"疲劳度分数",而不需要关心数据来自哪个摄像头。
第2步:基于模型的系统工程(制定市政标准与蓝图)
· 活动:在架构图的指导下,进行精细化设计。
· 工具:使用AutoSAR工具(如DaVinci)。
· 决策:
· 创建DriverMonitoring软件组件。
· 为其定义精确的接口:提供一个Sender-Receiver接口,发送DrowsinessLevel信号。
· 定义该信号的数据类型、发送周期、总线路径。
· 成果:一份机器可读的 ARXML文件(市政标准与蓝图)。至此,系统的"契约"被冻结。
第3步:规模化敏捷框架的应用(召开市政府PI规划会)
· 活动:项目启动,召集所有相关方进行PI规划。
· 参与方:产品经理、系统架构师、以及所有团队(AI算法团队、HMI团队、底层BSP团队等)。
· 决策:
· 产品经理:提出"在Q3实现可用的疲劳监测功能"这个特性。
· 系统架构师:展示基于MBSE生成的架构和接口。
· 各团队承诺:
· AI团队(敏捷岛):承诺在本PI内交付准确率>95%的模型。
· HMI团队(敏捷岛):承诺设计并实现警告图标和语音提示。
· BSP团队(偏瀑布):承诺在PI中期提供稳定的摄像头驱动。
· 成果:一份所有团队同步的、未来8-12周的共同计划,明确了谁在什么时候做什么,以及相互间的依赖。
第4步:敏捷岛与安全沙盒(各区分工施工与监理)
· 活动:PI规划会后,各团队回到自己的岗位开始执行。
· 敏捷岛内:
· AI团队:使用Scrum,每两周一个Sprint,迭代训练和优化他们的神经网络模型。他们不需要等待HMI团队,因为接口已经由MBSE定义好了。
· HMI团队:并行开发UI,他们创建一个模拟的AI模块,按照ARXML契约虚假地返回疲劳度数据,从而独立进行开发和测试。
· 安全沙盒监管:
· 当AI团队完成一个模型更新后,提交代码。
· CI/CD流水线(安全沙盒)启动:
-
静态代码分析(检查代码规范)。
-
自动生成代码:利用MBSE产生的ARXML,生成最新的系统集成代码。
-
HIL测试:在台架上自动运行回归测试,确保新的AI模型没有导致系统延迟增加,或与HMI的通信出现错误。
· 结果:如果测试通过,代码自动集成;如果失败,立即通知AI团队修复。确保了"岛"内的快速迭代不会破坏"大陆"的稳定。
第5步:循环与集成
· 在每个Sprint结束时,各团队会演示自己的进展。
· 在PI结束时,所有团队的工作被集成到一起,在真实的座舱硬件上进行一次完整的系统演示,展示从摄像头捕捉到最终HMI警告的端到端功能。
· 基于演示的反馈,新一轮的PI规划又开始(回到第3步),可能新的特性是"优化警告时机"或"增加多种警告方式",整个闭环流程再次运转。
总结:四者的共生关系
· 架构分层与解耦是骨架,它奠定了系统的基本结构,是其他一切活动的基础。
· 基于模型的系统工程是契约,它将架构转化为精确、无歧义的工程规范,为并行开发提供了可能。
· 敏捷岛与安全沙盒是血肉与免疫系统,它们在骨架和契约的约束下,赋予系统快速成长和演进的能力,同时保证其健康与稳定。
· 规模化敏捷框架是神经网络,它将所有部分有机地连接起来,进行高效的指挥和协调,确保整个系统作为一个整体朝着共同的目标前进。
它们的关系是:缺一不可,层层支撑。 没有架构和MBSE,敏捷岛会陷入混乱;没有安全沙盒,敏捷岛会制造灾难;没有规模化框架,各岛屿将无法同步,最终无法形成统一的产品。