何為“軟件定義汽車”寡具?每個(gè)人可能都有自己的獨(dú)特見解战秋,毋庸置疑的是軟件在汽車電子中開始占據(jù)主導(dǎo)性地位百侧。
20世紀(jì)80年代初,一輛轎車的電子系統(tǒng)只有幾萬(wàn)行代碼谴供,今天一輛高端豪華汽車電子系統(tǒng)有數(shù)千萬(wàn)行代碼块茁,而未來(lái)一輛智能網(wǎng)聯(lián)汽車電子系統(tǒng)可能會(huì)有上億行代碼,這一現(xiàn)象說(shuō)明了軟件發(fā)展與汽車創(chuàng)新的必然關(guān)聯(lián)趨勢(shì)。
汽車功能由最初的機(jī)械方式實(shí)現(xiàn)数焊,到后來(lái)的電子化方式實(shí)現(xiàn)永淌,未來(lái)可能更多的功能可以在不改變硬件的條件下由軟件來(lái)實(shí)現(xiàn)。根據(jù)福布斯報(bào)道佩耳,估算以后自動(dòng)駕駛汽車60%的價(jià)值將源于軟件遂蛀,而今天汽車軟件的價(jià)值占比只有10%。
“軟件定義汽車”將把汽車變得像手機(jī)一樣干厚,只要是一個(gè)智能機(jī)李滴,我們就能在此基礎(chǔ)上方便添加不同的應(yīng)用,實(shí)現(xiàn)不同的功能蛮瞄,并且能夠在線更新升級(jí)軟件所坯。然而汽車與手機(jī)在用途上又有著本質(zhì)的不同,手機(jī)質(zhì)量只影響通訊和娛樂挂捅,而汽車質(zhì)量關(guān)系到人們的生命財(cái)產(chǎn)安全芹助,所以“軟件定義汽車”背景下的汽車軟件質(zhì)量如何保障,如何適應(yīng)新功能闲先、新平臺(tái)的快速軟件開發(fā)状土,是當(dāng)下汽車軟件開發(fā)需要深度思考的問(wèn)題。
關(guān)于快速變化的軟件架構(gòu)思考
隨著智能網(wǎng)聯(lián)汽車的發(fā)展和汽車電子電氣架構(gòu)的演變饵蒂,整車電子電氣架構(gòu)逐漸從分布式架構(gòu)轉(zhuǎn)變?yōu)榧惺降目刂萍軜?gòu)声诸,多個(gè)傳統(tǒng)ECU功能集中在一個(gè)域控制器,甚至還有跨域整合的概念退盯,這種情況下,對(duì)于一個(gè)域控制器中的軟件要求越來(lái)越高泻肯,軟件的規(guī)模也越來(lái)越復(fù)雜渊迁,所以一個(gè)具有強(qiáng)大兼容性、達(dá)到解耦灶挟、可擴(kuò)展的軟件架構(gòu)至關(guān)重要琉朽。
“解耦”分為兩個(gè)層次,一個(gè)是軟硬件之間的解耦稚铣,一個(gè)是軟件架構(gòu)內(nèi)部模塊之間的解耦箱叁。
軟硬件解耦即軟件架構(gòu)設(shè)計(jì)時(shí)考慮跨硬件的目標(biāo)因素,把硬件作為一個(gè)黑盒子惕医,構(gòu)建一個(gè)通用的軟件框架耕漱,對(duì)接口設(shè)備做抽象化處理,并兼容不同的接口抬伺。另外螟够,軟件架構(gòu)應(yīng)是一個(gè)分層化模塊化的設(shè)計(jì),應(yīng)該做到模塊之間的解耦,對(duì)接口進(jìn)行標(biāo)準(zhǔn)化處理妓笙。軟件框架上可以加載不同的算法和軟件模塊若河。
為了應(yīng)對(duì)當(dāng)下汽車軟件需求的快速變化,軟件架構(gòu)設(shè)計(jì)應(yīng)是一個(gè)“種樹”的行為寞宫,而不能是“種草”萧福。也就是說(shuō),要把整體軟件構(gòu)建成一棵大樹辈赋,可以不斷擴(kuò)展或刪減枝葉鲫忍,但不會(huì)對(duì)主干造成影響,而不能設(shè)計(jì)一個(gè)軟件系統(tǒng)就種一棵草炭庙。
為了實(shí)現(xiàn)可擴(kuò)展目標(biāo)饲窿,軟件架構(gòu)設(shè)計(jì)時(shí)要有全局觀,確保軟件架構(gòu)的兼容性設(shè)計(jì)焕蹄。軟件架構(gòu)設(shè)計(jì)時(shí)需要充分分析數(shù)據(jù)流和控制流逾雄,軟件資源占用情況。軟件架構(gòu)就像人體的血管和神經(jīng)網(wǎng)絡(luò)腻脏,連接各部分肢體鸦泳,傳輸信息和營(yíng)養(yǎng),只有保證這些數(shù)據(jù)流和控制流的正確實(shí)施永品,才能實(shí)現(xiàn)一個(gè)健康的架構(gòu)做鹰。
總之,軟件架構(gòu)設(shè)計(jì)時(shí)要秉承一個(gè)目標(biāo):軟件是復(fù)雜的鼎姐,架構(gòu)是簡(jiǎn)單的钾麸,用簡(jiǎn)單明了的架構(gòu)去承載不斷擴(kuò)充的軟件模塊以滿足快速變化的需求。
關(guān)于軟件質(zhì)量挑戰(zhàn)與保障的思考
隨著智能網(wǎng)聯(lián)汽車的發(fā)展炕桨,汽車軟件開發(fā)面臨著巨大挑戰(zhàn)饭尝。新功能新需求的出現(xiàn),沒有過(guò)多的經(jīng)驗(yàn)可以遵循献宫,造成軟件需求不斷迭代钥平;軟件架構(gòu)需要支撐不斷變化的需求;軟件復(fù)雜龐大的代碼量可能引入更多的缺陷姊途;復(fù)雜場(chǎng)景組合與龐大代碼量使得測(cè)試驗(yàn)證的充分性難以保證......
面對(duì)這些挑戰(zhàn)涉瘾,汽車軟件質(zhì)量到底應(yīng)如何保證。軟件的特殊性在于它的質(zhì)量無(wú)法量化捷兰,質(zhì)量缺陷不光是通過(guò)技術(shù)引入立叛,也可能通過(guò)開發(fā)過(guò)程的不規(guī)范性引入,而這些通過(guò)過(guò)程引入的風(fēng)險(xiǎn)看不見摸不著不可預(yù)測(cè)寂殉,所以保障汽車軟件質(zhì)量總結(jié)起來(lái)可以分為三個(gè)方面:流程保障囚巴、方法保障和工具保障。
首先,流程上需要建立完善的軟件質(zhì)量管理體系彤叉,例如基于ASPICE的軟件開發(fā)過(guò)程庶柿、質(zhì)量管理過(guò)程、配置管理過(guò)程秽浇、變更管理過(guò)程等浮庐,這些都直接關(guān)系到軟件的質(zhì)量,軟件開發(fā)過(guò)程需要遵循這些質(zhì)量管理要求柬焕。完善的流程也能夠保障需求的穩(wěn)定性审残,例如在建立需求時(shí)需要經(jīng)過(guò)充分的調(diào)研和確認(rèn),需求要經(jīng)過(guò)多方評(píng)審斑举,可以從一定程度減少需求的不合理變動(dòng)搅轿;另一方面,流程上做好需求的基線管理和變更管理富玷,識(shí)別需求變化的影響范圍璧坟,并針對(duì)影響范圍制定相關(guān)的應(yīng)對(duì)措施。
在方法上赎懦,主要是指技術(shù)方法和方法論雀鹃。例如:在制定需求的時(shí)候,可以通過(guò)HAZOP分析補(bǔ)充安全需求励两,識(shí)別需求是否全面黎茎,通過(guò)需求的雙向追溯確保軟件開發(fā)與需求的一致性;在軟件架構(gòu)設(shè)計(jì)階段可以通過(guò)層次化当悔、模塊化設(shè)計(jì)和高內(nèi)聚低耦合的方法降低軟件質(zhì)量風(fēng)險(xiǎn)傅瞻,通過(guò)數(shù)據(jù)流分析、控制流分析來(lái)驗(yàn)證架構(gòu)的完善性盲憎;在軟件編碼階段遵循編碼規(guī)范的方法要求俭正;在測(cè)試時(shí)確保測(cè)試覆蓋率,并采取性能測(cè)試焙畔、雪崩測(cè)試、故障插入測(cè)試來(lái)充分驗(yàn)證軟件功能與性能串远。方法有很多宏多,無(wú)法一一列舉,需要在軟件開發(fā)過(guò)程中充分挖掘澡罚。
另外伸但,工具也是軟件質(zhì)量保障很重要的一個(gè)方面。完善的工具鏈可以讓軟件開發(fā)工作事半功倍留搔。比如自動(dòng)化測(cè)試工具更胖,代碼與詳設(shè)文檔的轉(zhuǎn)化工具,有了這些工具之后,可以對(duì)需求變化帶來(lái)工作量進(jìn)行快速響應(yīng)却妨。從功能安全角度考慮饵逐,軟件工具本身可能會(huì)引入系統(tǒng)性失效問(wèn)題,所以安全可靠的工具是確保軟件質(zhì)量的基礎(chǔ)彪标。
關(guān)于敏捷開發(fā)的思考
雖然當(dāng)下敏捷開發(fā)變成了熱門話題倍权,敏捷或許是個(gè)好的方法,可以讓軟件提前得到驗(yàn)證捞烟,但敏捷不是萬(wàn)能的薄声。
首先,對(duì)于當(dāng)下軟件開發(fā)需求變化快题画、進(jìn)度緊張等問(wèn)題默辨,不是單純靠敏捷開發(fā)就能解決,敏捷方法的使用需要匹配合適的項(xiàng)目苍息,例如可以穿插應(yīng)用于一些小的軟件模塊的開發(fā)過(guò)程中缩幸,并要配合一定的自動(dòng)化測(cè)試方法,否則會(huì)讓測(cè)試驗(yàn)證的工作量劇增档叔。
筆者個(gè)人不建議敏捷作為一個(gè)復(fù)雜軟件系統(tǒng)開發(fā)的主線方式桌粉,對(duì)于越是復(fù)雜的軟件,越是要做好全局規(guī)劃衙四,但是在具體詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)層面可以適當(dāng)運(yùn)用敏捷方法铃肯。
汽車行業(yè)與某些互聯(lián)網(wǎng)開發(fā)思路是不同的,前期還是會(huì)有相對(duì)比較明確的需求传蹈,包括功能和接口押逼,并不是可以完全隨意增減,而互聯(lián)網(wǎng)產(chǎn)品開發(fā)過(guò)程可能突發(fā)靈感惦界,會(huì)加入很多創(chuàng)意的內(nèi)容挑格,從而增加新的需求,這種需求迭代就像滾雪球沾歪,各方面不斷加入新元素漂彤,不斷擴(kuò)充完善,所以應(yīng)用敏捷開發(fā)可能更適合某些互聯(lián)網(wǎng)產(chǎn)品灾搏。而汽車領(lǐng)域挫望,即使是現(xiàn)在的智能網(wǎng)聯(lián)汽車領(lǐng)域,需求框架相對(duì)也是明確穩(wěn)定的狂窑,這個(gè)過(guò)程更像是建房子媳板,是應(yīng)該先建好整體地基,再逐層建高樓泉哈,才能保證質(zhì)量蛉幸。而不能每一層快速蓋一點(diǎn)破讨,靠蓋好后的樓來(lái)驗(yàn)證地基。所以對(duì)于是否采用敏捷開發(fā)奕纫,需要先識(shí)別這是一個(gè)滾雪球的項(xiàng)目還是建房子的項(xiàng)目提陶。
雖然智能網(wǎng)聯(lián)汽車有一些汽車與ICT的融合元素,但是綜合來(lái)看還是更偏向于“建房子”的比重若锁。敏捷適用于“未知的未知”探索性項(xiàng)目搁骑,而智能汽車軟件開放屬于“已知的未知”探索性項(xiàng)目,還是有些差別又固。
并且從軟件質(zhì)量和功能安全角度考慮仲器,敏捷開發(fā)過(guò)程中通過(guò)充分溝通精簡(jiǎn)過(guò)程與文檔這種方式可能會(huì)引入不可評(píng)估的系統(tǒng)性失效,所以針對(duì)汽車行業(yè)新功能仰冠、新平臺(tái)的復(fù)雜軟件開發(fā)至少在架構(gòu)階段以前個(gè)人建議還是采用瀑布式開發(fā)乏冀,在詳細(xì)設(shè)計(jì)以及基線后的需求迭代過(guò)程中可以適當(dāng)考慮敏捷開發(fā)。
關(guān)于軟件測(cè)試的思考
面對(duì)日益膨脹洋只、復(fù)雜化的汽車軟件系統(tǒng)辆沦,傳統(tǒng)的測(cè)試人海戰(zhàn)術(shù)也許在某些時(shí)候有一定作用,但不夠高效识虚。軟件測(cè)試需要“融合”肢扯,即對(duì)于復(fù)雜化的軟件系統(tǒng),要注重人工測(cè)試與自動(dòng)化測(cè)試相融合担锤。用自動(dòng)化來(lái)進(jìn)行持續(xù)集成與交付蔚晨,可以起到事半功倍的效果,但是自動(dòng)化測(cè)試也需要一定的測(cè)試人員來(lái)編寫腳本和人工驗(yàn)證肛循,目前自動(dòng)化測(cè)試并不能完全代替人铭腕,例如現(xiàn)在有一些單元測(cè)試的自動(dòng)化測(cè)試工具,覆蓋率可以達(dá)到百分之百多糠,但是從軟件質(zhì)量角度來(lái)考慮累舷,單純用這個(gè)工具測(cè)試并不足夠,因?yàn)檐浖倪壿嬍欠裾_還是需要人去驗(yàn)證夹孔。但是對(duì)于代碼量巨大的復(fù)雜軟件系統(tǒng)被盈,單純靠人海戰(zhàn)術(shù)也是不可行的,浪費(fèi)人力資源且效率低下搭伤,因此以自動(dòng)化測(cè)試為主害捕,以人工為輔的“融合”化測(cè)試可能才是比較正確高效的途徑。