自動駕駛軟體測試的編碼標準合規性

By Parsoft 專家 February 13, 2025

由於技術的發展和人們需求的不斷變化,自動駕駛汽車的編碼標準也在不斷變化。了解自動駕駛軟體測試面臨的挑戰以及確保編碼標準合規性的最佳實踐。

與傳統要求相比,自動駕駛在車輛開發過程中增加了額外的合規挑戰。此外,自動駕駛領域競爭異常激烈。誰能率先將經過認證的產品推向市場,誰就將在競爭中佔據顯著優勢。因此,開發人員很容易將靜態分析和其他品質措施視為開發的障礙。

雖然文化認同對開發團隊來說可能是一個挑戰,但圍繞安全關鍵型軟體開發所需的品質流程進行培訓,對於更快、更低成本的工作流程、更完善的文件和更高的合規率至關重要。那麼,如何進行自動駕駛軟體測試呢?

讓我們探索無人駕駛汽車、靜態分析、功能安全要求等領域的世界。

什麼是自動駕駛?

自動駕駛是指車輛無需人工幹預即可自行運作。這種操作利用了多種技術,包括人工智慧演算法、感測器、相機、微處理器等等。請記住,「自動駕駛」和「自主駕駛」並非一回事。

自動駕駛汽車在某些時候仍然需要人工幹預。全自動駕駛汽車無需人工幹預即可感知和導航周圍環境。為了對汽車的自主性進行分類,SAE International 在 2014 年制定了六個等級。

  • 0級:系統無法持續控制車輛,只能暫時介入或發出警告。
  • 1級:高級駕駛輔助系統 (ADAS),許多汽車都配備此類安全套件,例如後視攝影機、自適應巡航控制、車道偏離警報等。
  • 2級:這種ADAS系統需要人類駕駛員,但可以在駕駛過程中轉向、加速或煞車。
  • 3級:這種自動駕駛或自動駕駛系統 (ADS) 可以執行諸如停車之類的操作,但人類必須隨時準備操作車輛,因為他們仍然是汽車的主要操作者。
  • 4級:車輛基本上處於自動駕駛狀態,幾乎不需要人類駕駛的注意。
  • 5級:能夠在所有情況下駕駛的完全自動駕駛汽車。截至撰寫本文時,我們尚未完全達到這一級別的自動駕駛水平。

此等級系統顯示自動化程度呈線性成長,但情況並非總是如此。然而,它仍然是對車輛自動化類型進行分類的有用工具。.

什麼是自動駕駛軟體?

自動駕駛軟體是指在自動駕駛平台上使用的任何軟體。這不僅包括人工智慧和機器學習,還包括非自動駕駛車輛中的設備,例如電子控制單元 (ECU)。這些車載電腦資源控制著從煞車到車門以及駕駛輔助系統的一切。然而,驅動自動駕駛的是神經網路。

這些網路可以找到機器學習演算法可以解析的資料模式,並將其轉換為行動。例如,自動駕駛汽車的系統看到綠燈變黃燈,並相應地減速。

自動駕駛軟體如何運作?

自動駕駛軟體利用多種類型的感測器來感知和解析數據。它們可以確定車輛在物理空間中的位置,或相對於路緣或其他車輛等物體的位置。其他軟體則負責為車輛繪製前往特定位置的路徑,或控制加速、煞車、轉向等功能。

這就像您駕駛車輛一樣——只不過它是由一系列程式、演算法和人工智慧為您完成的。

什麼是自動駕駛軟體測試?

與任何為人類使用而設計的系統一樣,自動駕駛平台需要經過嚴格的測試並滿足特定的標準。例如,ISO 26262 作為汽車功能安全標準,涵蓋整個汽車產品開發流程。它幫助汽車製造商檢測、管理和減輕系統和硬體故障的影響,從而確保安全。然而,它不足以涵蓋自動駕駛汽車面臨的所有工程挑戰。它們可以按設計運行,但無法應對現實世界中的各種場景,例如極端天氣條件或人為行為。例如,無法考慮兒童在街上亂丟垃圾的行為或醉酒成年人的行為。

為了應對許多有趣的場景,並幫助分析環境和人類行為,汽車標準 ISO 21448:2021 應運而生,旨在為適用的設計、驗證和確認措施以及在運行階段實現和保持預期功能安全 (SOTIF) 所需的活動提供指導。

AUTOSAR(汽車開放系統架構)是由相關機構組成的合作夥伴關係,旨在追求和開發用於車輛 ECU 的標準化軟體架構。此外,汽車行業軟體可靠性協會 (MISRA) 制定了開發人員可以參考的指南,用於創建汽車行業的電子組件。

因此,自動駕駛軟體測試的合規性不僅僅是測試軟體組件即使在發生故障時也能確保安全。它還包括測試車輛對實際工況的自主響應並確保安全。此外,組織需要證明自動駕駛軟體符合所有監管要求。

