欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法

文檔序號:6543139閱讀:142來源:國知局
一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法
【專利摘要】本發(fā)明涉及一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,包括:S1:將待檢測的缺陷模式屬性狀態(tài)機集合置于待測函數控制流入口;S2:程序通過路徑由前置位置執(zhí)行到目標位置;S3:屬性狀態(tài)機的狀態(tài)沿程序路徑進行傳遞以及變化,在目標位置處到達預設狀態(tài);S4:取控制流當前節(jié)點,判斷是否為控制流最后節(jié)點;S5:如果不為控制流最后節(jié)點,則根據當前節(jié)點信息更新屬性狀態(tài)條件以及屬性狀態(tài)分區(qū)集合信息。本發(fā)明提供的基于狀態(tài)分區(qū)技術的缺陷檢測求精方法,給出了缺陷模式的定義,缺陷模式狀態(tài)機的定義,路徑條件的定義,狀態(tài)條件的定義,狀態(tài)分區(qū)的定義,基于狀態(tài)分區(qū)技術,給出缺陷檢測求精方法,從而提高缺陷檢測的精度。
【專利說明】一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法
【技術領域】
[0001]本發(fā)明涉及計算機軟件靜態(tài)缺陷檢測中的檢測求精技術,尤其涉及一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法。
【背景技術】
[0002]代碼中的缺陷是導致軟件故障和安全漏洞問題的重要原因?;谌毕莸能浖y試技術可以分為動態(tài)檢測技術和靜態(tài)檢測技術。
[0003]其中,靜態(tài)檢測技術不運行被測程序,主要通過各種靜態(tài)分析方法來發(fā)現(xiàn)程序中的缺陷,從可計算性理論的角度看,靜態(tài)分析是一個不可判定問題,靜態(tài)分析的不可判定性實際上意味著任何自動化的靜態(tài)分析系統(tǒng),針對一個程序的非平凡屬性,例如是否存在運行時錯誤,不可能做到既是可靠的又是完備的??煽康撵o態(tài)分析意味著,如果分析結果沒有報告某類運行時錯誤,則程序中肯定不存在某類運行時錯誤,也就是說沒有漏報;完備的靜態(tài)分析意味著,如果分析結果報告了某類運行時錯誤,則程序中肯定存在某類運行時錯誤,也就是說沒有誤報,大量的誤報會使人對檢測工具失去信心。
[0004]基于數據流分析的路徑敏感檢測方法考慮程序路徑分支間的組合關系,可以記錄控制流圖上的不同路徑信息,從而有效減少靜態(tài)分析時的誤報,精確的路徑敏感分析方法會記錄程序中的所有路徑信息,在控制流分支較多或存在循環(huán)時會導致路徑爆炸,從而無法進行分析,因此,實用的路徑敏感分析方法往往會采用一些折衷策略:不同路徑上的數據流信息在控制流匯合處合并,例如采用變量的抽象取值來表示狀態(tài)條件,在控制流匯合節(jié)點通過合并相同狀態(tài)中的狀態(tài)條件來避免路徑爆炸,但該方法的狀態(tài)合并策略沒有區(qū)分在哪些匯合節(jié)點可以進行安全的狀態(tài)合并,導致與缺陷有關的路徑信息丟失從而引起誤報。

【發(fā)明內容】

