1. 座舱软件CI/CD现状与痛点
大家好,我是老张。在座舱领域摸爬滚打了十几年,今天想跟大家聊聊一个绕不开的话题——持续集成。说白了,就是怎么让我们的座舱软件交付得更快、更稳。
你可能会问:现在不是已经在用Git、Jenkins了吗?为什么还要专门讲这个?嗯,这里面的门道,还真不少。
1.1 传统座舱开发流程:一个真实的“慢动作”
先说说传统流程。我2015年参与过一个量产项目,那会儿的流程大概是这样的:
- 需求分析:产品经理写PRD,评审,改,再评审……
- 架构设计:架构师画框图,评审,改,再评审……
- 模块开发:每个工程师领自己的任务,埋头写代码。
- 单元测试:写完代码,自己测一测,能跑就行。
- 手工集成:每周五下午,大家把代码合并到一起。
- 集成测试:测试团队拿到集成版本,开始手工点点点。
- 系统测试:整车测试,发现bug,打回,修复,再集成……
- 发布:终于可以发布了,但往往已经延期了。
你想想看,这个流程里最慢的是哪一步?
核心痛点:手工集成是最大的瓶颈。 我见过一个项目,集成阶段占了整个开发周期的40%以上。
1.2 手工集成的五大痛点
我在好几个项目里都踩过这些坑,一个一个说。
痛点一:集成冲突,谁改的谁负责?
我记得有一次,A工程师改了HMI的布局,B工程师改了底层通信协议。两人各自开发了两个月,一合并——完蛋,界面卡死了。为什么?因为A的布局依赖了B的某个接口,但B把接口改了。这种问题,手工集成时几乎每周都会遇到。
- 冲突发现晚:代码合并时才发现,但已经过去好几周了。
- 责任不清:谁改的?谁该修?扯皮半天。
- 修复成本高:改一个接口,可能影响十几个模块。
痛点二:回归测试,测一次要三天
手工测试座舱功能,你知道有多慢吗?一个典型的座舱系统,包含导航、音乐、电话、设置、车辆控制等十几个模块。每个模块又有几十个功能点。测试团队手工点一遍,至少需要两天。如果发现bug,修复后还要再测一遍。一个版本迭代,光测试就要一周。
我曾经见过一个项目:因为回归测试太慢,团队干脆不测了,直接发布。结果呢?OTA升级后,用户的车机黑屏了。紧急召回,损失惨重。
痛点三:环境不一致,开发环境能跑,集成环境就挂
这个我太有感触了。开发工程师在自己的电脑上跑得好好的,一提交到集成服务器,编译报错。为什么?因为开发环境是Ubuntu 18.04,集成环境是Ubuntu 20.04,库版本不一样。或者,开发用的模拟器,集成用的是真机,驱动不兼容。
| 环境类型 | 常见差异 | 后果 |
|---|---|---|
| 操作系统 | Ubuntu 18.04 vs 20.04 | 库版本不兼容,编译失败 |
| 编译器 | GCC 7 vs GCC 9 | 语法差异,链接错误 |
| 硬件平台 | 模拟器 vs 真机 | 驱动问题,性能差异 |
| 依赖服务 | 本地数据库 vs 集成数据库 | 数据不一致,功能异常 |
痛点四:反馈周期长,改一个bug要等一周
你想想看,开发工程师提交代码后,要等集成、测试、反馈,这一圈下来,少则三天,多则一周。等bug反馈回来,开发可能已经在做另一个功能了,上下文切换的成本极高。
为什么会这样?因为手工流程里,每个环节都是串行的。开发→集成→测试→修复→再集成→再测试……任何一个环节卡住,整个流程就停了。
痛点五:质量不可控,发布全靠“赌”
我记得2018年有个项目,发布前一周,测试团队发现了一个严重的内存泄漏。修复后,又引发了另一个bug。最后,项目经理拍板:先发布,后续OTA修复。结果呢?用户投诉率飙升,品牌口碑受损。
我的建议是:不要等到发布前才做质量检查。质量应该是“内建”的,而不是“检测”出来的。
1.3 为什么需要加速?三个不得不说的理由
你可能觉得,慢就慢点吧,反正项目总能交付。但现实是,市场不等人。
理由一:座舱功能复杂度爆炸式增长
十年前,座舱就是收音机+导航。现在呢?多屏互动、语音助手、手势控制、AR导航、车载微信、游戏……功能越来越多,代码量越来越大。一个中高端座舱项目,代码量轻松超过1000万行。手工集成?根本玩不转。
理由二:交付周期被压缩到极致
传统车企的车型开发周期是3-5年。现在呢?新势力车企把周期压缩到了18个月。座舱软件作为用户感知最强的部分,迭代速度更快。有些项目,每两周就要发布一个OTA版本。手工流程根本跟不上。
理由三:竞争压力倒逼效率提升
你想想看,如果竞争对手每个月都能推出新功能,而你还在手工集成、手工测试,你怎么跟人家竞争?这不是技术问题,这是生存问题。
一句话总结:座舱软件交付的瓶颈,不在开发,而在集成。加速集成,就是加速交付。
1.4 一张图看懂座舱CI/CD现状
下面这张图,是我根据多个项目经验总结的。它展示了传统座舱开发流程中,各个阶段的时间占比。
1.5 小结:痛点即机会
说了这么多痛点,不是为了抱怨。恰恰相反,我认为这些痛点就是我们的机会。
- 手工集成慢?那就用自动化CI/CD来加速。
- 回归测试慢?那就用自动化测试来替代。
- 环境不一致?那就用容器化来统一。
- 反馈周期长?那就用持续集成来缩短。
- 质量不可控?那就用质量门禁来把关。
我个人习惯是:每到一个新项目,第一件事就是看他们的集成流程。如果还是手工的,我会建议团队立刻上CI/CD。别怕改变,改变带来的收益,远大于成本。