王曙燕,權雅菲,孫家澤
(西安郵電大學 計算機學院,西安 710061) (*通信作者電子郵箱wsylxj@126.com)
空指針引用缺陷分類假陽性識別方法
王曙燕*,權雅菲,孫家澤
(西安郵電大學 計算機學院,西安 710061) (*通信作者電子郵箱wsylxj@126.com)
針對靜態(tài)測試中空指針引用缺陷假陽性問題,提出一種空指針引用缺陷分類假陽性識別方法。挖掘空指針引用缺陷知識,對空指針引用缺陷知識進行預處理,生成空指針引用缺陷數據集;通過基于粗糙集理論屬性重要性的ID3算法分類空指針引用缺陷數據集,分類結果有假陽性空指針引用缺陷實例和真實空指針引用缺陷實例兩種;根據分類結果對靜態(tài)測試中的空指針引用缺陷進行假陽性識別,確認真實的空指針引用缺陷。該方法對十個基準程序和基于主流靜態(tài)測試工具FindBugs的空指針引用缺陷檢測方法相比,空指針引用缺陷假陽性降低率平均為25%,減少了24%的空指針引用缺陷確認。實驗結果表明,該方法在靜態(tài)測試方面能有效降低缺陷確認開銷,提高空指針引用缺陷檢測效率和穩(wěn)定性。
靜態(tài)測試;空指針引用缺陷;假陽性識別;缺陷分類;缺陷確認
軟件缺陷由不合理的設計和軟件開發(fā)人員的疏忽引起[1-2],軟件缺陷導致軟件運行時失效,軟件缺陷頻發(fā)會帶來極大危害。面向代碼缺陷的軟件靜態(tài)測試技術正逐漸受到軟件業(yè)界的青睞[3],包括靜態(tài)缺陷檢測和缺陷確認兩個階段。當前軟件行業(yè)越來越依賴自動化缺陷檢測工具檢測軟件缺陷[4],自動化缺陷檢測工具在靜態(tài)缺陷檢測效率方面很有優(yōu)勢,但會報告大量缺陷,而驗證這些缺陷的正確性時主要的缺陷確認工作仍由人工完成[5],高耗時耗力的缺陷審查工作會降低該工具在軟件開發(fā)流程中的可用性。靜態(tài)測試優(yōu)化技術試圖在靜態(tài)缺陷檢測工具運行后進行缺陷報告優(yōu)化,降低缺陷確認負擔,從另一個角度提升工具的檢測效率和精度[5]。
據中國國家信息安全漏洞庫統(tǒng)計,由空指針引用(Null Pointer Dereference, NPD)缺陷造成的安全漏洞引發(fā)了許多嚴重的安全問題。目前的缺陷檢測方法有動態(tài)檢測和靜態(tài)檢測、動態(tài)檢測輸入樣例很難構造;靜態(tài)檢測則在代碼覆蓋率方面有優(yōu)勢,檢測缺陷時更有針對性。所以,基于NPD缺陷知識在靜態(tài)測試后進行NPD缺陷假陽性識別,能有效降低缺陷確認開銷,進而提升軟件測試整體效率。
在現有的靜態(tài)缺陷檢測方法中,Zhang等[6]通過分析缺陷報告優(yōu)化缺陷檢測結果,但未考慮噪聲報告對優(yōu)化結果的影響。梁廣泰等[7]挖掘受檢程序中的新缺陷模式并以“缺陷模式描述模板”半自動擴充原缺陷模式庫,擴充靜態(tài)測試工具NPD缺陷檢測能力,但未考慮到分析技術和規(guī)則挖掘技術對缺陷檢測的影響。楊睿等[8]結合空指針故障模型和控制流圖進行數據流分析,根據分析結果盡可能多地識別出那些可能不是缺陷的項來降低空指針故障誤報率,但忽略了區(qū)間運算和函數摘要的計算能力。
針對上述問題,張大林等[5]通過缺陷關聯(lián)分析分組靜態(tài)測試工具報告的缺陷,若組內主導NPD缺陷被證是誤報,其他NPD缺陷也是誤報,能有效降低缺陷確認負擔;但分組缺陷時缺陷關聯(lián)抽象域計算能力的不足,會導致關聯(lián)誤報。
因此,針對靜態(tài)測試中的假陽性NPD缺陷,本文研究采用基于粗糙集理論屬性重要性的ID3(ID3 Based Rough Set, RSID3)算法結合NPD缺陷知識進行NPD缺陷假陽性識別,挖掘靜態(tài)缺陷報告與軟件歷史倉庫中代碼修改中的NPD缺陷知識,預處理后生成NPD缺陷數據集,通過RSID3分類NPD缺陷實例,避免了分組缺陷時缺陷關聯(lián)的抽象域計算,根據分類結果識別假陽性NPD缺陷,以期快速確認真實NPD缺陷。
靜態(tài)測試不執(zhí)行程序從語法或語義層面分析程序文本,推導其語法或語義性質進行潛在缺陷檢測,30%~ 70% 的代碼邏輯設計和編碼缺陷能通過靜態(tài)測試檢測并修復?;谌毕菽J降能浖y試技術[9]將代碼中已有缺陷總結成缺陷模式,在靜態(tài)測試過程中通過模式匹配算法判斷待測程序中是否存在匹配缺陷模式的代碼段,對受檢代碼進行缺陷檢測。
NPD缺陷在程序運行時發(fā)生,編譯階段無法發(fā)現,動態(tài)測試方法難以達到全面覆蓋的效果。若先進行空指針靜態(tài)檢測來查找程序中所有可能為空的對象,能彌補動態(tài)測試無法檢測程序中不確定執(zhí)行路徑的NPD缺陷的不足。使用靜態(tài)測試方法檢測NPD缺陷是近年來NPD檢測方法研究的重點[8]。
定義1 NPD缺陷假陽性。NPD缺陷檢測可轉為求解問題D={P,M,A}, 其中:p是待測程序;M是與P對應的NPD缺陷模式集;A={ρ(L,X),ψ,R}是NPD缺陷檢測算法,ρ是P執(zhí)行到L處變量X取值信息,ψ是P執(zhí)行到L處實時堆棧中被調方法摘要信息,R是P中所有可達路徑。通過靜態(tài)測試方法檢測NPD缺陷時,需分析p中所有可達路徑上出現的指針引用的相關指針在運行時的指向狀態(tài),則NPD缺陷假陽性為:
?x,x∈{ρ(L,X)|R}∧~D={P,M,A} ?FP(X)
其中:~D={P,M,A}指變量X取值為x時不會引發(fā)NPD缺陷;FP(X)是X引發(fā)NPD缺陷的假陽性現象。
如何利用已有缺陷知識確認程序潛在缺陷是靜態(tài)缺陷檢測的關鍵[10]。Zhang等[6]通過分析缺陷報告快速確認真實缺陷;Kim等[10]提出挖掘軟件修改歷史能快速識別出真正的缺陷代碼。所以,本文挖掘靜態(tài)缺陷報告與軟件代碼修改歷史中的NPD缺陷知識,基于NPD缺陷知識生成NPD缺陷數據集,對其分類后進行NPD缺陷假陽性識別。
靜態(tài)缺陷報告用元素標記描述數據,所有元素都有文本屬性和離散屬性,以開始標記和結束標記限定元素描述缺陷內容的范圍,解析包含NPD缺陷內容的元素屬性,提取屬性及屬性值作為缺陷報告中的NPD缺陷知識。分析軟件歷史倉庫中的版本控制系統(tǒng),提取所有代碼修改,修改日志含有多條記錄,每條記錄包含修復NPD缺陷相關屬性,通過從修改日志匹配修復NPD缺陷的關鍵詞,能從所有代碼修改中識別出修復NPD缺陷的代碼修改,通過分析源程序中引發(fā)NPD缺陷的程序點L處第1次到第n-1次代碼修改歷史,從修復NPD缺陷的第n次代碼修改的修改日志中提取修復NPD缺陷記錄,提取上述記錄的屬性及屬性值作為軟件歷史中倉庫代碼修改中的NPD缺陷知識。
缺陷模式有助于快速識別程序中的缺陷,程序P對應M中的NPD缺陷模式[11]用有限狀態(tài)機表示為:
MNPD=〈S,T,C〉
(1)
其中:S={Sstart,Snot,Spossible,Snpddefect,Send}是可達狀態(tài)集;Sstart是始態(tài);Snot是非空狀態(tài);Spossible是可能為空狀態(tài);Snpddefect是引發(fā)NPD缺陷時的狀態(tài),與NPD缺陷模式有關;Send是末態(tài);T={〈ni,nj〉|ni,nj∈S}是狀態(tài)遷移集,指從狀態(tài)ni遷移到狀態(tài)nj,T:S×C→S,C是遷移條件,引發(fā)NPD缺陷是指對象O從Sstart經一系列狀態(tài)遷移到達Snpddefect。
通過式(1)形式化描述特定模式的NPD缺陷,根據程序P中引發(fā)NPD缺陷的程序點L處指針的指向狀態(tài),包括空、可能為空和非空三種,前兩種指向狀態(tài)與引發(fā)NPD缺陷有關。對每個被引用指針構造MNPD實例,MNPD實例狀態(tài)遷移如圖1所示,圖1中的NPD缺陷狀態(tài)遷移關系如表1所示。在MNPD上進行狀態(tài)遷移時需分析L處程序狀態(tài)信息ρ和ψ,根據引發(fā)NPD缺陷的對象O在MNPD上遷移過程得到NPD缺陷模式集:
圖1 NPD缺陷有限狀態(tài)機實例狀態(tài)遷移圖
如圖1所示,給定狀態(tài)集S={t1,t2,t3,t4,t5},t1至t5依次代表狀態(tài)Sstart、Snot、Spossible、Snpddefect、Send,通過表1 NPD缺陷狀態(tài)遷移集描述各NPD缺陷模式,其T和C結合上述程序狀態(tài)信息分析設定。
表1 NPD缺陷狀態(tài)遷移集
從表1可知,引發(fā)NPD缺陷的對象O到達Snpddefect的狀態(tài)遷移不同,識別各NPD缺陷模式下的NPD缺陷需要滿足的條件,即NPD缺陷引發(fā)條件DCNPD不同,根據表1中的T和C提取NPD缺陷模式集中各模式對應的DCNPD,則
DCNPD=(Vlocal=nullMay)‖(Vglobal=nullMay)‖
(FPfunction=nullMay)‖(APfunction=null)‖
(RVmethod=nullMay)
經上述預處理, 通過NPD缺陷模式提取NPD缺陷引發(fā)條件后, 對比NPD缺陷知識與NPD缺陷引發(fā)條件,確定一組包含NPD缺陷引發(fā)條件的屬性,即NPD缺陷關聯(lián)屬性組(type, priority, role, category, is-fixed, is-true),各屬性依次指定NPD缺陷引發(fā)原因、優(yōu)先級、引發(fā)條件、類別、是否修復、真實性,其一組取值為一個NPD缺陷實例,一個NPD缺陷實例對應P在靜態(tài)測試中報告的某個NPD缺陷,累積P中所有NPD缺陷實例,以NPD缺陷關聯(lián)屬性和NPD缺陷實例為基本分量,構造描述NPD缺陷關聯(lián)屬性間關系的NPD缺陷數據集,作為RSID3算法的輸入。
提高ID3算法分類精度的關鍵在于劃分屬性的選擇。劃分NPD缺陷數據集時,很難根據經驗選擇當前NPD缺陷數據集的劃分屬性,且劃分屬性選擇存在多值偏向,本文提出的RSID3通過考慮屬性ai∈A對劃分屬性的重要性[12]來指導劃分屬性選擇。首先,調整當前劃分屬性Ak對當前屬性集A的依賴度k(A,Ak);然后,確定所有屬性ai∈A對Ak的重要性γ(A);最后,在尋找信息增益最大的屬性時,通過遍歷為T和A建立的索引數組,基于索引搜索A中信息增益最大的屬性作為當前劃分屬性,作用于RSID3算法輸入。信息增益方程為:
Gain(A)=I(s1,s2,…,sm)-
1)若k(A,Ak)=0時,則認為Ak完全不依賴于A;
2)若0lt;k(A,Ak)lt;1時,則認為Ak部分依賴于A;
3)若k(A,Ak)=1時,Ak完全依賴于A。
通過k(A,Ak)的調整方案自適應調整γ(ai),確定γ(A):
k(A,Ak)-k(A-{ai},Ak)
其中:R=C∪Ak。
下面通過例子來進一步闡述RSID3算法的劃分屬性選擇過程和效果。下述程序片段展示了靜態(tài)測試工具在檢測Java開源項目Weka-3-6時報告的兩個NPD缺陷,分別為:第192行變量contents.length可能為空指針并在192行解引用;第193行contents[i]可能為空指針并在193行解引用。
190: public static void loadProperties() {
191: File[] contents= piuginDir.listFiles();
192: for(int i=0;ilt;contents.length;i++){
193: if(contents[i].isDirectory()amp;amp;contents[i].listFiles().
lengthgt;0){…
202: File anyJars[]=contents[i].listFiles();
228:…}}}
根據2.1節(jié)內容對示例代碼段的完整文件報告的所有NPD缺陷生成NPD缺陷數據集,如表2所示,以二維表格式展示。
從表2可知,屬性集A={a1,a2,a3,a4,a5},Card(T)=3,d為初始劃分屬性,則Ak=5nlvf5d,從任意屬性a3開始, 首先計算d對A的依賴度,顯然0lt;k(A,d)=0.67lt;1,d部分依賴于A,其中,posA(d)={1,2};然后計算a3對d的重要性γ(a3,A,d)=0.33,即將a3從A中去除后被分類錯誤的概率。同理γ(a5)=0.26,γ(ai)值越大表示ai對A分類質量影響越大,應優(yōu)先挑選,所以選擇劃分屬性時優(yōu)先考慮a3。
NPD缺陷分類假陽性識別模型分為缺陷報告、NPD缺陷數據集生成和假陽性識別三個模塊,如圖2所示。
圖2中:缺陷報告模塊是模型基礎,用于生成靜態(tài)缺陷報告;NPD缺陷數據集生成是核心模塊,解析缺陷報告,挖掘解析后的缺陷報告與軟件歷史倉庫代碼修改中的NPD缺陷知識,預處理NPD缺陷知識,確定NPD缺陷關聯(lián)屬性組,結合其取值構造NPD缺陷數據集;假陽性識別模塊在模型中起橋梁作用,通過接收NPD缺陷數據集分類NPD缺陷實例,分類結果有真實NPD缺陷實例和假陽性NPD缺陷實例兩種,根據分類結果進行NPD缺陷假陽性識別,輸出真實NPD缺陷并評估NPD缺陷確認效率。
表2 NPD缺陷數據集
圖2 NPD缺陷分類假陽性識別模型
假設含有NPD缺陷程序P的NPD缺陷數據集為T,候選屬性集為A,NPD缺陷分類模型為Mtree,基于RSID3算法的NPD缺陷分類假陽性識別方法的步驟如下。
輸入 含有NPD缺陷程序P的NPD缺陷數據集T,候選屬性集A,即Generate_model(T,A)。
輸出 NPD缺陷分類模型Mtree。
步驟1 分別為T和A建立索引數組,利用式(2)計算A中所有屬性信息增益,創(chuàng)建初始節(jié)點N。
步驟2 通過索引數組遍歷T和A,如果T∈同類C,則返回N為葉子,標記為類C,轉步驟6。
步驟3 從任意Ai開始遍歷其索引數組,搜索當前信息增益最大的屬性索引,確定該索引指向的屬性為當前劃分屬性,記N為Ak,刪除該索引并更新索引數組。
步驟4 將T按Ak劃分, 對每個Ak的取值ai,由N長出分枝Ak=ai,在Ak處取值相同的實例歸為同一子集Si。
步驟5 如果Si=null,則轉步驟2;否則,對Si遞歸調用Generate_model(Si,A)生成Si上的決策樹,轉步驟3,自頂向下遞歸劃分。
步驟6 算法結束,輸出NPD缺陷分類模型Mtree。
為驗證本文方法的有效性,選取10個典型的開源Java項目[8]為基準程序進行靜態(tài)NPD缺陷檢測對比實驗來驗證本文方法的有效性,其中后5個Java項目為MegaMek項目連續(xù)版本,上述開源項目文檔規(guī)范且得到持續(xù)維護,其相關信息如表3所示。
表3 基準程序相關信息
在實驗過程中,通過FindBugs-3.0.1工具生成靜態(tài)測試缺陷報告,ant_1.8.2工具獲取靜態(tài)測試缺陷報告,NPD缺陷數據集為.arff格式,所有程序均用Java語言編寫,使用jdk-1.7.0_06,Windows 7,計算機主頻為2.00 GHz,內存2 GB。
基于以上實驗設置,選擇基于目前代表性靜態(tài)測試工具FindBugs[3]的靜態(tài)NPD缺陷檢測方法和本文方法進行對比,在相同條件下對基準程序進行靜態(tài)NPD缺陷檢測,記錄不同方法的報告的總缺陷、耗時和NPD缺陷數,NPD缺陷假陽性降低率為通過本文方法識別出的假陽性NPD缺陷在FindBugs報告的全部NPD缺陷中的比例,是衡量靜態(tài)測試方法有效性的重要指標[8],實驗結果如表4所示。
表4 不同方法檢測NPD缺陷結果對比
對表4的10個基準程序進行缺陷檢測,FindBugs共報告1 909個缺陷,466個NPD缺陷,而本文方法共報告1 800個缺陷,357個NPD缺陷,在NPD缺陷分類假陽性識別過程中其假陽性降低率平均為25%,最高為35.5%,且在MegaMek連續(xù)版本中穩(wěn)定在35%,通過本文方法減少NPD缺陷確認共109個,有效減少24%的NPD缺陷確認工作,假陽性NPD缺陷識別效果好,降低了缺陷確認開銷,提高了靜態(tài)NPD缺陷檢測效率。在表4中,以Weka-3-6為例,在不同項目中通過本文方法最高可以減少(32-24)/32×100%=25%的假陽性NPD缺陷;對于Jstock報告的NPD缺陷基數較小,NPD缺陷變化不大。對于MegaMek0.32.2,因其丟失其類信息造成部分源文件編譯不能通過,使生成的中間代碼不全導致其NPD缺陷假陽性降低率較低。通過表4求得兩種方法檢測時間標準差分別為32.70和22.19,檢測的NPD缺陷標準差分別為23.21和19.74,說明本文方法穩(wěn)定性更好。
缺陷確認效率可以反映靜態(tài)測試方法的有效性,從降低的缺陷確認數量可以間接估計該測試方法缺陷確認效率[5],將NPD缺陷確認效率近似為除不需要再進行確認的NPD缺陷,其余缺陷占FindBugs報告的全部缺陷的比例,比較各方法對基準程序靜態(tài)測試后的NPD缺陷確認效率如圖3所示,本文方法在NPD缺陷確認效率方面優(yōu)勢明顯且在MegaMek連續(xù)版本中NPD缺陷確認效率更穩(wěn)定。
圖3 各方法檢測NPD缺陷在基準程序上的缺陷確認效率
所以,對于基準程序,本文提出的NPD分類假陽性識別方法在充分利用靜態(tài)缺陷報告與軟件歷史倉庫中代碼修改中的NPD缺陷知識的基礎上結合數據挖掘分類算法,以較小的代價更穩(wěn)定地進行缺陷確認,提高了NPD缺陷檢測效率。
在面向代碼缺陷的靜態(tài)測試NPD分類假陽性識別方法中,如何充分利用已有NPD缺陷知識快速確認真實NPD缺陷是提高NPD缺陷檢測效率的關鍵。本文提出了一種空指針引用缺陷分類假陽性識別方法,該方法通過對多個基準程序進行測試并與基于主流靜態(tài)測試工具FindBugs的NPD缺陷檢測方法進行比較,實驗結果表明,本文方法有效降低了靜態(tài)測試缺陷確認開銷,在NPD缺陷檢測效率和穩(wěn)定性上都有明顯提高。
在NPD缺陷分類假陽性識別過程中,基于軟件靜態(tài)缺陷報告與軟件歷史倉庫代碼修改中的NPD缺陷知識結合RSID3算法在缺陷確認之前先進行NPD缺陷假陽性識別,雖在一定程度上提高了靜態(tài)NPD缺陷檢測效率和穩(wěn)定性,使缺陷確認開銷降低,但對于實際中的復雜軟件,檢測軟件NPD缺陷和缺陷確認所需缺陷關聯(lián)知識的充分性仍需提高。
References)
[1] 陳翔, 顧慶, 劉望舒, 等.靜態(tài)軟件缺陷預測方法研究[J]. 軟件學報, 2016, 27(1): 1-25. (CHEN X, GU Q, LIU W S, et al. Survey of static software defect prediction [J]. Journal of Software, 2016, 27(1): 1-25.)
[2] 李舟軍, 張俊賢, 廖湘科, 等.軟件安全漏洞檢測技術[J]. 計算機學報, 2015, 38(4): 717-732. (LI Z J, ZHANG J X, LIAO X K, et al. Survey of software vulnerability detection techniques[J]. Chinese Journal of Computers, 2015, 38(4): 717-732.)
[3] 金大海, 宮云戰(zhàn), 楊朝紅, 等.運行時異常對軟件靜態(tài)測試的影響研究[J]. 計算機學報, 2011, 34(6): 1090-1099. (JIN D H, GONG Y Z, YANG Z H, et al. Research on the effect of runtime exception in software static testing[J]. Chinese Journal of Computers, 2011, 34(6): 1090-1099.)
[4] DAS M, LERNER S, SEIGLE M. ESP: path-sensitive program verification in polynomial time[J]. ACM SIGPLAN Notices, 2002, 37(5): 57-68.
[5] 張大林, 金大海, 宮云戰(zhàn), 等.基于缺陷關聯(lián)的靜態(tài)分析優(yōu)化[J]. 軟件學報, 2014, 25(2): 386-399. (ZHANG D L, JIN D H, GONG Y Z, et al. Optimization static analysis based on defect correlations[J]. Journal of Software, 2014, 25(2): 386-399.)[6] ZHANG J, WANG X, HAO D, et al. A survey on bug-report analysis[J]. Science China Information Sciences, 2015, 58(2): 24-48.
[7] 梁廣泰, 孟娜, 李進輝, 等.一個可半自動化擴展的靜態(tài)代碼缺陷分析工具[J]. 計算機學報, 2011, 34(6): 1114-1125. (LIANG G T, MENG N, LI J H, et al. A semi-automatic extensible static defect analysis tool[J]. Chinese Journal of Computers, 2011, 34(6): 1114-1125.)
[8] 楊睿, 金大海, 宮云戰(zhàn), 等.Java中空指針引用故障的靜態(tài)檢測方法[J]. 清華大學學報, 2011, 52 (增刊1): 1509-1514. (YANG R, JIN D H, GONG Y Z, et al. Static analysis method for detecting null pointer dereference in Java[J]. Journal of Tsinghua University, 2011, 52 (Supp1): 1509-1514.)
[9] QUINLAN D J, VUDUC R W, MISHERGHI G. Techniques for specifying bug pattern[C]// PADTAD 2007: Proceedings of the 2007 ACM Workshop on Parallel and Distributed Systems: Testing and Debugging. New York: ACM, 2007: 27-35.
[10] KIM S, WHITEHEAD E J, Jr, ZHANG Y, et al. Classifying software changes: clean or buggy?[J]. IEEE Transactions on Software Engineering, 2008, 34(2): 181-196.
[11] RUTER N, ALMAZAN C B, FOSTER J S. A comparison of bug finding tools for Java[C]// ISSRE 2004: Proceedings of the 15th International Symposium on Software Reliability Engineering. Piscataway, NJ: IEEE, 2004: 269-270.
[12] 韓松來, 張輝, 周華平, 等.決策樹算法中多值偏向問題的理論分析[C]// 2005全國自動化新技術學術交流會論文集. 南京: 中國金屬學會, 2005: 138-145. (HAN S L, ZHANG H, ZHOU H P, et al. Theoretical analysis for variety bias of decision tree algorithm[C]// Proceedings of the 2005 Chinese Symposium on New Technologies for Automation. Nanjing: Chinese Society of Metals, 2005: 138-145.)
[13] 朱顥東.ID3算法的改進和簡化[J]. 上海交通大學學報, 2010, 44(7): 883-891. (ZHU H D. Research on improvement and simplification of ID3 algorithm[J]. Journal of Shanghai Jiaotong University, 2010, 44(7): 883-891.)
Falsepositiverecognitionmethodbasedonclassificationfornullpointerdereferencedefects
WANG Shuyan*, QUAN Yafei, SUN Jiaze
(SchoolofComputerScienceamp;Technology,Xi’anUniversityofPostsandTelecommunications,Xi’anShaanxi710061,China)
Focusing on the false positive problem of null pointer dereference (NPD) defect in static testing, a new false positive recognition method for null pointer reference defect based on classification was proposed. The knowledge of NPD defect was mined and preprocessed to generate data set of the defects. Then the data set of NPD defects was classified via ID3 classification algorithm based on rough set theory, and there were two kinds of classification results, one was false positive null pointer reference defect instances, the other was real null pointer reference defect instances. The real NPD defects were confirmed according to the classification results of the defect instances by recognizing the false positive NPD defects. The method was tested on ten benchmark programs and compared to the NPD defect detection method based on the mainstream static testing tool FindBugs, the false positive rate was reduced by 25%, and the confirmation amount was reduced by 24% for NPD defects. The experimental result shows that the proposed method can effectively reduce defect confirmation overhead and improve the detection efficiency and stability for NPD defects in static testing.
static testing; Null Pointer Dereference (NPD) defect; false positive recognition; defect classification; defect confirmation
2017- 04- 28;
2017- 06- 05。
陜西省工業(yè)攻關項目(2016GY-089);陜西省教育廳自然科學基金資助項目(15JK1672)。
王曙燕(1964—),女,河南南陽人,教授,博士,CCF會員,主要研究方向:軟件測試、數據挖掘、智能信息處理; 權雅菲(1991—),女,陜西西安人,碩士研究生,主要研究方向:軟件設計與測試、數據挖掘; 孫家澤(1980—),男,河南南陽人,副教授,博士,CCF會員,主要研究方向:軟件測試、數據挖掘、智能信息處理。
1001- 9081(2017)10- 2968- 05
10.11772/j.issn.1001- 9081.2017.10.2968
TP311.5
A
This work is partially supported by the Industrial Research and Development Program of Shaanxi Province (2016GY-089), the Natural Science Foundation of the Ministry of Education of Shaanxi Province (15JK1672).
WANGShuyan, born in 1964, Ph. D., professor. Her research interests include software testing, data mining, intelligent information processing.
QUANYafei, born in 1991, M. S. candidate. Her research interests include software design and testing, data mining.
SUNJiaze, born in 1980, Ph. D., associate professor. His research interests include software testing, data mining, intelligent information processing.