敏捷:应对软件定义汽车时代的开发模式变革

news2024/11/25 6:57:02

随着软件定义汽车典型应用场景的落地,汽车从交通工具转向智能移动终端的趋势愈发明显。几十年前,一台好车的定义主要取决于高性能的底盘操稳与动力系统;几年前,一台好车的定义主要取决于智能化系统与智能交互能否满足终端用户的用车体验;相信不久后的将来,一台好车的定义将变成:全车传感器与数据驱动方式定义智能移动终端。本文将从开发模式变革来讨论软件定义汽车所需要的改变,并介绍软件定义汽车模式下的典型应用场景。

1.开发模式变革

传统汽车的软件开发采用 V 字形瀑布式开发模式,如下图所示。

由于各开发部分之间相对独立,更多只是在部分内部展开局部性优化,缺乏系统级平台级的开发全局观,很难做到整体优化。同时,各部分的开发时间并不全然一致,进度顺序依赖很容易造成队列效应,一旦出现某个部分开发发生延误时,便会影响整体的开发进度。每个阶段都过于依赖上个阶段成果,就会导致开发成本较高且周期过长,与“软件定义汽车”涉及的【缩短产品上市周期、产品基于消费者需求、支持不断的迭代、对市场需求迅速响应】等要求相矛盾。

▲传统 V 字瀑布式开发流程图

因此,软件定义汽车背景下,汽车软件开发将由传统的瀑布式开发向敏捷开发模式转变。敏捷式开发模式既有利于达到密切的协调合作,最大限度地减少管理成本,同时因其灵活的工作模式能够使开发团队与用户实现高度互动,采用最低可行性产品的形式快速满足用户需求,并在使用中不断创新迭代,实现持续开发、持续集成、持续交付,体现软件定义汽车的优势。主要体现如下:

软件开发流程

传统控制器的开发,遵循 V 型开发流程,以整车厂的需求为输入,考虑信息安全和功能安全,严格执行设计、实现、验证的完整流程,最终也以控制器为对象完成需求的验收,有利于保障需求的完整实现。同时,整个流程也有质保、流程、售后等部门参与其中进行评审和审核,以此形成良好的质量管理和质量保证体系。但整个流程相对封闭,不符合软件快速迭代的开放性和扩展性要求。

开发交付方式

传统汽车软件的开发场景明确,软件与硬件紧密耦合,对于嵌入式软件的交付,并没有明确的“软件交付”的概念,软件随着控制器硬件一起交付。技术层面来看,应用软件与基础软件一起集成和固化,有着明确统一的释放节点。随着软件定义汽车时代的到来,“软硬分离,软软分离”逐渐成了主旋律,嵌入式软件从依附于硬件的一堆“代码”真正脱胎换骨为独立可售卖的产品;且这项产品可以在整个车辆的生命周期内持续产生价值。从嵌入式软件开发和验证的技术层面,这样的趋势使得软件要能够快速迭代,持续更新持续交付。

项目管理

在传统控制器开发中,在项目前期形成相对完备的系统架构和软件架构,再向下分解到软件组件,经由详细设计到达软件开发。这样的开发模式适合控制器的产品形态,依赖成熟技术的完整积累。面向开放架构/持续交付的软件特性,在项目管理上,敏捷成为了关键词,软件交付不再是统一固定的交付节点,软件模块在整个车辆生命周期都有新增的机会:模块化软件具备单独交付的条件和场景,随之而来的是软件的设计/开发/测试/验证的节点也随之迭代起来,变化和持续交付是常态,这对整体的软件项目管理提出了更高的要求。

综上,汽车软件开发模式由传统的瀑布式开发向敏捷开发模式的变革,将为软件定义汽车落地面带来巨大挑战。

2.敏捷:应对软件定义汽车时代的开发模式变革

在应对上述变革的诸多方案中,CI/CD是不可忽视的敏捷属性。

不同的汽车ECU提供不同的服务,对底层操作系统给的要求也不同。在电子电气系统架构从分布式向域集中式演进的大背景下,各种功能模块都集中到少数几个计算能力强大的域控制器中。如何在域控制器中使用CI/CD的敏捷方法,助力软件的开发、测试和验证呢?

