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