首先,我們還(hái)是(s¶αhì)将汽車(chē)軟件(jiàn)放(fàng)在整車(chē)系統下(xià)來↔≥"(lái)看(kàn)。因此,我們會(huì)分(fēn)離(lí)出3個(gè)層級↑¥的(de)集成:
- 軟件(j•§₩iàn)組件(jiàn)集成。
&nbs★€p;- 軟件(jiàn)向硬件(jiàn)集成。
- γδECU向整車(chē)集成。
簡♣Ω ↑單來(lái)說(shuō),軟件(jiàn)集成就(jiù)是(shì)創建一(yī)→♠個(gè)邊界明(míng)确、質量可(kě)靠的(de)完整軟件(jiàn)包。再擴充一(yī)些(xiē)的(de)話(huà),就(jiù)是(§™§®shì)基于源代碼管理(lǐ)工(gōng)具和(hé)分(fēn)支管理(lǐ)策略,針對(₹±←duì)不(bù)同的(de)單元(如(rπ® ú).c或.h文(wén)件(jiàn))逐級進行(xíng)集成,并将相(xiàng)關的(d&®e)輔助文(wén)檔、集成測試、配置文(wén)件(jiàn)等配置項進行(x×íng)配置管理(lǐ)。
1.1 “分(fēn)支”的(de)概念
由α£于汽車(chē)軟件(jiàn)的(de) '≤平台化(huà)需求很(hěn)高(gāo),所以,我們一(yī)般會(huì)'♠進行(xíng)“開(kāi)發分(fēn)支”和(hé)“交付分(fēn)支”的(de)區(qū)分(fēn)。
- 開(kāi)發分(fēn)支側重于維護新特性的(de)上(shàng)線和(hé)通(tōng)用(yòα"ng)性技(jì)術(shù)方案的(de)導入。
- 交付分(fēφ∏✔↕n)支則關心的(de)是(shì)基于特定項目要(yào)求(如(rú)标定參數(shù)、項目配置參數(shù)、b€γug修複等)的(de)釋放(fàng)。
← ← 二者的(de)區(qū)分(fēn)也(yě)可(kě)以讓“開(kāi)發的(de)技(jì)術(shù)完善性”和(héγ•)“交付的(de)時(shí)間(jiān)及時(shí)性”不&∞✔(bù)至于直接沖突和(hé)互相(xiàng)幹擾。
一(yī)般而言,軟>←≈β件(jiàn)集成的(de)主要(yào)任務是(shì)識别↓&§、确認不(bù)同分(fēn)支之間(jiān)的(de)公共組件(jiàn),定義哪些(xi↓♠☆"ē)組件(jiàn)應該從(cóng)一(yī)條分(fēn)支摘取到(dào)另一(yī)φ®®條分(fēn)支上(shàng)、哪些(xiē)組件(jiàn)的(d↕πe)變更需要(yào)單獨釋放(fàng)以及哪個(gè)軟件(jiàn¶✔™)基線最終能(néng)夠被用(yòng)于哪個(gè)配置的(de)"★¥交付上(shàng)。
1.2 具體(tǐ)的(λ γde)集成
集成的(de)策略取決于項目¶ε或平台釋放(fàng)的(de)目的(de),而這(zhè)又(yòu≤♣↕)來(lái)源于項目的(de)整體(tǐ)考量,所以,集成任務是(s¶÷hì)需要(yào)項目經理(lǐ)類角色驅動的(de)。簡要(yào)集成流程如(rú↕•♥€)圖1所示。
圖1 軟件(jiàn)集成簡要(yào)流程
1.2.1&nδ∏ ±bsp;集成輸入
盡管郵件(jiàn)也(yě)是(¶&♠shì)一(yī)種輸入,但(dàn)對(duì)于繁雜(zá)的(de>★)集成任務來(lái)說(shuō),通(tōng)常最好(hǎo)使用(yòng)ALM工(gōng)作(zuò)流類的(de)工(gōng)具來(lái)支撐♦♦★,或是(shì)bug,或是(shì)變更,或是(shì)新特性需求,都(d✘βσ→ōu)可(kě)以通(tōng)過相(xiàng)關工¶→↔(gōng)作(zuò)項來(lái)驅動集成,比如(rú),輸入需求基線、變更範圍、版本規δ★≥則、工(gōng)件(jiàn)、上(shàng)一(yī>λ™÷)版本軟件(jiàn)基線、交付日(rì)期等。
實際上(shàng§"↕),良好(hǎo)的(de)集成更多(duō)來(lái)源于管理(lǐ)。
1.2.2 編譯、測試、打包
集成工€α≥♠(gōng)程師(shī)在任務驅動下(xià),去(qù)♦₹↓完成相(xiàng)應的(de)源代碼編譯和(h♦¥é)相(xiàng)關錯(cuò)誤清除,并完成必要(yào)>♣的(de)接口、資源消耗、冒煙(yān)等靜(±>£jìng)動态集成測試。最後,根據預定規則,完成可 γ(kě)執行(xíng)文(wén)件(jiàn→✘)、配置信息、測試報(bào)告、架構模型、設計(jì)文(wén)檔、遺留問(wènσλ&↕)題、釋放(fàng)清單等的(de)打包釋放(fàng)。此時(shí),一(yī)個'∑(gè)常規的(de)集成任務就(jiù)完成了(le)。
1.2.3 軟件(jiàn)配置管理(lǐ)
不≠¥(bù)管是(shì)集成組件(jiàn)選擇,還(hái)是(shì)文✔↓(wén)件(jiàn)打包,其實都(dōu)可(kě¥£)以歸屬為(wèi)配置管理(lǐ)這(zhè)個(gè)大(dà) ↕的(de)概念,第3章(zhāng)我們從(cóng>)項目層面解釋了(le)配置管理(lǐ),這(zhè)裡(lǐ)進入軟件(ji₩∑€<àn)包裡(lǐ)看(kàn),主要(yào)講兩部分(€¥fēn)。
(1) 軟件(jiàn)版本号
軟件(jiàn)的(de)名字,₩π也(yě)就(jiù)是(shì)軟件(jiàn)版本号,這(zhè)是(shì)我們日&♣(rì)常交流的(de)主體(tǐ)對(duì)象,最基本的(de)邏輯是(shì)一(yī)個(gè)版本号唯一(yī)對(duì)應一(yī)版代碼。
理(lǐ)論上(shàng),我們用(yòng)V1、V2、V3也(yě←÷✔)可(kě)以去(qù)描述軟件(jiàn),但(dàn)為 ♠(wèi)了(le)增加軟件(jiàn)的(de)辨識度、可(kě)見(jiàn)性和(hé)∑>交流的(de)便利,我們會(huì)為(wèi)軟件(jiàn)版本号增加★σ更多(duō)的(de)信息,比如(rú),項目名、車(chē)型名、客戶名、硬✔<σ✔件(jiàn)類别、芯片類别、架構類别、集成序列号、标定版本号、γαπ軟件(jiàn)階段(簽名與否、适用(yòng)工(gōng)廠(chǎng)與否★≠、ABCD級别等)等。
(2) 細化(huà)的(de)分(fēn)支概念
我們再細化(huà)討(t♥≠ǎo)論下(xià)分(fēn)支的(de)概念。注意,這(z÷✘λ✘hè)是(shì)一(yī)個(gè)邏輯概念,并不(↑"φbù)真實存在。通(tōng)俗理(lǐ)解,分(fēn)支就(jiù)是(shì)把↔≈ε∏組件(jiàn)的(de)變更放(fàng)在這(zhè)個(gè♠☆≤)軟件(jiàn)包裡(lǐ),而不(bù)是(shì)另一(yī)φ™個(gè),也(yě)就(jiù)是(shì★÷)不(bù)同的(de)組件(jiàn)版本組合。
另外(wài),前面我們說(shuō)過 ≈ £可(kě)以把分(fēn)支大(dà)體(tǐ)分(fēn)為(wèi)“開(kāi)發分(fēn✔≠Ω)支”和(hé)“交付分(fēn)支”。進一✘$•σ(yī)步地(dì),二者都(dōu)可(kě)以繼續<≥>劃分(fēn)為(wèi)更細化(huà)的(de)分(fēn)支概念,€"↔如(rú)圖2所示。
圖2 軟件(jiàn)分(fēn)支類型
1) 開™"≥(kāi)發分(fēn)支
“開(kāi)發←φα分(fēn)支”可(kě)以細分(fēn)為(wèi)平台開(kāi)發分(fēn)支、特性開(kāi)發分(fēn)支與特定項目開(kāi)發分(fēn)支。
- ♥•;平台開(kāi)發分(fēn)支
平台開(kāi)發分(fēn)支是(s↑Ω©hì)我們的(de)平台化(huà)軟件(jiàn),是(shì)平台開(kāi)發人(rén"≥¥★)員(yuán)維護的(de)、最具普适性的( ↓↓☆de)基礎軟件(jiàn),是(shì)所有(yǒu)其他(tā)分(fēn)支的(de)源頭,所有(yǒu)的(de)變更、修改、提交應該嚴格∏≈₽←審慎。如(rú)圖3所示。
圖3 平台開(kāi)發分(fēn)支示意圖
- 特性開(kāi)發分(fē≥♦ ♥n)支
特性開(kāi)發分(fēn)支一(yī)般是(s×$↕hì),經過普遍分(fēn)析後,認為(wèi)有(yǒu)必要(yào)導入到(dào)平☆β∞台的(de)特性開(kāi)發或複雜(zá)bug修複,而且,這(zhè)樣→的(de)變更需要(yào)一(yī)定的(de)周期和(hé)工(gōng)作(zuò)量。
為(wèi)了(le)避免€©影(yǐng)響到(dào)平台軟件(jiàn)§的(de)日(rì)常維護,這(zhè)時(shí)就(jiù≤↔)有(yǒu)必要(yào)單獨拉出來(lái)分(fēn)支進行(xíng)開(kāi✘λΩε)發。在開(kāi)發過程中,需要(yào)定 ♦期地(dì)将平台開(kāi)發分(fēn)支的(dλ✔♥₩e)變更進行(xíng)同步,并在新特性釋放(fàng☆β")後,合入平台開(kāi)發分(fēn)支,以保證平台開(kāi)發分↑δ€(fēn)支的(de)最新狀态和(hé)完整性。如↓(rú)圖4所示。
圖4 特性開(kāi)發分(fēn)支示意圖
- 特定項目開(kāi)發分(fēnε±≥≈)支
對(duì)♠™±于特定項目開(kāi)發分(fēn)支來(lái)說(shuδ™ō),有(yǒu)些(xiē)功能(néng)或特性的(de)變更需求來(lái)源于特♠γ₩定項目,但(dàn)需要(yào)動到(dào)平台開(kāi)發分(fēn)支,而由于其特殊∑&性,又(yòu)不(bù)需要(yào)永久合入平台開(kāi)發分(fēn)支的(d>αe)平台軟件(jiàn)裡(lǐ),再加上(shàng)二者團隊的(de)差異₽✘性,這(zhè)時(shí),就(jiù)可(kě)↑σ以單獨拉出來(lái)一(yī)個(gè)分(fēn)支去(qù)完成這(zhè)部分(fēn'π&)變更,但(dàn)最終不(bù)會(hu✔₩♦ì)合入平台軟件(jiàn),而是(shì)合入到(dào)交付分(fēn)支裡(lǐ)。如¶Ω≤(rú)圖5所示。
圖5 特定項目開(kāi)發分(fēn)支示意圖
2) 交付分(fēn)支
那(nà)麽,“交付分(fēn)支≤β€ ”也(yě)可(kě)以繼續分(fēn)為(wèi)項目主幹分(fēn)支、項目釋放(fàng)分(fēn)支等。
接著™(zhe)看(kàn)交付分(fēn)支,交付分(fēn)支的(de)意義整體(tǐ)在于,Ω♠既能(néng)基于平台化(huà)軟件(jiàn)加速開(k↑↕→λāi)發,又(yòu)能(néng)保持一(yī)定的(de)項目≥λ∑釋放(fàng)獨特性與靈活性。
- 項目主幹分(fēn)支
₩βγ∏ 對(duì)于項目主幹分(fēn)支來(lái)說≠Ω☆✔(shuō),道(dào)理(lǐ)與平台開(kāi)發分(fēn)支類似,對(duì)Ω♣于特定的(de)車(chē)型類别或客戶群項目,往往有(yǒ φ♥u)更相(xiàng)近(jìn)的(de)需求,可(kě)以維護一(yī)條項目交付層級的(de)“平台”軟件(jiàn)。
這(zhè)條分(fēn)支由項目團隊精心維護,同時∏≤×(shí)做(zuò)好(hǎo)與平台的(de)同步更新,保證其是(shì)一(yī)條構建§↑®€和(hé)測試成功的(de)“綠(lǜ)色“分(fēn)支。如(rú)™£ 圖6所示。
圖6 項目主幹分(fēn)支示意圖
- 項目釋放(fàng)分(fēn)支←¥↔φ
而對(du≤§×ì)于更多(duō)的(de)項目變體(tǐ),即項目釋放(fàng)分(fēn)支,就(jiù)能(néng)夠以φ♦♠ 這(zhè)條“綠(lǜ)色”的(de) β •項目主幹分(fēn)支為(wèi)交付基礎,而高(gāo)效地(dì)★€Ω從(cóng)中摘取軟件(jiàn)基線,并完成自(zì)身(shēn)的(dΩ€ ♦e)配置,比如(rú),傳感器(qì)、MCU、零件(j←↕iàn)号等配置參數(shù)。如(rú)圖7所示。
圖7 項目釋放(fàng)分(fēn)支示意圖
©≥ 值得(de)說(shuō)明(míng£ )的(de)是(shì),以上(shàng)僅給出了(le)一(yī)種分(fēn)支拆分(✘≈fēn)的(de)思路(lù),基本邏輯是(sh춧₩)平台化(huà)和(hé)定制(zhì)化(huà)的(↓≠de)權衡。實際上(shàng),有(yǒu)些(xiē)産品與項目甚至不÷(bù)需要(yào)分(fēn)支,隻在一(yī)條分(fēn)支上(shàng)開δ¥∞(kāi)發下(xià)去(qù),具體(tǐ)項目需根據軟件(jiàn)的(de)成♥β&©熟度和(hé)複雜(zá)性以及變體(tǐ)的(de)多(duō)寡等來(lái)綜合考慮合适的( <≈de)分(fēn)支策略。
在完整軟件(jiàn)交付出來(lái)✔'÷之後,我們要(yào)做(zuò)的(de)就(jiù)是(shì)将軟件(jiàn)刷寫到(dào)ECU硬件(jiàn)中(具體(tǐ)刷寫方式可(kě)能(néng)通(tōng)過OBD口或U∏★'SB或直接連接芯片針腳,或者通(tōng)過遠(yuǎn)程OTA),這(zhè)δ→★¥其實就(jiù)是(shì)我們所要(yào)講的(de)≥÷系統(軟硬件(jiàn))集成。
理(l>¶'ǐ)論上(shàng)講,集成都(dōu)是(shì)通(tōng)過接口來(lái)完成的(de),系統集成也(yě)就(jiù♦↔↔)是(shì)通(tōng)過軟硬件(jiàn)接口來(lái)進行(xíng),具體(tǐΩβ)表現(xiàn)就(jiù)是(shì)物(wù)理(lǐ)的(de)芯片引腳和(hé)邏輯•☆γ的(de)傳輸數(shù)據的(de)軟件(jiàn)接口。如(rú)果開(kāi)發流完整的(de)話(huà),這(zhè)些(xiē)接口應該在→± 系統架構的(de)部分(fēn)進行(xíng)過×&定義。
如(rú)果把系↔₽±♣統集成再細分(fēn)一(yī)些(xiē),我們再往上(shàng)走,會(huì)有(y✔©ǒu)電(diàn)路(lù)闆與機(jī)械外(wài)殼、接插件(jiàn)、屏幕等的(de©÷)集成,隻不(bù)過這(zhè)步集成更多(duō)&✘有(yǒu)著(zhe)機(jī)械裝配的(de)意↔&味,落在現(xiàn)實工(gōng)作(zuò)裡(l<&εǐ)就(jiù)是(shì)打一(yī)批樣件(jiàn)了(l ↓∑☆e)。
ε÷↕✔當然,我們都(dōu)知(zhī)道(dào)一(yī)套完整的(de)電( ♠÷diàn)控系統一(yī)般會(huì)包含傳感器(qì)、ECU和(δ>"×hé)執行(xíng)器(qì),處于中間(j® iān)的(de)ECU是(shì)我們前述兩步集成的(de)結果。但(dàn)Ω☆傳感器(qì)和(hé)執行(xíng)器(qì)往往由外(wài)↕ 部其他(tā)組織提供,如(rú)果從(cóng)系統的(de)視(shì)角考慮,我們通(tōng)過線束支撐的(de)接口來(lái)完成這¶≤×(zhè)一(yī)級别的(de)集成也(yě)是(shì)必要(yào)的(de)。至少(shǎo),內 €∏(nèi)部開(kāi)發中經常需要(yào)這€®≈>(zhè)樣的(de)環境來(lái)驗←δ≥證ECU的(de)功能(néng)。
整車(chē)集成基本是(shì)屬于OEM的≥ ∏♠(de)工(gōng)作(zuò)範圍,也(yě)是(sh↓&ì)它們的(de)核心競争力所在。
這(zhè)一(yī)步✔∑的(de)系統是(shì)從(cóng)整車(chē)來(lái)看(kàn)的(de),比如ε≥'Ω(rú),驅動系統、刹車(chē)系統、轉向系統、被動安全系統、照(zhào)明(mín±±$g)系統、輔助駕駛系統等。
對(&¥λ"duì)于某一(yī)個(gè)電(diàn)子(zǐ)控制&♦δ(zhì)器(qì)來(lái)說(shuō),在所有(yǒu)內(nèi)部≠↕®™集成和(hé)驗證完成後,必不(bù)可(kě)缺的(de)一(yī)步是(≤<φ→shì),在整車(chē)環境中完成布置确認、模态分(fēn)析、≤< 傳感信号校(xiào)驗、電(diàn)子(z$→α ǐ)對(duì)手件(jiàn)聯調、産線确認以及EMC、振動、沖擊、水(shuǐ)淋、鹽霧<↓ ≥、高(gāo)低(dī)溫等一(yī)系☆<✔ 列的(de)考驗。
對(duì)于軟件(jiàn)來(σ∞lái)說(shuō),尤其要(yào)考慮對(duì)手件(jiàn)聯調,越來(lái)越多(duō)的(de)電(diàn)子¥"(zǐ)功能(néng)需要(yào)多(duō$£★)模塊協同,最常見(jiàn)的(de)診斷、通(t<§ōng)信問(wèn)題就(jiù)是(shì)該環節頻(pín)繁識别出來(lái)®♠的(de)。另外(wài),很(hěn)多(duō)在整車(chē)層面的(de)屬性性能(néng)也(yě)是(shì)需要(yào)在整車(chē♠↕)環境下(xià)進行(xíng)軟件(jiàn)标定匹配的(de)。在汽車(chē)行(xíng)業(yè)裡(lǐ)做(zuò)§★∑軟件(jiàn),要(yào)意識到(dào),所有(yǒu)的(de)代碼其實都(dōu)是(shì)最終服務于整車(chē)裡(lǐ)的(dσ§♠δe)表現(xiàn)。
但(dàn)是(shì),我 ↑&β們也(yě)要(yào)知(zhī)道(dào),我們并不(bù)期望在整©'$≤車(chē)集成環節解決軟件(jiàn)問(wèn'σ∞€)題。畢竟,一(yī)台試驗車(chē)動辄幾十上(shàng)百↓α₩₽萬,有(yǒu)些(xiē)試驗甚至是(shì)整車(chē)破壞性的(de),整車(c↔hē)試驗的(de)成本通(tōng)常都(dōu)¥>會(huì)比較高(gāo)。當軟件(jiàn)問(wèn)題從(c±εóng)開(kāi)發團隊一(yī)路(lù)逃逸到(dào)這(zhè)個(gè)☆♣>環節時(shí),往往會(huì)帶來(lái)比較大(dà)的(de)'∏"成本。