發布日期:2022-07-14 點擊率:24
靜態源碼分析工具已經從簡單的語法檢查器發展成強大的工具,可以用來發現在大規模代碼庫的復雜交互中所產生的缺陷。直到最近,它們仍被質量保證人員用來在接近項目完成的綜合創建期間評估代碼。
最新發布的產品正在將這些工具的作用向開發流程的早期階段推進,以便幫助開發者在軟件錯誤蔓延前的更早期將其檢測出來。Klocwork公司的Insight和GrammaTech公司的CodeSonar Enterprise都能滿足開發人員的需要,即使在許多代碼段還缺失的情況下也能發揮作用。
軟件開發人員通常采用兩種工具來自動檢測他們代碼中的錯誤。一種是動態分析工具,可以在代碼執行過程中查看代碼;另一種是靜態分析工具,通過算法檢查代碼的錯誤。這兩種工具各有優缺點。
動態分析擅長于發現運行時錯誤,如資源泄漏和動態存儲訛誤。開發人員可信賴動態分析工具所報告的任何錯誤都是真實的,因為這些錯誤是在實際代碼執行期間被發現的。
但為了高效地使用動態分析,代碼必須被全面執行,因此需要使用測試案例。這樣,動態分析工具在尋找錯誤方面的效率就取決于測試案例的質量。另外,由于動態分析工具是與運行軟件一起工作的,因此只能在開發過程的晚期階段起作用,此時代碼已經完全編好并首次被整合。
靜態分析工具使用算法技術檢查源代碼中的錯誤,并標明問題區域,以便編程人員做更詳細的檢查。這種算法方式無需使用測試案例,算法本身決定了分析工具發現錯誤的效率。不過,這種方法存在識別失誤的可能性:有可能標記為錯誤的代碼事實上是可以正確執行的。如果它們產生太多的錯誤時別,用工具供應商術語而言就是低“準確性”,靜態工具就會影響用戶開展后續工作,并有可能掩蓋真正的錯誤。
這兩種工具呈互補的關系,各自都擅長于發現對方很難發現的錯誤,但動態分析工具似乎在開發人員中更加普及。部分原因是早期的靜態分析工具更像是開發人員用來尋找相對簡單的編碼和格式錯誤的語法檢查器。
然而在過去十幾年中,隨著研究人員開發出更加高效的算法,靜態分析工具變得越來越強大。它們已經能夠識別出大量的微小錯誤(見表1),其中有許多錯誤只在搶先多任務環境中的任務交織期間表現為執行問題。
表1:可被靜態源代碼分析工具發現的典型錯誤。
上述新的靜態分析工具額外的好處之一是:它們擁有增強的能力,可以發現代碼中有可能被惡意用戶用來突破安全防護的缺陷。開發人員很容易低估軟件安全缺陷,因為他們只是指望代碼能正常執行。靜態分析工具的算法沒有預期性,只是一種規程,因此會不帶偏見地識別潛在的問題。
向開發早期推進
直到最近,靜態源代碼分析工具還只是用于開發過程的晚期,即開發人員能夠完整訪問所有代碼段的綜合構建階段。然而許多新推出的工具,包括Klocwork公司的Insight和GrammaTech公司的CodeSonar Enterprise,都已經通過性能的增強使得開發者在代碼編寫的過程中使用這種靜態分析工具。
這種新一代靜態源代碼分析工具利用企業級軟件開發環境,整合了從事同一項目不同部分的開發團隊的成果(見圖1)。通過實現代碼段分析掃描方面信息的對等交換,這種工具可以收集到精確檢測錯誤所需的范圍更廣的語境。
圖1:新的靜態源代碼分析工具可以通過收集中心數據庫中個別代碼段的數據、建立系統性觀點來最大化效率。
這種更廣范圍的語境,再加上為遺失的代碼自動建模,就可以幫助開發人員快速建立有效可靠的代碼檢查基礎,即使當時項目還沒有全部完成。在這個階段捕捉到的錯誤比開發過程晚期的錯誤更容易修正,代價也較低。另外,較早捕捉錯誤可以防止這些錯誤在系統中擴散進而影響后期開發的代碼行為。
然而,在早期使用這種靜態分析有個前提,即充分理解局部查看代碼所引起的局限性。“重要的是記住在軟件開發的早期階段,工具是不夠精確的,并可能忽略了程序間的影響。”GrammaTech公司工程副總裁Paul Anderson提醒道。
但Anderson補充道,隨著被分析代碼規模的增長,結果將有所改善。經常較早地使用靜態分析工具,還有助于培養開發人員發現他們個人編碼風格的缺點,并改變他們的編程方式以便防止重復發生相同類型的錯誤。
由于這種新一代工具被整個項目開發團隊所使用,他們可以記錄分析結果的變化規律,從而幫助識別新的問題。例如Klocwork公司的Insight可以保存每次分析過程產生的數據,從而讓開發人員在整個開發過程中跟蹤標示出的錯誤,該公司首席技術官Gwyn Fisher表示。
該工具還允許授權的高級開發人員將錯誤標示為偽錯誤或不相關錯誤,Fisher補充道,這樣,在隨后的分析操作中就不會再報告它們。這將有助于開發人員集中精力處理真正的錯誤,并使任何新引入的錯誤更加明顯,或者在交互代碼部分被一起分析時發生的錯誤更加突出。
何時采用靜態工具?
在開發過程中要多么早和多么頻繁地使用靜態代碼分析工具?這取決于具體的項目情況。“不同團隊可以接受不同等級的偽錯誤。”GrammaTech公司的Anderson表示,“安全性非常關鍵的項目可能容忍10:1的假:真錯誤報告率,而其它項目50:50的比率就有問題,因為跟蹤偽錯誤非常浪費時間。”
Klocwork公司的Fisher指出,“有些用戶可能從第一天就開始使用分析工具,此時工具的作用表現的相對較弱,他們能夠容忍過多的偽錯誤。其它用戶則寧愿等待架構全部開發好再使用工具,即使那時缺陷密度會比較高。”
最后,項目組必須自己決定如何平衡在開發過程早期發現偽錯誤的成本和在開發過程晚期發現和修正錯誤的成本之間的關系。但無論如何要選用靜態分析工具,因為這些工具已被事實證明在發現代碼缺陷和安全弱點方面具有極高的價值。既然這些工具已經交付到開發人員手中,缺陷可以被盡早發現,那么靜態源代碼分析工具也將有助于降低開發成本。
作者:Richard A. Quinnell 特約技術編輯
下一篇: PLC、DCS、FCS三大控
上一篇: 臺式風洞儀:儀表校正