自動駕駛汽車如何測試?

自動駕駛汽車需要模擬真實世界的測試案例。這些用例包括真實的駕駛環境、其他車輛的模型以及自動駕駛汽車可能遇到的情況。然而,由於這些系統是電腦化的,因此也必須考慮網路攻擊的風險。

了解自動駕駛軟體的編碼標準

由於技術和人們需求的不斷發展,自動駕駛汽車的編碼標準也在不斷發展。儘管如此,開發人員在為未來汽車編寫程式碼時,始終可以遵循傳統的安全關鍵合規標準。

軟體產業的通用編碼標準

各行各業的軟體都存在一些通用的編碼標準。然而,編碼標準本身只是一套編碼規則、最佳實踐和指南,開發人員應遵循這些規則編寫程式碼。

這超越了諸如限制使用全局或標準化命名約定之類的一般性建議。擁有數十年軟體開發經驗的個人和公司提供了一些指南或最佳實踐,以確保程式碼品質的提升。

從汽車到醫療設備、航空、鐵路等行業,各行各業都採用了 C 和/或 C++ 安全編碼標準。其中包括:

  1. MISRA C 2023 是針對嵌入式系統程式碼安全性、可靠性和可移植性的最新 C 程式語言編碼標準。
  2. MISRA C++ 2023 這是即將發布的針對嵌入式系統的 C++ 17 程式碼安全性、安全可靠性和可移植性的編碼標準.
  3. AUTOSAR C++ 14 is the coding standard for C++ 14 code safety, security, reliability, and portability for embedded systems. It will be superseded by MISRA C++ 2023.
  4. SEI CERT C 是 C 程式語言安全編碼標準,用於識別軟體安全風險並有效減少所開發應用程式中的漏洞.
  5. SEI CERT C++ 是 C++ 程式語言安全編碼標準,有助於提高軟體安全性並減少開發應用程式中的漏洞.

自動駕駛專用的編碼標準

在自動駕駛方面,團隊應該使用前面列出的編碼標準。這些標準是強烈建議的,但由於自動駕駛汽車的性質,這些安全編碼標準是不夠的。

其他標準,例如 CWE 和 OWASP,雖然有編碼規則和指南,但超出了代碼的範圍。它們還考慮了人們需要遵循的整體開發工作流程、組織政策和流程,以確保自動駕駛汽車的安全。

在考慮自動駕駛汽車以及與自動駕駛流程相關的先進人工智慧系統時,還需要考慮其他標準和法規。此列表並非詳盡無遺,但提供了一般指導。:

  1. ISO 26262, road vehicles functional safety
  2. ISO 21434, road vehicles cybersecurity
  3. ISO 21448, SOTIF (Safety of the Intended Functionality)
  4. Automotive SPICE, quality management
  5. UNECE WP.29, vehicle cybersecurity

這些標準和其他標準考慮的自動駕駛汽車的關鍵面向包括:

  • 即時約束。自動駕駛需要即時處理數據。因此,系統需要能夠快速處理大量數據,以便在瞬間做出決策。.
  • 網路安全。車輛被駭客入侵可不是好事。編碼標準應確保此類情況的緊急措施。.
  • 人機互動。人類的行為無法預測。因此,開發人員必須對意外情況有所準備。.

自動駕駛軟體測試面臨的挑戰

自動駕駛軟體開發固有的安全至上性自然導致需要進行全面且持續的測試。但是,與所有類型的軟體開發一樣,創建人工智慧驅動的系統也存在著自身的陷阱和挑戰。

  • 遵守多種編碼標準。這項任務需要規劃、持續的測試,開發人員需要注意自己的程式碼編寫方式。
  • 網路安全風險。所有電腦系統都容易受到安全風險的影響。例如,不法分子接管自動駕駛汽車是現實世界中常見的情況,應該在整個開發和測試過程中加以防範。
  • 遺留代碼。無論是您自己的舊程式碼還是繼承的程式碼,遺留程式碼都可能對開發造成障礙。可以用兩個原則來解決這個問題:「隨時清理」和「零新違規」。
  • 車輛數據收集。為了實現真正的自動駕駛,必須即時收集、解析和審查大量新數據。因此,建立健全的資料收集系統至關重要。
  • 技術債。有些開發人員希望在測試之前不確保所有編寫的程式碼都符合標準,從而提高工作效率。這可能會導致原型設計中使用不符合安全規範的程式碼,從而造成延誤。最好邊做邊清理。
  • 測試的局限性。一次只測試一個原型會阻礙任何可以進行的更新,而且錯誤可能會造成高昂的代價。
  • 自動化友善基礎設施。目前的公共道路和高速公路對自動駕駛汽車構成了重大障礙。它們是圍繞著人類駕駛員設計的。因此,為這些系統開發軟體可能會受到阻礙。
  • 不斷發展的技術。人工智慧和機器學習日新月異,但自動駕駛的輔助技術(例如感測器、雷達等)也在日新月異。

