善用自動軟體除錯工具 揮別蟲蟲危機所帶來的損害 智慧應用 影音
工研院
Event

善用自動軟體除錯工具 揮別蟲蟲危機所帶來的損害

  • DIGITIMES企劃

Coverity亞太營運副總Rich Cerruto。
Coverity亞太營運副總Rich Cerruto。

全球知名開發測試解決方案供應商Coverity亞太營運副總Rich Cerruto表示,由軟體瑕疵所引發的事件,其後果可能十分嚴重,正如近幾年來各家媒體所報導的:某家公司因其造成的注入幫浦錯誤操作導致500人死亡;龐巴迪公司因軟體問題延後產品上市時程,使得其股價一洩千里;Skype因軟體異狀而中斷服務,導致5億6,000萬用戶的不滿;而J. P. Morgan也因為同樣的狀況,造成超過1億美元的損失...。

另外根據Forrester在2011年5月所做的調查結果顯示,有49%的受訪者認為:軟體瑕疵是造成產品出貨延誤及回收問題的主因;46%認為軟體瑕疵會降低客戶滿意度;38%說這會引發資安漏洞;36%則強調商譽會因此而受損。「由於現在軟體系統已經是公司競爭力的來源,與企業營運作業息息相關,因此只要有軟體瑕疵出現,經常就會立即導致企業危機產生。」由此可見偵測、修補軟體瑕疵的重要性。

軟體架構及組成複雜,除錯實有相當難度

不過現在軟體應用系統組成架構及程式來源十分複雜,單以智慧型手機來說,就可能包含消費應用平台(Google/App Store/Open Source/Java)、裝置製造商(Ericsson/RIM/HP/Motorola/Samsung)、作業系統業者(Android/Symbian/Linux/Windows/Chrome OS)、裝置驅動程式業者(Nvidia/AMD)、晶片與微處理器軟體商(Intel/Texas Instruments/Qualcomm/Iinfineon/Marvell)…等來自眾多家企業的應用程式。

「複雜的軟體產業供應鏈體系,只會使軟體瑕疵產生的機率大增。」正因其權責不明,一旦有問題發生時,造成原因很難被追究及舉證,導致大家容易彼此推卸修復軟體的責任。Cerruto說,常聽到的回應是:「如果是因為我的程式碼瑕疵所造成,我很樂意負責修正。」而OEM業者對於其上游供應商缺乏一致的管制標準,難以維持相同的軟體品質程度,更使得此一問題雪上加霜。

Cerruto認為,會造成軟體品質不佳與後續容易造成資安問題的基本原因,可歸納成幾點:一般企業組織長期以來,即缺乏制定與執行程式碼品質與安全管理政策的能力;程式開發團隊沒有採取適當措施檢視其程式碼散佈到軟體供應鏈之後,所可能觸發品質與安全危機為何;OEM業者無法從軟體供應鏈整體角度,透視其中各別組成單位的資安?品質危機所在;而軟體安全稽核又獨立於標準的開發作業流程之外,與開發人員本身的工作脫勾。

「常見的狀況是:若是依循傳統軟體開發模式,測試工作往往得到非常後期的階段才會進行,因此一但在該階段才發現有瑕疵或安全問題時,不僅得花上大量時間重新調整?修改,而且還會增加相當多的成本。」Cerruto說,由於此時開發人員在心態上會急著將軟體版本釋出,以求開發工作順利結案,根本就不會投入太多時間與精力檢測其軟體潛存的瑕疵,因此導致後續問題陸續產生。

採用靜態測試(Static Testing)搭配Coverity自動軟體除錯工具是最佳方式

解決之道是即早、即時在軟體開發的各項階段進行程式碼測試與修補的動作。根據NIST於2002年所做的一項調查顯示,如果等整合及系統測試階段才進行測試,其所需耗用的時間與成本會是在需求與設計階段的10倍。不過Cerruto也補充,即便業者要進行測試,也絕非以盲目方式處理。

