干货 | 汽车行业研发效能提升的挑战与实践案例

在 9 月 15 日的第七届 CSN 大会上,思码逸研发效能专家王艳萍受邀分享了《汽车行业研发效能提升的挑战与实践案例》。演讲包含了思码逸对多家汽车企业服务过程中总结出的行业痛点、解决方案,以及实践案例。

以下为演讲实录:

思码逸与很多知名汽车企业都有合作。我们这次的演讲会先简单介绍一下思码逸,然后重点分享我们与汽车企业在研发效能层面的实践,汽车软件研发效能与传统软件研发效能的差异,以及在汽车行业中,软件研发效能度量的痛点与解决方案等。

思码逸成立于 2018 年,专注于软件研发效能度量与分析。基于深度代码分析技术,思码逸产品从代码和 DevOps 工具链中提取数据,呈现研发效率、软件工程质量、组织与人才发展等多视角数据洞察,提高研发过程可见性,辅助团队决策,推动开发者自驱成长。

思码逸独有的研发效能指标“代码当量”已经作为核心指标,被信通院采纳。我们也受信通院邀请,与京东、腾讯、百度、网易等等 40 多家公司,一起起草了《软件研发效能度量规范》

我们目前服务了上百家企业,其中来自汽车行业的包括理想、蔚来、宝马、保时捷、沃尔沃等。

汽车行业的软件研发效能特征与挑战

相比传统的软件研发,汽车软件的研发会更加复杂,主要体现在两方面,一方面是项目复杂,另一方面是人员复杂。

首先,项目方面存在以下特点:

体量大:规模大、交付周期长,子项目类型多

版本众多:为了适配各种硬件,需要更多版本,所以每个版本中的模块复用度高。一旦模块底层需要修改,那么带来的技术维护难度大,所以有更高的质量要求。

嵌入式开发:软硬结合的开发方式,在软件测试时,需要适应物理环境及硬件接口,所以会导致测试效率比传统软件开发要慢。

安全性要求高:相比传统软件开发,汽车软件对安全的要求非常高, 包括功能安全、网络安全等,一旦出现问题,就可能危及用户生命。

由于项目的复杂度高,所以相应地会在人员上带来更高的复杂度,主要体现在两方面。一方面是人员构成比较复杂,不仅有公司内部的研发团队,还有外包团队。在人员岗位上,除了传统的前端、后端、算法,还会包含嵌入式开发等硬件相关的研发人员。

基于以上特点,汽车软件研发对效能度量的要求会比较高。我们总结了一下我们客户经常遇到的研发效能度量的诉求。

首先由于研发项目体量大,所以即使效率提升一个百分点,也可以节省巨大的成本。所以第一个诉求就是“提升整体效率,做更准确的需求预估”。另一个诉求,就是“及时判断卡点,找到影响交付速度的关键因素”,从而提升项目整体的效率。

因为整个软汽车行业对安全可靠性的要求非常高,这就要求我们能在整个研发过程中及时地发现问题,保证可以在最终测试和交付之前解决掉关键问题,而不是在最后发现问题,再回过头去修改。

在人员管理方面,主要诉求就是“建立考核标准,制定研发流程规范”,通过科学的方法来管理复杂的团队。

最后从项目和人员管理两个角度综合来看,还有一个诉求就是“合理调配资源,避免忙闲不均或者资源错配带来的浪费”。

由这些诉求出发,结合我们与多个汽车企业合作的经验来看,我们可以看到汽车行业做研发效能度量的四个难点:

  • 第一,数据分散。研发数据可能分散在多个不同的工具中,整合数据是一个难点。

  • 第二,缺少可靠的数据基础指标。例如要统计这个工时内完成了多少需求、功能点,这些数据的填写大多是依赖个人主观判断的,所以没有统一的标准,那么这就给后续的数据分析带来难题。同时,还有大量的代码复用、功能点大小不一等问题,都是由于缺少基础的指标。

  • 第三,分析维度、视角多。一个项目可能会涉及到多个子项目、版本,每个子项目背后可能还有不同的团队、不同的人。在团队中,高层、中层对项目的关注点都不同,所以会涉及到非常多的维度和视角。我们有很多客户都是说“我们有很多指标,但就是用不起来”,其背后的原因就是因为你给出分析结果,并不一定是这个管理者或角色他想看到的。高管不希望看到那么多细节信息,而基层管理者却希望从细节中发现改进点。

  • 第四,定位问题困难。由于项目周期长、项目复杂度高,甚至可能还会涉及到较多的外包资源,所以很难快速地定位问题。

