本發明專利技術涉及一種空指針異常的自動故障定位方法,分為三個步驟:(1)程序切片,(2)故障定位,包括對切片后的程序進行空指針分析和別名分析,(3)可視化。采用靜態分析和實時堆棧信息相結合的方法,自動定位引發空指針異常的根源,既克服了單獨使用靜態分析方法導致分析結果不精確的缺陷,又彌補了實時堆棧信息過于粗糙無法單獨應用的不足,同時不需要花費代價收集動態信息。
【技術實現步驟摘要】
本專利技術涉及一種軟件故障定位技術,尤其是。
技術介紹
隨著軟件規模的擴大和復雜程度的提高,對軟件健壯性、穩定性和可靠性的要求越來越高,軟件的自動故障定位技術也越來越受到開發人員的關注。Java的異常可以分為兩類應用異常(在應用程序中根據異常條件顯式地引發)和運行時異常(由Java的實時環境隱式地引發)。目前針對應用異常的研究有很多,例如對應用異常進行分析,為程序的測試、維護等任務為開發人員提供有價值的信息,但針對運行時異常的研究很少。由于運行時異常的引發不可預測,所以開發人員很少為運行時異常設計處理程序,因而運行時異常一旦發生,程序很難通過自身的異常處理機制來處理,經常需要人工的干預來檢查并定位引發異常的根源。因此當在程序的執行過程中引發運行時異常時,如果沒有匹配的異常處理程序來處理,程序立即終止。空指針異常(java. lang. NullPointerException)是Java異常中很常見的一種運行時異常。在Java中對值為null的對象調用任何方法,都會引發空指針異常,空指針異常是Java中最難查找和調試的一種異常,因此查找空指針異常的引發原因、并進行定位是一個至關重要的問題。僅僅使用靜態方法來檢查程序潛在故障的方法有很多,但這些方法大多要求用戶提供程序的注解且無法解決靜態分析結果不精確的問題。采用靜態分析與動態信息相結合的方法是解決靜態分析結果不精確問題的一個很有效的方法,但這些方法用于收集動態信息需要花費很大的代價。
技術實現思路
為了空指針異常現有的靜態分析方法存在的不足,本專利技術提供,采用靜態分析和實時堆棧信息相結合的方法,自動定位引發空指針異常的根源,既克服了單獨使用靜態分析方法導致分析結果不精確的缺陷,又彌補了實時堆棧信息過于粗糙無法單獨應用的不足,同時不需要花費代價收集動態信息。將該方法應用到開放源碼項目中,實驗結果表明該方法有效。本專利技術解決其技術問題所采用的技術方案是該空指針異常的自動故障定位方法分為三個步驟(I)程序切片,(2)故障定位,包括對切片后的程序進行空指針分析和別名分析,(3)可視化;在步驟(1),從空指針異常的引發點開始做后向的靜態切片,利用實時堆棧信息和程序構建系統依賴圖,計算系統依賴圖的可達性即可獲得程序切片;首先使用實時堆棧信息分析程序中方法的執行情況,然后依據方法的執行情況對執行過的方法進行分析,而忽略那些沒有執行的方法,從而縮小系統依賴圖的大小,降低靜態切片的時間和空間消耗,并提高切片的精度;在步驟(2),利用開源軟件Soot對切片后的程序進行靜態分析 首先進行空指針分析,找出代碼中可能為空值的引用型變量并將其標出,以便于找到引發空指針異常的錯誤值來源,然后再針對引發空指針異常的對象進行別名分析,充分考慮了別名對引用型變量指向信息的影響,便于能進一步鎖定引發空指針異常的錯誤語句,從而提高空指針異常故障定位的精度并降低誤報率;在步驟(3),利用自行開發的可視化工具 CodeDia顯示分析結果,有利于進行更深入的分析和后期的故障修復工作。本專利技術的有益效果是采用靜態分析和實時堆棧信息相結合的方法,自動定位引發空指針異常的根源,既克服了單獨使用靜態分析方法導致分析結果不精確的缺陷,又彌補了實時堆棧信息過于粗糙無法單獨應用的不足,同時不需要花費代價收集動態信息。將該方法應用到開放源碼項目中,實驗結果表明該方法有效。附圖說明下面結合附圖對本專利技術作進一步說明。圖I是本專利技術的系統模型。圖2是本專利技術的實施例可視化顯示結果。具體實施方式在圖I中,該空指針異常的自動故障定位方法分為三個步驟(1)程序切片,(2) 故障定位,包括對切片后的程序進行空指針分析和別名分析,(3)可視化;在步驟(1),從空指針異常的引發點開始做后向的靜態切片,利用實時堆棧信息和程序構建系統依賴圖, 計算系統依賴圖的可達性即可獲得程序切片;首先使用實時堆棧信息分析程序中方法的執行情況,然后依據方法的執行情況對執行過的方法進行分析,而忽略那些沒有執行的方法, 從而縮小系統依賴圖的大小,降低靜態切片的時間和空間消耗,并提高切片的精度;在步驟(2),利用開源軟件Soot對切片后的程序進行靜態分析首先進行空指針分析,找出代碼中可能為空值的引用型變量并將其標出,以便于找到引發空指針異常的錯誤值來源,然后再針對引發空指針異常的對象進行別名分析,充分考慮了別名對引用型變量指向信息的影響,便于能進一步鎖定引發空指針異常的錯誤語句,從而提高空指針異常故障定位的精度并降低誤報率;在步驟(3),利用自行開發的可視化工具CodeDia顯示分析結果,有利于進行更深入的分析和后期的故障修復工作。在圖2中,窗口 I顯示分析結果(XML格式)在IE瀏覽器中的顯示截圖;窗口 2顯示可視化工具CodeDia載入該結果文件與項目的源代碼(Ant)之后的程序結構圖,包括包、 類、方法的層次關系;窗口 3顯示Project類的源代碼;窗口 4顯示AntClassLoader類的源代碼;高亮部分是錯誤定位的結果。在窗口 I的分析結果中,〈Slicelnformation〉標簽為根結點,包含了所有的信息; 〈SourceFile〉標簽包含了切片得到的某個類中的行號,Path屬性記錄了類名(文件名); 〈SourceFile〉包含了〈NullUnknown〉和〈AlwaysNull〉兩個子標簽,分別記錄了不確定是否為空的行號以及確定為空的行號。權利要求1.,分為三個步驟(1)程序切片,(2)故障定位,包括對切片后的程序進行空指針分析和別名分析,(3)可視化。2.根據權利要求I所述的,其特征是在步驟(1),從空指針異常的引發點開始做后向的靜態切片,利用實時堆棧信息和程序構建系統依賴圖,計算系統依賴圖的可達性即可獲得程序切片;首先使用實時堆棧信息分析程序中方法的執行情況,然后依據方法的執行情況對執行過的方法進行分析,而忽略那些沒有執行的方法。3.根據權利要求I所述的,其特征是在步驟(2),利用開源軟件Soot對切片后的程序進行靜態分析首先進行空指針分析,找出代碼中可能為空值的引用型變量并將其標出,以便于找到引發空指針異常的錯誤值來源,然后再針對引發空指針異常的對象進行別名分析。4.根據權利要求I所述的,其特征是在步驟(3),利用自行開發的可視化工具CodeDia顯示分析結果。全文摘要本專利技術涉及,分為三個步驟(1)程序切片,(2)故障定位,包括對切片后的程序進行空指針分析和別名分析,(3)可視化。采用靜態分析和實時堆棧信息相結合的方法,自動定位引發空指針異常的根源,既克服了單獨使用靜態分析方法導致分析結果不精確的缺陷,又彌補了實時堆棧信息過于粗糙無法單獨應用的不足,同時不需要花費代價收集動態信息。文檔編號G06F11/36GK102981953SQ20121044948公開日2013年3月20日 申請日期2012年11月12日 優先權日2012年11月12日專利技術者姜淑娟, 于巧, 張艷梅, 劉穎祺 申請人:中國礦業大學本文檔來自技高網...
【技術保護點】
一種空指針異常的自動故障定位方法,分為三個步驟:(1)程序切片,(2)故障定位,包括對切片后的程序進行空指針分析和別名分析,(3)可視化。
【技術特征摘要】
【專利技術屬性】
技術研發人員:姜淑娟,于巧,張艷梅,劉穎祺,
申請(專利權)人:中國礦業大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。