▲智能汽车软硬件架构

国产自主可控的天目全数字实时仿真软件SkyEye,可以通过全数字仿真技术,实现汽车所需嵌入式软件的敏捷开发。基于SkyEye所搭建的嵌入式系统虚拟化运行环境,工程师可不受物理硬件限制,随时访问目标系统,快速搭建虚拟硬件模型并提前进行开发、测试和验证工作,实现高效率、高质量的软件交付。

同时,SkyEye支持主流的嵌入式硬件平台,可运行国内外主流的操作系统,对国产生态的支持尤为出色。通过利用基于LLVM的动态二进制翻译技术,SkyEye可使虚拟处理器在典型的桌面计算机上运行速度达到2000MIPS以上。

基于SkyEye的虚拟硬件和CI/CD工作流紧耦合,可应用于汽车软件开发的全生命周期:

▲CI/CD流水线

参考文献

软件定义汽车产业生态创新白皮书V1.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java:多线程 的三种实现方法

文章目录 什么是多线程多线程 三种 实现方法继承 Thread 的方法实现 Runnable接口 的方法实现 Callable接口 并利用 FutureTask类 来接收返回值 的方法我的理解 和 总结 什么是多线程 简单理解:进程就是一个运行的软件,而线程是软件中的一个功能&#x…

解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined

现象: 原因: 该错误表明在服务端渲染 (SSR) 过程中,有一些代码尝试在没有浏览器环境的情况下执行与浏览器相关的操作。这在服务端渲染期间是一个常见的问题,因为在服务端渲染期间是没有浏览器 API。 解决办法: 1. 修…

比例压力阀电子控制器DBET-6X/315YG24K4V

DBET-6X/350G24K4V、DBET-61/315YG24K4V、DBET-6X/200G24K4V比例阀放大器模块将啮合在符合EN60715标准的导轨上。通过各端口的插入式螺钉连接器进行电气连接。该模块以24VDC直流电压运行。内部供电设备提供了所有内部所需的正和负电源电压。 该放大器装在一个支架道轨上&#…

可编程电子负载的应用前景如何

可编程电子负载是一种模拟真实负载的电子设备,它可以模拟各种不同类型和规格的负载,如电阻、电容、电感等。通过可编程的方式,用户可以根据需要灵活地调整负载的大小、电压、电流等参数,以满足不同的测试需求。随着科技的不断发展…

软件工程之系统质量

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一 、质量标准化 1.什么是质量标准化 通过标准化各条业务线的研发流程,以做的比较好的业务线作为标准样板间,规范出一套标…

【PyQt学习篇 · ⑫】:QVBoxLayout和QHBoxLayout布局管理器的使用

文章目录 QVBoxLayout和QHBoxLayout的介绍.addStretch()的使用方法.setSpacing()方法的使用.setAlignment()的使用.setFixedSize()的使用QMainWindow中使用布局管理器 QVBoxLayout和QHBoxLayout的介绍 QVBoxLayout 和 QHBoxLayout 是 PyQt 中用于实现垂直和水平布局的两个布局…

平台工程文化:软件开发的创新路径和协作之道

在快速发展的软件开发领域,具有前瞻性思维的企业组织正在拥抱平台工程文化的变革力量。这种创新方法强调创建共享平台、工具和实践,使开发人员能够更快、更高效地交付高质量的软件。在本文中,我们将深入探讨平台工程文化的核心原则和深远的好…

【Docker】从零开始:15.搭建亿级数据Redis集群之哈希算法概念

【Docker】从零开始:15.搭建亿级数据Redis集群之哈希算法概念篇 概述一般业界的3种解决方案1.哈希取余分区优点:缺点: 2.一致性哈希算法分区背景目的原理一致性哈希环节点映射key落到服务器的落键规则 优点容错性扩展性 缺点 3.哈希槽分区背景…

4WRPH6C3B24L-2X/G24Z4/M伺服比例方向阀控制板

