隨著現代軍事系統越來越依賴軟件,正在采用新技術來降低成本并增加任務成功的機會。因此,靜態分析基于其在運行時之前的深度分析功能,在軟件開發社區中越來越受歡迎。
這些靜態分析工具(增強但不能取代傳統的測試和調試方法)可在集成發生之前很久就發現集成錯誤,從而消除了代價高昂的后期集成問題。
隨著軍事裝備和車輛的日益現代化,它們在技術上也不可避免地變得更加復雜。在許多情況下,這些機器代表了硬件和軟件的微妙融合,兩者必須完美地交互。由于這些機器的軟件組件必須在現場盡可能可靠地工作,因此使用多種技術組合執行廣泛的調試和測試非常重要,以便在缺陷導致長時間延遲或超限之前消除缺陷。這通常是不切實際的,因為在代碼實際實現到最終運行代碼的設備之前,通常沒有辦法可靠地測試代碼。由于軟件很少在第一次執行時完美運行,因此使用傳統的開發方法和工具返回并修復錯誤會阻礙生產力,并將寶貴的資源和人員從需要完成的其他項目中轉移出來。
例如,波音787夢想客機由于硬件和軟件缺陷而延誤了兩年。這些問題往往是相互交織的。就夢想客機而言,一個特殊的延遲是由于控制制動系統的軟件存在缺陷。重要的是要注意,傳統的測試并沒有在它真正成為一個問題之前發現這個缺陷,并在開發過程中造成代價高昂的挫折和其他并發癥。靜態分析等現代技術可以增加內存損壞和釋放后用戶等問題被更快地發現的可能性,并有助于實現DO-178B的設計保證級別(DAL)。與傳統的V模型相比,靜態分析是一種更高效、更具成本效益的途徑,與傳統的測試和調試方法協同工作,以緩解集成問題和費用。
靜態分析和開發過程
軟件開發往往遵循特定的生命周期。一個例子是航空航天工程中常用的V模型。V 模型代表了一種整體開發方法,它試圖在一段時間內協調項目定義和測試過程。該模型從建立項目的范圍開始,包括其操作概念、要求和體系結構,以及其設計的具體細節。
這個過程在更高層次上開始非常抽象,并在設計過程中逐漸完善和詳細。隨著設計的實現,在開發周期的后期修復問題的成本會更高。一旦項目基本完成并正在測試中,回去對其基本方面的維修就變得非常昂貴。
最終,許多軟件問題是由低效的開發模型和不精確的調試過程引起的,然后惡化。通過使用靜態分析等現代技術盡早消除軟件缺陷,可以提高開發效率和成本效益。
具體來說,靜態分析是一種在不運行軟件的情況下查找軟件缺陷的技術。它的工作原理是檢查產品源代碼,從單個功能開始,一直到模塊,最后是整個程序。靜態分析可以發現許多不同類型的缺陷,包括C / C++程序中的內存錯誤。例如,靜態分析可以檢測以下簡單代碼片段中的錯誤:
int a[10];
for(int i = 0; i < 10; i++); {
a[i] = 0;
}
有時人類很難看到軟件代碼中的問題,因為他們看到的是他們想要看到的東西,而不是實際存在的東西。當編譯器將此代碼轉換為可執行程序時,編譯器以機械和精確的方式讀取源代碼,忽略縮進和間距等人為提示。編譯器將按以下方式讀取示例:
int a[10];
for(int i = 0; i < 10; i++)
;
{
a[i] = 0;
}
如圖所示重新格式化代碼后,導致程序具有完全不同的含義的額外“;”字符突然變得更加明顯。如果此錯誤在最終程序中仍未糾正,則當 i = 10 時,數組訪問 a[i] 將僅執行一次。結果是分配給數組末尾的內存位置,這可能會導致程序崩潰。
靜態分析像編譯器一樣機械而精確地檢查代碼。但是,靜態分析器不會盲目地將代碼轉換為可執行程序,而是查找代碼功能與開發人員最初預期的工作方式不同的路徑。靜態分析可以通過模式匹配等簡單技術或過程間數據流分析和布爾滿足性等高級技術來完成。無論使用何種技術,靜態分析都是定制的,用于查找人類開發人員可能忽略或出錯的情況。這為全面的逐行代碼審計提供了一種更有效的替代方案,這對于大型軟件系統來說并不具有成本效益。
將靜態分析和傳統調試相結合
與功能測試等傳統方法相比,靜態分析呈現出一組不同的權衡。傳統測試只能檢測實際測試的代碼中的錯誤,而靜態分析可以在沒有任何測試的情況下發現所有代碼中的缺陷。有時,通過測試發現的錯誤很難重現并查明源代碼中的特定問題。靜態分析可以以可重復、可預測的方式發現問題,并且始終指向代碼中的特定位置。另一方面,傳統測試可以發現靜態分析無法發現的功能錯誤,因為靜態分析不會嘗試將程序的行為與預期結果進行比較。靜態分析在分析深層程序屬性時也會失去精度,因此可能會遺漏一些缺陷。因此,靜態分析旨在增強傳統方法的有效性,而不是直接取代它們。
由于靜態分析適用于現有的工具集和編譯器,因此無需更改當前的開發實踐。靜態分析可以在編寫第一行代碼后立即開始的項目期間頻繁應用(即使在夜間構建上)。從本質上講,如果項目的代碼庫可以成功編譯,則可以使用靜態分析來調試它,并在項目交付給質量保證人員進行最終測試之前很久就消除問題。
靜態分析的集成優勢
靜態分析在面向團隊的環境中也運行良好。開發人員可以使用靜態分析來檢查彼此的貢獻是否一致,并檢查由不同團隊成員編寫的代碼引起的沖突。這可以適用于單個項目,甚至可以擴展到需要多個項目之間集成以創建復雜系統的更大場景。
靜態分析不僅可以找到簡單的代碼缺陷;如前所述,它能夠在不同組件集成在一起之前分析它們之間的相互作用。在軟件開發的V模型中,測試和驗證從單個組件開始。當這些組件滿足其低級規格時,它們將集成在一起,以便根據系統要求進行更高級別的測試。如果嚴格按照此理想執行軟件集成,則集成階段會帶來很高的風險,因為各個組件將是第一次交互。這些交互可能會暴露原始項目規范的問題,特別是關于如何將系統需求和體系結構轉換為詳細的設計要求和源代碼。靜態分析工具可以在編寫軟件組件后立即分析它們之間的交互,在實現階段捕獲其中一些昂貴的集成問題。這些工具通過跨過程邊界分析代碼來查找應用程序編程接口 (API) 使用中的問題,即使過程位于不同的軟件組件中,也可以實現此目的。
通過靜態分析最大限度地提高效率
軟件正被用于以曾經不可能的方式改進智能炸彈和無人駕駛無人機等軍事系統。靜態分析工具,例如Coverity提供的分析工具,也是這一趨勢的一部分。靜態分析工具與傳統的測試和調試方法結合使用時,可在運行時之前有效地分析軟件并檢測代碼錯誤,從而最大限度地降低風險和成本,同時最大限度地提高軟件開發投資的價值。
審核編輯:郭婷
-
編譯器
+關注
關注
1文章
1642瀏覽量
49231 -
無人機
+關注
關注
230文章
10514瀏覽量
181742
發布評論請先 登錄
相關推薦
評論