软件能力不仅体现在高质量的软件产品上,还体现在软件产品的快速迭代上,软件工厂概念应运而生。软件和硬件开发过程正在逐步解耦,软件需要快速迭代以满足用户对于功能升级的需求。确保开发人员拥有更好的工具、流程和方法,以高效地创建、测试和更新软件,这是整个行业的首要任务。软件工程师需要探索如何将持续集成、交付的敏捷开发理念与传统V开发模型相结合,以获得软件开发效率和质量的平衡。
在刚刚结束的上海MATLAB EXPO用户大会上,极氪汽车作了“基于模型开发车载OS环境下的SOA应用软件”演讲,就汽车软件如何融合更多新功能、快速交付迭代、降低开发成本、减少开发周期和安全可靠等各大主机厂关心并亟待解决的话题,分享了实践经验。
面向服务的架构:软硬解耦,软软解耦
智能汽车多样化的场景模式,无论是刺激的超跑模式还是舒心的小憩模式,这些功能的背后都离不开强力的底层构建——SOA原子服务的支持。SOA把软件模块应用化,变成一个个APP嵌入到各控制器中。
电子电气架构从分布式到域集中式,再到中央集中式,功能大幅增加带来整个系统的复杂度大幅上升,随之而来的是ECU也从传统的MCU演化到“MCU+SoC”的异构分布式系统。
为了更快速地满足功能快速迭代的要求,一方面要从传统的面向信号的开发逐步转向面向服务的设计开发,另一方面要做到尽量解耦。这里的解耦既包括硬件和软件功能的解耦,也包括软件分层设计的解耦,例如操作系统内核和中间件的解耦,中间件和应用层的解耦。首先要做到充分解耦,才能保证硬件、软件分别快速迭代,缩短开发周期,快速满足用户需求。
如何做到解耦,保证快速迭代?带给整车软件开发的一个重要变化便是通过面向服务的架构(SOA),不但可以使应用软件与硬件,以及应用软件与应用软件之间松耦合,有利于软件的开发和维护,还可以使车端软件、通信、信息安全能和云端环境产生很好的协同,实现一整套车云生态环境。
极氪科技上一代电子电气架构通过4个功能域主控,实现对执行传感层硬件的控制,在架构设计上为SOA提供了良好的基础。
虚拟车辆仿真:缩短开发周期,降低成本
以前经常听到,有人在评价一款车的时候,说这款车不错,就是小毛病有点多。这里说的小毛病,很多都是和软件没有经过充分验证相关的。
有数据显示,目前自动驾驶算法测试大约有90%是在仿真平台完成,9%在测试场完成,1%通过实际路测完成。在自动驾驶中,实际道路遇到的场景无所穷尽,实车测试很难囊括所有可能出现的场景,这时在虚拟仿真平台上的试验就显得尤为重要。
随着汽车行业的变革和技术进步,OEM开始引入敏捷开发的方式、自动化测试和持续集成、云计算和虚拟化,以缩短软件开发周期。其中,对集成和验证影响最大的就是车辆虚拟和仿真技术。
虚拟车辆仿真系统必须依赖强大的集成仿真平台开展原型设计、虚拟标定和虚拟验证,利用集成仿真实现最大程度的流程前置,可以大幅缩短开发周期和降低成本。在打造整车级仿真方案过程中,极氪汽车充分利用MATLAB和Simulink丰富的开箱即用功能,可实现快速创建虚拟车辆。
开发运营:缩短交付时间
最近几年里,很多车企宣称自己是面向软件定义的车企,开始了持续集成(CI)、持续交付(CD)的过程,走得更快的车企已经开始做开发运营(DevOps)。DevOps(Development和Operations的混成词)意为开发运营,即一边开发一边运营,将运营过程中收集到数据反馈给开发,开发则不断迭代软件。
汽车软件的特点是开发成本很高,需要大量的代码开发、集成和交付,使用DevOps系统可缩短从提交代码到产品更新的时间,加快开发速度并减少错误,通过持续集成、自动化测试、静态代码扫描和定制化的监测告警系统,确保软件高质量、高安全交付。
为了实现这些目标,主机厂及其供应商会选择合适的代码检查工具,如使用静态代码分析工具Polyspace,检查编码是否规范、是否有安全漏洞等软件缺陷。
极氪汽车自研了一套自动化单元测试和服务验证工具,生成的代码通过这些工具验证,确保可执行程序可以稳定、可靠地在系统中运行。同时,极氪汽车也将模型的开发集成验证整合到了极氪的DevOps体系中。
V模型+敏捷开发:保证功能安全
软件定义汽车的发展带来了很多创新,例如自动驾驶和车辆控制,但也给功能安全带来了相当大的挑战,软件架构则由经典的AutoSAR向异构分布式整车OS、SOA快速拓展。这给传统功能安全分析方法、软硬件安全设计理念、安全验证体系和工具链安全的建设带来了新的挑战及不确定性。如何快速实现上述新电子电气架构、软硬件架构和软件中间件在车端应用的同时,保证其安全性和可靠性?
“没有经过测试的系统都是有问题的系统。”软件定义汽车的危机,本质上是测试的危机。
汽车行业最常见的汽车软件开发过程遵循V模型,从需求到源代码,每一个开发阶段都有相应的测试,下一个阶段依赖上一个阶段的输出。随着汽车系统的复杂性呈指数级增长,传统的软件开发过程不能满足动态市场的需求,敏捷开发应运而生。它“应对变化而不是遵循计划”,允许软件的增量开发,并在迭代中开发软件、在增量中交付软件,实现小步快跑、不断迭代,而不是在开发过程结束时一次性交付所有软件。
目前,极氪的软件开发采用的是“V模型+敏捷模式”相结合的方式,既在整车开发上保留了V开发模式,又在具体的需求实现上有了一定的灵活性,在软件产品快速交付的同时又能确保安全可靠。