「最好是採用靜態測試搭配Coverity公司所提供的自動軟體除錯工具來進行。」他強調,由於一般通用測試方式無法處理全路徑覆蓋(Path Coverage),難免會有許多瑕疵在測試過程中被疏漏;而靜態測試無需實際執行程式碼就能檢驗所有的路徑,這意味著開發人員可以更全面性、系統性地找出瑕疪所在,即便是處於難得發生、執行機率很少的路徑中的程式碼也可以獲得檢驗。

「這不僅能減少修補成本,降低因意外瑕疵而造成的開發時程不確定性,對產品的資安而言,由於少了可供駭客利用做為侵入與竊取資料的潛在管道,自然也就更加安全。」

Cerruto說,採用Coverity公司所提供的自動軟體除錯工具執行靜態測試,可分為3個階段:第一階段為建立步驟,開發工具會先蒐集與程式碼如何編輯的相關資訊,並建立虛擬環境,以了解公司的程式建立標準程序,並將其運用編譯器資源的狀況予以透明化,「由此我們可掌握住所有的原始檔案及其如何進行編輯的相關參數,包括巨集定義與命令列選項意義,以高度忠實地呈現該企業程式碼記錄及組譯方式。」

而在此基礎上,開發人員就可透過一項可稱之為「Checkers」的模塊,針對每一條穿越程式碼的路徑進行測試及分析。「Checkers會設法發掘出程式碼中每一項實際的瑕疵,如執行後所引發的各種當機、記憶體崩潰、記憶體遺漏、控制代碼遺漏與其他會產生嚴重錯誤的問題,而非只是單純檢視程式碼格式是否正確而已。」

可找出真正的程式碼瑕疵,系統誤判狀況機率極低

最終是將測試的結果,包括瑕疵所在位置與產生原因進行清楚呈現與解釋,並將其儲存在資料庫中,以便供企業的開發人員進行後續管理與問題處理分配,以及跨部門提供修補方式建議及相關經驗的分享。「這可讓企業在修補程式的過程中更具有效率。」

舉例來說,有些公司固定每一周期會有所謂的「Coverity修補日」,那天所有開發人員會放下手邊的開發工作,將心力放在分析、討論與移除瑕疵上。「其他還有像是優先修補新產生的瑕疵,至於長久以來所留下的歷史瑕疵問題則放入工作清單內,待來日再安排時間修補。」

目前透過Coverity公司自動軟體除錯工具的協助,無論是在C/C++或Java/C#程式碼方面,都能夠快速找出潛藏在其中各類型瑕疵,如Resource Leaks、Null pointer dereferences、Concurrency Issues、Integer handling issues、Improper Use of APIs、Control flow issues、Memory-corruptions、Memory-illegal access、Security best practices violations…等。

由於自動軟體除錯工具在檢測程式碼瑕疵時,若經常發生誤判狀況,輕則浪費開發者時間、阻礙人們學習工具的興趣,重則會降低企業對工具分析結果的信任度,使得該工具無法發揮應有的成效。

「Coverity一直致力於消除誤判的狀況。」Cerruto表示,與其他同業所提供工具相比,Coverity工具分析結果精確且快速,誤判率通常遠低於10~15%,而且所找出的多是真正會嚴重造成程式碼問題的瑕疵,而非僅是格式衝突…等之類的表面問題,因此不僅能夠激發開發人員更快上手使用的興趣,也能真正節省其時間,不會浪費太多精力在處理無謂的工作。

「即便在分析大型程式碼時,Coverity自動軟體除錯工具亦可在其廣度、深度及延展性上取得最佳平衡。」也因此諸如LG、Synopsys、RSA、SIEMES、L3 communications、Honeywell、NEC、Medtronic、Juniper、BMC Software、Samsung、SEGA、Sony…等全球超過1,100家世界級領導品牌業者,都已成為Coverity的合作夥伴及產品愛用者。

(本文提供英譯版本,請按此連結閱讀英譯版本內容)