交流群 |進「傳感器群/滑板底盤群」請加微信號:xsh041388交流群 |進「汽車基礎軟件群」請加微信號:ckc1087做開發除了需要高效的編碼能力,同樣也離不開編程思維的指導。作為剛剛進入汽車電子行業的開發小白,本篇博文將總結最近學習到的汽車軟件行業開發思維:V模型。汽車軟件開發過程中的V模型對行業內開發者早已是司空見慣的模型,是由瀑布模型演變而來的,也是目前汽車行業運用最廣的軟件開發模型。由於該模型的構圖形似字母V,所以俗稱V模型。V模型核心思想是通過A-SPICE流程(汽車產業的軟件流程改進和能力測定標準)來支持和管理整個開發流程,從需求到源代碼的每個過程都有相應的測試。V模型大體可劃分為幾個不同的階段步驟即:功能需求、功能開發、軟件開發、軟件集成測試、功能集成測試、整車集成測試(系統合格性測試),如下圖所示,左邊為需求分析和設計開發的過程,右邊則為針對左邊的測試驗證,左邊的每個過程是與右邊的過程正好相對應。從系統需求到軟件需求,再到軟件的釋放,需要工具對其進行管理,以達到可追溯,可記錄的目的,目前市場主流的工具含有 Door、ClearCase、GIT、SDOM 等,也有公司自己研發的一些流程工具,當然這些工具的運作方式都遵循V流程的需求、研發和測試要求。基於項目的整體需求,以及軟硬件整體定義,對系統邏輯架構進行整體定義,這部分工作包括:硬件功能定義,控制器與其他控制器通信定義,軟件簡要功能定義。這個過程並不會對具體的技術實現做出定義。系統工程師根據系統相關方需求說明書、軟硬件接口文件、變更通知書等輸入,梳理定義軟件研發需求說明書,包括操作系統需求、電源管理策略、傳感器讀取,執行器控制、信號特性需求、存儲服務、通信服務,網絡管理、故障診斷、標定、程序升級等功能需求和非功能需求。軟件需求分析建立需求追蹤矩陣,將軟件需求映射到系統需求,確保軟件要實現的系統需求全部覆蓋。成功實施這個過程的結果如下:
定義系統中分配給軟件要素的軟件需求及其接口;
將軟件需求進行分類,並分析了其正確性和可驗證性;
分析軟件需求對運行環境的影響;
定義軟件需求實現的優先級;
根據需要更新了軟件需求;
在系統需求與軟件需求之間、在系統架構設計與軟件需求之間建立了一致性和雙向可追溯性;
從成本、進度和技術影響來評估軟件需求;
約定了軟件需求,並與所有受影響方溝通。
為了建立清晰的、結構化的軟件設計,應該統一分配軟件需求,然後完成軟件架構設計。根據系統相關需求、軟硬件接口表、軟件需求確定軟件架構。將每條軟件需求合理分配到軟件模塊中,定義每個軟件模塊的輸入輸出接口、動態行為、資源消耗目標等,評估多種軟件架構的優缺點等。架構工程師需要使用EA等架構軟件畫出整個控制器軟件所有模塊的輸入輸出接口、以及內部動態行為。如果項目基於AUTOSAR開發,需要架構工程師配置應用層的所有組件,並輸出每個組件的ARXML描述文件。成功實施這個過程的結果如下:
定義了識別軟件要素的軟件架構設計;
將軟件需求分配給軟件的要素;
定義每個軟件要素的接口;
定義軟件要素的動態行為和資源消耗目標;
建立軟件需求與軟件架構設計之間的一致性和雙向可追溯性;
在此階段,需要對每個組件內部的算法邏輯進行詳細的內部設計。組件功能的詳細設計需要與軟件需求建立有效的對應關係。如果是算法邏輯編碼,建議使用Matlab進行模型開發,如果是接近底層的複雜驅動,一般是使用手寫代碼。如果項目使用AUTOSAR架構,使用模型開發時需要導入arxml生成模型框架進行開發,使用手寫代碼進行開發時需要使用AUTOSAR工具生成的組件代碼框架進行開發。需要將代碼經過多次代碼審查和優化之後,將最終版本上傳至代碼庫,以實現最佳的可靠性和性能。成功實施這個過程的結果如下:
開發描述軟件單元的詳細設計;
定義各軟件單元的接口;
定義軟件單元的動態行為;
建立軟件需求與軟件單元之間的一致性和雙向可追溯性;建立軟件架構設計與軟件詳細設計之間的一致性和雙向可追溯性;建立軟件詳細設計與軟件單元之間一致性和雙向可追溯性;
約定軟件詳細設計及該設計與軟件架構設計的關係,並和所有受影響方溝通;
組件單元測試一般需要軟件開發工程師完成,也可以讓測試工程師完成。當進行單元測試通過後,將會將軟件編譯成ECU可執行的文件,比如Hex格式的文件,將其刷寫到ECU進行集成測試(或稱HIL測試),如果只是測試底層軟件,那麼一般只需要額外的硬件負載箱支持就行,比如用負載箱來模擬一些傳感器信號輸入,或製造一些執行器的短路和開路故障;如果測試包括應用層軟件,那麼就還需要物理模型支持才行,比如電機控制就需要電機的物理模型,變速箱控制可能就需要整個動力傳動系統的模型才行。單元測試是根據軟件單元設計,進行代碼級別上進行的測試。單元測試一般可以通過Matlab和Tessy等工具進行。成功實施這個過程的結果如下:
制訂包括回歸策略在內的軟件單元驗證策略,以驗證軟件單元;
根據軟件單元驗證策略,制訂軟件單元驗證準則,以適於提供軟件單元符合軟件詳細設計及非功能性軟件需求的證據;
根據軟件單元驗證策略及軟件單元驗證準則,驗證軟件單元並記錄了結果;
建立軟件單元、驗證準則及驗證結果之間的雙向可追溯性和一致性;
集成測試將各個組成部分整合入一個軟件系統中之後,最後進行軟件的集成測試。根據定義的需求,測試相應的功能是否滿足軟件需求。制訂與項目計劃、發布計劃和軟件架構設計相一致的軟件集成策略,以集成軟件項;制訂包括軟件回歸測試策略在內的軟件集成測試策略,以測試軟件單元之間和軟件項之間的交互;根據軟件集成測試策略,開發了軟件集成測試規範,以適於提供集成的軟件項符合軟件架構設計(包括軟件單元之間和軟件項之間的接口)的證據;根據集成策略集成了軟件單元和軟件項直至完整的集成軟件;根據軟件集成測試策略和發布計劃,選擇了軟件集成測試規範中的測試用例;使用選定的測試用例測試了集成的軟件項,並記錄了測試結果;建立軟件架構設計要素與軟件集成測試規範中的測試用例之間的一致性和雙向可追溯性,並建立了測試用例與測試結果之間的一致性和雙向可追溯性;因為軟件給各個ECU提供了相應的功能,因此在集成測試中,需要將軟件燒錄至硬件中。然後ECU要與其他電子系統組件集成起來,比如傳感器和執行器。在接下來的系統綜合測試中,對所有系統設備的交互響應進行評估。成功實施本過程的結果如下:
制訂與項目計劃和發布計劃相一致的包括回歸測試策略在內的軟件合格性測試策略,以測試集成軟件;
根據軟件合格性測試策略,開發集成軟件的軟件合格性測試規範,以適於提供符合軟件需求的證據;
根據軟件合格性測試策略和發布計劃,選擇了軟件合格性測試規範中的測試用例;
使用選定的測試用例測試了集成軟件,並記錄軟件合格性測試結果;
建立軟件需求與軟件合格性測試規範中的測試用例之間的一致性和雙向可追溯性,建立測試用例與測試結果之間的一致性和雙向的可追溯性;
汽車軟件開發的過程中有嚴格的追溯性和一致性要求,每個階段的過程要求、使用的工具方法和人員要求,前一階段的輸出交付物作為下一階段輸入,在每個階段完成後對交付物進行驗證,在軟件集成後在最後階段進行確認與軟件需求的一致性。概覽如下圖所示:
特斯拉人工智能總監Andrej Karparthy在他的一篇技術博客中提出構建軟件2.0技術棧的觀點,代碼正在從軟件 1.0(由人類編寫的代碼)過渡到軟件 2.0(由優化編寫的代碼,以神經網絡訓練的形式編寫)。軟件1.0 是我們熟悉的V模型,它是用 Python、C++、C等語言書寫的。它包括程序員對計算機的明確說明,通過編寫每行代碼,程序員會用一些可取的行為識別程序空間中的特定點。軟件1.0的工程方法遵循以下4個步驟:
確定要解決的問題,即需求;
把需求進行分解;
為每個分解的需求設計軟件;
逐級測試,集成並部署軟件。
軟件2.0時代正在逐漸到來,目前AI算法大量應用於自然語言識別、行為分析、決策協助、身份識別等不涉及公眾安全的領域,也在自動駕駛、醫療診斷等安全領域也在逐步應用。對於安全關鍵系統,系統工程方法學是否還適合軟件2.0時代,功能安全標準如IEC61508、ISO26262、EN50128不同行業安全軟件開發所遵循的標準,是否還能指導軟件2.0的開發實踐,下面從開發過程、軟件需求、開發工具三個方面談談想法。軟件1.0的開發生命周期模型按照系統工程V模型的方式開發,從上到下是瀑布式的,規定每個階段的過程要求、使用的工具方法和人員要求,前一階段的輸出交付物作為下一階段輸入,在每個階段完成後對交付物進行驗證,在軟件集成後在最後階段進行確認與軟件需求的一致性。在實際應用中,設計實現階段和測試階段,會規劃小版本之間的迭代,從整體過程來看還是V模型。在軟件2.0中,軟件的行為需求很大程度上取決於所使用的數據集(datasets),數據集不同於傳統意義上的數據,以往的數據如傳感器數據、系統的參數(如配置參數、校準數據等)或系統使用的數據庫(如導航數據庫、障礙物數據庫等),這些數據可以一定程度上確定系統的行為,但它們並不描述這種行為的邏輯。而機器學習使用的數據集不僅用來提取信息,而且用來建立模型,用來處理其他數據並確定一個系統的行為,確定安全關鍵系統的需求,等同於軟件需求。當軟件需求階段無法獲得完整的訓練數據集,從V模型來說,後面的架構、設計實現階段也無法開始。軟件2.0的開發模型始於數據,可以劃分為數據管理、模型訓練、模型驗證、模型部署,這四個階段不斷往復迭代,不是一次性完成的。數據管理:先建立所需數據集的要求,通過對數據的分析確定數據收集、增強和預處理的需求,收集什麼數據,如何收集數據,如何解決樣本數不足,收集成本過高的問題,如何對收集的數據清洗預處理。模型訓練:選擇所使用的模型,構建損失函數作為訓練誤差的衡量標準,訓練的目的是產生一個最小化該誤差的模型。需要制定一個合適的數據拆分策略,用於訓練模型、驗證模型、測試模型的比例。模型驗證:針對數據管理階段產生的獨立於訓練數據集的驗證數據集,通過測試評估訓練模型的性能。模型部署:使用驗證過的模型的系統將被集成,將經過驗證的ML模型與使用傳統軟件工程方法開發和驗證的系統組件進行整合,對其運行進行監控,並通過在線維護或在線學習進行更新。既然軟件2.0的系統行為主要由數據集決定,系統是否符合其預期功能,很大程度上取決於數據集的質量。要證明數據集對於軟件的預期功能在系統的操作環境下是足夠的,對於認證來說是非常大的挑戰。與軟件1.0的需求對比,有以下不同:
確定軟件需求不是在需求階段,而是在軟件開發階段,對軟件設計實現的輸入將不是軟件的功能需求,而是訓練過程的輸出。如一個神經網絡架構、權重和偏差。
需求和設計實現不具備可追溯性,神經網絡結構和權重不能追溯到開發它們的軟件需求,追溯不到描述預期屬性的需求文件,也追溯不到訓練數據集。
安全軟件的驗證方法不再適合數據集及訓練模型,人類已無法理解,無法實現人工審查和分析,傳統軟件基於需求的測試方法也無法進行。例如,功能安全軟件的測試用例採用的等價類生成分析,由於常規規模的神經網絡的高度複雜和非線性特徵,不適用於模型的實施。要確定神經網絡模型算法的等價類是不可能的。
ISO26262 軟件單元測試用例生成推薦方法
數據集的屬性與軟件需求保證屬性存在差異,傳統軟件需求的完整性,清晰性,精確性,無歧義性,可驗證性,可測試性,可維護性,可擴展性 這些屬性的含義需要重新定義。
網絡權重作為參數數據項,在本質上與傳統的數據配置文件不同,依據已有配置參數修改流程而套用網絡權重,存在很大偏差。
傳統軟件開發中已建立完善的工具鏈用於支持開發,集成開發環境,編輯器,編譯器,調試器,git集成,單元測試,集成測試工具,在功能安全軟件工具的鑑定中,根據工具對軟件安全性影響的不同,劃分為不同的級別,例如ISO26262-8對軟件工具的TCL1、TCL2和TCL3分級。在軟件2.0中,也可以按照類似的分類對工具進行分級,但目前還沒有完善的開發工具鏈和如何對工具鑑定的標準。從軟件領域的發展來看,軟件2.0所占的規模越來越大,已出現機器自動生成的代碼,當這類軟件應用於安全關鍵系統時,有可能徹底改變既有軟件的開發模式,需要識別與現有標準的差異,安全關鍵領域如航空航天、鐵路、汽車標準,採用協作的方式在不同領域之間獲取經驗;對應用軟件2.0產品的鑑定也不再是一次性的,與軟件2.0生命周期類似,是一個迭代的過程,評估系統運行性能表現是重要環節;軟件的變更會更加頻繁,如智能網聯汽車的OTA功能,對軟件變更的評估,應考慮其服務期限、運行設計域差異、產品異常行為記錄報告等所有既有數據記錄。版權聲明:本文為CSDN博主「不脫髮的程序猿」的文章,閱讀原文,關注作者博客。
如果您有興趣給《九章智駕》投稿(「知識積累整理」類型文章),請掃描右方二維碼,添加工作人員微信。「知識積累」類稿件質量要求:
A:信息密度高於絕大多數券商的絕大多數報告,不低於《九章智駕》的平均水平;
B:信息要高度稀缺,需要80%以上的信息是在其他媒體上看不到的,如果基於公開信息,需要有特別牛逼的獨家觀點才行。多謝理解與支持。
◆九章 - 2021年度文章大合集
◆當候選人說「看好自動駕駛產業的前景」時,我會心存警惕——九章智駕創業一周年回顧(上)
◆數據收集得不夠多、算法迭代得不夠快,就「沒人喜歡我」————九章智駕創業一周年回顧(下)
◆車輛控制中的「實時性」及其影響因素
◆激光雷達:905與1550的戰爭
◆「艙駕融合」技術發展趨勢分析