靜態分析工具日益強大,可在產品開發早期發現缺陷

作者:Richard A. Quinnell 來源:電子工程專輯 靜態源碼分析工具已經從簡單的語法檢查器發展成強大的工具,可以用來發現在大規模代碼庫的複雜交互中所產生的缺陷。直到最近,它們仍被質量保證職員用來在接近項目完成的綜合創建期間評估代碼。 最新發布的產品正在將這些工具的作用向開發流程的早期階段推進,以便幫助開發者在軟件錯誤蔓延前的更早期將其檢測出來。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指出,“有些用戶可能從第一天就開始使用分析工具,此時工具的作用表現的相對較弱,他們能夠容忍過多的僞錯誤。其它用戶則寧願等待架構全部開發好再使用工具,即使那時缺陷密度會比較高。” 最後,項目組必須自己決定如何平衡在開發過程早期發現僞錯誤的本錢和在開發過程晚期發現和修正錯誤的本錢之間的關係。但無論如何要選用靜態分析工具,由於這些工具已被事實證實在發現代碼缺陷和安全弱點方面具有極高的價值。既然這些工具已經交付到開發職員手中,缺陷可以被儘早發現,那麼靜態源代碼分析工具也將有助於降低開發本錢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章