• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于特征相似的軟件缺陷排除方法

      2017-12-08 03:26:01趙逢禹
      計算機應用與軟件 2017年11期
      關鍵詞:開發(fā)人員代碼語法

      張 燦 趙逢禹

      (上海理工大學光電信息與計算機工程學院 上海 200093)

      基于特征相似的軟件缺陷排除方法

      張 燦 趙逢禹

      (上海理工大學光電信息與計算機工程學院 上海 200093)

      開發(fā)人員思維定式和代碼復制與克隆會導致代碼中存在相同類型的軟件缺陷。基于這一思想,提出一種基于特征相似的軟件缺陷排除方法。該方法對已定位缺陷代碼進行特征分析,基于該缺陷代碼特征,查找項目代碼中具有相似特征的代碼片段。結合缺陷類型和代碼特征對缺陷代碼進行分析,建立特征相似關聯(lián)規(guī)則,檢測項目代碼,排查與缺陷代碼相似度超過預定閾值的代碼片段,相似度超過預定閾值的代碼片段稱為疑似代碼。通過對科研管理系統(tǒng)和物業(yè)系統(tǒng)人工導入錯誤并進行缺陷排除實驗分析和人工檢測,證實了該方法能夠有效地發(fā)現(xiàn)項目中隱含的相似缺陷代碼。

      特征相似 缺陷排除 抽象語法樹 特征分析

      0 引 言

      軟件缺陷嚴重影響軟件可靠性和可用性,是導致系統(tǒng)失效和崩潰的主要原因?,F(xiàn)有的軟件缺陷定位方法分為兩大類,分別是基于靜態(tài)分析的缺陷定位和基于動態(tài)測試的缺陷定位?;陟o態(tài)分析的缺陷定位方法是在不執(zhí)行代碼的情況下,使用詞法分析、語法分析、流程依賴分析等技術對程序源代碼進行靜態(tài)掃描,以發(fā)現(xiàn)代碼中隱含的錯誤[1]。Zimmermann等[2]針對程序模塊間的依賴關系展開研究,通過依賴圖發(fā)現(xiàn)程序模塊的依賴關系越強代碼缺陷的發(fā)現(xiàn)概率越大。肖慶等[3]利用變量的抽象取值范圍來判斷控制流程中不可達路徑,提出了一種數(shù)據(jù)流分析的路徑敏感分析算法。王旭等[4]綜合考慮代碼文本和缺陷修復歷史信息,提出了基于缺陷修復歷史的兩階段缺陷定位方法?;趧討B(tài)測試的缺陷定位方法是通過測試用例執(zhí)行程序,利用程序的覆蓋信息和運行結果,將執(zhí)行路徑劃分為成功路徑和失敗路徑兩大類,綜合分析執(zhí)行路徑信息推理出程序出錯的位置[1]。Renieris等[5]和郝丹等[6]深入研究了程序頻譜方法,該方法主要分析程序成功和失敗執(zhí)行路徑的差異性和測試用例之間的相似性對缺陷定位的影響。李志敏等[7]基于程序頻譜的缺陷定位,研究了模塊和函數(shù)級別的實時性缺陷定位方法。

      目前的軟件缺陷排除方法是在缺陷定位的基礎上對每個缺陷進行排除,本文認為這種缺陷排除方法并沒有充分利用缺陷所具有的內(nèi)在信息。而實際上,在軟件設計與實施時,開發(fā)人員往往存在思維定式,編寫同一類算法或?qū)崿F(xiàn)相似功能時,可能在多處犯同一類錯誤。另外,程序員開發(fā)相同功能時常采用copy-paste的編程風格,代碼復制后,根據(jù)不同需求對代碼進行簡單調(diào)整。因而當通過代碼分析或者測試發(fā)現(xiàn)缺陷后,有必要分析項目中是否存在類似缺陷,從而使缺陷的信息得到充分利用。

      相似缺陷代碼主要由代碼的復制粘貼或者開發(fā)人員思維定式產(chǎn)生,代碼段之間通常十分相似,因此,本文對相似代碼的檢測技術進行了研究。關于相似代碼檢測的問題,已有大量的研究成果,主要有基于文本、基于token、基于樹和基于語義[8]。Ducasse等[9]提出了文本比較的優(yōu)化算法,該方法通過去除源代碼中的噪音代碼,為代碼行生成對應的hash值,配對hash值相同的代碼行片段。Baxter 等[10]提出了基于語法樹的重復代碼檢測方法,該方法通過語法樹子樹的hash值生成和對比,得到代碼相似度。王克朝等[11]研究了克隆代碼相關缺陷和克隆代碼檢測算法,提出了克隆代碼分析方法。但這些研究成果并不是基于已發(fā)現(xiàn)的缺陷,沒有把缺陷代碼特征作為出發(fā)點,進行相似缺陷檢測和排除工作。

      本文假定已經(jīng)通過靜態(tài)分析或動態(tài)測試的缺陷定位方法發(fā)現(xiàn)了缺陷。然而現(xiàn)有的缺陷定位排除方法沒有做到以下兩點:(1) 沒有針對缺陷代碼的主要屬性和特征以及缺陷提供給用戶的信息進行分析;(2) 沒有進一步利用代碼缺陷特征進行代碼相似度檢測,查找并分析項目中相似的代碼段。針對上述問題,本文在已知缺陷代碼的基礎上,首先研究與缺陷密切相關的缺陷類型和代碼特征,為了充分利用缺陷類型信息和準確地分析與其密切相關的代碼特征,給出了缺陷類型和代碼特征的關聯(lián)規(guī)則,設計特征相似度量算法計算項目代碼與缺陷代碼的相似度,對相似度超過閾值的疑似代碼進行排序,然后輸出疑似代碼段信息。為了驗證算法的有效性,本文使用Java語言和AST插件構造缺陷代碼檢測工具,對項目代碼進行相似缺陷排除。通過人工檢測缺陷得到該方法的成功率和排除率,以驗證本方法的準確性和有效性。

      1 缺陷類型和代碼特征關聯(lián)關系

      在進行缺陷代碼相似性分析時,為了方便開發(fā)人員根據(jù)缺陷代碼反饋的信息快速進行類型指定,本文對現(xiàn)有缺陷分類進行研究,給出適用文本的缺陷分類方法。但是僅利用缺陷類型進行相似缺陷排查比較籠統(tǒng),沒有充分考慮缺陷代碼的屬性和特征信息,為了準確并且充分利用缺陷代碼反饋的信息,在缺陷分類的基礎上研究了與該缺陷類型密切相關的代碼特征。每類缺陷需要度量的代碼特征都不相同,針對代碼特征對缺陷的不同影響,本文給出了缺陷類型和代碼特征的關聯(lián)關系。

      1.1 缺陷類型

      缺陷類型是缺陷代碼的重要屬性,缺陷類型能夠幫助準確定位相似缺陷。缺陷正交分類法[12]ODC(Orthogonal Defects Classification)定義了八個正交的缺陷屬性,缺陷屬性之間不存在關聯(lián)性,各自獨立,沒有重疊的冗余信息。但是由于它不是為了研究缺陷代碼相似分析而設計的,不適用于缺陷代碼相似度計算,比如:Activity屬性是當缺陷被發(fā)現(xiàn)時實際的處理步驟和 Impact屬性是指缺陷可能對用戶造成的影響,不適合用本文的應用場景。Thayer軟件缺陷分類方法[13-14]是按照缺陷性質(zhì)分類,它利用測試人員在軟件測試過程填寫的問題報告和用戶使用軟件過程反饋的問題報告作為錯誤分類的信息,把缺陷分為16類,分類較為復雜,其中包括需求改變和配置錯誤等非編碼錯誤不是本文考慮的范圍。本文參考了Thayer軟件缺陷分類中編碼錯誤相關的缺陷和FindBugs給出的詳細缺陷描述[15],為了覆蓋常見的編碼缺陷和提高相似缺陷代碼檢測的準確性,給出了五種缺陷類型:

      1) 邏輯缺陷:是指程序運行后沒有得到預期的結果,這種缺陷在語法上是有效的,程序可以順利執(zhí)行,但是在邏輯上是錯誤的,不能得到預期的結果。例如:算法錯誤、功能錯誤、時序錯誤、流程控制錯誤等。

      2) 運算缺陷:是指算術運算或者邏輯運算執(zhí)行異?;蛘呓Y果錯誤。例如:除數(shù)為零、非運算變量進行運算、中間結果溢出、操作符的執(zhí)行順序錯誤等。

      3) 數(shù)據(jù)庫操作缺陷:是指進行數(shù)據(jù)庫查詢或更新時拋出異常。例如:操作的數(shù)據(jù)庫字段不存在、數(shù)據(jù)類型與表類型不匹配、插入?yún)?shù)個數(shù)不符合等。

      4) 數(shù)據(jù)操作缺陷:是指在數(shù)據(jù)操作時拋出異常。例如:空指針、數(shù)據(jù)引用錯誤、數(shù)據(jù)賦值錯誤、變量未聲明使用、變量使用前未賦值、下標越界等。

      5) 調(diào)用缺陷:是指方法間或類之間調(diào)用操作拋出異常。例如:方法調(diào)用參數(shù)順序和參數(shù)個數(shù)錯誤、變量定義不一致等。

      1.2 代碼特征

      代碼特征是對代碼段的屬性進行抽象提取。為了更全面地分析缺陷代碼與疑似代碼之間的相似性,本文對影響代碼缺陷的特征進行了研究,主要提出了表1中的10個代碼特征?;谶@些特征,可以構建代碼特征相似度檢測算法。表1給出了代碼特征名稱、特征描述與分析內(nèi)容,分析內(nèi)容是指進行代碼特征提取和分析的代碼內(nèi)容。

      表1 代碼特征

      1) 方法聲明:方法聲明能夠一定程度反映方法功能和邏輯關系,如果缺陷代碼和疑似代碼段方法聲明相同或相似,疑似代碼段中可能存在相似缺陷。

      2) 運算類型、數(shù)據(jù)結構、流程控制、調(diào)用關系是代碼段中最容易引發(fā)缺陷的代碼特征,如果缺陷代碼是數(shù)據(jù)操作缺陷、調(diào)用缺陷或邏輯缺陷,并且缺陷代碼和疑似代碼在以上任何一個方面相同或者相似,疑似代碼段中可能存在相似缺陷。

      3) 數(shù)據(jù)庫操作類型:用于分析數(shù)據(jù)庫操作的代碼,是分析數(shù)據(jù)庫操作缺陷的重要因素,如果缺陷是數(shù)據(jù)庫操作缺陷,并且缺陷代碼和疑似代碼數(shù)據(jù)庫操作相同或者相似,那么疑似代碼段中可能存在相似的缺陷。

      4) 語法樹結構信息能夠反映代碼結構和語法,與代碼缺陷密切相關,如果缺陷代碼和疑似代碼段語法樹相同或相似,疑似代碼段中可能存在相似缺陷。

      5) 開發(fā)過程中開發(fā)人員用本文注釋方法對功能進行說明,所以注釋文本中的功能描述信息和代碼功能密切相關。如果缺陷代碼與疑似代碼段中功能描述信息相似或者開發(fā)人相同,疑似代碼段中可能存在相似缺陷,開發(fā)時間越接近,疑似代碼段中存在相似缺陷的概率就越大。

      1.3 缺陷類型與代碼特征的關聯(lián)關系

      開發(fā)和測試人員對缺陷類型的鑒定比較擅長,然而每一類缺陷所關注的代碼特征都不同。根據(jù)缺陷類型進行缺陷分析需要通過分析代碼特征建立特征權重數(shù)組,對不同缺陷特征的差異化分析。例如,如果是邏輯缺陷,需要分析缺陷代碼和疑似代碼的實現(xiàn)邏輯。代碼邏輯主要表現(xiàn)在代碼的語法樹結構、代碼的流程控制語句,以及代碼中存在的方法聲明和功能信息描述等相關注釋信息。所以在進行相似度計算時,需要分別計算以上幾個方面的代碼特征相似度,而對數(shù)據(jù)庫操作、方法調(diào)用等其他特征相似度則不需要進行計算。根據(jù)上文給出的缺陷類型和代碼特征,表2分別對應給出缺陷類型和代碼特征的關聯(lián)關系定義。

      表2 缺陷類型與代碼特征的關聯(lián)關系

      在代碼分析時,根據(jù)代碼特征對缺陷的影響程度將特征分為三類,分別為主要特征、次要特征和五官特征。我們設定無關特征的權重為0,不參與計算,主要特征的權重最高,次要特征的權重較低,具體值將在算法實現(xiàn)中給出。

      2 基于缺陷特征的相似度度量

      基于特征相似的疑似代碼與缺陷代碼的相似檢測方法,可以縮小對項目代碼的檢測范圍,提高準確性和檢測效率。針對上文給出的十類代碼特征,分別設計了相似度度量算法。限于篇幅,本文僅給出方法聲明、流程控制、功能描述信息、開發(fā)人員和開發(fā)時間的相似度度量算法定義。

      2.1 方法聲明的相似度度量

      方法聲明包括四個部分:方法名稱、參數(shù)列表、方法返回值和訪問修飾詞。所以方法聲明相似度應該是這四個部分相似度的加權和。

      定義1方法聲明的相似度。設方法F1和F2的方法名稱相似度name(F1,F2),參數(shù)列表相似度為param(F1,F2),返回值相似度return(F1,F2),訪問修飾詞相似度為type(F1,F2),四個相似度的權重分別為:a、b、c、d(條件:a+b+c+d=1),則方法聲明的相似度為:

      simSign(F1,F2)=a×name(F1,F2)+b×

      param(F1,F2)+c×return(F1,F2)+d×type(F1,F2)

      (1)

      定義2方法名稱相似度。設方法F1和F2,將F1和F2的方法名稱分別分詞構成兩個單詞集合為N1和N2,則方法名稱的相似度為:

      (2)

      定義3參數(shù)列表的相似度。設方法F1和F2的參數(shù)列表分別為P1(p1,p2,p3,…)和P2(q1,q2,q3,…),參數(shù)的個數(shù)為S1和S2,如果兩個參數(shù)列表的參數(shù)類型集合分別為T1和T2,則參數(shù)列表的相似度為:

      (3)

      定義4返回值的相似度。設方法F1和F2的返回值分別為R1和R2,則方法返回值的相似度為:

      (4)

      本文設定修飾詞的取值范圍為Java給出的9個用來修飾方法或成員的修飾詞:private、protected、public、final、static、abstract、native、strictfp、synchronized。

      定義5訪問修飾詞的相似度。設方法F1和F2的訪問修飾詞集合分別為D1和D2,則訪問修飾詞的相似度為:

      (5)

      2.2 流程控制的相似度度量

      本文針對if、switch、for、while這四類流程控制語句進行相似性排查。由于流程控制語句之間可能存在嵌套關系,為了描述控制流程的執(zhí)行順序和嵌套深度,本文采用劉楠等[16]改進的基于抽象語法樹的軟件源代碼比對算法,通過剪去語法樹中影響判斷的葉子節(jié)點來判斷語法樹結構相似度,得到最大相似子樹。

      定義6流程控制的相似度。設代碼段C1和C2的流程控制語句的語法樹結構為T1和T2(流程控制關鍵詞個數(shù)不為零),通過語法樹分析算法計算缺陷代碼段C1語法樹中流程控制關鍵詞個數(shù)和最大相似子樹中流程控制關鍵詞個數(shù),分別記為N1和max,那么流程控制的相似度為:

      (6)

      2.3 注釋文本相似度度量

      功能描述信息、開發(fā)人員信息和開發(fā)時間信息均由代碼的注釋文本提取,將此三類相似度作為一個整體進行文本相似度度量。假設所有注釋信息都是在方法前完成且按照Java注釋規(guī)范中的文檔注釋,使用@關鍵字的形式,提取描述內(nèi)容文本進行相似度計算,不包括注釋語法關鍵詞,如@、*、/等。

      定義7注釋文本的相似度。設兩段注釋文本的描述內(nèi)容分別為D1和D2,功能描述信息、開發(fā)人員信息和開發(fā)時間的相似度分別為function(D1,D2)、person(D1,D2)和time(D1,D2),那么注釋文本的相似度為:

      (7)

      定義8功能描述信息的相似度。設兩段注釋文本的描述內(nèi)容分別為D1和D2,其中功能描述信息的單詞集合分別為F1和F2,則功能描述信息的相似度為:

      (8)

      定義9開發(fā)人員的相似度。設兩段注釋文本的描述內(nèi)容分別為D1和D2,其中開發(fā)人員名稱的單詞集合分別為P1和P2,則開發(fā)人員的相似度為:

      (9)

      定義10開發(fā)時間的相似度。設兩段注釋文本的描述內(nèi)容分別為D1和D2,其中開發(fā)時間信息為T1和T2,weekOf(T)方法為時間差T包含周的個數(shù) ,則開發(fā)時間的相似度為:

      (10)

      3 缺陷排除算法

      本文分別對五種缺陷類型的疑似代碼相似度檢測算法進行了實現(xiàn)。限于篇幅,僅以邏輯缺陷為例給出算法描述。

      3.1 算法思想

      在進行缺陷代碼分析時,缺陷代碼和缺陷代碼類型需要開發(fā)人員根據(jù)實際情況輸入,根據(jù)輸入內(nèi)容,檢測項目中存在的疑似代碼。針對邏輯缺陷,首先對缺陷代碼和項目代碼進行方法聲明、控制流程和語法樹結構的特征的分析。然后對描述文本信息進行相似度檢測。本文研究的過程中,設定邏輯缺陷的權重數(shù)組如表3所示,權重數(shù)組的定義需要根據(jù)實驗的不斷改進和研究的深入進行權重調(diào)整。

      表3 邏輯缺陷的權重數(shù)組

      (11)

      項目代碼和缺陷代碼的整體相似度為權重與相似度乘積之和,如式(11)。整體相似度大于預定閾值的代碼段稱為疑似代碼,將疑似代碼的相似度倒敘排列。然后輸出疑似代碼段和代碼段位值信息列表,以提供給開發(fā)人員進行人工代碼檢測。

      3.2 算法中使用的數(shù)據(jù)結構

      在進行邏輯缺陷排除時,使用到的數(shù)據(jù)結構分別為:

      wight[]:特征權重數(shù)組,是指該類型缺陷代碼在每個特征維度上的權重值。

      simSign[]:代碼方法聲明相似度數(shù)組。每個元素都包括疑似代碼和缺陷代碼的方法簽名相似度,和疑似代碼所在位置信息和該代碼段。

      simProcess[]:代碼控制流程相似度數(shù)組。每個元素都包括疑似代碼和缺陷代碼的流程控制相似度,和疑似代碼所在位置信息和該代碼段。

      simTree[]:語法樹結構相似度數(shù)組。每個元素都包括疑似代碼和缺陷代碼的語法樹結構相似度,和疑似代碼所在位置信息和該代碼段。

      simDescription[]:備注信息相似度數(shù)組。每個元素都包括疑似代碼和缺陷代碼的描述文本相似度,和疑似代碼所在位置信息和該代碼段。

      3.3 詳細描述

      算法:邏輯缺陷-缺陷排除算法

      輸入:缺陷代碼塊faultCode,缺陷類型-邏輯錯誤faultType,項目代碼路徑projectPath。

      輸出:疑似代碼段列表similarFaultList。

      1) 根據(jù)輸入的缺陷代碼段faultCode和代碼缺陷類型faultType,生成缺陷代碼段的抽象語法樹,保存為faultAst,計算缺陷代碼段的特征向量faultCodeVector。

      2) 遍歷項目所有類文件,生成類文件的抽象語法樹,保存為ASTFiles。

      3) 根據(jù)錯誤類型,獲取邏輯錯誤的特征權重數(shù)組weight[]。

      4) 計算方法聲明相似度:遍歷ASTFiles中的方法聲明結點信息,計算與faultCodeVector方法聲明屬性的相似度,返回相似度大于0的數(shù)組simSign[]。

      5) 計算控制流程相似度:遍歷ASTFiles中的控制流程相關代碼段,計算與faultCodeVector控制流程屬性的相似度,返回相似度大于0的數(shù)組simProcess[]。

      6) 計算語法樹結構相似度:遍歷ASTFiles語法樹結點和結構特征信息,計算與FaultCodeVector語法樹結構屬性的相似度,返回相似度大于0的數(shù)組simTree[]。

      7) 計算功能、開發(fā)人員和開發(fā)時間相似度:遍歷ASTFiles中的備注描述信息,計算與FaultCodeVector備注信息的相似度,返回相似度大于0的注釋文本數(shù)組simAnnotation[]。

      8) 計算代碼整體相似度:計算以上步驟所得相似度與對應權重的乘積,若在某個維度上相似度返回值為空(null),則定義相似度為0,同一代碼段各維度相似度之和為該代碼整體相似度。

      9) 排序輸出疑似代碼段列表,即整體相似度大于預定閾值的代碼段和代碼所在位置信息。

      4 工具實現(xiàn)及實驗

      本文使用Java開發(fā)語言,Eclipse開發(fā)工具,完成了原型工具的開發(fā)工作。該工具中導入了jdt、core相關的jar包來完成抽象語法樹構建和語法樹遍歷,根據(jù)本文給出的相似度算法排除項目中存在的相似缺陷。

      本實驗平臺由三大模塊組成,模塊一是用戶輸入模塊,用于輸入樣本代碼、選擇出錯代碼特征的類型和待檢測的代碼庫目錄;模塊二是代碼查找模塊,使用代碼特征的相關算法和抽象語法樹jdt核心包,進行代碼庫的文件錯誤代碼檢測;模塊三是結果輸出模塊,用于輸出檢測到的文件名稱和內(nèi)容,并排序輸出相似度超過設定閾值的疑似代碼片段,方便用戶進行缺陷排除。

      本文選取了物業(yè)管理系統(tǒng)和科研管理系統(tǒng)進行缺陷代碼排除。首先在項目中人工導入典型缺陷,然后利用本文工具對項目代碼進行相似缺陷檢測,最后人工審查疑似代碼,分別對疑似代碼中缺陷代碼的比例和項目中導入缺陷代碼的排除率進行統(tǒng)計。本文選用了兩組特征權重進行實驗,表4為第一組邏輯缺陷的代碼特征權重。

      表4 第一組邏輯缺陷代碼特征權重

      表5為第一組權重下,邏輯缺陷代碼的排除結果。

      表5 第一組邏輯缺陷相似性排除結果

      表6為第二組邏輯缺陷的代碼特征權重。

      表6 第二組邏輯缺陷代碼特征權重

      表7為第二組權重下,邏輯缺陷代碼的排除結果。

      表7 第二組邏輯缺陷相似性排除結果

      選取實驗結果中的一個缺陷進行分析和研究,圖1中的代碼段為用戶輸入的缺陷代碼片段,代碼段2為通過算法排除的一段相似缺陷代碼,兩段代碼都存在邏輯缺陷,即:變量reqParams 賦值后進行操作,并未判斷是否為空,所以當參數(shù)為空時,會引發(fā)空指針錯誤。如圖1中的代碼段為輸入的邏輯缺陷代碼段。

      圖1 輸入缺陷代碼段

      圖1和圖2中的代碼段具有很高的相似性,其中方法聲明相似度為0.86,控制流程語句相似度為0,語法樹結構完全相同,相似度為1,注釋文本相似度為0.55,兩組代碼特征權重下的整體相似度分別為0.613和0.602。

      圖2 輸出缺陷代碼段

      但是系統(tǒng)中植入的缺陷代碼也并未完全排除,如圖3中也存在data變量賦值后未判斷是否為空,當數(shù)據(jù)為空時會出現(xiàn)空指針錯誤。

      圖3 未排除的缺陷代碼段

      但是,圖1和圖3中的代碼段相似度較低,其中方法聲明相似度為0.33,控制流程語句相似度為0,語法樹結構相似度為0.4,注釋文本相似度為0.08,兩組代碼特征權重下的整體相似度分別為0.227和0.203,低于預定閾值0.3。

      由于暫時沒有利用已有缺陷進行相似缺陷排除方面的研究,所以本文實驗結果數(shù)據(jù)并沒有參照信息。實驗中通過設定不同的代碼特征權重分別對兩個管理系統(tǒng)進行相似缺陷檢測,結果表明缺陷權重的選擇會影響相似缺陷代碼的排除率和成功率。在第一組權重下,缺陷排除結果優(yōu)于第二組,最優(yōu)的代碼特征權重需要進行大量實驗后選定。但是從本文實驗數(shù)據(jù)來看,返回的疑似代碼中科研管理系統(tǒng)有71%為缺陷代碼,物業(yè)系統(tǒng)中有60%為缺陷代碼,并且缺陷的排除率大于人工導入缺陷個數(shù)76%。證實了本文提出的算法和開發(fā)的工具能夠有效排除相似缺陷代碼。

      5 結 語

      本文針對開發(fā)人員copy-paste編程風格和思維定式等原因引入的相似缺陷代碼進行分析。依據(jù)不同缺陷類型,對代碼特征各維度影響度進行動態(tài)賦值得到特征權重數(shù)組,基于缺陷代碼的特征度量向量進行相似度計算和缺陷代碼排除工作。在算法模型基礎上完成了Java語言的軟件缺陷檢測排除工具,分別對一個科研管理系統(tǒng)和一個物業(yè)管理系統(tǒng)進行了缺陷檢測和排除的實驗。結果證明該方法可以有效地檢測出項目中類似的軟件缺陷,雖然返回的疑似代碼存在非缺陷代碼,但是反映了軟件缺陷的分布和開發(fā)人員開發(fā)習慣有著密切關系。利用代碼特征信息排除項目中的相似缺陷,能夠提高軟件的質(zhì)量。目前還未有學者提出在缺陷定位后利用缺陷的價值,對系統(tǒng)內(nèi)的相似缺陷進行分析,所以本文具有一定的創(chuàng)新性和很強的實用性。

      同時,本文也存在很多未完成的工作,主要包括代碼特征權重的設置需要通過大量實驗驗證找到最優(yōu)點,提供代碼特征權重的自動化配置,閾值的選取、完善、自定義等。

      [1] 鞠小林, 姜淑娟, 張艷梅. 等. 軟件故障定位技術進展[J]. 計算機科學與探索, 2012, 6(6):481-494.

      [2] Zimmermann T, Nagappan N. Predicting Subsystem Failures using Dependency Graph Complexities[C]// The, IEEE International Symposium on Software Reliability. IEEE Computer Society, 2007:227-236.

      [3] 肖慶, 宮云戰(zhàn), 楊朝紅, 等. 一種路徑敏感的靜態(tài)缺陷檢測方法[J]. 軟件學報,2010,21(2):209-217.

      [4] 王旭, 張文, 王青. 基于缺陷修復歷史的兩階段缺陷定位方法[J] . 計算機系統(tǒng)應用, 2014 ,23(11):99-104.

      [5] Renieris M, Reiss S P. Fault localization with nearest neighbor queries[C]//Proceedings of the 18th IEEE International Conference on Automated Software Engineering, Quebec, Canada, Oct 6-10, 2003. Washington, DC, USA: IEEE Computer Society, 2003: 30-39.

      [6] Hao Dan,Zhang Lu, Pan Ying, et al. On similarity-awareness in testing-based fault localization[J]. Automated Software Engineering, 2008,15(2):207-249.

      [7] 李志敏, 殷蓓蓓, 張萍, 等. 一種實時缺陷定位方法及可視化缺陷[J] . 計算機工程, 2017,43(2):111-119.

      [8] Jiang L, Misherghi G, Su Z, et al. DECKARD:Scalable and Accurate Tree-Based Detection of Code Clones[C]// ICSE’07 Proceedings of the 29th international conference on Software Engineering, IEEE Press,Piscataway, NJ:IEEE, 2007:96-105.

      [9] Ducasse S, Nierstrasz O, Rieger M. On the effectiveness of clone detection by string matching[J]. Journal of Software Maintenance & Evolution Research & Practice, 2006, 18(1):37-58.

      [10] Baxter IraD, Yahin A, Moura L, et al.Clone detection using abstract syntax trees[C]// Proceeding Soft the International Conference on Software Maintenance, 1998, 368-377.

      [11] 王克朝, 朱宸光, 王甜甜,等. 克隆代碼分析方法研究[J]. 計算機應用研究, 2017, 34(3):748-751.

      [12] Chillarege R, Bhandari I S, Chaar J K, et al. Orthogonal defect classification-a concept for in-process measurements[J]. IEEE Transactions on Software Engineering, 1992, 18(11):943-956.

      [13] Song Q, Shepperd M, Cartwright M, et al. Software Defect Association Mining and Defect Correction Effort Prediction[J]. IEEE Transactions on Software Engineering, 2006, 32(2):69-82.

      [14] 聶林波, 劉孟仁. 軟件缺陷分類的研究[J] .計算機應用研究, 2004, 21(6):84-86.

      [15] FinBugs. Find Bugs in Java Programs 2105 [EB/OL]. http://findbugs.sourceforge.net/.

      [16] 劉楠, 韓麗芳, 夏坤峰, 等. 一種改進的基于抽象語法樹的軟件源代碼比對算法[J]. 技術研究, 2014(1):38-42.

      SOFTWAREDEFECTREMOVINGMETHODBASEDONCHARACTERISTICSIMILARITY

      Zhang Can Zhao Fengyu

      (SchoolofOptical-ElectricalandComputerEngineering,UniversityofShanghaiforScienceandTechnology,Shanghai200093,China)

      Mind-sets of developers and code duplication and cloning can result in similar software defects. Considering this fact, software defect removing method based on characteristic similarity is proposed. The method analyzed the characteristic of the fixed defect codes, and according to that, the code fragments with similar features in the project code would be detected. Combining with defect types and code characteristic, the defect codes were analysed; association rules on feature similarity were established; project codes were defected; the code fragment called suspected code would be founded whose defect code similarity exceeded the predetermined threshold. Men imported error into both the scientific research management system and the property system and then defect removing analysis and manual inspection were carried out. The results show that this method can effectively find implicit similar software defects in the project.

      Characteristic similarity Defect removing Abstract tree Characteristic analysis

      2017-02-22。國家自然科學基金青年基金項目(61402288)。張燦,碩士生,主研領域:缺陷排除,代碼相似。趙逢禹,教授。

      TP311

      A

      10.3969/j.issn.1000-386x.2017.11.003

      猜你喜歡
      開發(fā)人員代碼語法
      Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應用
      跟蹤導練(二)4
      KEYS
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      Keys
      Book 5 Unit 1~Unit 3語法鞏固練習
      讓Windows 10進入開發(fā)者模式
      電腦迷(2015年12期)2015-04-29 23:22:51
      多伦县| 鹿泉市| 泾源县| 盖州市| 新邵县| 罗山县| 蕲春县| 东海县| 榕江县| 甘德县| 淅川县| 松潘县| 安多县| 海口市| 清新县| 灯塔市| 石泉县| 衡阳县| 甘洛县| 蒲江县| 荔浦县| 四川省| 应城市| 卫辉市| 乐昌市| 新泰市| 慈溪市| 永年县| 太白县| 罗甸县| 禹州市| 黑河市| 大埔区| 万州区| 宝山区| 金塔县| 湘乡市| 勐海县| 江陵县| 邯郸市| 濉溪县|