解决方案与实践案例

我们为汽车行业提供了这样一套解决方案,如下图所示。我们从数据采集、建模、指标体系,到分析,提供了一套全流程的度量与分析平台。我们已经把常用的代码仓库、项目管理工具、质量扫描工具和 CI/CD工具的数据接口打通了,可以通过简单配置就将数据接入进来。如果你使用的是我们还未支持的工具,也可以通过 CSV 的形式将数据导入到平台中。我们的平台会清洗数据,并基于数据建模输出事务管理、代码效率、质量管理等模型。

在平台中,我们根据对上百家企业的服务经验,默认预置了 100+研发效能指标,根据你的模型会推荐一些指标,并支持用户自定义指标。

在分析层面,我们支持根据不同角色进行多维度的数据展示和分析。如果是需要了解更多细节信息的管理者,还可以针对数据进行下钻分析,直至找到问题的根源。

另外,我们还提供一些行业基线和组织基线,让你可以知道目前团队的研发效能、项目质量在行业中所处的水平是怎样的,以及与自身相比是否在持续进步,甚至于公司内其他团队相比处于什么样的位置。为了让管理者更容易去分析数据,我们还在平台中提供了智能专家系统,来辅助解读数据指标和现状。

我们已经把大部分的高频指标都放在平台中了。我们简单介绍一下核心指标“代码当量”。大家可以将它理解为与“代码行数”对标的一个指标。但是代码行数可能会遇到空行、注释、第三方引用等。这让代码行数无法真实体现产出效率。“代码当量”是基于深度代码分析专利算法产生的,它会将代码书写过程中这些“水分”挤掉,而且这套算法的计算机制较为复杂,所以很难造假,可以提供更客观的度量数据。

下面我们举几个例子。我们平台提供了 30 多种图表的展示,图中的一些异常点都可以直接点击进去看更深层的数据,进行下钻分析。用户可以根据不同管理者的需求定制自己的看板。比如高层关注整体的指标,可以看 ROI、整体交付速度、交付效率,以及资源配置是否均衡等。

对于项目经理或团队 Leader,可以关注团队的项目进展等更细的数据。例如下图左边的交付效率中,处于右下角的“后端团队”的交付效率就比较低,那么点击它,就可以进一步下钻寻找原因。那这个原因到底是什么?有可能是某一个地方遇到了卡点,或者是这个需求涉及的产品设计时间比较长,也有可能是需求颗粒度不稳定,所以他交付的需求少,还有可能是遇到了比较大的 Bug 需要较长的时间修复。这些问题都可以从下钻分析中发现。

从质量层面,我们可以看整体项目上线的 bug、事故数量,代码的内建质量,以及bug 的修复工作量。我们也会推荐一些重点关注的函数,比如某些代码的圈复杂度比较高或被引用次数比较多,那么会优先推荐进行一些测试。

以上就是对于思码逸解决方案的一个大致的介绍。接下来,我们来看一个汽车行业的实践案例。

这个案例源自某个车企,他们的研发规模有 200 多人,他们有很大比例的外包人员,所以他们希望可以准确预估整体的工作量,并建立对外包供应商的评估体系。他们原先使用“事故点”、“工时”去评估需求颗粒度,这对于资源需求以及如何调配来讲,缺少客观参考信息。针对这个问题,我们基于代码当量,量化了需求颗粒度,保证需求颗粒度的稳定性,并且估算研发交付的带宽。

另一个问题就是,他们有大量的外包团队,他们对这些团队的管理不是很到位,缺少体系化的度量,无法准确判断外包整体的效率。针对这个问题,我们基于代码当量,帮助他们设计了一个供应商评分体系。

如下图显示,我们可以理解为这就是通过代码当量来计算出的研发产能。图中显示的是代码产能与需求个数的拟合曲线。拟合优度大于 60%的时候,就代表这个团队的工作产能是可预测的。对于不可预测的团队,我们可能要去找原因,为什么这周产出多,下周产出少。如果大家都处于比较稳定的水平时,就可以知道每个团队交付的贷款是多少。