4WRPH6C3B12L-2X/G24Z4/M、4WRPH6C3B40P-2X/G24Z4/M、4WRPH6C3B40L-2X/G24Z4/M、4WRPH6C4B24L-2X/G24Z4/M、4WRPH6C4B40L-2X/G24Z4/M、4WRPH6C3B24L-2X/G24Z4/M、4WRPH10C4B100L-2X/G24Z4/M、4WRPH10C3B100L-2X/G24K0/M-750适合控制4WRPH系列比例伺服阀,用于安装在架…

AOP记录操作日志

创建数据库表 -- 操作日志 create table operate_log (id int unsigned primary key auto_increment commentid,operate_user int unsigned comment 操作人员Id,operate_time datetime comment 操作时间,class_name varchar(100)comment 操作类,method_name varchar(100)comme…

全国各省市城市地级市自治州盟地区369个城市年度平均气温数据(2001-2022年)

这份包含369个城市平均气温数据的数据集(2001-2022年)是基于美国国家海洋和大气管理局(NOAA)下属国家环境信息中心(NCEI)提供的原始数据编制而成的。利用气象观测站点的这些栅格图和全国地级市的行政边界数…

ospf选路

问题描述 R6通过主备份路径访问LSP(R1),主为R2, 备为R3 解决方案 路由器1看作LSP,配置loopback 0 ,地址为1.1.1.1 供测试使用;路由器 236, LSW4和LSW5, 运行ospf处于相同区域,建立…

【SpringCloud篇】Eureka服务的基本配置和操作

文章目录 🌹简述Eureka🛸搭建Eureka服务⭐操作步骤⭐服务注册⭐服务发现 🌹简述Eureka Eureka是Netflix开源的一个基于REST的服务治理框架,主要用于实现微服务架构中的服务注册与发现。它由Eureka服务器和Eureka客户端组成&#…

怎么安装Element组件库?

先创建一个项目 1.现在桌面创建一个文件夹 2.窗口里面输入vue ui,打开vue图形页面 3.创建项目 4.接下来只要等待就行了 到这里很多人会发现自己没有NPM脚本这个女选项,这时候我们要点击package.json他才会出来 到此,就已经创建好了 &#…

幽灵鲨crm助力企业轻松进行客户管理

当今竞争激烈的商业环境中,有效的客户管理是企业成功的关键之一。幽灵鲨CRM应运而生,致力于为企业提供便捷、智能的客户管理解决方案,助您轻松驾驭客户关系,开拓更广阔的市场。 解放您的管理压力 幽灵鲨CRM集客户信息、沟通记录、…

C++中单引号‘‘和双引号““的区别

操作系统:Windows 10 IDE:CLion 单引号:表示一个字符,例如 a 双引号"":表示一个字符串,例如 "a" 在C中,使用双引号可以方便地创建字符串,而使用单引号可以方便…

C++基础 -45- 类的静态数据成员

类的静态成员不包含在对象空间内 举例验证 定义普通变量和静态的变量 输出可知静态成员并没有占用类空间 静态数据成员的赋值&#xff08;必须类外赋值&#xff09; int base:: b 100;静态数据成员的访问&#xff08;不需要先定义对象&#xff09; int main() {cout <…

算法通关村——原来这就是堆

堆结构是一种非常重要的基础数据结构&#xff0c;也是算法的重要内容&#xff0c;很多题目甚至只能用堆来进行&#xff0c;所以我们必须先明确什么类型的题目可以用堆&#xff0c;以及如何使用堆来解决。由于堆的构造和维护过程都非常复杂&#xff0c;因此面试时一般不需要手写…

28、pytest实战:获取多用户鉴权

前提 测试过程中有用户体系&#xff0c;例如包括管理员、商家、用户角色&#xff0c;不同测试用例需要使用不同角色来操作&#xff0c;操作权限根据用户的鉴权来判断实现。 技能点 建立全局变量文件&#xff0c;保存账号相关信息获取鉴权信息变为module级别fixture&#xff…

Linux-centos上如何配置管理NFS服务器?

Linux/centos上如何配置管理NFS服务器&#xff1f; 1 NFS基础了解 NFS&#xff08;Network File System&#xff09;即文件操作系统&#xff1b;NFS允许网络中不同计算机相互之间共享资源。 1.1 NFS概述 1980年由SUN发展出来的在UNIX&Linux系统间实现文件共享的一种方法…