軟件缺陷檢測方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種軟件缺陷檢測方法及裝置,其中,方法包括:掃描源代碼,檢測所述源代碼中是否存在缺陷;若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷;若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改;若所述缺陷是已確認過的誤報缺陷,則拒絕將所述缺陷顯示給用戶。本發(fā)明通過確定所述缺陷是否為已確認過的誤報缺陷,將未確認過的缺陷顯示給用戶,以供用戶進行確認或修改,將已確認過的誤報缺陷屏蔽掉,不再顯示給用戶,這樣在后續(xù)的檢測過程中用戶就不用再對已確認過的誤報缺陷進行重復確認,可以大大減少用戶的工作量,減少用戶的負擔。
【專利說明】軟件缺陷檢測方法及裝置
【技術領域】
[0001]本發(fā)明實施例涉及計算機軟件技術,尤其涉及一種軟件缺陷檢測方法及裝置。
【背景技術】
[0002]隨著科學技術的發(fā)展,軟件已經(jīng)成為影響國民經(jīng)濟、軍事、政治乃至社會生活的重要因素,而軟件缺限的存在容易導致軟件產(chǎn)品在某種程度上不能滿足用戶的需求,對軟件質(zhì)量有著重要的影響。
[0003]所謂軟件缺陷,即為計算機軟件或程序中存在的某種破壞正常運行能力的問題、錯誤,或者隱藏的功能缺限。目前,軟件缺陷的檢測方法有很多,最常見的是靜態(tài)分析法,即在不實際執(zhí)行程序的情況下,對被測試程序源代碼進行掃描,提取程序關鍵語法,解釋其語義,理解程序行為,根據(jù)預先設定的漏洞特征、安全規(guī)則等檢測程序中所存在的缺陷。
[0004]但是,上述靜態(tài)檢測方法,一般采用將缺陷所在的位置顯示給用戶,以供用戶確認是否是誤報的缺陷,并針對非誤報的缺陷進行修改,當用戶再次掃描源代碼時或者對后續(xù)版本的源代碼進行掃描時,原來已確認后的誤報缺陷會再次被檢測出來,這樣就需要用戶對已確認過的誤報缺陷再進行一次確認,致使用戶做大量的重復性工作,給用戶帶來不便。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種軟件缺陷檢測方法及裝置,用以解決現(xiàn)有技術中當用戶再次掃描源代碼時或者對后續(xù)版本的源代碼進行掃描時,原來已確認后的誤報缺陷會再次被檢測出來,這樣就需要用戶對已確認過的誤報缺陷再進行一次確認,致使用戶做大量的重復性工作,給用戶帶來不便的缺陷。
[0006]本發(fā)明提供一種軟件缺陷檢測方法,包括:
[0007]掃描源代碼;
[0008]檢測所述源代碼中是否存在缺陷;
[0009]若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷;
[0010]若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改;
[0011]若所述缺陷是已確認過的誤報缺陷,則拒絕將所述缺陷顯示給用戶。
[0012]本發(fā)明還提供一種軟件缺陷檢測裝置,包括:
[0013]掃描模塊,用于掃描源代碼;
[0014]檢測模塊,用于檢測所述源代碼中是否存在缺陷;
[0015]確定模塊,用于若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷;
[0016]顯示模塊,用于若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改;
[0017]拒絕模塊,用于若所述缺陷是已確認過的誤報缺陷,則拒絕讓所述顯示模塊將所述缺陷顯示給用戶。
[0018]本發(fā)明通過確定所述缺陷是否為已確認過的誤報缺陷,將未確認過的缺陷顯示給用戶,以供用戶進行確認或修改,將已確認過的誤報缺陷屏蔽掉,不再顯示給用戶,這樣在后續(xù)的檢測過程中用戶就不用再對已確認過的誤報缺陷進行重復確認,可以大大減少用戶的工作量,減少用戶的負擔。
【專利附圖】
【附圖說明】
[0019]圖1為本發(fā)明提供的軟件缺陷檢測方法實施例一流程示意圖;
[0020]圖2為本發(fā)明提供的軟件缺陷檢測方法實施例二流程示意圖;
[0021]圖3為本發(fā)明提供的軟件缺陷檢測裝置實施例一結構示意圖;
[0022]圖4為本發(fā)明提供的軟件缺陷檢測裝置實施例二結構示意圖。
【具體實施方式】
[0023]為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0024]圖1為本發(fā)明提供的軟件缺陷檢測方法實施例一流程示意圖,如圖1所示,具體包括如下步驟:
[0025]S101、掃描源代碼;
[0026]需要說明的是,本實施例的執(zhí)行主體為圖3和圖4所示的軟件缺陷檢測裝置,在開始測試被測軟件存在的缺陷之前,需要獲取到軟件的源程序代碼,例如,可以采用用戶輸入或上傳的方式。在獲取到軟件的源程序代碼之后,則開始逐行掃描源代碼,以檢測所述源代碼中是否存在缺陷。
[0027]S102、檢測所述源代碼中是否存在缺陷;
[0028]具體來說,本實施例檢測所述源代碼中是否存在缺陷可以采用現(xiàn)有技術,例如靜態(tài)檢測法,直接分析源代碼,通過詞法分析、語法分析和靜態(tài)語義分析,檢測源代碼中存在的缺陷,上述方法均為現(xiàn)有技術,這里不再累述。若檢測到所述源代碼中存在的缺陷,例如,每檢測到一個缺陷,則執(zhí)行一次步驟S103,或者,等檢測完源代碼中存在的所有缺陷之后,執(zhí)行步驟S103,若檢測到所述源代碼中未存在缺陷,則結束本次檢測。
[0029]S103、確定所述缺陷是否為已確認過的誤報缺陷;
[0030]具體來說,可以采用下述方法來確定:確定所述缺陷是否存在于誤報缺陷庫中,所述誤報缺陷庫存儲有所述用戶已確認過的誤報缺陷,例如,所述誤報缺陷庫中可以存儲已確認過的誤報缺陷所在的程序代碼或者程序代碼對應的行號等,當所述誤報缺陷庫中存儲有已確認過的誤報缺陷所在的程序代碼時,則提取所述缺陷所在的程序代碼,確定所述缺陷所在的程序代碼是否存在于所述誤報缺陷庫中,或者,當所述誤報缺陷庫中存儲有已確認過的誤報缺陷所在的程序代碼對應的行號時,提取所述缺陷所在的程序代碼對應的行號,確定所述缺陷所在的程序代碼對應的行號是否存在于所述誤報缺陷庫中,若存在,則確定所述缺陷為已確認過的誤報缺陷;若不存在,則確定所述缺陷為未確認過的缺陷。若確定所述缺陷不是已確認過的誤報缺陷,則執(zhí)行步驟S104,若確定所述缺陷是已確認過的誤報缺陷,則執(zhí)行步驟S105。
[0031]S104、將所述缺陷顯示給用戶,以供用戶進行確認或修改;
[0032]S105、拒絕將所述缺陷顯示給用戶。
[0033]具體來說,上述檢測過程可以為每檢測到一個缺陷,則確定該缺陷是否為已確認過的誤報缺陷,若確定該缺陷不是已確認過的誤報缺陷,則將該缺陷顯示給用戶,以供用戶進行確認或修改,若確定該缺陷是已確認過的誤報缺陷,則拒絕將該缺陷顯示給用戶,重復上述過程,直至檢測完源代碼中存在的所有缺陷;或者,等檢測完源代碼中存在的所有缺陷之后,一一確定上述所有缺陷是否為已確認過的誤報缺陷,相應地,則將不是已確認過的誤報缺陷的缺陷一一顯示給用戶,以供用戶進行確認或修改,拒絕將已確認過是誤報缺陷的缺陷顯示給用戶,或者,一一確定上述所有缺陷中不是已確認過的誤報缺陷的缺陷,等確定完所有的缺陷之后,然后將這些不是已確認過的誤報缺陷的缺陷一次性顯示給用戶,以供用戶進行確認或修改。
[0034]本實施例通過確定所述缺陷是否為已確認過的誤報缺陷,將未確認過的缺陷顯示給用戶,以供用戶進行確認或修改,將已確認過的誤報缺陷屏蔽掉,不再顯示給用戶,這樣在后續(xù)的檢測過程中用戶就不用再對已確認過的誤報缺陷進行重復確認,可以大大減少用戶的工作量,減少用戶的負擔。
[0035]圖2為本發(fā)明提供的軟件缺陷檢測方法實施例二流程示意圖,如圖2所示,本實施例在上述方法實施例一的基礎上,進一步增加了根據(jù)預設條件對檢測到的缺陷進行分類,得到各類型的缺陷這一方法步驟,具體包括如下步驟:
[0036]S201、掃描源代碼;
[0037]S202、檢測所述源代碼中是否存在缺陷;
[0038]需要說明的是,檢測所述源代碼中是否存在缺陷,待檢測完源代碼中存在的所有缺陷之后,執(zhí)行步驟S203。
[0039]S203、根據(jù)預設條件對檢測到的缺陷進行分類,得到各類型的缺陷;
[0040]具體來說,所述預設條件可以包含下述條件中的至少一種:各缺陷處對應的變量是否是不同的變量;各缺陷從所述對應的變量所在當前節(jié)點到所在定義節(jié)點的前向蹤跡是否相似;各缺陷處的缺陷特征是否一致。下面以所述預設條件為各缺陷處對應的變量是否是不同的變量、各缺陷從所述對應的變量所在當前節(jié)點到所在定義節(jié)點的前向蹤跡是否相似及各缺陷處的缺陷特征是否一致為例,進行詳細說明得到各類型的缺陷的過程。分析所述源代碼,生成控制流圖,所述控制流圖是程序控制結構的圖形表示,其基本元素為過程塊、節(jié)點、判定;如果所述源代碼由多個代碼文件組成,則先生成各自的控制流圖,再將控制流圖文件合并成一個全局的控制流圖文件;確定缺陷所在的當前點,即確定缺陷所在的當前所在的位置,可以為行號,確定缺陷所在當前點對應的變量并記錄變量名稱以及變量所使用的函數(shù);確定變量所使用的函數(shù)是否相同或具有相似的特征;根據(jù)控制流圖向上分析,確定缺陷所在的定義節(jié)點,并記錄所述缺陷從缺陷所在當前點到缺陷所在定義節(jié)點的前向蹤跡;比較上述特征,將滿足各缺陷處對應的變量是不同的變量、各缺陷從所述對應的變量所在當前節(jié)點到所在定義節(jié)點的前向蹤跡相似且各缺陷處的缺陷特征一致即所使用的函數(shù)相同或具有相似的特征的各缺陷歸為同一類缺陷。通過上述方法可以得到各類型的缺陷。需要說明的是,可以采用下述方法判定各缺陷的前向蹤跡是否相似,若各缺陷的前向蹤跡中所包含的程序點均不影響缺陷的表現(xiàn)形式,即各缺陷的前向蹤跡中沒有使用缺陷處對應的變量,則確定各缺陷的前向蹤跡相似。
[0041]S204、確定各類型的缺陷是否為已確認過的同屬于該類型的誤報缺陷;
[0042]具體來說,確定所述缺陷是否存在于誤報缺陷庫中,所述誤報缺陷庫存儲有所述用戶已確認過的各類型的誤報缺陷;若存在,則確定所述缺陷為已確認過的同屬于該類型的誤報缺陷;若不存在,則確定所述缺陷為未確認過的同屬于該類型的缺陷。若確定所述缺陷不是已確認過的同屬于該類型的誤報缺陷,則執(zhí)行步驟S205,若確定所述缺陷是已確認過的同屬于該類型的誤報缺陷,則執(zhí)行步驟S206。
[0043]S205、將所述缺陷顯示給用戶,以供用戶進行確認或修改;
[0044]S206、拒絕將所述缺陷顯示給用戶。
[0045]具體來說,在對上述檢測到的缺陷完成分類之后,分別確定各類型的缺陷是否存在于誤報缺陷庫中,所述誤報缺陷庫存儲有所述用戶已確認過的各類型的誤報缺陷或者未經(jīng)分類的誤報缺陷;當所述誤報缺陷庫存儲有所述用戶已確認過的各類型的誤報缺陷時,根據(jù)缺陷的類型在所述誤報缺陷庫中找到對應的類型,然后確定在對應的類型中是否存在上述缺陷對應的誤報缺陷,若存在,則確定所述缺陷為已確認過的同屬于該類型的誤報缺陷,則屏蔽掉所述缺陷,拒絕將所述缺陷顯示給用戶;若不存在,則確定所述缺陷為未確認過的同屬于該類型的缺陷,則將所述缺陷分類別顯示給用戶,以供用戶進行確認或修改;或者,當所述誤報缺陷庫存儲有未經(jīng)分類的誤報缺陷時,分類別確定所述誤報缺陷庫中否存在上述缺陷對應的誤報缺陷,若存在,則確定所述缺陷為已確認過的誤報缺陷,則拒絕將所述缺陷顯示給用戶,若確定所述缺陷不是已確認過的誤報缺陷,則將所述缺陷分類別顯示給用戶,以供用戶進行確認或修改。
[0046]需要說明的是,在對上述檢測到的缺陷完成分類之后,可以采用如下方式顯示給用戶:逐個確定上述各類別對應的缺陷是否為已確認過的誤報缺陷,相應地,則將不是已確認過的誤報缺陷的缺陷按照所在類別逐個顯示給用戶,以供用戶進行確認或修改,拒絕將已確認過是誤報缺陷的缺陷顯示給用戶,或者,逐個確定上述各類別對應的缺陷中是否為已確認過的誤報缺陷的缺陷,等確定完所有類別的缺陷之后,然后將不是已確認過的誤報缺陷的缺陷按照類別一次性顯示給用戶,以供用戶進行確認或修改,拒絕將已確認過是誤報缺陷的缺陷顯示給用戶。
[0047]本實施例通過將所述缺陷進行分類,以便于用戶針對各個類型的缺陷分別確定所述缺陷是否為已確認過的該類型的誤報缺陷,將未確認過的該類型的缺陷顯示給用戶,以供用戶針對該類型的進行確認或修改,將已確認過的該類型的誤報缺陷屏蔽掉,不再顯示給用戶,這樣在后續(xù)的檢測過程中用戶就不用再對已確認過的該類型的誤報缺陷進行重復確認,可以大大減少用戶的工作量,減少用戶的負擔。
[0048]圖3為本發(fā)明提供的軟件缺陷檢測裝置實施例一結構示意圖,如圖3所示,具體包括:掃描模塊31、檢測模塊32、確定模塊33及顯示模塊34。
[0049]掃描模塊31,用于掃描源代碼;
[0050]檢測模塊32,用于檢測所述源代碼中是否存在缺陷;
[0051]確定模塊33,用于若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷;
[0052]顯示模塊34,用于若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改;
[0053]拒絕模塊35,用于若所述缺陷是已確認過的誤報缺陷,則拒絕讓所述顯示模塊34將所述缺陷顯示給用戶。
[0054]本實施例所述的裝置用于執(zhí)行方法實施例一所述的方法步驟,其技術原理和產(chǎn)生的技術效果類似,這里不再累述。
[0055]圖4為本發(fā)明軟件缺陷檢測裝置實施例二結構示意圖,如圖4所示,本實施例在上述裝置實施例一的基礎上,進一步增加了分類模塊45。
[0056]掃描模塊41,用于掃描源代碼;
[0057]檢測模塊42,用于檢測所述源代碼中是否存在缺陷;
[0058]確定模塊43,用于若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷;
[0059]顯示模塊44,用于若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改;
[0060]拒絕模塊46,用于若所述缺陷是已確認過的誤報缺陷,則拒絕讓所述顯示模塊44將所述缺陷顯示給用戶。
[0061]進一步地,所述確定模塊43,具體用于確定所述缺陷是否存在于誤報缺陷庫中,所述誤報缺陷庫存儲有所述用戶已確認過的誤報缺陷;若存在,則確定所述缺陷為已確認過的誤報缺陷;若不存在,則確定所述缺陷為未確認過的缺陷。
[0062]進一步地,所述裝置,還包括:
[0063]分類模塊45,用于在確定所述缺陷是否為已確認過的誤報缺陷之前,根據(jù)預設條件對檢測到的缺陷進行分類,得到各類型的缺陷;
[0064]相應地,所述確定模塊43,還用于確定各類型的缺陷是否為已確認過的同屬于該類型的誤報缺陷。
[0065]進一步地,所述預設條件包含下述條件中的至少一種:
[0066]各缺陷處對應的變量是否是不同的變量;
[0067]各缺陷從所述對應的變量所在當前節(jié)點到所在定義節(jié)點的前向蹤跡是否相似;
[0068]各缺陷處的缺陷特征是否一致。
[0069]本實施例所述的裝置用于執(zhí)行方法實施例一和方法實施例二所述的方法步驟,其技術原理和產(chǎn)生的技術效果類似,這里不再累述。
[0070]需要說明的是:對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
[0071]本領域普通技術人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0072]最后應說明的是:以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明各實施例技術方案的精神和范圍。
【權利要求】
1.一種軟件缺陷檢測方法,其特征在于,包括: 掃描源代碼; 檢測所述源代碼中是否存在缺陷; 若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷; 若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改; 若所述缺陷是已確認過的誤報缺陷,則拒絕將所述缺陷顯示給用戶。
2.根據(jù)權利要求1所述的方法,其特征在于,所述確定所述缺陷是否為已確認過的誤報缺陷,包括: 確定所述缺陷是否存在于誤報缺陷庫中,所述誤報缺陷庫存儲有所述用戶已確認過的誤報缺陷; 若存在,則確定所述缺陷為已確認過的誤報缺陷; 若不存在,則確定所述缺陷為未確認過的缺陷。
3.根據(jù)權利要求1或2所述的方法,其特征在于,在所述確定所述缺陷是否為已確認過的誤報缺陷之前,還包括: 根據(jù)預設條件對檢測到的缺陷進行分類,得到各類型的缺陷; 相應地,所述確定所述缺陷是否為已確認過的誤報缺陷,包括: 確定各類型的缺陷是否為已確認過的同屬于該類型的誤報缺陷。
4.根據(jù)權利要求3所述的方法,其特征在于,所述預設條件包含下述條件中的至少一種: 各缺陷處對應的變量是否是不同的變量; 各缺陷從所述對應的變量所在當前節(jié)點到所在定義節(jié)點的前向蹤跡是否相似; 各缺陷處的缺陷特征是否一致。
5.一種軟件缺陷檢測裝置,其特征在于,包括: 掃描模塊,用于掃描源代碼; 檢測模塊,用于檢測所述源代碼中是否存在缺陷; 確定模塊,用于若所述源代碼中存在缺陷,則確定所述缺陷是否為已確認過的誤報缺陷; 顯示模塊,用于若所述缺陷不是已確認過的誤報缺陷,則將所述缺陷顯示給用戶,以供用戶進行確認或修改; 拒絕模塊,用于若所述缺陷是已確認過的誤報缺陷,則拒絕讓所述顯示模塊將所述缺陷顯示給用戶。
6.根據(jù)權利要求5所述的裝置,其特征在于,所述確定模塊,具體用于確定所述缺陷是否存在于誤報缺陷庫中,所述誤報缺陷庫存儲有所述用戶已確認過的誤報缺陷;若存在,則確定所述缺陷為已確認過的誤報缺陷;若不存在,則確定所述缺陷為未確認過的缺陷。
7.根據(jù)權利要求5或6所述的裝置,其特征在于,還包括: 分類模塊,用于在確定所述缺陷是否為已確認過的誤報缺陷之前,根據(jù)預設條件對檢測到的缺陷進行分類,得到各類型的缺陷; 相應地,所述確定模塊,還用于確定各類型的缺陷是否為已確認過的同屬于該類型的誤報缺陷。
8.根據(jù)權利要求7所述的裝置,其特征在于,所述預設條件包含下述條件中的至少一種: 各缺陷處對應的變量是否是不同的變量; 各缺陷從所述對應的變量所在當前節(jié)點到所在定義節(jié)點的前向蹤跡是否相似; 各缺陷處的缺陷特征是否一致。
【文檔編號】G06F11/36GK103970657SQ201410196027
【公開日】2014年8月6日 申請日期:2014年5月9日 優(yōu)先權日:2014年5月9日
【發(fā)明者】楊學紅 申請人:中國聯(lián)合網(wǎng)絡通信集團有限公司