[0005]本發(fā)明所要解決的技術問題是如何避免全路徑敏感分析時的路徑爆炸問題,且不會因為粗糙的合并策略帶來的精度損失引起的誤報的關鍵問題。
[0006]為此目的,本發(fā)明提出了一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,包括具體以下步驟:
[0007]S1:將待檢測的缺陷模式的屬性狀態(tài)機的狀態(tài)集合置于待測函數控制流入口 ;
[0008]S2:程序通過路徑由前置位置執(zhí)行到目標位置;
[0009]S3:屬性狀態(tài)機的狀態(tài)沿程序路徑進行傳遞以及變化,在所述目標位置處到達預設狀態(tài);
[0010]S4:取控制流當前節(jié)點,判斷是否為控制流最后節(jié)點;
[0011]S5:如果不為控制流最后節(jié)點,則根據當前節(jié)點信息更新屬性狀態(tài)條件以及屬性狀態(tài)分區(qū)集合信息。
[0012]具體地,所述置于待測函數控制流入口的集合為從控制流頭節(jié)點依次進行狀態(tài)迭代的缺陷模式屬性狀態(tài)機集合,其中,每個狀態(tài)機的當前狀態(tài)都關聯(lián)當前控制流節(jié)點的所有變量取值信息。
[0013]進一步地,所述步驟S5進一步包括:
[0014]將相同狀態(tài)的所述屬性狀態(tài)條件進行合并,所述屬性狀態(tài)分區(qū)不變。
[0015]進一步地,所述步驟S5進一步包括:
[0016]通過所述屬性狀態(tài)條件判斷不可達路徑,并刪除所述屬性狀態(tài)分區(qū)中不可達屬性狀態(tài)分區(qū)信息。
[0017]進一步地,所述步驟S5進一步包括:若存在$err0r,則判定為缺陷狀態(tài)遷移。
[0018]具體地,若所述屬性狀態(tài)條件包含屬性狀態(tài)分區(qū)信息,則保存該屬性狀態(tài)分區(qū)信息,若所述屬性狀態(tài)條件與所述狀態(tài)分區(qū)信息不存在包含關系,則刪除屬性狀態(tài)分區(qū)信息。
[0019]具體地,還包括,刪除重復所述屬性狀態(tài)分區(qū)信息。
[0020]通過采用本發(fā)明所公開一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,該方法能夠處理同一路徑引入的隱含變量關聯(lián)關系,從而能夠減少對控制流匯合節(jié)點進行狀態(tài)合并帶來的精度損失,具體地,給出了缺陷模式的定義,缺陷模式狀態(tài)機的定義,路徑條件的定義,狀態(tài)條件的定義,狀態(tài)分區(qū)的定義,基于狀態(tài)分區(qū)技術,給出缺陷檢測求精方法,從而提高缺陷檢測的精度,該方法可以表示同一路徑引入的隱含變量關聯(lián)關系,避免了不同分支的數據流信息“過早”地進行聚合所造成的精度損失,進而提高了分析精度。
【專利附圖】