另外一点是从需求的角度进行分析。如下图右侧所示,你可以看到一些稳定性较高的需求,我们可以通过他们来预估各个需求的工作量。根据刚刚的交付贷款和工作量的预测,就可以计算出应该怎么做资源的配比。

下面这张图是我们基于客户的需求设计的评分体系。比如在产能方面,我们不只是看代码当量的产出,还会看代码活跃度;在质量方面会看发版的质量、底层的质量,这样可以一目了然每个供应商的表现如何。

现场Q&A

提问  对于需求工作量的预测,你们是基于什么逻辑来做的?如果要预测需求的工作量,对我们的要求是什么?

回答  这里讲的需求更多是开发的需求。由于每个产品经理拆需求的时候大小不一。所以我们的逻辑是,基于代码当量,来度量一遍历史的需求,能看出每个需求的代码当量是多少,比如这个需求是 1000 当量,另一个是 500 当量。如果需求的当量相对稳定,那就可以预估之后这个需求大概是怎样的量级,它的偏差幅度在 10%-20%以内,是可以评估这个需求大概需要多少工作量。然后结合我们对团队交付能力的评估,比如一个团队一周能交付 500 当量,或 1000 当量的代码,那么这个需求就需要这个团队一周的时间来完成。

如果发现需求拆分的颗粒度大小不一,那么就需要溯源,查找原因,调节拆分需求的逻辑和方法。

可访问 链接 获取 演讲PDF

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

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

相关文章

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

概述 需求是想在线程池执行任务的时候,在开始前将调用线程的信息传到子线程中,在子线程完成后,再清除传入的数据。 下面使用了spring的ThreadPoolTaskExecutor来实现这个需求. ThreadPoolTaskExecutor 在jdk中使用的是ThreadPoolExecutor…

[RK3588-Android12] 双HDMI+喇叭Speak同音问题

问题描述 因为上层的音频策略,导致双路HDMI和喇叭,声音会被切换为单路出声音,以下修改将RK3588-Android12 双路HDMI和喇叭播放声音同时出声音。 解决方案: 1.frameworks\base\services\core\java\com\android\server\WiredAccesso…

API接口:概述、设计、应用与未来趋势

一、API接口概述 API,全称应用程序接口,是一种软件程序之间的通信方法。API接口在互联网开发中扮演着重要角色,允许不同的应用程序相互交流和共享数据。API定义了一套标准的通信协议,使得开发人员能够使用特定的函数、方法或协议…

快速排序模拟实现

快速排序,时间复杂度为O(NlogN),属于排序中相对快的那一列,以下是快排的模拟实现: 法一:左右指针交换法 void swap(int* x, int* y) {int tmp *x;*x *y;*y tmp; }//交换函数int getmid(int…

Python实现MYSQL蜜罐

1 LOAD DATA INFILE介绍 首先开启一个Mysql,看一下mysql是如何读取主机文件的。 1.1 linux搭建mysql 1)docker运行mysql 2)启动Mysql docker run -itd…

【GO】网络请求例子

post请求;multipart/form-data类型 // 构建请求参数requestData : map[string]interface{}{"gb": "","code": "","reMemberInfo": map[string]interface{}{"shi": "","…

【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效

文章目录 前言1. 取消 输入法的快捷键(推荐使用)2.更改 idea的快捷键3. 热键占用总结 前言 当你发现在idea 中看到用于全局搜索的快捷键就是 CtrlshiftF,可是怎么按都不管用的时候,你就不要再执着于自己的操作继续狂点电脑按键了…

Lnmp架构之mysql数据库实战1

