
描绘GitHub中的汽车软件形势
汽车行业已经从一个电子机械行业过渡到一个软件密集型行业。目前一辆高端生产型汽车包含1亿多行代码,在代码规模上超过了现代飞机、大型强子对撞机、安卓操作系统和Facebook的前端软件,差距很大。如今,据报道,包括苹果、谷歌、华为、百度和索尼在内的全球软件公司都在努力让自己的汽车上路。本文涉足开源中的汽车软件景观,对这个有着长期封闭源代码开发历史的多学科行业进行了初步的了解。通过描述汽车软件的特点和开发风格,我们在GitHub上描绘了汽车软件的景观。
景观是由15,000多个用户贡献的≈600个积极开发的汽车软件项目所定义的,这些项目创建于2010年至2021年的12年间。这些项目包括与车辆动态相关的软件;LiDAR和摄像头等传感器的固件和驱动程序;感知和运动控制的算法;以及整合上述内容的完整操作系统。该领域的发展是由工业界和学术界共同推动的,其中三分之一的汽车软件库由一个组织拥有并积极开发。我们观察到多个方面的转变,包括首选语言从MATLAB到Python,以及感知和决策相关软件比传统汽车软件更受欢迎。这项研究见证了开源汽车软件的蓬勃发展,对未来的研究和实践有很多启示。
简介
今天,汽车是一个软件密集型产业[8,44]。在这个价值5万亿美元的产业中,最新的创新(包括自动驾驶、直观信息娱乐和电气化)更多地依赖于软件创新,而不是机械创新。到2020年,一辆汽车的软件和运行它的硬件的成本预计将从4,800美元到10,650.2美元不等,到2030年,这一成本预计将翻一番,占汽车总成本的50%
最近,开放源代码软件(OSS)进入汽车行业,对于一个主要由商业驱动、严重依赖于保护其知识产权的行业来说,这是一个具有里程碑意义的变化。这使得由原始设备制造商(简称汽车制造商)、其不同层次的供应商和工具供应商组成的汽车软件行业,除了有趣和相关的项目外,还能接触到全球范围内的贡献者网络。为了了解这一里程碑式的变化所带来的机遇,本研究探索了开源软件中汽车软件项目的前景,如GitHub所示。
许多研究已经探索了OSS的前景,尽管是针对不同的领域。有关于AI-ML软件的研究[10],大型科技公司的软件[15],甚至特定的应用领域,如视频游戏[36]和机器人[45]。在此基础上,我们增加了自动驾驶软件,它将非安全关键软件、安全关键软件和信息娱乐软件独特地融合在一起,形成了一个单一的系统。我们进行了调查:
开源的汽车软件项目有什么特点?
我们探讨了以下两个方面:
(1) 类别和特点: 我们确定哪些类型的汽车软件项目是开源的,并将它们相互比较。我们还将汽车项目与非汽车项目进行了比较。此外,我们还探讨了汽车项目的特点(例如,领域的规模和成熟度)及其利益相关者(例如,主要参与者和附属机构)。
(2) 软件开发风格: 我们研究软件开发的不同方面,如合作(如贡献者的类型,他们的贡献和互动)和贡献风格(如独立与依赖)。
我们的分析基于2010年至2021年12年间在GitHub上创建的≈600个汽车项目和类似数量的非汽车项目。我们的主要贡献是:
• 一个人工策划的、首创的、积极开发的汽车软件的数据集,以及它们在四个流行维度上的分类,包括安全关键型软件和工具[23]。该数据集有助于本研究的复制和未来对汽车软件的探索。
• 汽车软件的特点,包括它的时间趋势、流行程度、编程语言、用户分布和开发活动。
据我们所知,这项研究是第一个介绍开源汽车软件情况的研究。本研究提出的见解与快速增长的领域有关,但从软件工程的角度来看却知之甚少。
本文的其余部分组织如下:第2节介绍了我们对数据收集和分析的设计选择。第3和第4节介绍了我们的发现和见解,以及我们得出这些见解的方法。第5节介绍了本研究对汽车和软件工程研究和实践的意义。我们在第6节中回顾了对有效性的威胁,在第7节中描述了相关的研究,并在第8节中总结了本文。
研究设计
我们之所以选择GitHub来探索汽车软件领域,是因为该平台上有大量的开源软件项目,而且在全球范围内都很普遍。仅在2021年,就有6400万个新仓库被创建,来自全球200多个国家的7300多万贡献者和84%的财富100强企业使用GitHub。
这项调查有三个部分。首先,我们定义了汽车软件,并提出了区分汽车软件和一般软件系统的标准;以及确定作为比较基线的一般资源库的标准。第二和第三部分使用了两组选定的资源库的元数据。在第二部分,我们提出了资源库的描述性统计(在第三部分),而在第三部分,我们探讨了用户统计以及贡献模式(在第四部分)。在第二和第三部分中,我们从汽车领域中获得了洞察力,并与基线进行比较。特别是,在第二部分中,我们通过GitHub API(使用PyGithub--GitHub API搜索的python包装器5)挖掘档案数据。在第三部分中,我们用GHTorrent数据[12]进一步充实这一数据。一般来说,我们的研究设计从最近与开放源码软件有关的景观研究中获得灵感(例如,[10,15])。
1. 什么是汽车软件?
在不同的科学界流行着许多关于汽车软件的定义(例如,[6,8,14])。这些定义的一些共同要素是 (a) 构成汽车一部分的软件,(b) 通过API或其他类似机制与汽车互动的软件,以及(c) 专门用于创建(a)和(b)的软件[5, 8, 11, 14]。第3节将介绍汽车软件的更详细的特征。
2. 鉴别汽车软件项目
为了识别GitHub上的特定类型的软件项目,传统的方法,如主题建模[17,39]被发现是不合适的[10]。另一种方法是使用GitHub上的 "主题"功能。主题是由项目定义的标签,或由GitHub向项目建议的标签,可用于发现类似的存储库网络。我们初步的人工分析显示,与之前的研究[10]不同,几个汽车库没有使用GitHub的 "话题"功能。因此,除了通过 "主题"来识别软件库外,我们还在GitHub上搜索特定的关键词,如果在 "README "文件中发现这些关键词,就有可能识别出一个汽车软件库。
为了利用GitHub的 "主题 "功能识别汽车软件,首先我们定义了种子词。我们择'automotive'、'automobile'、'drive'、'driving'、'vehicle'、'vehicular'和'car'作为种子词。为了捕捉一系列相关的词汇,我们将种子词汇转换为它们的基础词汇。例如,'automo'代表汽车和汽车。同样地,其他的关键词变成了:drive、vehic和car。使用这些基本术语,我们组成了一个搜索字符串,排除了与汽车软件无关的术语。例如google-drive、电商和设备驱动的相关主题。我们最后的(4个)搜索查询是:
automo
vehic
driv NOT driven NOT drives NOT license
NOT google-drive NOT linux-driver
car NOT cart NOT card NOT caro
NOT carp NOT care
使用这些搜索查询,我们确定了主题,这些主题共同定义了汽车软件库的搜索空间。我们总共识别了2797个主题标签。我们手动分析每个主题,以确定它是否与汽车软件相关。如果主题标签没有提供信息,我们会查看链接到该主题的前10个存储库的名称和描述来做出决定。最终,我们确定了286个主题,并选择了它们所有的链接库。这些主题的完整列表(连同其搜索词)可作为我们复制包的一部分[23]。
此外,为了识别不使用主题的相关资料库,我们从四个搜索查询中的每一个中选择了基于资料库数量的前五个主题结果(来自前一步的286个主题),这些结果是在前一步中选择的(共产生20个)。为了提高搜索结果的信噪比,我们删除了最常见的术语(例如,汽车、轿车),结果是12个术语。我们在不使用 "主题 "标签的资源库的 "README "文件中搜索这些术语,以确定更多的资源库。值得注意的是,只有高达50%的与汽车有关的资源库使用了'主题'功能,在584个被选中的汽车资源库中,有301个没有使用这一功能。请注意,在上述每个人工分析步骤中,随机抽样和边缘案例都由两名研究人员独立分析,以确保严谨性和可重复性。
3. 筛选和淘汰标准
为了策划一个有代表性的活跃项目样本,我们采用了以下过滤标准(受[10]的启发):
大小:存储库的大小应大于0KB。
流行:星级和分叉是版本库的流行指标。
为了收集一个有代表性的存储库样本(而不仅仅是流行的),我们选择至少有5个分叉或5颗星的存储库。
活动:我们使用提交作为开发活动的代理,并选择最后一次提交是在2021年的存储库,这是选择积极开发项目的一个标准。
数据:仓库数据应该可以通过GitHub API获得。
上述四个标准适用于入围的软件库,产生了一个1981个软件库的子集。
内容:为了衡量一个软件库是否是汽车软件,第一作者根据以下纳入和排除标准,手动检查了项目的标题、描述和README文件。
纳入标准
• 选择汽车专用软件
• 选择有助于开发汽车专用软件的软件
• 只选择与公路车辆有关的软件
• 文本用英文书写,有README文件排除标准
• 与汽车无关或与(汽车)销售和营销有关的资料库、教程、课程项目、学士和硕士论文、文件、数据集、玩具车、游戏、交通基础设施、地图,以及与汽车没有直接互动的资料库。
我们采取了保守的方法来选择资料库。这意味着,属于灰色地带的案例被排除在外。为了保证程序的可重复性,另一位在软件工程实证研究方面有经验的研究人员使用上述纳入和排除标准对随机选择的资源库子集(大约100个)进行了独立分类。用Cohen's Kappa[33]计算,这两个分类之间的评判员之间的一致性为0.83,表明几乎完全一致。两位研究人员讨论了他们的不同意见,直到达成决定。最后,我们确定了585个汽车软件库。
4. 确定基线存储库
为了将我们的洞察力与基线进行比较,我们需要积极开发与汽车无关的资源库。我们的第一个选择是重新使用以前的一个相关研究的基线[10]。然而,这个数据集有三个问题:(1)不包含最近的存储库(在2019年中期之后创建),(2)系统地排除了AI-ML存储库,以及(3)代表最流行的存储库,不一定代表一般的软件项目。为了减轻这些担忧,我们建立了具有以下特点的基线。首先,我们使用与汽车软件项目相同的标准(规模、受欢迎程度、活动和数据可用性)来确定积极开发的项目(参见2.3节)。我们唯一的偏差是选择有五颗或更多星星和分叉的存储库。
这个决定是为了减轻搜索API的实际执行限制。然后,对于每一年(从2010年到2021年),我们按照多年来所有活跃开发的GitHub存储库的百分比分布,对存储库进行子抽样,并根据每个子抽样中最近的活动进行选择。我们选择的软件库,使其总数量接近600个软件库。为了避免与汽车软件的重叠,我们排除了含有汽车、轿车和车辆等术语的软件库。我们得到的数据集有566个资源库作为基线。
5. 数据分析
我们的数据分析有两个部分:(1)我们报告了关于选择汽车和基线库的描述性统计。我们描述了汽车软件系统的类型以及它们与基线软件系统的关系。我们这部分的分析是基于使用PyGithub提取的元数据。详情请参考第3节。(2) 我们通过结合PyGithub和GHTorrent[12]的洞察力,对开发风格进行了更深入的了解。由于GHTorrent数据集只包含截至2021年7月的开发数据(我们在2021年12月使用PyGitHub收集数据),GHTorrent中没有基于PyGitHub数据的一些软件库。因此,我们只剩下585个汽车库中的436个和565个基线库中的503个。关于更深入的实施细节和获得的见解,请参考第4节。
类别和特征
本节介绍了GitHub上的汽车软件的类型和它们的特点。首先,我们介绍汽车软件的不同分类方法。下一小节介绍了我们的研究结果,以及汽车软件与一般软件系统的比较集的独特特征。这一分析是基于2010年至2021年12年间创建的584个汽车软件库(使用PyGitHub提取)。最近的一个是在2021年12月30日创建的。
1. 方法
非正式地,汽车软件可以被定义为 (1)运行或与汽车互动的软件;(2)支持运行或与汽车互动的软件的不同生命周期阶段(如开发、确认和验证)的工具。我们将以上两类分别称为车载软件和工具。
车载软件:在文献中,有许多方法可以对车载软件进行分类。我们使用以下两种方案:
(1) 安全关键型和基于应用的安全关键型: 安全关键型软件被定义为执行任务的软件,如果不正确执行,可能会导致人类受伤、死亡或对环境造成危害[1, 16, 22, 24, 25, 34]。在对汽车软件进行人工分类的过程中,我们注意到,除了安全关键型和非安全关键型软件系统外,还有第三类软件系统:基于应用的安全关键型。这些软件系统可能是安全的关键,这取决于(预期的)应用环境。例如,用于感知的软件系统在用于完全自动驾驶(即没有主动的人类驾驶员)时是安全的关键。
在这种情况下,感知软件系统的任何故障、功能失常或意外功能都可能导致撞车,对交通参与者造成伤害,并对其周围环境造成伤害。同样的系统在用作驾驶员警告系统时,由人类驾驶员负责,可以被归类为非安全关键。在这种情况下,操纵车辆的责任由人类驾驶员承担。我们根据应用将这类软件库划分为安全关键型。
(2) Broy的分类: 2007年,Broy等人[5]将自动化软件分为以下5类:(a) 人机界面(HMI)、多媒体和远程信息处理相关软件;(b) 车身/舒适性软件,例如,控制汽车门各方面的软件;(c) 用于安全电子的软件,这是有严格安全要求的硬实时、基于离散事件的软件;(d) 动力系统和底盘控制软件,其中包括控制算法和控制发动机的软件;以及 (e) 基础设施软件,如用于诊断和软件更新的软件。
自2007年以来,汽车软件和软件系统领域总体上有所发展。例如,2012年使用神经网络证明了以(相对)较低的计算能力进行高度准确的图像识别[30]。汽车软件在感知系统和自动决策方面取得了进展,这使得完全自动驾驶成为可能。虽然自动驾驶的其他方面如线控驾驶在目前的分类中得到了体现,但感知和决策这一方面却没有。我们通过增加第六个类别来扩展Broy的分类:(f)感知和决策软件。感知和决策软件包括任何有助于感知(了解车辆周围环境)和决策(例如,决定启动、转向和制动)的软件,适用于任何级别的自动驾驶(即驾驶辅助、部分自动驾驶和完全自动驾驶)。
工具:行业标准(如ISO26262[18,29])定义了多个阶段,如汽车生命周期中的验证和核实。我们认为所有为汽车生命周期的一个或多个阶段提供工具的软件库都属于这一类别。为了简洁起见,我们从这个分类中排除了我们只有一个资源库的阶段(以及相应的工具)。选定的资源库分为以下四类:(1)开发工具,(2)与模拟或仿真有关的工具,(3)验证和核实的工具,以及(4)诊断工具。
请注意,传统上与模拟(和仿真)有关的工具被认为是验证和核实的一部分。然而,随着神经网络的出现,许多仿真工具被用于训练(开发)神经网络。因此,我们在此单独研究这些工具。
为了确保对汽车资源库进行严格的、可重复的分类,第一作者和另一位在经验性软件工程方面有经验的研究人员,对随机选择的资源库和边界案例的子集进行了独立分类。
在随后的小节中,我们根据上述分类报告了汽车软件的分布情况,以提供GitHub上开源的汽车软件类型的概述。在本文中,我们将继续深入研究这些流行和突出的汽车软件类别。
图1:2010年至2021年期间,参照GitHub中所有积极开发的软件库,积极开发的自动软件库的时间演变。
为了描述汽车软件的特点,我们报告了汽车软件库的描述性统计,并将其与同样来自GitHub的非汽车软件库的对比集进行了比较。我们的分析突出了四个关键领域,首先是GitHub上存储库的时间趋势和演变。这一分析表明了该领域的成熟度和增长。接下来,我们将讨论汽车软件的所有权(用户与组织),指出该领域的主要参与者,以及他们如何塑造汽车软件的景观。沿着同样的思路,我们继续从开发活动(从分叉数推断)和一般(使用星级和订阅者)方面探索流行的汽车软件。最后,我们探讨了不同汽车软件使用的主要编程语言的选择,正如使用上述类别所确定的那样。
2. 研究结果
创世纪--开始与时间趋势: 2010年,第一个仍在积极开发的汽车项目,Veins,在GitHub中创建(2010年4月26日)。这个车辆网络模拟框架定义了汽车软件开发进入GitHub,标志着这个行业在过去50年的软件使用过程中传统上是封闭的,这是一个转折点。
从那时起,每年都有更多的软件库加入,在12年的时间里,总共有584个(积极开发)汽车软件库。图1显示了汽车软件库(基于其创建年份)在GitHub中活跃开发的软件库总数中的百分比分布。时间趋势表明,从2018年到2019年,汽车软件的增长比例翻了一番,而从2019年到2020年又翻了一番。与整个GitHub上积极开发的软件库(在2014年达到顶峰)相比,汽车软件仍处于起步阶段,预计在未来会有所增长。
起源和时间趋势:Veins--一个模拟工具,是第一个由用户在2010年创建的汽车软件库,目前仍在积极开发中。这项研究见证了开源汽车动力软件的蓬勃发展,它处于起步阶段。 |
新机遇的曙光--所有权:2010年,没有任何组织在GitHub上开发任何仍在积极开发的汽车软件。在接下来的6年里(2011-2016),小型组织、爱好者团体和非营利组织涉足开源领域;拥有14个软件项目。第一个组织拥有(仍在积极开发)的项目是Open-Vehicle-Monitoring-System,这是一个来自爱好者团体Open Vehicles的车载软件。
2017年标志着大公司进入开源领域。今年,中国搜索引擎公司百度(Baidu)创建了阿波罗项目(project Apollo),这是一个用于全自动驾驶的完整软件堆栈。其他大公司,即亚马逊、英特尔、微软和Udacity很快就加入了,它们各自开源了一个工具来构建自动驾驶解决方案。在我们的数据集中,每三个(或584个中的194个)汽车软件库中就有一个是由组织拥有的。累计起来,我们发现有163个组织和343个用户拥有至少一个软件库。
今天,汽车开放源码软件的开发是由工具供应商、学术和工业研究实验室带头的,学术研究团体拥有30多个资源库。
在GitHub上的汽车软件中,唯一的汽车制造商是丰田,它有两个仓库,一个工具和一个车载软件。请注意,我们可能遗漏了汽车制造商的不同层级的供应商,因为没有直接的方法从GitHub元数据中识别供应商。
目前,从事汽车软件工作的前5个组织(按资源库数量计算)是:EPFL的VITA实验室(5个资源库),LG硅谷实验室(4个),MathWorks开源和社区项目(4个),AutonomouStuff(3个),以及CARLA(3个)。
存储库所有权:每三个汽车软件库中就有一个是由某个组织拥有的。该领域见证了来自学术界和工业界(工具供应商)研究实验室的高度参与,只有一家汽车制造商(丰田)走在前列。 |
处于有利地位--受欢迎程度:根据受欢迎程度的三个指标(星级、分叉和订阅者;见表1),各组织的前5个受欢迎的汽车项目是仿真工具(共4个),其次是关于感知和决策系统的车载软件(fizyr/keras-retinanet)和自动驾驶堆栈Apollo。
关于汽车软件的流行用户库更加多样化,包括车内软件和工具。排名前五的车载软件涉及(a)人机界面和远程信息处理,以及(b)感知和决策。排在前五位的工具涉及(a)感知和决策相关软件的开发和(b)诊断。
图2展示了汽车软件中的星级、分叉和订阅者的分布情况,以及基线库。一般来说,项目的星级比分叉和订阅者多。这对汽车和基线软件库来说也是如此。值得注意的是,汽车软件远没有基线软件系统那么受欢迎,这进一步加强了该领域的初级阶段的概念。使用Mann-Whitney-Wilcoxon测试[4],即两个独立数据样本的非参数测试,计算出P值<0.05时,汽车库和基线库之间的分布差异具有统计学意义。
图2:参照比较集,汽车资源库的受欢迎程度分布(以星级、分叉和订阅者计)(去掉离群值)
汽车资源库的星级、分叉和订阅者的中位数分别为24、9和4,而基线库的中位数分别为297、121和36。在此,我们想提醒读者,尽管我们试图选择一个有代表性的项目样本作为基线,但我们的数据集可能在某种程度上偏向于更受欢迎的软件库(详见第6节的有效性威胁),从而进一步歪曲了分布。即使在汽车软件库中,组织拥有的软件库也至少是用户拥有的软件项目的两倍。
受欢迎程度:汽车软件作为一个领域,在GitHub上不如一般软件受欢迎。百度的自动驾驶软件栈Apollo是目前最受欢迎的汽车软件库。一般来说,组织拥有的软件项目比用户拥有的项目要受欢迎两倍。 |
表1:前5个受欢迎的组织和用户库(基于订阅者、分叉和星级)及其数量
Genera - 汽车软件的类型:大体上,与工具(233)相比,车载软件(375)非常丰富。
表2列出了汽车软件类型(包括车载软件和工具)的详细分布。请注意,一个软件库可以属于多个类别。因此,所有类别的资源库数量之和可能大于实际的资源库数量。关于单个资源库分类的更多细节可在复制包[23]中找到。
在车内软件中,大多数资源库与感知和决策相关的软件有关。值得注意的是,Broy对车载软件的分类[5]只是整体中的一小部分(375个中的108个)。在这108个中,人机界面(71个)和基础设施(38个)是最主要的类别,并且主要由用户开发。
开放源代码中的安全关键软件的发展仍处于初始阶段(21个软件库)。虽然,许多软件库属于基于应用类别的安全关键型软件(大约60%的车载软件)。大多数安全关键软件与感知和基于决策的软件有关,旨在用于全自动驾驶系统。这些软件包括基于神经网络的语义分割、路径规划、物体、行人和意图检测相关软件。
汽车软件中的 "工具 "类别以模拟器和相关软件为主。这在工业界的五大汽车软件中很明显(见表1),其中三个是模拟器。就整个工具而言,用户(100)和组织(133)的所有权几乎相等。我们看到在开发工具(32个来自组织,31个来自用户)和验证和核查工具(18个来自组织,22个来自用户)的所有权方面有类似的趋势。唯一的例外是诊断工具,它在用户(28个)中的地位比组织(5个)高五倍。除此以外,我们还注意到少量的汽车软件库(32个)与(驾驶员)安全(如瞌睡检测)和安全(安全测试工具或用于车辆安全的车载软件)有关。
汽车软件的类型: 最受欢迎的开源汽车软件类型是车载软件(375个软件库),其次是工具(233个软件库)。在车载软件中,感知和决策软件最受欢迎,而在工具中,模拟是最突出的。传统的车辆软件和安全关键软件在开放源码中的代表性不足。 |
两个世界;两种语言 - 语言:汽车软件是用33种主要语言开发的,如果考虑到所有的开发语言,则有96种语言。最受欢迎的编程语言是Python,有291个项目使用它作为主要语言,多达415个项目使用它作为语言之一。排名前五的主要编程语言是Python(291)、C++(98)、C(33)、Jupyter Notebook(33)和MATLAB(30)。从技术上讲,Jupyter Notebook不是一种编程语言,而是一种文本和代码的混合。我们不对笔记本中使用的编程语言做任何假设,而是根据GitHub的标签来考虑它们。各机构普遍喜欢(根据资源库数量)Python(82)、C++(37)、C(16)、MATLAB(10)和Jupyter Notebook(7)用于他们的项目。值得注意的是,用户也喜欢同样的语言,但顺序略有不同:Python(209),C++(61),Jupyter Notebook(26),MATLAB(20),和C(17)。
表2:GitHub上的汽车软件类型及其分布
大多数安全关键型软件是用C++编写的(14),其次是Python(4),MATLAB(1)和C(1)。
各个项目的编程语言的分布显示,从MATLAB作为首选开发语言[2]到Python的转变。同样地,传统上大多数安全关键软件都是用C或Ada开发的,而现在GitHub中的C++语言已经转变了[20]。
语言:开源汽车软件开发的首选语言已经从MATLAB(30个存储库)转移到Python(291个存储库)。同样地,安全关键软件的开发也从 C 或 Ada 转向C++。 |
软件开发方式
在上一节得出的见解的基础上,本节深入探讨了汽车软件的用户分布、开发活动的类型以及开发模式的选择。我们将其与基线进行比较,以了解汽车软件的独特特征,如果有的话。请注意,由于本分析结合了使用PyGithub(2021年12月)获得的数据和GHTorrent的数据(2021年7月前的数据),我们错过了GHTorrent上不存在的软件库。此外,根据个别资源库的开发活动和GHTorrent数据集中的缺失数据,资源库的总计数在不同的分析中可能有所不同。
1. 方法
用户分布:在这一节中,我们探讨了不同项目的用户类型和分布情况。
我们研究两种类型的用户:外部和内部[10],基于他们在汽车软件中的活动。内部用户通过对实际的软件进行修改(提交)和调节决定是否包含/排除建议的修改(如合并和关闭拉动请求和关闭问题),直接对项目的发展做出贡献。另一方面,外部用户通过要求提供功能、报告问题和发表评论来间接做出贡献。我们认为,调查内部和外部用户在各个项目中的分布情况,可以看出一个社区是如何运作的。为了更深入的了解,我们还探讨了不同组织和用户项目的贡献模式的变化(如果有的话)。要了解开发者的贡献和协作模式,下一步自然是研究开发者的角色(如主力,或报告者)和他们的分布。然而,鉴于社区规模小,发展活动有限,要提供有意义的见解和结论性的统计分析是不可行的。因此,我们不报告合作模式。
开发活动:GitHub上的开发活动可以大致分为提交、问题和拉动请求。问题事件表明更广泛的用户群(除贡献者外)的参与,要求增加功能或指出问题。参与议题活动表明软件的用户如何与开发者互动,影响其发展。下一组开发活动是拉动请求,这表明对软件的影响相对较强,它提出了一些变化,以纳入软件系统或其相关工件。这些活动记录决定包括或排除提议的变更。最后,提交是一个更复杂的活动,涉及在软件中创建所需更改的技术方面在这里,我们也探讨了项目所有权是否会影响跨项目的开发活动模式。
开发模式与自主性:最后,我们分析了汽车软件中开发模式的选择。在GitHub上有两种类型的开发模式:(1)共享储存模式;(2)fork & pull模式。这两种模式在贡献者的自主性水平上是不同的。在共享资源库模式中,作者可以自己合并他们提出的代码修改,表明他们的自主性。fork & pull模式意味着作者提出的修改要经过维护者的审查。在这种模式下,作者要依靠审查者的行动来决定是否包含或排除所提出的修改。为了研究一个项目的自主性或依赖性水平,我们汇总了拉动请求和提交的分布,并提交了作者将更改(自合并)与其他贡献者(其他合并)合并的请求。我们把有更多自我合并的项目称为实行共享库模式,否则就是fork and pull模式。
2. 研究结果
真正的星级--用户和他们的分布:所有的汽车资料库累计有15,260个独立用户,而基线资料库有439,032个独立用户。在自动软件中,每个软件库的用户数中位数是5,而我们的基线中的一般项目是115(参考图3的分布)。
8https://docs.github.com/en/get-started/quickstart/github-flow
9https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models
图3:与基线相比,储存库的用户分布情况(省略离群值)
图4:用户和组织所拥有的汽车资料库的内部和外部用户(省略异常值)
用Mann-Whitney-Wilcoxon检验计算,两个分布有显著差,P值<0.05。在此,我们再次提醒读者,我们的基准线在某种程度上偏向于积极开发的流行软件系统。因此,差异可能看起来比实际大。请注意,我们对个人贡献者的识别依赖于GitHub的唯一用户标识。然而,一个人可以有多个独特的身份[41]。因此,实际的用户数量可能比报告的数量要少。
观察汽车软件中的用户分布,每个项目的中位数是3个内部用户和5个外部用户。当我们在所有权类型上进一步分离用户分布时(参见图4),我们观察到组织在每个存储库上有更多的用户。使用Mann-Whitney-Wilcoxon检验在p值<0.05时计算出这两个分布是不同的。组织记录的中位数为6个内部用户和8个外部用户,而用户拥有的汽车存储库分别为3个和5个。
跨存储库的用户分布:开源汽车软件有一个小的开发人员社区,每个存储库平均只有5个用户。值得注意的是,与用户存储库相比,组织存储库需要更多的内部和外部参与。 |
原生代 - 发展活动: 我们注意到,汽车软件中最常见的开发活动(基于活动的中位数)是以提交(32)的形式出现,其次是问题(9),然后是拉动请求(6)。
图5:组织拥有的汽车存储库与用户拥有的存储库中的开发活动(省略了异常值)
我们进一步调查了基于所有权和汽车软件类型的开发活动的分布。
图5展示了组织拥有的汽车软件存储库与用户拥有的存储库的开发活动。通常,组织项目比用户项目拥有更多的开发活动(就中位数而言),尽管有一些用户项目的提交活动级别与组织存储库的级别相匹配。这表明用户项目之间的差异性,在开发活动的分布上具有极端性。请注意,用Mann-Whitney-Wilcoxon检验法计算,两个分布是不同的(P值<0.05)。
图6显示了整个车载软件和工具的开发活动的比较。在这里,跨问题(p值=0.29)和拉动请求(p值=0.40)的开发活动具有可比性,而在提交方面则有重大差异(p值=0.0013)。这些P值是用Mann-Whitney-Wilcoxon检验计算的,这样P值<0.05表示分布有差异,否则没有差异。我们注意到,与车载软件相比,工具中的承诺活动更多。我们认为,这种差异是由于工具供应商组织在汽车软件中的参与度更高。提醒一下,在233个组织拥有的资源库中,有100个属于工具类,而在375个车载软件类中有97个。
我们还探讨了感知和决策相关软件的开发活动的分布情况,这些软件构成了车载软件的大部分(有相当数量的软件库可供统计比较),与车载软件中其他软件库的开发活动相比。图7显示,与感知和决策相关的软件相比,传统软件在提交、问题和拉动请求方面的开发更为活跃。在属于所有Broy类别的存储库上的开发活动分布的差异与属于感知和决策软件的存储库相比,使用Mann- Whitney-Wilcoxon检验在p值<0.05的情况下测量显著不同。这意味着,虽然感知和决策相关的软件在数量上更多,但它们的开发活动却比传统软件少。
图6:车内软件与工具的开发活动(省略离群值)
图7:与感知和决策相关的车载软件与其他车载软件的开发活动(省略异常值)
开发活动:组织拥有的资源库在所有类别中都吸引了更多的贡献。然而,与组织拥有的软件库的开发活动水平相匹配的用户拥有的软件库数量较少。工具的开发比车载软件更积极 在车载软件中,传统的车载软件的开发比感知相关的软件更积极。 |
守护者-开发模式: 通过查看每个项目的协作模式,我们将每个项目分类为共享存储库或分拆开发模型。我们注意到,虽然有41个资源库遵循共享资源库模式,但有182个资源库实行叉拉取模式。这表明自主开发的项目较少,大多数开发团队(资源库的贡献者)都没有自主权。这一观察结果与叉拉式是最突出的模式的基线相吻合,也与之前关于其他软件子社区的工作相吻合[10]。
开发模式:汽车软件 —— 尽管是一个小型的开发社区 —— 在其开发活动中大多采用叉拉模式。 |
影响
虽然汽车开源软件仍处于起步阶段(与我们的基线相比),但该领域有584个软件库和15260个贡献者。
随着行业参与者进入该领域并选择开源他们的项目,我们相信汽车软件是下一个有前途的领域,预计在未来十年将有数倍的增长。在本节中,我们将讨论如何将本研究的见解应用于研究和实践。
1. 研究
学术界是GitHub中汽车软件的重要贡献者,在拥有的软件库数量方面是前5名。我们还确定了108个与汽车软件方面的科学文章相关的资料库。鉴于汽车软件和学术研究的密切联系,在这一节中,我们介绍了我们的研究可以启发未来研究的方式。
手动策划的汽车软件。据我们所知,本文是第一个提出人工策划的开源汽车软件数据集的文章。我们使用四种分类方案对每个资源库进行了分类,即(1)安全关键型,(2)基于应用的安全关键型,(3)用感知和决策相关软件扩展的Broy分类,以及(4)工具。一个直接的未来研究方向是在汽车和相关领域的专家的投入下加强分类。此外,我们手动管理的数据集以及分类可以用于(在培训和测试中)通过自动化(算法)方法自动化识别和分类汽车软件的过程。此外,我们认为,未来的研究可以利用这种分类方法对汽车软件进行特征描述,并对突出的软件系统进行深入探索。
开源的动机。关于公司开源的汽车软件的类型,我们注意到,各组织大多将他们的工具和一些实验性项目开源。看看哪些类型的公司会选择开源及其动机将会很有趣(类似于最近一项探索中国公司开源动机的研究[15])。虽然我们的结果显示,每三个汽车软件库中就有一个是由组织拥有的,但至少有一些大型组织中的GitHub项目可能是从个人项目开始的,因为当时还没有关于如何开源项目的公司政策。鉴于组织进入汽车领域的开放源码仍处于起步阶段,有可能一些个别项目实际上属于组织,而所有权尚未转移到组织。这一现象本身和我们的结果的后续变化构成了未来研究的另一个探索方向。
安全性至关重要。大多数开源的汽车软件都与感知、决策和工具有关。这些软件系统可以是安全关键型的,这取决于应用的情况。鉴于开源软件对安全关键型软件的关注有限,目前和未来这些类别的汽车软件是否按照安全关键型标准开发和/或测试,仍是未来的工作。同时,我们的研究也为今后在(其他)安全关键领域的开源软件研究提供了指导和基线。
多学科软件与普通软件。在GitHub上开发的汽车软件具有多学科的性质。我们观察到建立车辆动力学模型的资料库;开发LiDAR和Camera等传感器的固件和驱动程序;开发感知和运动控制的算法;以及集成上述内容的完整操作系统的资料库。看到这种多学科软件项目的贡献和合作模式与一般软件系统的差异将是有趣的。
2. 实践
这项研究表明,与车载软件(26%)相比,该行业对开放资源工具(43%的组织拥有)更感兴趣。对这一现象的三种可能的解释是:(1)工具的收入来源由汽车制造商或其供应商主导,他们将为工具的支持付费而不考虑开放源代码;(2)工具可能比车载软件的知识产权密集度低,因此更容易开放源代码而不失去竞争优势;和(3)与工具相比,车载软件通常运行在标准化程度较低的硬件上(用于各种车载功能的特定应用嵌入式硬件)。然而,这些解释不能从本研究使用的数据中得出,需要加以验证。
此外,我们列出的汽车资源库及其分类可以帮助未来的研究,以确定每个类别的利益相关者,他们参与开源的动机,以及其他使用这些工具的领域。我们的研究还提供了第一份开源的汽车软件工具和车载软件清单,前者可供从业者使用(和贡献),后者可供学习。此外,我们的数据和洞察力可以用来识别(a)重复使用的软件,(b)吸引人才和/或增加软件和标准的采用,以及(c)汽车领域的新方向、公司和趋势。下面将讨论我们的发现对实践的三个潜在影响。
语言选择。现在开源的汽车软件大多是用Python开发的,取代了以前研究报告中的MATLAB(见[2]中的表12)。一个类似的趋势是,C++在安全关键型软件开发中取代了C或Ada[20]。我们对有兴趣进入汽车软件领域的读者的建议是,在选择编程语言时要考虑这些发现。
之前的研究表明,公司开放其软件源代码的一个原因是为了吸引人才和国际化[15]。我们相信,新成立的汽车公司可以通过开放其项目资源而受益。
安全认证和汽车制造商。车辆的安全认证是允许其上路的强制性规定。目前,车辆中更多的软件依赖功能的趋势对认证机构来说是一个挑战。这些机构可以从开放的软件堆栈中受益。这样的变化可以随后鼓励汽车制造商为开放源码软件做出贡献。我们的研究可以被认证机构用来深入了解以开源方式开发的汽车软件的特点。对于汽车制造商,我们的研究提供了开源汽车软件的趋势。
有效性威胁
结构有效性:选择用于分析的汽车软件系统的代表性存在威胁。为了减轻这种担忧,我们使用两种方法(使用主题和README文件中的关键词搜索)来识别汽车软件库,并采用最佳实践来选择积极开发的软件系统[13, 19, 35]。也就是说,我们可能系统地遗漏了那些没有使用搜索术语、使用不同主题标签、缺少README文件或有意义的描述的存储库。另外,在有疑问的情况下,我们放弃了一个资源库,也就是说,我们采取了保守的方法。同样的威胁也适用于第3节中介绍的汽车软件系统的类别。
为了计算独特的贡献者,我们使用了他们的GitHub标识符,并将每一个拥有不同标识符的用户都算作是一个独特的用户。然而,先前的研究表明,一个人可以有多个身份[41],因此实际的用户数量可能低于报告的数量。
我们的基线库可能会偏向于更流行的库房。为了提高代表性,我们根据每年积极开发的资源库的数量对资源库进行了抽样。然而,考虑到与GitHub中活跃开发的仓库总数相比,汽车仓库的规模较小,根据最近的活动从每个子样本中随机选择可能导致选择流行的仓库作为基线。
另一个威胁是在人工选择资源库和汽车软件的分类中引入研究人员的偏见。虽然这些威胁无法消除,但我们试图通过以下方式将其降至最低:(a)明确记录选择资源库的纳入-排除标准,以及(b)对资源库的一个子集使用独立的评分器。对于软件的分类,我们借用了文献中的定义作为参考。
我们对开发方式的洞察力来自于GHTorrent数据集。在数据集中不存在的活动被系统地排除在我们的分析之外[3]。
外部有效性:本文以Github上公开的软件库为基础。虽然GitHub是一个流行的和广泛使用的平台,但还有其他平台(如Gerrit和Phabricator)有其独特的特点,在GitHub上托管的私人项目,以及闭源系统。他们可能会给汽车软件领域增加一个不同的视角。我们把它留给未来的研究,以挑选这些主题来提高这里的研究结果的普遍性。
相关工作
围绕GitHub中汽车软件景观的相关研究可以分为两部分。第一部分主要是关于汽车软件和其工程的文献。在第二部分中,我们探讨了对其他软件社区的特征的研究。
1. 汽车软件
有许多关于汽车软件的研究,探索了这个主题的不同层面。在过去的五年里,一些重点领域(使用谷歌学术搜索确定)包括汽车软件架构[26-28,31,44],基于AI的解决方案[9,42],基于模型的解决方案[37,43,46]和区块链[7]。
这些研究涉及到与汽车软件相关的复杂性[32]、安全性[32]、安全性[38,46]、隐私[7]和测试[38,40]等方面。
关于汽车软件的另一个研究方向是在其开发和开发过程方面[6, 21, 44]。这些研究集中在汽车软件开发的不同步骤[6, 44]以及像敏捷开发[21]这样的过程模型对汽车行业的适用性。也就是说,据我们所知,几乎没有研究在封闭或开放源码软件系统上,从其开发活动(如拉动请求、问题和提交)的角度来描述汽车软件开发及其过程。
2. 非汽车类软件前景
尽管对汽车领域的软件开发过程或其特征没有研究,但其他软件工程界的特征已经在文献中提出。过去探讨过的软件工程社区的特点可以根据应用领域进行分类[10, 36, 45],也可以根据其他因素如地理和封闭源进行分类[15, 15]。我们介绍了四项这样的研究,它们从不同的角度探索了软件形势,并对我们的研究有所启发。
最近的探索是关于中国大型科技公司即百度、阿里巴巴和腾讯开发的开源软件系统[15]。与一般研究的开源软件不同,这种探索是区域性的。它介绍了中国科技公司开发的开源软件的特点,他们的开源目标,以及与其他软件系统的比较[15]。
第二项研究探索了十年来以开源方式开发的ML和AI软件系统[10]。该研究除了描述ML/AI进化的趋势外,还描述了它们的协作和自主性,并与一般的软件系统进行了对比[10]。这两项研究是我们的主要灵感来源。
另一项研究描述了视频游戏开发的特点以及它与传统软件开发的不同之处[36]。基于访谈,该研究确定了这两类软件系统之间的差异,以及研究人员如何提供帮助[36]。
最后,关于机器人的研究探讨了它的使用,以及这些特殊的软件系统如何帮助其他软件系统的发展[45]。
沿着这些思路,本研究对开放源码汽车软件项目的情况进行了探索。正如第3节中的时间趋势所显示的那样,开放源代码是汽车行业中的一个最新现象。从以前的研究中得到启发,并结合许多来源的元素,我们对资源库的数据进行了定量分析。我们希望像以前的研究一样,我们的研究结果能启发未来的研究,并改善汽车软件的开发状况。
总结
本研究介绍了GitHub上公开的汽车软件项目的情况。我们根据文献中的定义和定义明确的经验方法,对约600个汽车资料库进行了识别和分类。
我们还确定了类似数量的非汽车项目进行比较。我们分析了项目的起源、时间趋势、主要参与者、项目的受欢迎程度、开发的语言、用户在资源库中的分布以及开发活动。我们还提出了一个首创的手工策划的汽车项目数据集和一个非汽车项目的比较集,供复制和未来研究使用。
对于一个在半个世纪的软件使用历史中传统上处于封闭状态的行业来说,软件项目的开放源代码标志着一个里程碑式的变化。这项研究表明,汽车领域正在经历多个方面的转变,包括自动驾驶软件开发的盛行,首选语言从MATLAB到Python的变化,以及软件公司和初创公司进入该领域。
我们预见到,最近软件工程的发展,使自动驾驶成为可能,这将进一步加速开源汽车软件的发展。我们相信,自动驾驶的软件堆栈将受益于目前开源开发的感知和决策软件。由于这些系统是独立于汽车制造商而开发的,因此让开放源码社区参与其中以加速其发展,是一个合乎逻辑的步骤。
文章转载自公众号:智能汽车开发者平台
