成功開發(fā)和推出嵌入式系統(tǒng)需要各種工程學科的廣泛技能。每個嵌入式系統(tǒng)開發(fā)團隊都需要八個不同的軟件開發(fā)領域的知識。開發(fā)人員對嵌入式軟件這八個支柱的掌握程度將直接影響開發(fā)成本、代碼可擴展性和系統(tǒng)穩(wěn)健性等關鍵開發(fā)指標。
讓我們來看看每個支柱及其在嵌入式軟件開發(fā)中的作用。
支柱 #1 –架構
軟件架構是應用程序的藍圖。經(jīng)過深思熟慮的藍圖可以讓開發(fā)人員對主要軟件組件、它們之間如何交互以及它們的環(huán)境有重要的了解。該架構應該提供可擴展性,并使團隊成員了解正在構建的系統(tǒng)。
缺乏軟件架構就像建造一座建筑物,但事先不知道它有多高、有多少層,甚至不知道建筑物將占用的總體面積。正如人們所想象的那樣,建造這樣一座建筑在開始之前就注定會失敗。現(xiàn)在已經(jīng)進入二十一世紀的第二個十年了,我仍然遇到太多的團隊不了解軟件架構基礎知識,甚至不使用它們的用途。
支柱 #2 –代碼分析
開發(fā)嵌入式系統(tǒng)不僅僅是盡快編寫代碼。許多系統(tǒng)需要健壯,并且必須在用戶看來沒有錯誤(即使實際上不存在無錯誤的系統(tǒng))。為了在開發(fā)中實現(xiàn)這些屬性,系統(tǒng)開發(fā)人員需要了解現(xiàn)代代碼分析技術。靜態(tài)、動態(tài)和最壞情況堆棧分析等技術只是有用技術的幾個示例,但只是分析的冰山一角。團隊分析代碼、發(fā)現(xiàn)缺陷和錯誤以及揭露不合規(guī)之處的能力可以幫助確保用戶安全并影響公司品牌。
支柱 #3 –調(diào)試
當今嵌入式軟件團隊面臨的最大挑戰(zhàn)是調(diào)試他們的系統(tǒng)。嵌入式系統(tǒng)每年都變得越來越復雜,系統(tǒng)越復雜,調(diào)試就越困難、耗時且昂貴。為了最大限度地減少調(diào)試,開發(fā)人員需要精通實時跟蹤等現(xiàn)代調(diào)試技術。更少的調(diào)試時間意味著有更多的時間來添加創(chuàng)新的產(chǎn)品功能。
支柱 #4 –文檔
開發(fā)嵌入式系統(tǒng)時,文檔是不可避免的禍害。如果沒有一些描述正在構建的內(nèi)容的基本需求定義,就無法構建系統(tǒng)。同樣,如果沒有詳細記錄的代碼庫,開發(fā)人員就無法正確維護代碼。如果回歸測試沒有測試有效的產(chǎn)品功能,那么它們就毫無用處。如果團隊不具備該領域的專業(yè)知識,那么文檔的開發(fā)成本可能會很高,并且需要花費寶貴的時間,因此掌握文檔可以幫助降低項目的總擁有成本。
支柱 #5 –編程語言技能
并非所有編程語言都是平等的。不止一種語言可以完成這項工作,例如 C、C++、Python、Ada 或其他語言,因此如果不深入了解一種語言的優(yōu)點和缺點,開發(fā)人員可能會遇到麻煩。例如,某些 C 編程語言區(qū)域具有不明確的定義,使用兩個不同的編譯器進行編譯可能會導致兩個不同的結果。同樣,某些結構快速且高效,而另一些結構則使代碼變得臃腫并減慢速度。如果開發(fā)人員不了解這些問題領域,那么糟糕的事情注定會發(fā)生。
支柱 #6 –標準
行業(yè)標準是開發(fā)人員應認真遵循的關鍵支柱。標準通常包含開發(fā)人員的見解和最佳實踐,而這些只能通過反復試驗來學習。 MISRA、CERT 和 IEC 61508 等行業(yè)標準及其行業(yè)衍生品充滿了優(yōu)秀的工程實踐。開發(fā)周期中開發(fā)人員重新發(fā)明這些輪子的時間太少了。
支柱 #7 –測試
即使通過回歸測試來正確測試和驗證軟件的能力對于開發(fā)團隊來說也是至關重要的。最近修復錯誤的更改是否破壞了其他任何內(nèi)容?系統(tǒng)是否滿足要求?通過測試每個代碼分支是否都正確執(zhí)行?測試為開發(fā)人員提供了顯著的舒適度,即系統(tǒng)在受控條件下按預期運行。
支柱 #8 –工具
專業(yè)的嵌入式軟件開發(fā)人員需要訪問并應該知道如何使用他們的行業(yè)工具。了解他們的工具和生態(tài)系統(tǒng)可以區(qū)分強大而完善的系統(tǒng)和不穩(wěn)定的業(yè)余產(chǎn)品。許多團隊放棄了行業(yè)工具,聲稱數(shù)千美元的投資不在預算之內(nèi)。然而,針對正確的工作使用正確的工具,可以通過節(jié)省勞動力十倍地支付該工具的費用,并對上市時間產(chǎn)生巨大影響。
結論
掌握嵌入式軟件的這八個支柱的團隊將在堅實的基礎上構建他們的軟件。我看到的大多數(shù)失敗的團隊至少缺乏這些支柱之一的專業(yè)知識。為了確保成功,團隊需要在每個 支柱上擁有專業(yè)知識,并使用嚴格的設計方法。