1、mysql数据库编译 编译成功 2、mysql数据库初始化 配置数据目录 全局文件修改内容 生成初始化密码并进行初始化设定 3、mysql主从复制 什么是mysql的主从复制? MySQL的主从复制是一种常见的数据库复制技术,用于将一个数据库服务器(称为主…

python3读写dbf文件

目录 1 读dbf文件2 写dbf文件 1 读dbf文件 import dbf# 打开dbf文件 table dbf.Table(阿坝藏族羌族自治州_BXF_CHA.dbf)# 打开文件并进行读写操作 table.open(modedbf.READ_WRITE)# 遍历记录并更新字段值 res [] with table:for record in table:res.append(list(record))# …

解决Permission is not allowed后基于Ubuntu23.04安装配置docker与docker-compose

参考:Docker官网-Install Docker Engine on Ubuntu 虚拟机里安装ubuntu-23.04-beta-desktop-amd64,开启SSH(换源、备份),配置中文以及中文输入法等 基于CentOS7安装配置docker与docker-compose 一、 Install using the Apt repository 1.…

线性代数的本质(七)——特征值和特征向量

特征值和特征向量 本章特征值和特征向量的概念只在方阵的范畴内探讨。 相似矩阵 Grant:线性变换对应的矩阵依赖于所选择的基。 一般情况下,同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例,Grant 选用标准坐标系下的基向量 i…

conda环境下XZ_5.1.2alpha not found解决方案

1 问题描述 yum install cmake 使用yum安装cmake失败,失败信息如下: [rootlocalhost]# yum install cmake There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:/root/anaconda3/li…

blog--4美化主题

配置/美化 bug 把你的网站名/themes/hugo-theme-stack/exampleSite/目录下的config.yaml复制到网站根目录(也就是你的网站名这个目录)删除网站根目录的config.toml stack主题不需要这个配置文件打开网站根目录下的config.yaml进行填空博主头像放在/themes/hugo-theme-stack/a…

ansible下使用blockinfile添加配置信息到xml

#发文福利# 一、前言 1、目标&#xff1a;批量修改服务器上的xml配置文件 2、原配置文件的最后一部分内容如下 [roots40 tmp]# tail kahn.conf<value>nginx</value><description>my nginx config!</description> </property><property>…

fastjson远程命令执行

fastjson远程代码执行 漏洞原因&#xff1a;fastjson在对json字符串反序列化的时候&#xff0c;会读取到type的内容&#xff0c;将json内容反序列化为java对象并调用这个类的setter方法。 1、搭建rmi服务 直接利用jndi-exploit工具 2、抓包改为POST。开启nc监听、发包 PO…

python经典百题之求数字位数及逆序打印

题目&#xff1a;给一个不多于5位的正整数&#xff0c;要求&#xff1a;一、求它是几位数&#xff0c;二、逆序打印出各位数字 程序分析 我们需要编写一个程序&#xff0c;能够接受不多于5位的正整数&#xff0c;然后分析其位数&#xff0c;并逆序打印出各位数字。可以利用取…

前端面试题整理

1.沙箱隔离 前端沙箱隔离&#xff08;Frontend sandbox isolation&#xff09;是一种安全机制&#xff0c;用于将前端代码与主机环境隔离开来&#xff0c;以保护系统的安全性和稳定性。 在Web开发中&#xff0c;前端代码通常由JavaScript编写&#xff0c;而JavaScript是一种强…

Centos7 自部署中间件开机启动,以及java应用开机启动方法

一、zookeeper cd /etc/rc.d/init.d/ touch zookeeper chmod x zookeeper vi zookeeper#以下为内容&#xff0c;自行修改 路径#!/bin/bash ##chkconfig:2345 10 90#description:service zookeeper #修改为自己的目录 export ZOO_LOG_DIR/data/apache-zookeeper-3.7.0/logs…

贸易战的影响:跨境电商的“黑洞”风险与机遇

当今全球贸易局势充满了不确定性和动荡。贸易战的阴云笼罩下&#xff0c;跨境电商企业面临着前所未有的挑战&#xff0c;但与此同时&#xff0c;也蕴藏着巨大的机遇。本文将深入探讨贸易战对跨境电商的影响&#xff0c;以及企业在这个新现实中如何应对风险并寻找机遇。 贸易战的…

快手商品详情数据API接口【关键词搜索商品列表数据】APP端商品详情数据

快手商品API接口是快手电商平台为开发者提供的一组接口&#xff0c;允许开发者通过程序代码访问快手电商平台的商品数据&#xff0c;实现商品信息的获取等操作。以下是快手商品API接口的一些常用功能&#xff1a; 获取商品列表&#xff1a;通过该接口可以获取店铺或分类下的商…