【附圖說明】
[0021]通過參考附圖會更加清楚的理解本發(fā)明的特征和優(yōu)點,附圖是示意性的而不應理解為對本發(fā)明進行任何限制,在附圖中:
[0022]圖1示出了本發(fā)明實施例中的一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法的步驟流程圖;
[0023]圖2示出了本發(fā)明另一實施例中的一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法的步驟流程圖。
【具體實施方式】
[0024]下面將結合附圖對本發(fā)明的實施例進行詳細描述。
[0025]首先,缺陷模式是對程序屬性的一種描述,如果違反該屬性則造成一個缺陷。例如,申請的資源在使用完后必須釋放,否則造成資源泄露缺陷,且缺陷模式可以用缺陷狀態(tài)機來表示,其中,狀態(tài)機是對程序語義的一種常用和易于理解的抽象表示,缺陷模式狀態(tài)機用于描述缺陷模式的有限狀態(tài)機,包括狀態(tài)集合D、狀態(tài)遷移集合T以及遷移條件集合 Conditions,其中 D = {$start, $erro;r} U Dother, T:DXConditions — D.$start 和$error分別表示起始狀態(tài)和錯誤狀態(tài),Dother表示其它中間狀態(tài)的集合。
[0026]進一步地,數組下標的使用必須在其數組聲明大小范圍以內,否則會造成數組越界缺陷;指針在解引用之前必須確保其指向非空,否則會造成空指針引用缺陷。
[0027]為了更好的理解與應用本發(fā)明提供的一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,進行以下圖示。
[0028]如圖1所示,本發(fā)明提供了一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,包括具體以下步驟:[0029]步驟S1:將待檢測的缺陷模式的屬性狀態(tài)機的狀態(tài)集合置于待測函數的控制流入口。
[0030]步驟S2:程序通過路徑由前置位置執(zhí)行到目標位置。
[0031]步驟S3:屬性狀態(tài)機的狀態(tài)沿程序路徑進行傳遞以及變化,在目標位置處到達預設狀態(tài)。
[0032]具體地,置于待測函數控制流入口的集合為從控制流頭節(jié)點依次進行狀態(tài)迭代的缺陷模式屬性狀態(tài)機集合,其中,每個狀態(tài)機的當前狀態(tài)都關聯(lián)當前控制流節(jié)點的所有變
量取值信息。
[0033]步驟S4:取控制流當前節(jié)點,判斷是否為控制流最后節(jié)點。
[0034]步驟S5:如果不為控制流最后節(jié)點,則根據當前節(jié)點信息更新屬性狀態(tài)條件以及屬性狀態(tài)分區(qū)集合信息。
[0035]進一步地,步驟S5進一步包括:將相同狀態(tài)的屬性狀態(tài)條件進行合并,屬性狀態(tài)分區(qū)不變;通過屬性狀態(tài)條件判斷不可達路徑,并刪除屬性狀態(tài)分區(qū)中不可達屬性狀態(tài)分
區(qū)信息。
[0036]更進一步地,若屬性狀態(tài)條件包含屬性狀態(tài)分區(qū)信息,則保存該屬性狀態(tài)分區(qū)信息;若屬性狀態(tài)條件與狀態(tài)分區(qū)信息不存在包含關系,則刪除屬性狀態(tài)分區(qū)信息;刪除重復屬性狀態(tài)分區(qū)信息。若存在$error,則判定為缺陷狀態(tài)遷移。
[0037]如圖2所示,為本發(fā)明另一實施例中的一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法的步驟流程圖。
[0038]步驟SlOl:將產生的狀態(tài)機制實例集合置于待測函數控制流入口。
[0039]步驟S102:取下一節(jié)點,判斷是否為最后節(jié)點。
[0040]步驟S103,若不為最后節(jié)點,則根據當前節(jié)點信息更新屬性狀態(tài)條件以及屬性狀態(tài)分區(qū)集合信息。
[0041]步驟S104:根據當前節(jié)點屬性狀態(tài)條件,刪除屬性狀態(tài)分區(qū)中不可達屬性狀態(tài)分
區(qū)信息。
[0042]步驟S105:根據屬性狀態(tài)條件以及屬性狀態(tài)分區(qū)進行缺陷狀態(tài)遷移。
[0043]步驟S106:結束遍歷。
[0044]為了更好的理解與應用本發(fā)明提出的一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,結合程序代碼進行以下示例。
[0045]在程序P的執(zhí)行過程中,程序的執(zhí)行狀態(tài)可由二元組口 1,P □表示。其中,I代表當前的程序執(zhí)行位置;P代表該狀態(tài)下的環(huán)境。程序環(huán)境記錄了程序中當前每一個變量X的值,在環(huán)境P下,變量X的取值記作P (X)。路徑敏感的缺陷檢測方法,從控制流圖頭節(jié)點依次進行狀態(tài)迭代,每個狀態(tài)都關聯(lián)當前控制流點的所有變量取值信息。
[0046]程序通過路徑S執(zhí)行到位置1,則S上的謂詞和賦值操作對I處環(huán)境P中各變量的可能取值范圍進行了限定。本發(fā)明將S在I處限定的變量取值范圍集合稱作S在I處的路徑條件。記作R(S,I)。例如:在如下程序中,L2處的路徑條件為{dump[true], flag[l, I]}。
[0047]其中,程序通過路徑S執(zhí)行到位置1,屬性狀態(tài)機的狀態(tài)沿S進行傳遞和變化,在I處到達狀態(tài)σ,將R(s,l)記錄在σ上,稱為屬性狀態(tài)條件。包含條件的屬性狀態(tài)表示為o:{R(S,l)}。例如:在如下程序中L2處,資源泄漏狀態(tài)機的屬性狀態(tài)為:$start:{dump[true], flag[l, I]}。
[0048]進一步地,本發(fā)明用變量的抽象取值來表示狀態(tài)條件,在數據流迭代過程中不斷更新狀態(tài)條件,就會導致缺陷狀態(tài)發(fā)生遷移,一旦發(fā)現(xiàn)狀態(tài)遷移$err0r就表示程序中存在該類型的缺陷.例如如下的程序代碼片段,dump和flag分別用于不同的資源操作,dump僅申請資源而flag僅釋放資源,這種編程模式在實際中也是常見的,對其中存在的資源泄露
缺陷進行檢測,采用相同狀態(tài)合并的路徑敏感分析方法,其狀態(tài)遷移序列如表I所示.[0049]
【權利要求】
1.一種基于狀態(tài)分區(qū)的靜態(tài)缺陷檢測求精方法,其特征在于,包括具體以下步驟: S1:將待檢測的缺陷模式的屬性狀態(tài)機的狀態(tài)集合置于待測函數控制流入口 ; 52:程序通過路徑由前置位置執(zhí)行到目標位置; 53:屬性狀態(tài)機的狀態(tài)沿程序路徑進行傳遞以及變化,在所述目標位置處到達預設狀態(tài); 54:取控制流當前節(jié)點,判斷是否為控制流最后節(jié)點; 55:如果不為控制流最后節(jié)點,則根據當前節(jié)點信息更新屬性狀態(tài)條件以及屬性狀態(tài)分區(qū)集合信息。
2.如權利要求1所述的方法,其特征在于,所述置于待測函數控制流入口的集合為從控制流頭節(jié)點依次進行狀態(tài)迭代的缺陷模式屬性狀態(tài)機集合,其中,每個狀態(tài)機的當前狀態(tài)都關聯(lián)當前控制流節(jié)點的所有變量取值信息。
3.如權利要求1所述的方法,其特征在于,所述步驟S5進一步包括: 將相同狀態(tài)的所述屬性狀態(tài)條件進行合并,所述屬性狀態(tài)分區(qū)不變。
4.如權利要求1所述的方法,其特征在于,所述步驟S5進一步包括: 通過所述屬性狀態(tài)條件判斷不可達路徑,并刪除所述屬性狀態(tài)分區(qū)中不可達屬性狀態(tài)分區(qū)信息。
5.如權利要求1所述的方法,其特征在于,所述步驟S5進一步包括:若存在$error,則判定為缺陷狀態(tài)遷移。
6.如權利要求4所述的方法,其特征在于,若所述屬性狀態(tài)條件包含屬性狀態(tài)分區(qū)信息,則保存該屬性狀態(tài)分區(qū)信息,若所述屬性狀態(tài)條件與所述狀態(tài)分區(qū)信息不存在包含關系,則刪除屬性狀態(tài)分區(qū)信息。
7.如權利要求4所述的方法,其特征在于,還包括,刪除重復所述屬性狀態(tài)分區(qū)信息。
【文檔編號】G06F11/36GK103927258SQ201410138438
【公開日】2014年7月16日 申請日期:2014年4月8日 優(yōu)先權日:2014年4月8日
【發(fā)明者】金大海, 張大林, 宮云戰(zhàn), 王雅文, 黃俊飛 申請人:北京郵電大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
雷波县| 平遥县| 湘潭市| 呼伦贝尔市| 启东市| 孙吴县| 瑞金市| 天台县| 潼南县| 丘北县| 正安县| 丰县| 普陀区| 灵山县| 临夏县| 济阳县| 吉安县| 新昌县| 获嘉县| 长春市| 肥东县| 江孜县| 墨脱县| 阜平县| 会理县| 思茅市| 广丰县| 平舆县| 休宁县| 虎林市| 霞浦县| 都昌县| 乌拉特前旗| 徐水县| 延津县| 称多县| 泊头市| 西宁市| 东安县| 南汇区| 仁怀市|