本發明專利技術提供一種基于嵌入式軟件靜態檢測的方法,該方法解決了現有靜態檢測技術的不足,結合控制流、數據流信息及路徑別名信息進行靜態檢測。該方法包括檢測執行端模塊和客戶端模塊,客戶端提供圖形化規則文件編輯支持,測試人員完成源文件編輯工作后,可對源文件執行靜態檢測,客戶端發送命令通知檢測執行端開始靜態檢測。檢測執行端接收客戶端發送的開始檢測命令,對源文件結構進行分析,調用規則解析模塊對規則文件進行解析,處理后產生匹配結果,并通過匹配結果封裝模塊進行封裝,將封裝產生的檢測結果發送給客戶端供后者分析顯示??蛻舳藢z測結果進行分析、映射,根據檢測結果更新客戶端,讓開發人員能夠直觀地查看靜態檢測結果,直觀查看規則違反情況。
【技術實現步驟摘要】
本專利技術涉及軟件檢測
,特別是涉及一種基于嵌入式軟件的靜態檢測方法及其系統。
技術介紹
嵌入式系統發展到目前 ,廣泛應用于自動化控制、軍事技術、工業控制、科學研究、醫學研究、交通管理、人工智能等系統環境中。嵌入式系統中,硬件是核心,軟件是靈魂,嵌入式軟件在整體系統中處于關鍵地位。如何在盡量縮短開發周期的條件下,保證嵌入式軟件的質量、可靠性、安全性等,成為了一個備受關注的課題。因此,嵌入式軟件測試的重要性日關出。在嵌入式軟件開發過程中,代碼中存在的錯誤發現越晚,則維護代價越高,所以,盡早地發現并解決代碼中存在的錯誤,對控制嵌入式軟件的開發成本及保證嵌入式軟件質量至關重要。靜態檢測是在不運行程序的情況下,對源代碼結構進行分析發現潛在錯誤,能夠在開發階段發現源碼中存在的問題,這對于控制嵌入式軟件開發周期及降低數字家嵌入式軟件維護成本具有重要的意義。目前已存在也存在針對C進行靜態檢測的工具,有的基于命令行工作,比如Splint, CPPCheck,容易產生較多警告信息,其中一些為誤報信息,容易淹沒正常錯誤信息,檢測結果不易查看。有的價格昂貴,比如QAC/C++、PC-Lint> LDRA及PolySpace,對于小成本嵌入式項目來說,測試成本難以接受,難于推廣。另外,現有的靜態檢測技術在檢測過程中僅考慮控制流信息,沒有考慮數據流分析,對某些錯誤無法檢測;沒有對路徑別名進行分析,會產生許多誤報信息。現有的免費靜態檢測工具基于命令行工作,無法直觀定位違規路徑信息,不方便開發人員根據檢測結果對源碼中存在的錯誤問題進行修改??傮w來說現有技術存在以下不足 1)檢測過程僅使用控制流信息,沒有集合數據流信息,某些錯誤無法檢測; 2)沒有對路徑別名進行分析,會產生誤報信息; 3)沒有對違反規則的執行路徑定位,檢測結果不能被其他工具利用。
技術實現思路
為了克服現有技術的不足,本專利技術的一個技術目的是提供一種使用方便,能夠很好實現對源文件進行檢測的基于嵌入式軟件的靜態檢測方法。為了克服現有技術的不足,本專利技術的另一個技術目的是提供一種使用方便,能夠很好實現對源文件進行檢測的基于嵌入式軟件的靜態檢測方法。為實現上述技術目的,本專利技術采用的技術方案如下 一種基于嵌入式軟件的靜態檢測方法,包括以下步驟 對源文件結構進行分析,生成控制流、數據流信息的步驟; 對規則文件進行解析的步驟;根據解析產生的規則約束字符串構造正則表達式的步驟; 根據正則表達式、控制流、數據流信息執行規則匹配的步驟; 如果發現匹配條目,則對違反檢測規則的語句及控制流路徑進行記錄,進行封裝,將封裝產生的檢測結果,然后進行分析顯示。優選地,所述執行規則匹配,還包括在規則匹配過程更新路徑別名信息的步驟。優選地,更新路徑別名信息具體為根據動態內存分配、動態內存釋放及指針變量賦值操作時更新路徑別名信息。優選地,還包括通過預設的敏感資源檢測庫對源文件進行敏感檢測的步驟。 優選地,所述規則匹配為在GMPLE圖上執行匹配操作,根據檢測規則的復雜程 度,執行相應程度的規則檢測。為實現上述第二個技術目的,本專利技術采用的技術方案如下 一種基于嵌入式軟件的靜態檢測系統,包括 用于負責向GCC插件框架注冊需監聽的插件事件,GCC插件框架在監聽的插件事件產生后會調用預先定義的回調函數的事件注冊模塊; 負責對源代碼進行解析生成控制流,數據依賴,GIMPLE圖等信息的結構信息生成模塊; 基于GIMPLE圖完成檢測工作,結合控制流及數據依賴信息進行檢測的規則檢測模塊; 負責對規則文件進行解析建立規則鏈的所述規則解析模塊; 對規則的模式字符串進行處理生成正則表達式正則表示式構建模塊; 負責在GMPLE圖上執行匹配操作,根據檢測規則的復雜程度,執行相應程度的規則檢測的規則匹配模塊; 對路徑別名進行分析處理的模塊,動態內存分配,動態內存釋放及指針變量賦值操作均影響路徑別名分析關系,當檢測過程遇到上述操作語句時,路徑別名分析模塊更新路徑別名信息的路徑別名分析模塊; 對靜態檢測結果采用統一格式進行封裝,針對每條匹配結果,封裝保存詳細違規信息及違規路徑對應的路徑條件信息的匹配結果封裝模塊。優選地,還包括針對嵌入式軟件對敏感資源泄漏的特點,靜態檢測工具預定義了一系列資源泄露檢測規則的保存庫預定義規則庫。與現有技術相比,本專利技術的優點在于 本專利技術通過客戶端模塊和檢測執行端模塊結合數據流信息對嵌入式軟件執行靜態檢測,并能對路徑別名進行分析,減少誤報信息。附圖說明 圖I為靜態檢測工具框架 圖2為靜態檢測工具檢測執行端框架 圖3為GIPMLE圖構建流程 圖4為正則表達式構建流程 圖5為路徑別名分析模塊流程 圖6為路徑條件信息格式圖.具體實施例方式下面結合附圖和具體實施方式對本專利技術作進一步詳細的說明。應當理解,此處所描述的具體實施例僅僅用于解釋專利技術,并不用于限定技術。本專利技術為了實現可視化的嵌入式軟件的靜態檢測,客戶端以Eclipse插件的形式運行于開發機JRE環境中,采用JFACE/SWT進行GUI設計,提供圖形化規則文件編輯支持,測試人員完成源文件編輯工作后,可對源文件執行靜態檢測,客戶端發送命令通知檢測執行端開始靜態檢測。檢測執行端接收客戶端發送的開始檢測命令,首先對源文件結構進行分析,生成控制流、數據流信息,調用規則解析模塊對規則文件進行解析,根據解析產生的規則約束字符串構造正則表達式。在正則表達式、控制流程圖、數據流程圖正確構建的基礎 上,控制器調用規則匹配模塊執行規則匹配,規則匹配過程更新路徑別名信息,如果發現匹配條目,則對違反檢測規則的語句及控制流路徑進行記錄,并通過匹配結果封裝模塊進行封裝,將封裝產生的檢測結果發送給客戶端供后者分析顯示。客戶端對檢測結果進行分析、映射,根據檢測結果更新GUI,讓開發人員能夠直觀地查看靜態檢測結果,直觀查看規則違反情況,如圖I所示。本專利技術為了結合數據流信息及路徑別名信息實現嵌入式軟件的靜態檢測,檢測執行端以GCC插件形式開發,執行實際靜態檢測工作,框架圖如圖2所示,控制器調用插件事件注冊模塊完成GCC插件事件注冊,當對源文件結構進行分析,插件事件產生,插件框架回調函數完成結構信息的生成工作,主要生成GMPLE圖、控制流程、數據流等結構信息。GIMPLE圖是基于基本塊及各基本塊相鄰邊構建的,結構信息生成模塊遍歷每個基本塊,遍歷基本塊內每條GMPLE語句,以GMPLE語句信息創建圖結點并連接結點之間的邊,最終完成GIMPLE圖構建工作,詳細構建流程如圖3所示。另一方面,控制器調用規則解析模塊解析規則文件,根據規則模式字符串構建正則表達式,如圖4所示,規則匹配模塊負責在GMPLE圖上執行匹配操作,根據規則的簡易程度,分別調用相應的檢測方式完成實際檢測工作,檢測過程中更新路徑別名信息,路徑別名分析模塊對路徑別名進行分析處理,動態內存分配,動態內存釋放及指針變量賦值操作均影響路徑別名分析關系,當檢測過程遇到上述操作語句時,路徑別名分析模塊更新路徑別名信息,路徑別名分析模塊流程如圖5所示,如果存在匹配結果,即存在違反靜態檢測規則的執行路徑,調用匹配結果封裝模塊生成客戶端可識別的結果數據,供客戶端讀取解析,針對每條匹配結果,封本文檔來自技高網...
【技術保護點】
一種基于嵌入式軟件的靜態檢測方法,其特征在于,包括以下步驟:對源文件結構進行分析,生成GIMPLE圖、控制流、數據流信息的步驟;對預設的規則文件進行解析的步驟;根據解析產生的規則約束字符串構造正則表達式的步驟;根據正則表達式、控制流、數據流信息執行規則匹配的步驟;如果發現匹配條目,則對違反檢測規則的語句及控制流路徑進行記錄,進行封裝,將封裝產生的檢測結果,然后進行分析顯示。
【技術特征摘要】
【專利技術屬性】
技術研發人員:劉發貴,賀南,劉佳欣,
申請(專利權)人:華南理工大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。