自動駕駛軟件的靜態分析和編碼標準合規性
為諸如自動駕駛之類的復雜功能編寫代碼需要龐大的有才能的團隊,這些團隊通常對如何確保高質量的代碼有自己的看法。但是,要構建一個有效的軟件開發流程并非易事,該流程包括諸如靜態分析和編碼標準合規性之類的質量計劃,以使自動駕駛汽車獲得成功的認證。
自動駕駛是一個非常有競爭性的空間,而開發人員的速度則是口頭禪。誰先將經過認證的產品推向市場,將比競爭對手更具優勢,因此,開發人員很容易將靜態分析和其他質量措施視為障礙。尤其是因為自動駕駛領域渴望人才,因此即使他們沒有安全背景,組織也在雇用精明的開發人員。但是,來自無功能安全文化背景的開發人員并不了解安全關鍵軟件開發所需的所有質量流程。這可能使文化認同成為一個挑戰。
獲得內部支持
有時感覺要建立內部共識,以質量為導向的實踐需要心理學碩士學位或受過培訓的談判員的技能……在過去的項目中,我負責引入靜態分析和AUTOSAR C++ 14編碼標準合規性,以實現可持續發展。自動駕駛軟件非常創新,并且使用現代C++開發了用于自動駕駛軟件的軟件組件??紤]到這一點,AUTOSAR C++ 14編碼標準是自動駕駛軟件最合適的標準,因為它支持現代C++,并且是為面向安全性開發而創建的。
為了說服不信服的人,我作了多次演講,討論了多個不同方面。但是,即使進行了所有這些討論和協議,一些開發人員仍然拒絕分析他們創建的所有代碼。以下是我重點關注的一些要點,以確保正確的流程到位:
- 認證——大規模生產之前,必須先對自動駕駛汽車軟件進行批準和認證。在世界不同地區,此過程看起來有所不同,但是所有汽車組織都將ISO 26262視為簡化批準和認證的主要功能安全標準。ISO 26262要求靜態分析和編碼標準符合性,并且對源代碼的編碼標準缺乏合規性將成為批準過程中的巨大障礙。沒有認真的業務組織會允許這種風險。
- 以較低的成本提供更好的質量——從一開始就構建高質量、合規的代碼,并盡早進行測試,則可以更輕松(即更快)地解決問題,并且避免了常見的陷阱,因為開發人員將開始采用從開始。開發人員(甚至是對安全至關重要的文化不熟悉的開發人員)將學習,并且違反靜態分析的情況將更少。必須在編寫代碼時進行測試,以快速創建復雜的軟件。靜態分析是非常適合此情況的一種方法,它通過消除可能導致不可預測行為的問題類別,為安全性和安全性奠定了重要基礎。為開發人員提供一種可以在較短的反饋循環中產生結果并減少誤報的工具,可以提高對該測試技術的接受度。隨著時間的流逝,開發人員確實開始將其視為安全網,即可以幫助他們創建可靠代碼的東西。更不用說這對于Agile/DevOps至關重要,因為如果您在發布前等待進行掃描,則將花費數月的時間來修復代碼。
- 法律問題——遵守編碼標準是潛在法律問題的盾牌。隨著數以百萬計的汽車在道路上行駛,事故將會發生。其中一些將追溯到不可避免的軟件錯誤。組織必須能夠證明他們已經做了一切可能的事以防止安全隱患。如果軟件缺陷導致悲劇,那么沒有文件化的編碼標準合規性流程當然會成為問題。因此,在與開發人員討論此方面時,為了增強效果,我希望包括一些由軟件缺陷引起的實際事故,例如臭名昭著的Toyota意外加速。
說服最有抵抗力的開發商......
自動駕駛技術還處于早期階段。創建的許多源代碼僅僅是測試新想法的原型。一些開發人員不想“浪費”時間使其符合編碼標準,而只是想快速編寫并進行測試。我聽到的一個典型故事是:“我只想測試這個新算法,如果它可以工作,我將重寫代碼以使其變得干凈?!边@聽起來很無辜,但事實是,這只是在增加技術債務。
當我們從一個原型過渡到另一個原型時,通常會帶走很多代碼,從統計上講,它可能占代碼的80%。因此,我們無法使用錯誤的代碼來制作原型,然后再進行修復,因為從一開始,我們就知道我們沒有時間這樣做。因此,即使某樣東西是原型,該代碼也必須合規,因為最終產品將包含大量最初作為原型創建的代碼。
如果不是現在就專注于現在而不是稍后再做,而是可以現在就專注于避免最終花費未知的時間,則開發人員開始將其視為增強流程而不是放慢進度。如果您可以在不降低速度或創造力的情況下有效地使流程適應開發人員的工作流程,則使用起來會變得更加容易。最后,保持物品整潔干凈比最后清理一團糟容易得多。建立一致,可維護的做法來編寫兼容的代碼,將有助于您日后發現更多麻煩。
該死的遺留代碼......
但是,即使您能夠盡早成功地引入編碼標準合規性流程,也不可避免地已經有一些(大量)代碼已經由團隊創建,并且已經被繼承。當您選擇靜態分析工具(Parasoft C/C++test)并選擇標準(AUTOSAR)時,同時,該團隊正在創建大量沒有任何合規性政策的代碼!因此,還必須為舊代碼創建策略。兩項重要的政策是:
- “零新違規”——您必須先完成新的代碼合規性
- “隨時清理”——如果您觸摸文件,則必須對其進行清理
通過這些策略,您可以處理舊代碼,引入新代碼并繼續保持整潔。
總結
為了在整個開發組織中成功采用靜態分析和編碼標準合規性流程,您將受益于以下各項:
- 確保每個人都知道您為什么這樣做(如果不花時間,您就無法通過認證,也無法在汽車市場上取得成功)
- 如果您不重視質量,則解決延遲發布的成本,并向團隊展示當您將質量放到最后時會發生什么
- 使采用盡可能相關且毫不費力。在實施靜態分析工具時,請務必謹慎,確保選擇正確的規則和檢查器,并確保工作流集成到開發人員的現有工作流中。