汽車行業(yè)已經(jīng)從一個(gè)電子機(jī)械行業(yè)過渡到一個(gè)軟件密集型行業(yè)。目前一輛高端生產(chǎn)型汽車包含1億多行代碼,在代碼規(guī)模上超過了現(xiàn)代飛機(jī)、大型強(qiáng)子對(duì)撞機(jī)、安卓操作系統(tǒng)和Facebook的前端軟件,差距很大。如今,據(jù)報(bào)道,包括蘋果、谷歌、華為、百度和索尼在內(nèi)的全球軟件公司都在努力讓自己的汽車上路。本文涉足開源中的汽車軟件景觀,對(duì)這個(gè)有著長期封閉源代碼開發(fā)歷史的多學(xué)科行業(yè)進(jìn)行了初步的了解。通過描述汽車軟件的特點(diǎn)和開發(fā)風(fēng)格,我們?cè)贕itHub上描繪了汽車軟件的景觀。
(資料圖片)
景觀是由15,000多個(gè)用戶貢獻(xiàn)的≈600個(gè)積極開發(fā)的汽車軟件項(xiàng)目所定義的,這些項(xiàng)目創(chuàng)建于2010年至2021年的12年間。這些項(xiàng)目包括與車輛動(dòng)態(tài)相關(guān)的軟件;LiDAR和攝像頭等傳感器的固件和驅(qū)動(dòng)程序;感知和運(yùn)動(dòng)控制的算法;以及整合上述內(nèi)容的完整操作系統(tǒng)。該領(lǐng)域的發(fā)展是由工業(yè)界和學(xué)術(shù)界共同推動(dòng)的,其中三分之一的汽車軟件庫由一個(gè)組織擁有并積極開發(fā)。我們觀察到多個(gè)方面的轉(zhuǎn)變,包括首選語言從MATLAB到Python,以及感知和決策相關(guān)軟件比傳統(tǒng)汽車軟件更受歡迎。這項(xiàng)研究見證了開源汽車軟件的蓬勃發(fā)展,對(duì)未來的研究和實(shí)踐有很多啟示。
今天,汽車是一個(gè)軟件密集型產(chǎn)業(yè)[8,44]。在這個(gè)價(jià)值5萬億美元的產(chǎn)業(yè)中,最新的創(chuàng)新(包括自動(dòng)駕駛、直觀信息娛樂和電氣化)更多地依賴于軟件創(chuàng)新,而不是機(jī)械創(chuàng)新。到2020年,一輛汽車的軟件和運(yùn)行它的硬件的成本預(yù)計(jì)將從4,800美元到10,650.2美元不等,到2030年,這一成本預(yù)計(jì)將翻一番,占汽車總成本的50%
最近,開放源代碼軟件(OSS)進(jìn)入汽車行業(yè),對(duì)于一個(gè)主要由商業(yè)驅(qū)動(dòng)、嚴(yán)重依賴于保護(hù)其知識(shí)產(chǎn)權(quán)的行業(yè)來說,這是一個(gè)具有里程碑意義的變化。這使得由原始設(shè)備制造商(簡(jiǎn)稱汽車制造商)、其不同層次的供應(yīng)商和工具供應(yīng)商組成的汽車軟件行業(yè),除了有趣和相關(guān)的項(xiàng)目外,還能接觸到全球范圍內(nèi)的貢獻(xiàn)者網(wǎng)絡(luò)。為了了解這一里程碑式的變化所帶來的機(jī)遇,本研究探索了開源軟件中汽車軟件項(xiàng)目的前景,如GitHub所示。
許多研究已經(jīng)探索了OSS的前景,盡管是針對(duì)不同的領(lǐng)域。有關(guān)于AI-ML軟件的研究[10],大型科技公司的軟件[15],甚至特定的應(yīng)用領(lǐng)域,如視頻游戲[36]和機(jī)器人[45]。在此基礎(chǔ)上,我們?cè)黾恿俗詣?dòng)駕駛軟件,它將非安全關(guān)鍵軟件、安全關(guān)鍵軟件和信息娛樂軟件獨(dú)特地融合在一起,形成了一個(gè)單一的系統(tǒng)。我們進(jìn)行了調(diào)查:
開源的汽車軟件項(xiàng)目有什么特點(diǎn)?
我們探討了以下兩個(gè)方面:
(1) 類別和特點(diǎn): 我們確定哪些類型的汽車軟件項(xiàng)目是開源的,并將它們相互比較。我們還將汽車項(xiàng)目與非汽車項(xiàng)目進(jìn)行了比較。此外,我們還探討了汽車項(xiàng)目的特點(diǎn)(例如,領(lǐng)域的規(guī)模和成熟度)及其利益相關(guān)者(例如,主要參與者和附屬機(jī)構(gòu))。
(2) 軟件開發(fā)風(fēng)格: 我們研究軟件開發(fā)的不同方面,如合作(如貢獻(xiàn)者的類型,他們的貢獻(xiàn)和互動(dòng))和貢獻(xiàn)風(fēng)格(如獨(dú)立與依賴)。
我們的分析基于2010年至2021年12年間在GitHub上創(chuàng)建的≈600個(gè)汽車項(xiàng)目和類似數(shù)量的非汽車項(xiàng)目。我們的主要貢獻(xiàn)是:
? 一個(gè)人工策劃的、首創(chuàng)的、積極開發(fā)的汽車軟件的數(shù)據(jù)集,以及它們?cè)谒膫€(gè)流行維度上的分類,包括安全關(guān)鍵型軟件和工具[23]。該數(shù)據(jù)集有助于本研究的復(fù)制和未來對(duì)汽車軟件的探索。
? 汽車軟件的特點(diǎn),包括它的時(shí)間趨勢(shì)、流行程度、編程語言、用戶分布和開發(fā)活動(dòng)。
據(jù)我們所知,這項(xiàng)研究是第一個(gè)介紹開源汽車軟件情況的研究。本研究提出的見解與快速增長的領(lǐng)域有關(guān),但從軟件工程的角度來看卻知之甚少。
本文的其余部分組織如下:第2節(jié)介紹了我們對(duì)數(shù)據(jù)收集和分析的設(shè)計(jì)選擇。第3和第4節(jié)介紹了我們的發(fā)現(xiàn)和見解,以及我們得出這些見解的方法。第5節(jié)介紹了本研究對(duì)汽車和軟件工程研究和實(shí)踐的意義。我們?cè)诘?節(jié)中回顧了對(duì)有效性的威脅,在第7節(jié)中描述了相關(guān)的研究,并在第8節(jié)中總結(jié)了本文。
我們之所以選擇GitHub來探索汽車軟件領(lǐng)域,是因?yàn)樵撈脚_(tái)上有大量的開源軟件項(xiàng)目,而且在全球范圍內(nèi)都很普遍。僅在2021年,就有6400萬個(gè)新倉庫被創(chuàng)建,來自全球200多個(gè)國家的7300多萬貢獻(xiàn)者和84%的財(cái)富100強(qiáng)企業(yè)使用GitHub。
這項(xiàng)調(diào)查有三個(gè)部分。首先,我們定義了汽車軟件,并提出了區(qū)分汽車軟件和一般軟件系統(tǒng)的標(biāo)準(zhǔn);以及確定作為比較基線的一般資源庫的標(biāo)準(zhǔn)。第二和第三部分使用了兩組選定的資源庫的元數(shù)據(jù)。在第二部分,我們提出了資源庫的描述性統(tǒng)計(jì)(在第三部分),而在第三部分,我們探討了用戶統(tǒng)計(jì)以及貢獻(xiàn)模式(在第四部分)。在第二和第三部分中,我們從汽車領(lǐng)域中獲得了洞察力,并與基線進(jìn)行比較。特別是,在第二部分中,我們通過GitHub API(使用PyGithub--GitHub API搜索的python包裝器5)挖掘檔案數(shù)據(jù)。在第三部分中,我們用GHTorrent數(shù)據(jù)[12]進(jìn)一步充實(shí)這一數(shù)據(jù)。一般來說,我們的研究設(shè)計(jì)從最近與開放源碼軟件有關(guān)的景觀研究中獲得靈感(例如,[10,15])。
2.1.什么是汽車軟件?
在不同的科學(xué)界流行著許多關(guān)于汽車軟件的定義(例如,[6,8,14])。這些定義的一些共同要素是 (a) 構(gòu)成汽車一部分的軟件,(b) 通過API或其他類似機(jī)制與汽車互動(dòng)的軟件,以及(c) 專門用于創(chuàng)建(a)和(b)的軟件[5, 8, 11,14]。第3節(jié)將介紹汽車軟件的更詳細(xì)的特征。
2.2. 鑒別汽車軟件項(xiàng)目
為了識(shí)別GitHub上的特定類型的軟件項(xiàng)目,傳統(tǒng)的方法,如主題建模[17,39]被發(fā)現(xiàn)是不合適的[10]。另一種方法是使用GitHub上的 "主題"功能。主題是由項(xiàng)目定義的標(biāo)簽,或由GitHub向項(xiàng)目建議的標(biāo)簽,可用于發(fā)現(xiàn)類似的存儲(chǔ)庫網(wǎng)絡(luò)。我們初步的人工分析顯示,與之前的研究[10]不同,幾個(gè)汽車庫沒有使用GitHub的 "話題"功能。因此,除了通過 "主題"來識(shí)別軟件庫外,我們還在GitHub上搜索特定的關(guān)鍵詞,如果在 "README "文件中發(fā)現(xiàn)這些關(guān)鍵詞,就有可能識(shí)別出一個(gè)汽車軟件庫。
為了利用GitHub的 "主題 "功能識(shí)別汽車軟件,首先我們定義了種子詞。我們擇"automotive"、"automobile"、"drive"、"driving"、"vehicle"、"vehicular"和"car"作為種子詞。為了捕捉一系列相關(guān)的詞匯,我們將種子詞匯轉(zhuǎn)換為它們的基礎(chǔ)詞匯。例如,"automo"代表汽車和汽車。同樣地,其他的關(guān)鍵詞變成了:drive、vehic和car。使用這些基本術(shù)語,我們組成了一個(gè)搜索字符串,排除了與汽車軟件無關(guān)的術(shù)語。例如google-drive、電商和設(shè)備驅(qū)動(dòng)的相關(guān)主題。我們最后的(4個(gè))搜索查詢是:
automo
vehic
driv NOT driven NOT drives NOT licenseNOT google-drive NOT linux-driver
car NOT cart NOT card NOT caro
NOT carp NOT care
使用這些搜索查詢,我們確定了主題,這些主題共同定義了汽車軟件庫的搜索空間。我們總共識(shí)別了2797個(gè)主題標(biāo)簽。我們手動(dòng)分析每個(gè)主題,以確定它是否與汽車軟件相關(guān)。如果主題標(biāo)簽沒有提供信息,我們會(huì)查看鏈接到該主題的前10個(gè)存儲(chǔ)庫的名稱和描述來做出決定。最終,我們確定了286個(gè)主題,并選擇了它們所有的鏈接庫。這些主題的完整列表(連同其搜索詞)可作為我們復(fù)制包的一部分[23]。
此外,為了識(shí)別不使用主題的相關(guān)資料庫,我們從四個(gè)搜索查詢中的每一個(gè)中選擇了基于資料庫數(shù)量的前五個(gè)主題結(jié)果(來自前一步的286個(gè)主題),這些結(jié)果是在前一步中選擇的(共產(chǎn)生20個(gè))。為了提高搜索結(jié)果的信噪比,我們刪除了最常見的術(shù)語(例如,汽車、轎車),結(jié)果是12個(gè)術(shù)語。我們?cè)诓皇褂?"主題 "標(biāo)簽的資源庫的 "README "文件中搜索這些術(shù)語,以確定更多的資源庫。值得注意的是,只有高達(dá)50%的與汽車有關(guān)的資源庫使用了"主題"功能,在584個(gè)被選中的汽車資源庫中,有301個(gè)沒有使用這一功能。請(qǐng)注意,在上述每個(gè)人工分析步驟中,隨機(jī)抽樣和邊緣案例都由兩名研究人員獨(dú)立分析,以確保嚴(yán)謹(jǐn)性和可重復(fù)性。
2.3.篩選和淘汰標(biāo)準(zhǔn)
為了策劃一個(gè)有代表性的活躍項(xiàng)目樣本,我們采用了以下過濾標(biāo)準(zhǔn)(受[10]的啟發(fā)):
大?。捍鎯?chǔ)庫的大小應(yīng)大于0KB。
流行:星級(jí)和分叉是版本庫的流行指標(biāo)。
為了收集一個(gè)有代表性的存儲(chǔ)庫樣本(而不僅僅是流行的),我們選擇至少有5個(gè)分叉或5顆星的存儲(chǔ)庫。
活動(dòng):我們使用提交作為開發(fā)活動(dòng)的代理,并選擇最后一次提交是在2021年的存儲(chǔ)庫,這是選擇積極開發(fā)項(xiàng)目的一個(gè)標(biāo)準(zhǔn)。
數(shù)據(jù):倉庫數(shù)據(jù)應(yīng)該可以通過GitHub API獲得。
上述四個(gè)標(biāo)準(zhǔn)適用于入圍的軟件庫,產(chǎn)生了一個(gè)1981個(gè)軟件庫的子集。
內(nèi)容:為了衡量一個(gè)軟件庫是否是汽車軟件,第一作者根據(jù)以下納入和排除標(biāo)準(zhǔn),手動(dòng)檢查了項(xiàng)目的標(biāo)題、描述和README文件。
納入標(biāo)準(zhǔn)
? 選擇汽車專用軟件
? 選擇有助于開發(fā)汽車專用軟件的軟件
? 只選擇與公路車輛有關(guān)的軟件
? 文本用英文書寫,有README文件排除標(biāo)準(zhǔn)
? 與汽車無關(guān)或與(汽車)銷售和營銷有關(guān)的資料庫、教程、課程項(xiàng)目、學(xué)士和碩士論文、文件、數(shù)據(jù)集、玩具車、游戲、交通基礎(chǔ)設(shè)施、地圖,以及與汽車沒有直接互動(dòng)的資料庫。
我們采取了保守的方法來選擇資料庫。這意味著,屬于灰色地帶的案例被排除在外。為了保證程序的可重復(fù)性,另一位在軟件工程實(shí)證研究方面有經(jīng)驗(yàn)的研究人員使用上述納入和排除標(biāo)準(zhǔn)對(duì)隨機(jī)選擇的資源庫子集(大約100個(gè))進(jìn)行了獨(dú)立分類。用Cohen"s Kappa[33]計(jì)算,這兩個(gè)分類之間的評(píng)判員之間的一致性為0.83,表明幾乎完全一致。兩位研究人員討論了他們的不同意見,直到達(dá)成決定。最后,我們確定了585個(gè)汽車軟件庫。
2.4.確定基線存儲(chǔ)庫
為了將我們的洞察力與基線進(jìn)行比較,我們需要積極開發(fā)與汽車無關(guān)的資源庫。我們的第一個(gè)選擇是重新使用以前的一個(gè)相關(guān)研究的基線[10]。然而,這個(gè)數(shù)據(jù)集有三個(gè)問題:(1)不包含最近的存儲(chǔ)庫(在2019年中期之后創(chuàng)建),(2)系統(tǒng)地排除了AI-ML存儲(chǔ)庫,以及(3)代表最流行的存儲(chǔ)庫,不一定代表一般的軟件項(xiàng)目。為了減輕這些擔(dān)憂,我們建立了具有以下特點(diǎn)的基線。首先,我們使用與汽車軟件項(xiàng)目相同的標(biāo)準(zhǔn)(規(guī)模、受歡迎程度、活動(dòng)和數(shù)據(jù)可用性)來確定積極開發(fā)的項(xiàng)目(參見2.3節(jié))。我們唯一的偏差是選擇有五顆或更多星星和分叉的存儲(chǔ)庫。
這個(gè)決定是為了減輕搜索API的實(shí)際執(zhí)行限制。然后,對(duì)于每一年(從2010年到2021年),我們按照多年來所有活躍開發(fā)的GitHub存儲(chǔ)庫的百分比分布,對(duì)存儲(chǔ)庫進(jìn)行子抽樣,并根據(jù)每個(gè)子抽樣中最近的活動(dòng)進(jìn)行選擇。我們選擇的軟件庫,使其總數(shù)量接近600個(gè)軟件庫。為了避免與汽車軟件的重疊,我們排除了含有汽車、轎車和車輛等術(shù)語的軟件庫。我們得到的數(shù)據(jù)集有566個(gè)資源庫作為基線。
2.5. 數(shù)據(jù)分析
我們的數(shù)據(jù)分析有兩個(gè)部分:(1)我們報(bào)告了關(guān)于選擇汽車和基線庫的描述性統(tǒng)計(jì)。我們描述了汽車軟件系統(tǒng)的類型以及它們與基線軟件系統(tǒng)的關(guān)系。我們這部分的分析是基于使用PyGithub提取的元數(shù)據(jù)。詳情請(qǐng)參考第3節(jié)。(2) 我們通過結(jié)合PyGithub和GHTorrent[12]的洞察力,對(duì)開發(fā)風(fēng)格進(jìn)行了更深入的了解。由于GHTorrent數(shù)據(jù)集只包含截至2021年7月的開發(fā)數(shù)據(jù)(我們?cè)?021年12月使用PyGitHub收集數(shù)據(jù)),GHTorrent中沒有基于PyGitHub數(shù)據(jù)的一些軟件庫。因此,我們只剩下585個(gè)汽車庫中的436個(gè)和565個(gè)基線庫中的503個(gè)。關(guān)于更深入的實(shí)施細(xì)節(jié)和獲得的見解,請(qǐng)參考第4節(jié)。
本節(jié)介紹了GitHub上的汽車軟件的類型和它們的特點(diǎn)。首先,我們介紹汽車軟件的不同分類方法。下一小節(jié)介紹了我們的研究結(jié)果,以及汽車軟件與一般軟件系統(tǒng)的比較集的獨(dú)特特征。這一分析是基于2010年至2021年12年間創(chuàng)建的584個(gè)汽車軟件庫(使用PyGitHub提取)。最近的一個(gè)是在2021年12月30日創(chuàng)建的。
3.1.方法
非正式地,汽車軟件可以被定義為 (1)運(yùn)行或與汽車互動(dòng)的軟件;(2)支持運(yùn)行或與汽車互動(dòng)的軟件的不同生命周期階段(如開發(fā)、確認(rèn)和驗(yàn)證)的工具。我們將以上兩類分別稱為車載軟件和工具。
車載軟件:在文獻(xiàn)中,有許多方法可以對(duì)車載軟件進(jìn)行分類。我們使用以下兩種方案:
(1) 安全關(guān)鍵型和基于應(yīng)用的安全關(guān)鍵型: 安全關(guān)鍵型軟件被定義為執(zhí)行任務(wù)的軟件,如果不正確執(zhí)行,可能會(huì)導(dǎo)致人類受傷、死亡或?qū)Νh(huán)境造成危害[1, 16, 22, 24, 25, 34]。在對(duì)汽車軟件進(jìn)行人工分類的過程中,我們注意到,除了安全關(guān)鍵型和非安全關(guān)鍵型軟件系統(tǒng)外,還有第三類軟件系統(tǒng):基于應(yīng)用的安全關(guān)鍵型。這些軟件系統(tǒng)可能是安全的關(guān)鍵,這取決于(預(yù)期的)應(yīng)用環(huán)境。例如,用于感知的軟件系統(tǒng)在用于完全自動(dòng)駕駛(即沒有主動(dòng)的人類駕駛員)時(shí)是安全的關(guān)鍵。
在這種情況下,感知軟件系統(tǒng)的任何故障、功能失?;蛞馔夤δ芏伎赡軐?dǎo)致撞車,對(duì)交通參與者造成傷害,并對(duì)其周圍環(huán)境造成傷害。同樣的系統(tǒng)在用作駕駛員警告系統(tǒng)時(shí),由人類駕駛員負(fù)責(zé),可以被歸類為非安全關(guān)鍵。在這種情況下,操縱車輛的責(zé)任由人類駕駛員承擔(dān)。我們根據(jù)應(yīng)用將這類軟件庫劃分為安全關(guān)鍵型。
(2) Broy的分類: 2007年,Broy等人[5]將自動(dòng)化軟件分為以下5類:(a) 人機(jī)界面(HMI)、多媒體和遠(yuǎn)程信息處理相關(guān)軟件;(b) 車身/舒適性軟件,例如,控制汽車門各方面的軟件;(c) 用于安全電子的軟件,這是有嚴(yán)格安全要求的硬實(shí)時(shí)、基于離散事件的軟件;(d) 動(dòng)力系統(tǒng)和底盤控制軟件,其中包括控制算法和控制發(fā)動(dòng)機(jī)的軟件;以及 (e) 基礎(chǔ)設(shè)施軟件,如用于診斷和軟件更新的軟件。
自2007年以來,汽車軟件和軟件系統(tǒng)領(lǐng)域總體上有所發(fā)展。例如,2012年使用神經(jīng)網(wǎng)絡(luò)證明了以(相對(duì))較低的計(jì)算能力進(jìn)行高度準(zhǔn)確的圖像識(shí)別[30]。汽車軟件在感知系統(tǒng)和自動(dòng)決策方面取得了進(jìn)展,這使得完全自動(dòng)駕駛成為可能。雖然自動(dòng)駕駛的其他方面如線控駕駛在目前的分類中得到了體現(xiàn),但感知和決策這一方面卻沒有。我們通過增加第六個(gè)類別來擴(kuò)展Broy的分類:(f)感知和決策軟件。感知和決策軟件包括任何有助于感知(了解車輛周圍環(huán)境)和決策(例如,決定啟動(dòng)、轉(zhuǎn)向和制動(dòng))的軟件,適用于任何級(jí)別的自動(dòng)駕駛(即駕駛輔助、部分自動(dòng)駕駛和完全自動(dòng)駕駛)。
工具:行業(yè)標(biāo)準(zhǔn)(如ISO26262[18,29])定義了多個(gè)階段,如汽車生命周期中的驗(yàn)證和核實(shí)。我們認(rèn)為所有為汽車生命周期的一個(gè)或多個(gè)階段提供工具的軟件庫都屬于這一類別。為了簡(jiǎn)潔起見,我們從這個(gè)分類中排除了我們只有一個(gè)資源庫的階段(以及相應(yīng)的工具)。選定的資源庫分為以下四類:(1)開發(fā)工具,(2)與模擬或仿真有關(guān)的工具,(3)驗(yàn)證和核實(shí)的工具,以及(4)診斷工具。
請(qǐng)注意,傳統(tǒng)上與模擬(和仿真)有關(guān)的工具被認(rèn)為是驗(yàn)證和核實(shí)的一部分。然而,隨著神經(jīng)網(wǎng)絡(luò)的出現(xiàn),許多仿真工具被用于訓(xùn)練(開發(fā))神經(jīng)網(wǎng)絡(luò)。因此,我們?cè)诖藛为?dú)研究這些工具。
為了確保對(duì)汽車資源庫進(jìn)行嚴(yán)格的、可重復(fù)的分類,第一作者和另一位在經(jīng)驗(yàn)性軟件工程方面有經(jīng)驗(yàn)的研究人員,對(duì)隨機(jī)選擇的資源庫和邊界案例的子集進(jìn)行了獨(dú)立分類。
在隨后的小節(jié)中,我們根據(jù)上述分類報(bào)告了汽車軟件的分布情況,以提供GitHub上開源的汽車軟件類型的概述。在本文中,我們將繼續(xù)深入研究這些流行和突出的汽車軟件類別。
圖1:2010年至2021年期間,參照GitHub中所有積極開發(fā)的軟件庫,積極開發(fā)的自動(dòng)軟件庫的時(shí)間演變。
為了描述汽車軟件的特點(diǎn),我們報(bào)告了汽車軟件庫的描述性統(tǒng)計(jì),并將其與同樣來自GitHub的非汽車軟件庫的對(duì)比集進(jìn)行了比較。我們的分析突出了四個(gè)關(guān)鍵領(lǐng)域,首先是GitHub上存儲(chǔ)庫的時(shí)間趨勢(shì)和演變。這一分析表明了該領(lǐng)域的成熟度和增長。接下來,我們將討論汽車軟件的所有權(quán)(用戶與組織),指出該領(lǐng)域的主要參與者,以及他們?nèi)绾嗡茉炱囓浖木坝^。沿著同樣的思路,我們繼續(xù)從開發(fā)活動(dòng)(從分叉數(shù)推斷)和一般(使用星級(jí)和訂閱者)方面探索流行的汽車軟件。最后,我們探討了不同汽車軟件使用的主要編程語言的選擇,正如使用上述類別所確定的那樣。
3.2. 研究結(jié)果
創(chuàng)世紀(jì)--開始與時(shí)間趨勢(shì): 2010年,第一個(gè)仍在積極開發(fā)的汽車項(xiàng)目,Veins,在GitHub中創(chuàng)建(2010年4月26日)。這個(gè)車輛網(wǎng)絡(luò)模擬框架定義了汽車軟件開發(fā)進(jìn)入GitHub,標(biāo)志著這個(gè)行業(yè)在過去50年的軟件使用過程中傳統(tǒng)上是封閉的,這是一個(gè)轉(zhuǎn)折點(diǎn)。
從那時(shí)起,每年都有更多的軟件庫加入,在12年的時(shí)間里,總共有584個(gè)(積極開發(fā))汽車軟件庫。圖1顯示了汽車軟件庫(基于其創(chuàng)建年份)在GitHub中活躍開發(fā)的軟件庫總數(shù)中的百分比分布。時(shí)間趨勢(shì)表明,從2018年到2019年,汽車軟件的增長比例翻了一番,而從2019年到2020年又翻了一番。與整個(gè)GitHub上積極開發(fā)的軟件庫(在2014年達(dá)到頂峰)相比,汽車軟件仍處于起步階段,預(yù)計(jì)在未來會(huì)有所增長。
起源和時(shí)間趨勢(shì):Veins--一個(gè)模擬工具,是第一個(gè)由用戶在2010年創(chuàng)建的汽車軟件庫,目前仍在積極開發(fā)中。這項(xiàng)研究見證了開源汽車動(dòng)力軟件的蓬勃發(fā)展,它處于起步階段。 |
新機(jī)遇的曙光--所有權(quán):2010年,沒有任何組織在GitHub上開發(fā)任何仍在積極開發(fā)的汽車軟件。在接下來的6年里(2011-2016),小型組織、愛好者團(tuán)體和非營利組織涉足開源領(lǐng)域;擁有14個(gè)軟件項(xiàng)目。第一個(gè)組織擁有(仍在積極開發(fā))的項(xiàng)目是Open-Vehicle-Monitoring-System,這是一個(gè)來自愛好者團(tuán)體OpenVehicles的車載軟件。
2017年標(biāo)志著大公司進(jìn)入開源領(lǐng)域。今年,中國搜索引擎公司百度(Baidu)創(chuàng)建了阿波羅項(xiàng)目(project Apollo),這是一個(gè)用于全自動(dòng)駕駛的完整軟件堆棧。其他大公司,即亞馬遜、英特爾、微軟和Udacity很快就加入了,它們各自開源了一個(gè)工具來構(gòu)建自動(dòng)駕駛解決方案。在我們的數(shù)據(jù)集中,每三個(gè)(或584個(gè)中的194個(gè))汽車軟件庫中就有一個(gè)是由組織擁有的。累計(jì)起來,我們發(fā)現(xiàn)有163個(gè)組織和343個(gè)用戶擁有至少一個(gè)軟件庫。
今天,汽車開放源碼軟件的開發(fā)是由工具供應(yīng)商、學(xué)術(shù)和工業(yè)研究實(shí)驗(yàn)室?guī)ь^的,學(xué)術(shù)研究團(tuán)體擁有30多個(gè)資源庫。
在GitHub上的汽車軟件中,唯一的汽車制造商是豐田,它有兩個(gè)倉庫,一個(gè)工具和一個(gè)車載軟件。請(qǐng)注意,我們可能遺漏了汽車制造商的不同層級(jí)的供應(yīng)商,因?yàn)闆]有直接的方法從GitHub元數(shù)據(jù)中識(shí)別供應(yīng)商。
目前,從事汽車軟件工作的前5個(gè)組織(按資源庫數(shù)量計(jì)算)是:EPFL的VITA實(shí)驗(yàn)室(5個(gè)資源庫),LG硅谷實(shí)驗(yàn)室(4個(gè)),MathWorks開源和社區(qū)項(xiàng)目(4個(gè)),AutonomouStuff(3個(gè)),以及CARLA(3個(gè))。
存儲(chǔ)庫所有權(quán):每三個(gè)汽車軟件庫中就有一個(gè)是由某個(gè)組織擁有的。該領(lǐng)域見證了來自學(xué)術(shù)界和工業(yè)界(工具供應(yīng)商)研究實(shí)驗(yàn)室的高度參與,只有一家汽車制造商(豐田)走在前列。 |
處于有利地位--受歡迎程度:根據(jù)受歡迎程度的三個(gè)指標(biāo)(星級(jí)、分叉和訂閱者;見表1),各組織的前5個(gè)受歡迎的汽車項(xiàng)目是仿真工具(共4個(gè)),其次是關(guān)于感知和決策系統(tǒng)的車載軟件(fizyr/keras-retinanet)和自動(dòng)駕駛堆棧Apollo。
關(guān)于汽車軟件的流行用戶庫更加多樣化,包括車內(nèi)軟件和工具。排名前五的車載軟件涉及(a)人機(jī)界面和遠(yuǎn)程信息處理,以及(b)感知和決策。排在前五位的工具涉及(a)感知和決策相關(guān)軟件的開發(fā)和(b)診斷。
圖2展示了汽車軟件中的星級(jí)、分叉和訂閱者的分布情況,以及基線庫。一般來說,項(xiàng)目的星級(jí)比分叉和訂閱者多。這對(duì)汽車和基線軟件庫來說也是如此。值得注意的是,汽車軟件遠(yuǎn)沒有基線軟件系統(tǒng)那么受歡迎,這進(jìn)一步加強(qiáng)了該領(lǐng)域的初級(jí)階段的概念。使用Mann-Whitney-Wilcoxon測(cè)試[4],即兩個(gè)獨(dú)立數(shù)據(jù)樣本的非參數(shù)測(cè)試,計(jì)算出P值<0.05時(shí),汽車庫和基線庫之間的分布差異具有統(tǒng)計(jì)學(xué)意義。
圖2:參照比較集,汽車資源庫的受歡迎程度分布(以星級(jí)、分叉和訂閱者計(jì))(去掉離群值)
汽車資源庫的星級(jí)、分叉和訂閱者的中位數(shù)分別為24、9和4,而基線庫的中位數(shù)分別為297、121和36。在此,我們想提醒讀者,盡管我們?cè)噲D選擇一個(gè)有代表性的項(xiàng)目樣本作為基線,但我們的數(shù)據(jù)集可能在某種程度上偏向于更受歡迎的軟件庫(詳見第6節(jié)的有效性威脅),從而進(jìn)一步歪曲了分布。即使在汽車軟件庫中,組織擁有的軟件庫也至少是用戶擁有的軟件項(xiàng)目的兩倍。
受歡迎程度:汽車軟件作為一個(gè)領(lǐng)域,在GitHub上不如一般軟件受歡迎。百度的自動(dòng)駕駛軟件棧Apollo是目前最受歡迎的汽車軟件庫。一般來說,組織擁有的軟件項(xiàng)目比用戶擁有的項(xiàng)目要受歡迎兩倍。 |
表1:前5個(gè)受歡迎的組織和用戶庫(基于訂閱者、分叉和星級(jí))及其數(shù)量
Genera - 汽車軟件的類型:大體上,與工具(233)相比,車載軟件(375)非常豐富。
表2列出了汽車軟件類型(包括車載軟件和工具)的詳細(xì)分布。請(qǐng)注意,一個(gè)軟件庫可以屬于多個(gè)類別。因此,所有類別的資源庫數(shù)量之和可能大于實(shí)際的資源庫數(shù)量。關(guān)于單個(gè)資源庫分類的更多細(xì)節(jié)可在復(fù)制包[23]中找到。
在車內(nèi)軟件中,大多數(shù)資源庫與感知和決策相關(guān)的軟件有關(guān)。值得注意的是,Broy對(duì)車載軟件的分類[5]只是整體中的一小部分(375個(gè)中的108個(gè))。在這108個(gè)中,人機(jī)界面(71個(gè))和基礎(chǔ)設(shè)施(38個(gè))是最主要的類別,并且主要由用戶開發(fā)。
開放源代碼中的安全關(guān)鍵軟件的發(fā)展仍處于初始階段(21個(gè)軟件庫)。雖然,許多軟件庫屬于基于應(yīng)用類別的安全關(guān)鍵型軟件(大約60%的車載軟件)。大多數(shù)安全關(guān)鍵軟件與感知和基于決策的軟件有關(guān),旨在用于全自動(dòng)駕駛系統(tǒng)。這些軟件包括基于神經(jīng)網(wǎng)絡(luò)的語義分割、路徑規(guī)劃、物體、行人和意圖檢測(cè)相關(guān)軟件。
汽車軟件中的 "工具 "類別以模擬器和相關(guān)軟件為主。這在工業(yè)界的五大汽車軟件中很明顯(見表1),其中三個(gè)是模擬器。就整個(gè)工具而言,用戶(100)和組織(133)的所有權(quán)幾乎相等。我們看到在開發(fā)工具(32個(gè)來自組織,31個(gè)來自用戶)和驗(yàn)證和核查工具(18個(gè)來自組織,22個(gè)來自用戶)的所有權(quán)方面有類似的趨勢(shì)。唯一的例外是診斷工具,它在用戶(28個(gè))中的地位比組織(5個(gè))高五倍。除此以外,我們還注意到少量的汽車軟件庫(32個(gè))與(駕駛員)安全(如瞌睡檢測(cè))和安全(安全測(cè)試工具或用于車輛安全的車載軟件)有關(guān)。
汽車軟件的類型: 最受歡迎的開源汽車軟件類型是車載軟件(375個(gè)軟件庫),其次是工具(233個(gè)軟件庫)。在車載軟件中,感知和決策軟件最受歡迎,而在工具中,模擬是最突出的。傳統(tǒng)的車輛軟件和安全關(guān)鍵軟件在開放源碼中的代表性不足。 |
兩個(gè)世界;兩種語言 - 語言:汽車軟件是用33種主要語言開發(fā)的,如果考慮到所有的開發(fā)語言,則有96種語言。最受歡迎的編程語言是Python,有291個(gè)項(xiàng)目使用它作為主要語言,多達(dá)415個(gè)項(xiàng)目使用它作為語言之一。排名前五的主要編程語言是Python(291)、C++(98)、C(33)、JupyterNotebook(33)和MATLAB(30)。從技術(shù)上講,Jupyter Notebook不是一種編程語言,而是一種文本和代碼的混合。我們不對(duì)筆記本中使用的編程語言做任何假設(shè),而是根據(jù)GitHub的標(biāo)簽來考慮它們。各機(jī)構(gòu)普遍喜歡(根據(jù)資源庫數(shù)量)Python(82)、C++(37)、C(16)、MATLAB(10)和Jupyter Notebook(7)用于他們的項(xiàng)目。值得注意的是,用戶也喜歡同樣的語言,但順序略有不同:Python(209),C++(61),Jupyter Notebook(26),MATLAB(20),和C(17)。
表2:GitHub上的汽車軟件類型及其分布
大多數(shù)安全關(guān)鍵型軟件是用C++編寫的(14),其次是Python(4),MATLAB(1)和C(1)。
各個(gè)項(xiàng)目的編程語言的分布顯示,從MATLAB作為首選開發(fā)語言[2]到Python的轉(zhuǎn)變。同樣地,傳統(tǒng)上大多數(shù)安全關(guān)鍵軟件都是用C或Ada開發(fā)的,而現(xiàn)在GitHub中的C++語言已經(jīng)轉(zhuǎn)變了[20]。
語言:開源汽車軟件開發(fā)的首選語言已經(jīng)從MATLAB(30個(gè)存儲(chǔ)庫)轉(zhuǎn)移到Python(291個(gè)存儲(chǔ)庫)。同樣地,安全關(guān)鍵軟件的開發(fā)也從 C 或 Ada 轉(zhuǎn)向C++。 |
在上一節(jié)得出的見解的基礎(chǔ)上,本節(jié)深入探討了汽車軟件的用戶分布、開發(fā)活動(dòng)的類型以及開發(fā)模式的選擇。我們將其與基線進(jìn)行比較,以了解汽車軟件的獨(dú)特特征,如果有的話。請(qǐng)注意,由于本分析結(jié)合了使用PyGithub(2021年12月)獲得的數(shù)據(jù)和GHTorrent的數(shù)據(jù)(2021年7月前的數(shù)據(jù)),我們錯(cuò)過了GHTorrent上不存在的軟件庫。此外,根據(jù)個(gè)別資源庫的開發(fā)活動(dòng)和GHTorrent數(shù)據(jù)集中的缺失數(shù)據(jù),資源庫的總計(jì)數(shù)在不同的分析中可能有所不同。
4.1. 方法
用戶分布:在這一節(jié)中,我們探討了不同項(xiàng)目的用戶類型和分布情況。
我們研究?jī)煞N類型的用戶:外部和內(nèi)部[10],基于他們?cè)谄囓浖械幕顒?dòng)。內(nèi)部用戶通過對(duì)實(shí)際的軟件進(jìn)行修改(提交)和調(diào)節(jié)決定是否包含/排除建議的修改(如合并和關(guān)閉拉動(dòng)請(qǐng)求和關(guān)閉問題),直接對(duì)項(xiàng)目的發(fā)展做出貢獻(xiàn)。另一方面,外部用戶通過要求提供功能、報(bào)告問題和發(fā)表評(píng)論來間接做出貢獻(xiàn)。我們認(rèn)為,調(diào)查內(nèi)部和外部用戶在各個(gè)項(xiàng)目中的分布情況,可以看出一個(gè)社區(qū)是如何運(yùn)作的。為了更深入的了解,我們還探討了不同組織和用戶項(xiàng)目的貢獻(xiàn)模式的變化(如果有的話)。要了解開發(fā)者的貢獻(xiàn)和協(xié)作模式,下一步自然是研究開發(fā)者的角色(如主力,或報(bào)告者)和他們的分布。然而,鑒于社區(qū)規(guī)模小,發(fā)展活動(dòng)有限,要提供有意義的見解和結(jié)論性的統(tǒng)計(jì)分析是不可行的。因此,我們不報(bào)告合作模式。
開發(fā)活動(dòng):GitHub上的開發(fā)活動(dòng)可以大致分為提交、問題和拉動(dòng)請(qǐng)求。問題事件表明更廣泛的用戶群(除貢獻(xiàn)者外)的參與,要求增加功能或指出問題。參與議題活動(dòng)表明軟件的用戶如何與開發(fā)者互動(dòng),影響其發(fā)展。下一組開發(fā)活動(dòng)是拉動(dòng)請(qǐng)求,這表明對(duì)軟件的影響相對(duì)較強(qiáng),它提出了一些變化,以納入軟件系統(tǒng)或其相關(guān)工件。這些活動(dòng)記錄決定包括或排除提議的變更。最后,提交是一個(gè)更復(fù)雜的活動(dòng),涉及在軟件中創(chuàng)建所需更改的技術(shù)方面在這里,我們也探討了項(xiàng)目所有權(quán)是否會(huì)影響跨項(xiàng)目的開發(fā)活動(dòng)模式。
開發(fā)模式與自主性:最后,我們分析了汽車軟件中開發(fā)模式的選擇。在GitHub上有兩種類型的開發(fā)模式:(1)共享儲(chǔ)存模式;(2)fork& pull模式。這兩種模式在貢獻(xiàn)者的自主性水平上是不同的。在共享資源庫模式中,作者可以自己合并他們提出的代碼修改,表明他們的自主性。fork & pull模式意味著作者提出的修改要經(jīng)過維護(hù)者的審查。在這種模式下,作者要依靠審查者的行動(dòng)來決定是否包含或排除所提出的修改。為了研究一個(gè)項(xiàng)目的自主性或依賴性水平,我們匯總了拉動(dòng)請(qǐng)求和提交的分布,并提交了作者將更改(自合并)與其他貢獻(xiàn)者(其他合并)合并的請(qǐng)求。我們把有更多自我合并的項(xiàng)目稱為實(shí)行共享庫模式,否則就是fork and pull模式。
4.2.研究結(jié)果
真正的星級(jí)--用戶和他們的分布:所有的汽車資料庫累計(jì)有15,260個(gè)獨(dú)立用戶,而基線資料庫有439,032個(gè)獨(dú)立用戶。在自動(dòng)軟件中,每個(gè)軟件庫的用戶數(shù)中位數(shù)是5,而我們的基線中的一般項(xiàng)目是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:與基線相比,儲(chǔ)存庫的用戶分布情況(省略離群值)
圖4:用戶和組織所擁有的汽車資料庫的內(nèi)部和外部用戶(省略異常值)
用Mann-Whitney-Wilcoxon檢驗(yàn)計(jì)算,兩個(gè)分布有顯著差,P值<0.05。在此,我們?cè)俅翁嵝炎x者,我們的基準(zhǔn)線在某種程度上偏向于積極開發(fā)的流行軟件系統(tǒng)。因此,差異可能看起來比實(shí)際大。請(qǐng)注意,我們對(duì)個(gè)人貢獻(xiàn)者的識(shí)別依賴于GitHub的唯一用戶標(biāo)識(shí)。然而,一個(gè)人可以有多個(gè)獨(dú)特的身份[41]。因此,實(shí)際的用戶數(shù)量可能比報(bào)告的數(shù)量要少。
觀察汽車軟件中的用戶分布,每個(gè)項(xiàng)目的中位數(shù)是3個(gè)內(nèi)部用戶和5個(gè)外部用戶。當(dāng)我們?cè)谒袡?quán)類型上進(jìn)一步分離用戶分布時(shí)(參見圖4),我們觀察到組織在每個(gè)存儲(chǔ)庫上有更多的用戶。使用Mann-Whitney-Wilcoxon檢驗(yàn)在p值<0.05時(shí)計(jì)算出這兩個(gè)分布是不同的。組織記錄的中位數(shù)為6個(gè)內(nèi)部用戶和8個(gè)外部用戶,而用戶擁有的汽車存儲(chǔ)庫分別為3個(gè)和5個(gè)。
跨存儲(chǔ)庫的用戶分布:開源汽車軟件有一個(gè)小的開發(fā)人員社區(qū),每個(gè)存儲(chǔ)庫平均只有5個(gè)用戶。值得注意的是,與用戶存儲(chǔ)庫相比,組織存儲(chǔ)庫需要更多的內(nèi)部和外部參與。 |
原生代 - 發(fā)展活動(dòng): 我們注意到,汽車軟件中最常見的開發(fā)活動(dòng)(基于活動(dòng)的中位數(shù))是以提交(32)的形式出現(xiàn),其次是問題(9),然后是拉動(dòng)請(qǐng)求(6)。
圖5:組織擁有的汽車存儲(chǔ)庫與用戶擁有的存儲(chǔ)庫中的開發(fā)活動(dòng)(省略了異常值)
我們進(jìn)一步調(diào)查了基于所有權(quán)和汽車軟件類型的開發(fā)活動(dòng)的分布。
圖5展示了組織擁有的汽車軟件存儲(chǔ)庫與用戶擁有的存儲(chǔ)庫的開發(fā)活動(dòng)。通常,組織項(xiàng)目比用戶項(xiàng)目擁有更多的開發(fā)活動(dòng)(就中位數(shù)而言),盡管有一些用戶項(xiàng)目的提交活動(dòng)級(jí)別與組織存儲(chǔ)庫的級(jí)別相匹配。這表明用戶項(xiàng)目之間的差異性,在開發(fā)活動(dòng)的分布上具有極端性。請(qǐng)注意,用Mann-Whitney-Wilcoxon檢驗(yàn)法計(jì)算,兩個(gè)分布是不同的(P值<0.05)。
圖6顯示了整個(gè)車載軟件和工具的開發(fā)活動(dòng)的比較。在這里,跨問題(p值=0.29)和拉動(dòng)請(qǐng)求(p值=0.40)的開發(fā)活動(dòng)具有可比性,而在提交方面則有重大差異(p值=0.0013)。這些P值是用Mann-Whitney-Wilcoxon檢驗(yàn)計(jì)算的,這樣P值<0.05表示分布有差異,否則沒有差異。我們注意到,與車載軟件相比,工具中的承諾活動(dòng)更多。我們認(rèn)為,這種差異是由于工具供應(yīng)商組織在汽車軟件中的參與度更高。提醒一下,在233個(gè)組織擁有的資源庫中,有100個(gè)屬于工具類,而在375個(gè)車載軟件類中有97個(gè)。
我們還探討了感知和決策相關(guān)軟件的開發(fā)活動(dòng)的分布情況,這些軟件構(gòu)成了車載軟件的大部分(有相當(dāng)數(shù)量的軟件庫可供統(tǒng)計(jì)比較),與車載軟件中其他軟件庫的開發(fā)活動(dòng)相比。圖7顯示,與感知和決策相關(guān)的軟件相比,傳統(tǒng)軟件在提交、問題和拉動(dòng)請(qǐng)求方面的開發(fā)更為活躍。在屬于所有Broy類別的存儲(chǔ)庫上的開發(fā)活動(dòng)分布的差異與屬于感知和決策軟件的存儲(chǔ)庫相比,使用Mann- Whitney-Wilcoxon檢驗(yàn)在p值<0.05的情況下測(cè)量顯著不同。這意味著,雖然感知和決策相關(guān)的軟件在數(shù)量上更多,但它們的開發(fā)活動(dòng)卻比傳統(tǒng)軟件少。
圖6:車內(nèi)軟件與工具的開發(fā)活動(dòng)(省略離群值)
圖7:與感知和決策相關(guān)的車載軟件與其他車載軟件的開發(fā)活動(dòng)(省略異常值)
開發(fā)活動(dòng):組織擁有的資源庫在所有類別中都吸引了更多的貢獻(xiàn)。然而,與組織擁有的軟件庫的開發(fā)活動(dòng)水平相匹配的用戶擁有的軟件庫數(shù)量較少。工具的開發(fā)比車載軟件更積極 在車載軟件中,傳統(tǒng)的車載軟件的開發(fā)比感知相關(guān)的軟件更積極。 |
守護(hù)者-開發(fā)模式: 通過查看每個(gè)項(xiàng)目的協(xié)作模式,我們將每個(gè)項(xiàng)目分類為共享存儲(chǔ)庫或分拆開發(fā)模型。我們注意到,雖然有41個(gè)資源庫遵循共享資源庫模式,但有182個(gè)資源庫實(shí)行叉拉取模式。這表明自主開發(fā)的項(xiàng)目較少,大多數(shù)開發(fā)團(tuán)隊(duì)(資源庫的貢獻(xiàn)者)都沒有自主權(quán)。這一觀察結(jié)果與叉拉式是最突出的模式的基線相吻合,也與之前關(guān)于其他軟件子社區(qū)的工作相吻合[10]。
開發(fā)模式:汽車軟件 —— 盡管是一個(gè)小型的開發(fā)社區(qū) —— 在其開發(fā)活動(dòng)中大多采用叉拉模式。 |
本研究介紹了GitHub上公開的汽車軟件項(xiàng)目的情況。我們根據(jù)文獻(xiàn)中的定義和定義明確的經(jīng)驗(yàn)方法,對(duì)約600個(gè)汽車資料庫進(jìn)行了識(shí)別和分類。
我們還確定了類似數(shù)量的非汽車項(xiàng)目進(jìn)行比較。我們分析了項(xiàng)目的起源、時(shí)間趨勢(shì)、主要參與者、項(xiàng)目的受歡迎程度、開發(fā)的語言、用戶在資源庫中的分布以及開發(fā)活動(dòng)。我們還提出了一個(gè)首創(chuàng)的手工策劃的汽車項(xiàng)目數(shù)據(jù)集和一個(gè)非汽車項(xiàng)目的比較集,供復(fù)制和未來研究使用。
對(duì)于一個(gè)在半個(gè)世紀(jì)的軟件使用歷史中傳統(tǒng)上處于封閉狀態(tài)的行業(yè)來說,軟件項(xiàng)目的開放源代碼標(biāo)志著一個(gè)里程碑式的變化。這項(xiàng)研究表明,汽車領(lǐng)域正在經(jīng)歷多個(gè)方面的轉(zhuǎn)變,包括自動(dòng)駕駛軟件開發(fā)的盛行,首選語言從MATLAB到Python的變化,以及軟件公司和初創(chuàng)公司進(jìn)入該領(lǐng)域。
我們預(yù)見到,最近軟件工程的發(fā)展,使自動(dòng)駕駛成為可能,這將進(jìn)一步加速開源汽車軟件的發(fā)展。我們相信,自動(dòng)駕駛的軟件堆棧將受益于目前開源開發(fā)的感知和決策軟件。由于這些系統(tǒng)是獨(dú)立于汽車制造商而開發(fā)的,因此讓開放源碼社區(qū)參與其中以加速其發(fā)展,是一個(gè)合乎邏輯的步驟。
參考文獻(xiàn):
分享不易,懇請(qǐng)點(diǎn)個(gè)【】和【在看】
標(biāo)簽:
熱門