首先,我們還是將汽車軟件放在整車系統(tǒng)下來看。因此,我們會(huì)分離出3個(gè)層級(jí)的集成:
- 軟件組件集成。
- 軟件向硬件集成。
- ECU向整車集成。
1 軟件集成與分支劃分
簡(jiǎn)單來說,軟件集成就是創(chuàng)建一個(gè)邊界明確、質(zhì)量可靠的完整軟件包。再擴(kuò)充一些的話,就是基于源代碼管理工具和分支管理策略,針對(duì)不同的單元(如.c或.h文件)逐級(jí)進(jìn)行集成,并將相關(guān)的輔助文檔、集成測(cè)試、配置文件等配置項(xiàng)進(jìn)行配置管理。
1.1 “分支”的概念
由于汽車軟件的平臺(tái)化需求很高,所以,我們一般會(huì)進(jìn)行“開發(fā)分支”和“交付分支”的區(qū)分。
- 開發(fā)分支側(cè)重于維護(hù)新特性的上線和通用性技術(shù)方案的導(dǎo)入。
- 交付分支則關(guān)心的是基于特定項(xiàng)目要求(如標(biāo)定參數(shù)、項(xiàng)目配置參數(shù)、bug修復(fù)等)的釋放。
二者的區(qū)分也可以讓“開發(fā)的技術(shù)完善性”和“交付的時(shí)間及時(shí)性”不至于直接沖突和互相干擾。
一般而言,軟件集成的主要任務(wù)是識(shí)別、確認(rèn)不同分支之間的公共組件,定義哪些組件應(yīng)該從一條分支摘取到另一條分支上、哪些組件的變更需要單獨(dú)釋放以及哪個(gè)軟件基線最終能夠被用于哪個(gè)配置的交付上。
1.2 具體的集成
集成的策略取決于項(xiàng)目或平臺(tái)釋放的目的,而這又來源于項(xiàng)目的整體考量,所以,集成任務(wù)是需要項(xiàng)目經(jīng)理類角色驅(qū)動(dòng)的。簡(jiǎn)要集成流程如圖1所示。
圖1 軟件集成簡(jiǎn)要流程
1.2.1 集成輸入
盡管郵件也是一種輸入,但對(duì)于繁雜的集成任務(wù)來說,通常最好使用ALM工作流類的工具來支撐,或是bug,或是變更,或是新特性需求,都可以通過相關(guān)工作項(xiàng)來驅(qū)動(dòng)集成,比如,輸入需求基線、變更范圍、版本規(guī)則、工件、上一版本軟件基線、交付日期等。
實(shí)際上,良好的集成更多來源于管理。
1.2.2 編譯、測(cè)試、打包
集成工程師在任務(wù)驅(qū)動(dòng)下,去完成相應(yīng)的源代碼編譯和相關(guān)錯(cuò)誤清除,并完成必要的接口、資源消耗、冒煙等靜動(dòng)態(tài)集成測(cè)試。最后,根據(jù)預(yù)定規(guī)則,完成可執(zhí)行文件、配置信息、測(cè)試報(bào)告、架構(gòu)模型、設(shè)計(jì)文檔、遺留問題、釋放清單等的打包釋放。此時(shí),一個(gè)常規(guī)的集成任務(wù)就完成了。
1.2.3 軟件配置管理
不管是集成組件選擇,還是文件打包,其實(shí)都可以歸屬為配置管理這個(gè)大的概念,第3章我們從項(xiàng)目層面解釋了配置管理,這里進(jìn)入軟件包里看,主要講兩部分。
(1) 軟件版本號(hào)
軟件的名字,也就是軟件版本號(hào),這是我們?nèi)粘=涣鞯闹黧w對(duì)象,最基本的邏輯是一個(gè)版本號(hào)唯一對(duì)應(yīng)一版代碼。
理論上,我們用V1、V2、V3也可以去描述軟件,但為了增加軟件的辨識(shí)度、可見性和交流的便利,我們會(huì)為軟件版本號(hào)增加更多的信息,比如,項(xiàng)目名、車型名、客戶名、硬件類別、芯片類別、架構(gòu)類別、集成序列號(hào)、標(biāo)定版本號(hào)、軟件階段(簽名與否、適用工廠與否、ABCD級(jí)別等)等。
(2) 細(xì)化的分支概念
我們?cè)偌?xì)化討論下分支的概念。注意,這是一個(gè)邏輯概念,并不真實(shí)存在。通俗理解,分支就是把組件的變更放在這個(gè)軟件包里,而不是另一個(gè),也就是不同的組件版本組合。
另外,前面我們說過可以把分支大體分為“開發(fā)分支”和“交付分支”。進(jìn)一步地,二者都可以繼續(xù)劃分為更細(xì)化的分支概念,如圖2所示。
圖2 軟件分支類型
1) 開發(fā)分支
“開發(fā)分支”可以細(xì)分為平臺(tái)開發(fā)分支、特性開發(fā)分支與特定項(xiàng)目開發(fā)分支。
- 平臺(tái)開發(fā)分支
平臺(tái)開發(fā)分支是我們的平臺(tái)化軟件,是平臺(tái)開發(fā)人員維護(hù)的、最具普適性的基礎(chǔ)軟件,是所有其他分支的源頭,所有的變更、修改、提交應(yīng)該嚴(yán)格審慎。如圖3所示。
圖3 平臺(tái)開發(fā)分支示意圖
- 特性開發(fā)分支
特性開發(fā)分支一般是,經(jīng)過普遍分析后,認(rèn)為有必要導(dǎo)入到平臺(tái)的特性開發(fā)或復(fù)雜bug修復(fù),而且,這樣的變更需要一定的周期和工作量。
為了避免影響到平臺(tái)軟件的日常維護(hù),這時(shí)就有必要單獨(dú)拉出來分支進(jìn)行開發(fā)。在開發(fā)過程中,需要定期地將平臺(tái)開發(fā)分支的變更進(jìn)行同步,并在新特性釋放后,合入平臺(tái)開發(fā)分支,以保證平臺(tái)開發(fā)分支的最新狀態(tài)和完整性。如圖4所示。
圖4 特性開發(fā)分支示意圖
- 特定項(xiàng)目開發(fā)分支
對(duì)于特定項(xiàng)目開發(fā)分支來說,有些功能或特性的變更需求來源于特定項(xiàng)目,但需要?jiǎng)拥狡脚_(tái)開發(fā)分支,而由于其特殊性,又不需要永久合入平臺(tái)開發(fā)分支的平臺(tái)軟件里,再加上二者團(tuán)隊(duì)的差異性,這時(shí),就可以單獨(dú)拉出來一個(gè)分支去完成這部分變更,但最終不會(huì)合入平臺(tái)軟件,而是合入到交付分支里。如圖5所示。
圖5 特定項(xiàng)目開發(fā)分支示意圖
2) 交付分支
那么,“交付分支”也可以繼續(xù)分為項(xiàng)目主干分支、項(xiàng)目釋放分支等。
接著看交付分支,交付分支的意義整體在于,既能基于平臺(tái)化軟件加速開發(fā),又能保持一定的項(xiàng)目釋放獨(dú)特性與靈活性。
- 項(xiàng)目主干分支
對(duì)于項(xiàng)目主干分支來說,道理與平臺(tái)開發(fā)分支類似,對(duì)于特定的車型類別或客戶群項(xiàng)目,往往有更相近的需求,可以維護(hù)一條項(xiàng)目交付層級(jí)的“平臺(tái)”軟件。
這條分支由項(xiàng)目團(tuán)隊(duì)精心維護(hù),同時(shí)做好與平臺(tái)的同步更新,保證其是一條構(gòu)建和測(cè)試成功的“綠色“分支。如圖6所示。
圖6 項(xiàng)目主干分支示意圖
- 項(xiàng)目釋放分支
而對(duì)于更多的項(xiàng)目變體,即項(xiàng)目釋放分支,就能夠以這條“綠色”的項(xiàng)目主干分支為交付基礎(chǔ),而高效地從中摘取軟件基線,并完成自身的配置,比如,傳感器、MCU、零件號(hào)等配置參數(shù)。如圖7所示。
圖7 項(xiàng)目釋放分支示意圖
值得說明的是,以上僅給出了一種分支拆分的思路,基本邏輯是平臺(tái)化和定制化的權(quán)衡。實(shí)際上,有些產(chǎn)品與項(xiàng)目甚至不需要分支,只在一條分支上開發(fā)下去,具體項(xiàng)目需根據(jù)軟件的成熟度和復(fù)雜性以及變體的多寡等來綜合考慮合適的分支策略。
2 軟件向硬件集成
在完整軟件交付出來之后,我們要做的就是將軟件刷寫到ECU硬件中(具體刷寫方式可能通過OBD口或USB或直接連接芯片針腳,或者通過遠(yuǎn)程OTA),這其實(shí)就是我們所要講的系統(tǒng)(軟硬件)集成。
理論上講,集成都是通過接口來完成的,系統(tǒng)集成也就是通過軟硬件接口來進(jìn)行,具體表現(xiàn)就是物理的芯片引腳和邏輯的傳輸數(shù)據(jù)的軟件接口。如果開發(fā)流完整的話,這些接口應(yīng)該在系統(tǒng)架構(gòu)的部分進(jìn)行過定義。
如果把系統(tǒng)集成再細(xì)分一些,我們再往上走,會(huì)有電路板與機(jī)械外殼、接插件、屏幕等的集成,只不過這步集成更多有著機(jī)械裝配的意味,落在現(xiàn)實(shí)工作里就是打一批樣件了。
當(dāng)然,我們都知道一套完整的電控系統(tǒng)一般會(huì)包含傳感器、ECU和執(zhí)行器,處于中間的ECU是我們前述兩步集成的結(jié)果。但傳感器和執(zhí)行器往往由外部其他組織提供,如果從系統(tǒng)的視角考慮,我們通過線束支撐的接口來完成這一級(jí)別的集成也是必要的。至少,內(nèi)部開發(fā)中經(jīng)常需要這樣的環(huán)境來驗(yàn)證ECU的功能。
3 ECU向整車集成
整車集成基本是屬于OEM的工作范圍,也是它們的核心競(jìng)爭(zhēng)力所在。
這一步的系統(tǒng)是從整車來看的,比如,驅(qū)動(dòng)系統(tǒng)、剎車系統(tǒng)、轉(zhuǎn)向系統(tǒng)、被動(dòng)安全系統(tǒng)、照明系統(tǒng)、輔助駕駛系統(tǒng)等。
對(duì)于某一個(gè)電子控制器來說,在所有內(nèi)部集成和驗(yàn)證完成后,必不可缺的一步是,在整車環(huán)境中完成布置確認(rèn)、模態(tài)分析、傳感信號(hào)校驗(yàn)、電子對(duì)手件聯(lián)調(diào)、產(chǎn)線確認(rèn)以及EMC、振動(dòng)、沖擊、水淋、鹽霧、高低溫等一系列的考驗(yàn)。
對(duì)于軟件來說,尤其要考慮對(duì)手件聯(lián)調(diào),越來越多的電子功能需要多模塊協(xié)同,最常見的診斷、通信問題就是該環(huán)節(jié)頻繁識(shí)別出來的。另外,很多在整車層面的屬性性能也是需要在整車環(huán)境下進(jìn)行軟件標(biāo)定匹配的。在汽車行業(yè)里做軟件,要意識(shí)到,所有的代碼其實(shí)都是最終服務(wù)于整車?yán)锏谋憩F(xiàn)。
但是,我們也要知道,我們并不期望在整車集成環(huán)節(jié)解決軟件問題。畢竟,一臺(tái)試驗(yàn)車動(dòng)輒幾十上百萬,有些試驗(yàn)甚至是整車破壞性的,整車試驗(yàn)的成本通常都會(huì)比較高。當(dāng)軟件問題從開發(fā)團(tuán)隊(duì)一路逃逸到這個(gè)環(huán)節(jié)時(shí),往往會(huì)帶來比較大的成本。