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

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

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.rhkb.cn/news/211687.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM;超越记忆《第 2 部分 》

一、说明 在这篇博客中,我深入研究了将大型语言模型(LLM)提升到基本记忆之上的数学框架。我们探索了动态上下文学习、连续空间插值及其生成能力,揭示了 LLM 如何理解、适应和创新超越传统机器学习模型。 LLM代表了人工智能的重大飞…

Linux常用指令详解

目录 前言: Linux的目录结构 Linux常用指令简介 whoami指令 ls指令 pwd指令 cd指令 tree指令 touch指令 mkdir指令 rmdir指令与rm指令 man指令 cp(copy)指令 mv(move)指令 cat指令 重定向及重定向的类型…

Redis缓存问题

在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库 MySQL 配合使用。 Redis 会把 MySQL 中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候&#xff0c…

12月8日Workshop预告|理解Sui上对象所有权转移

在本workshop中,我们将介绍一些Sui上对象所有权转移(transfer-to-object)功能的示例,并讨论这个新功能在构建Sui上新的抽象化概念时的用途。 我们将通过几个示例来演示transfer-to-object功能。此外,我们将介绍如何使…

时间序列预测 — GRU实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 数据集简介 1.2 导入库文件 1.3 数据集处理 1.4 训练数据构造 2 模型训练与预测 2.1 模型训练 2.2 模型多步预测 2.3 预测可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集7:常州普利司通光伏数据集(下载链接&…

动态规划学习——最长回文子序列,让字符串变成回文串的最小插入次数

一,最长回文串 1.题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入&…

搞程序权益系统v1.1

继1.0出来后我就把antdui换成elem 新增号卡功能现在只支持对接号氪系统 大家问我这个程序到底有什么用,我这边已经在写和WordPress对接文件,到时候在WordPress网站打开该程序就可以把订单同步到你的程序里面去,当然自己有集成能力也可以到小…

R语言学习

Part1阶段1:入门基础 1安装R和RStudio: 下载并安装R:https://cran.r-project.org/ 下载并安装RStudio:https://www.rstudio.com/products/rstudio/download/ 2Hello World: 学习如何在R中输出"Hello, World!"…

【智能家居】一、工厂模式实现继电器灯控制

用户手册对应的I/O 工厂模式实现继电器灯控制 代码段 controlDevice.h(设备设备)main.c(主函数)bathroomLight.c(浴室灯)bedroomLight.c(卧室灯)restaurantLight.c(餐厅…

mac电池最大充电限制工具 AlDente Pro中文 for Mac

Pro 版特有功能 热保护:在电池温度较高时为电池充电会导致电池老化更快。启用热保护后,当电池温度过高时,充电将自动停止。 航行模式:通常情况下,即使激活了最大电池充电,您的 MacBooks 电池也会始终稍微充…

Guava中的函数式编程

第1章:引言 大家好!今天小黑要和咱们聊聊,在Java中使用Guava来进行函数式编程。首先,让我们来聊聊什么是函数式编程。简单来说,函数式编程是一种编程范式,它将计算视为函数的评估,避免使用程序…

ChatGPT能帮助--掌握各种AI绘图工具,随意生成各类型性图像

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

西南科技大学C++程序设计实验六( 继承与派生一)

一、实验目的 1. 理解不同继承属性对派生类访问基类成员的区别 2. 掌握单继承程序编写 二、实验任务 1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,B以public方式继承A) 重点:理解不同继承方式数据的访问权限,派生类…

【力扣】——可获得的最大点数(滑动窗口)

几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…

HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)

HarmonyOS(二) 初识ArkTS开发语言(下)之TypeScript入门 声明式UI基本概念 应用界面是由一个个页面组成,ArkTS是由ArkUI框架提供,用于以声明式开发范式开发界面的语言。 声明式UI构建页面的过程&#xff…

gitLab 和Idea分支合并

以下二选1即可完成分支合并建议第一种简单有效 Idea合并方式 切换到被合并的分支,如我想把0701的内容合并到dev,切换到dev分支,然后再点击merge然后选择要合并的分支,即可,此时git上的代码没有更新只是把代码合到本地需要pull才…

Kafka使用指南

Kafka简介架构设计Kafka的架构设计关键概念Kafka的架构设计关键机制 Partition介绍Partition工作机制 应用场景ACK机制介绍ACK机制原理ACK机制对性能的影响ACK控制粒度Kafka分区数对集群性能影响调整分区优化集群性能拓展Kafka数据全局有序 Kafka简介 Kafka是由Apache软件基金…

【数据结构】动态规划(Dynamic Programming)

一.动态规划(DP)的定义: 求解决策过程(decision process)最优化的数学方法。 将多阶段决策过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。 二.动态规划的基本思想: …

【CentOS8】使用 Tomcat 部署 Java Web 项目(使用 sdkman)

文章目录 配置 Tomcat将 Tomcat 启动命令设置为 Linux 自定义服务给 Tomcat 设置管理员账号密码IDEA 打包 Java web 项目 我是使用 sdkman 下载的 jdk 和 tomcat,所以接下来的部署配置都是在 sdkman 构建的环境的。想要知道如何下载 sdkman 可以看看这篇文章 —…

【开源】基于Vue+SpringBoot的用户画像活动推荐系统

项目编号: S 061 ,文末获取源码。 \color{red}{项目编号:S061,文末获取源码。} 项目编号:S061,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活…