確保符合編碼標準的最佳實踐

要實現合規並非易事。即使是經驗最豐富的專業人士也難免會犯錯。不過,自動駕駛軟體開發之外也有一些通用的最佳實踐,能夠讓所有軟體工程師受益。

從一開始就建立編碼標準

無論專案範圍、進度或預算如何,一開始就設定期望和標準至關重要。這不僅可以確保團隊中的每個人都能更容易理解你的程式碼,還能減少快速修復錯誤時出現的問題。這樣就無需大家費力地打電話或猜謎了。

定期程式碼審查和審計

與持續測試一樣,定期審查程式碼可以讓你更好地執行標準並儘早解決問題。這可以讓你發現諸如深度嵌套、難以辨認的程式碼、正確的命名約定等等問題。

持續培訓和技能發展

即使您是某個領域的專家,擁有學生心態也能幫助您增強和提升能力。因此,投資開發人員的教育和培訓,使其超出最初的聘用要求,是值得的。此外,科技瞬息萬變。這意味著您的團隊需要跟上時代的步伐。

利用自動化和工具

靜態分析測試並非每個開發人員都喜歡。但自動化讓這類測試的優點更容易取得。在敏捷或左移式開發環境中,利用包括人工智慧和機器學習在內的所有工具都是明智之舉。

文件和報告

再次強調,避免問題最簡單的方法就是從一開始就預防。文件和報告可以讓團隊根據需要進行交叉引用,而無需花費額外的時間去追蹤最初編寫程式碼的人。更糟的是,他們可能會做出假設,然後繼續開發一些根本無法使用的程式碼。

測試的好處

隨著即將發布的 MISRA C++ 2023 和即將成為舊版的 AUTOSAR C++ 14 編碼標準引入靜態分析,將合規性作為一個可持續的流程似乎令人望而生畏。但即使在像自動駕駛這樣創新的領域,測試仍然是最佳實踐不可或缺的一部分。

使用 Parasoft 的 C/C++test 等工具進行測試,可將許多優勢融入您的工作流程,包括:

  1. 認證與合規性。所有汽車組織都認可 ISO 26262 作為主要的功能安全標準,可簡化批准和認證流程。自動駕駛汽車軟體在投入量產之前必須獲得批准和認證,因此儘早且頻繁地進行測試可以幫助您更快地獲得認證。
  2. 以更低的成本實現高品質。從一開始就建立高品質、合規的程式碼並儘早進行測試,可以更快地解決問題。您將避免常見的陷阱,因為開發人員將從一開始就採用最佳實務。在編寫程式碼的同時進行測試對於快速創建複雜軟體至關重要。靜態分析是非常適合這種情況的方法之一。
  3. 問責和文檔記錄。隨著數百萬輛汽車在道路上行駛,事故隨時可能發生,其中一些事故可以追溯到軟體錯誤。組織必須能夠證明他們已盡一切努力來預防安全隱患。擁有記錄在案的編碼標準合規流程將大有裨益。
  4. 在閉環系統中進行測試。在虛擬環境中建立測試案例有助於降低測試成本和時間。模擬各種情況進行分析,可以在整個測試過程中進行細微調整或重大修改,從而獲得更多可操作的數據。

自動駕駛軟體測試的未來趨勢和考慮因素

許多公司都試圖成為市場上首批真正自動駕駛汽車的公司。這項技術需要全面的測試才能保障生命安全、正常運作並適應日常生活。

儘管並非美國國家公路交通安全管理局 (NHTSA) 的官方文件,但電氣電子工程師協會 (IEEE) 於 2022 年發布了一套關於自動駕駛汽車 (ADS) 標準的初步指南。 IEEE P2846 安全相關自動駕駛汽車行為模型假設標準草案旨在解決自動駕駛和駕駛的獨特問題。然而,制定針對此用例的標準指南並非未來唯一的考慮。

如前所述,自動駕駛軟體測試也依賴現實世界來迎接真正的自動駕駛汽車。隨著自動駕駛的廣泛應用,我們傳統的導航技術和方式可能需要改變。這就引出了一個問題:如果城市的設計以人為本,而不是以停車為中心,會怎麼樣?

總結

將靜態分析或其他類型的連續測試納入您的工作流程,可以帶來實際的成果。但藉助 Parasoft 的眾多解決方案等工具,實現自動駕駛汽車軟體的安全合規性將會更加容易。只需記住執行以下操作:

  1. 明確測試目的。
  2. 解決延遲發布帶來的成本問題。
  3. 盡可能確保採用過程的相關性和順暢性。
  4. 在實施靜態分析工具時,要有針對性。
  5. 為整合到開發人員流程中的工作流程選擇合適的規則和檢查器。

以高效、徹底、以開發人員為導向為目標,您將比想像中更快地實現安全合規。