本發(fā)明涉及代碼審核領域,更具體地,涉及一種基于歷史記錄的現(xiàn)代代碼審核人推薦方法。
背景技術:
隨著軟件工程領域的進一步發(fā)展,代碼數(shù)量和維護難度也隨之提高,以降低維護成本,提高代碼的質量和效率為目的的現(xiàn)代代碼審核受到越來越多人的重視。然而,從眾多的候選審核人中,為一段待審核的代碼找到最合適的審核人越來越成為制約現(xiàn)代代碼審核進一步發(fā)展的瓶頸。當前現(xiàn)有的審核人推薦方法主要分為兩種:基于路徑相似度的方法和基于代碼行審核記錄的方法?;诼窂较嗨贫鹊膶徍巳送扑]方法是依次將待審核代碼的路徑與審核記錄中已審核完畢的代碼路徑進行路徑相似度分析,以相似度為基準,利用傳播效用,從而確定歷史記錄中審核人的相應審核優(yōu)先級?;诖a行審核記錄的審核人推薦方法以修改的代碼行為單位,查找歷史記錄中審核同一行代碼的審核人,依據審核人對該行代碼的貢獻,從而確定推薦人的推薦次序。
其中,現(xiàn)有技術中,基于路徑相似度的代碼審核人推薦方法沒有考慮不同審核人對同一代碼不同時間段所表現(xiàn)出的專業(yè)度水平,該方法視參加審核的審核人的貢獻是一致的;與此同時,在衡量專業(yè)度的標準上,該方法僅僅考慮路徑相似度,忽略了其他反饋信息的重要性,導致算法整體的精確度不高;基于代碼行審核記錄的審核人推薦方法注重代碼行的修改審核信息,以代碼行為基本單位,然而在實際生產中,修改同一行代碼的情況比較少,對于缺少行修改審核信息的系統(tǒng),該方法表現(xiàn)出很大的不確定性。
技術實現(xiàn)要素:
本發(fā)明提供一種可靠性較高的基于歷史記錄的代碼審核人推薦方法。
為了達到上述技術效果,本發(fā)明的技術方案如下:
一種基于歷史記錄的代碼審核人推薦方法,包括以下步驟:
s1:基于歷史審核記錄,提取代碼更新日期、反饋和路徑信息,構建專業(yè)度模型;
s2:針對當前輸入的待審核代碼,提取路徑信息之后,通過字符串對比技術,獲取當前代碼與歷史紀錄中已審核代碼路徑的相似度;
s3:利用s1中得到的專業(yè)度模型,結合s2中得到的相似度構建基于權重的路徑相似度模型并輸出審核人的推薦序列。
進一步地,所述步驟s1的具體過程如下:
s11:輸入歷史審核記錄,以每個審核記錄為單位,提取審核記錄中的反饋、日期信息;
s12:利用s11中得到的數(shù)據構造專業(yè)度模型。
進一步地,所述步驟s11的過程如下:
s111:對每個歷史審核記錄,記錄當前審核信息的id號;
s112:提取每個歷史審核記錄中的路徑信息;
s113:統(tǒng)計審核人ri針對當前記錄所做反饋信息的總數(shù)量
其中,commenti表示審核人ri對當前記錄的一條反饋信息;
s114:統(tǒng)計審核人ri對本記錄所貢獻的工作日的總數(shù)量
其中,workdayi表示審核人ri在工作日workdayi對本記錄進行審核;
s115:查找當前審核記錄中審核人ri的最近反饋時間
其中,recent函數(shù)表示ri的最近反饋時間,
進一步地,所述步驟s12的過程如下:
s121:統(tǒng)計當前記錄反饋信息的總數(shù)量commentall:
其中rall={r0,r1,r2...,ri,...}表示曾經審核當前記錄的所有審核人的集合;
s122:統(tǒng)計針對當前記錄所貢獻的工作日的總數(shù)量workdayall:
s123:統(tǒng)計針對當前記錄中最近的反饋時間recencyall:
s124:利用s121-s123得到的數(shù)據計算不同審核人對當前記錄不同的專業(yè)度expertise(c,r):
其中,c為當前審核記錄,r表示審核人,expertise(c,r)為r在c中的專業(yè)度,它是隨著時間而變化的量,同時與審核人所做的貢獻有關。
進一步地,所述步驟s2中通過字符串對比技術,獲取當前代碼與歷史紀錄中已審核代碼路徑相似度的過程如下:
s21:將得到的路徑信息以反斜杠為分隔符進行分割;
s22:依據四種字符串對比技術,求得兩路徑的公共路徑filepathcommon,所述四種字符串是最長公共前綴、最長公共后綴、最長公共子串和最長公共序列:
filepathcommon=stringcomparison(cipathh,cnewpathk)
其中,cipathh∈filepathci,cnewpathk∈filepathcnew分別表示代碼ci和cnew的子路徑;
s23:利用得到的公共路徑filepathcommon,求得路徑間的相似度scoreci:
forcipathh∈filepathciandcnewpathk∈filepathcnewdo
scoreci+=filepathcommon/max(|cipathh|,|cnewpathk|)
scoreci=scoreci/(|filepathci|×|filepathcnew|)
其中,|cipathh|和|cnewpathk|表示子路徑被反斜杠分割之后的元素個數(shù)|filepathci|和|filepathcnew|分別表示待審核代碼ci和cnew子路徑的個數(shù)。
進一步地,所述步驟s3中提取已審核代碼的時間信息來計算其時間權重的過程是:
提取已審核代碼的時間信息,計算該代碼的時間權重scoretimeci:
其中,timeci表示代碼ci的最后更新時間,start_time和end_time取決于當前數(shù)據集的開始時間和結束時間,通常start_time取開始日期的前一天,scoretimeci∈(0,1]。
進一步地,所述步驟s3中構建基于權重的相似度度模型的過程如下:
s31:獲得給定代碼與已審核代碼路徑的相似度scoreci;
s32:獲得已審核代碼的審核人序列;
s33:根據s1中得到的專業(yè)度模型,得到審核人對給定代碼的專業(yè)度scorerj;
s34:把時間權重、路徑間的相似度以及審核人的專業(yè)度一一傳播到對應的審核人當中;
c[rj].score+=scoreci×scoretimeci×scorerj
其中,rj∈cir,cir為代碼ci的審核人序列。
進一步地,所述步驟s3中確定針對給定待審核代碼的審核人推薦序列的過程如下:
1)、對給定的待審核代碼的審核人序列進行排序,依次確定由四種字符串對比技術確定的四組序列;
2)、對四組字符串序列進行混合,確定對給定待審核代碼的審核人推薦序列。
與現(xiàn)有技術相比,本發(fā)明技術方案的有益效果是:
本發(fā)明利用歷史審核記錄中對代碼的反饋信息,綜合時間因素,依次確定不同審核人在不同時間對一段代碼的權重,同時結合路徑相似度分析,最終確定審核人的推薦序列;該方法提供了一種魯棒的代碼審核人推薦方法,它首先提取歷史紀錄中不同審核人對某一段代碼的反饋,綜合反饋的數(shù)量、日期、頻率等信息,確定不同審核人對一段代碼的專業(yè)性,然后使用基于路徑相似度的字符串對比方法,結合時間因素,利用傳播學原理,構建基于權重的路徑相似度模型,最后得到不同審核人對一段代碼的優(yōu)先級次序。
附圖說明
圖1為本發(fā)明方法流程圖。
具體實施方式
附圖僅用于示例性說明,不能理解為對本專利的限制;
為了更好說明本實施例,附圖某些部件會有省略、放大或縮小,并不代表實際產品的尺寸;
對于本領域技術人員來說,附圖中某些公知結構及其說明可能省略是可以理解的。
下面結合附圖和實施例對本發(fā)明的技術方案做進一步的說明。
實施例1
如圖1所示,一種基于歷史記錄的代碼審核人推薦方法,包括以下步驟:
(1)基于歷史審核記錄,提取代碼更新日期、反饋和路徑等信息,構建專業(yè)度模型;
(2)針對當前輸入的待審核代碼,提取路徑信息之后,通過字符串對比技術,獲取當前代碼與歷史紀錄中已審核代碼路徑的相似度;
(3)利用步驟(1)的專業(yè)度模型,在步驟(2)的基礎上,結合時間因素,構建基于權重的路徑相似度模型,最終輸出審核人的推薦序列。
下面詳細介紹(1)至(3)步驟:
所述步驟(1)包括以下步驟:
(1-1)輸入歷史審核記錄,以每個審核記錄為單位,提取審核記錄中的反饋、日期信息;
(1-2)對步驟(1-1)提取的數(shù)據,構造專業(yè)度模型;
所述步驟(1-1)的步驟如下:
(1-1-1)對每個歷史審核記錄,記錄當前審核信息的id號;
(1-1-2)提取每個歷史審核記錄中的路徑信息;
(1-1-3)統(tǒng)計審核人ri針對當前記錄所做反饋信息的總數(shù)量
其中,commenti表示ri為當前記錄所做的第i個反饋;
(1-1-4)統(tǒng)計審核人ri對本記錄所貢獻的工作日的總數(shù)量
其中,workdayi表示審核人ri在工作日workdayi對本記錄進行審核。
(1-1-5)查找當前審核記錄中審核人ri的最近反饋時間
其中,recent函數(shù)表示ri最近的反饋時間,
所述步驟(1-2)的步驟如下:
(1-2-1)根據步驟(1-1-2),統(tǒng)計針對當前記錄反饋信息的總數(shù)量commentall:
其中rall={r0,r1,r2...,ri,...}表示曾經審核當前記錄的所有審核人的集合。
(1-2-2)根據步驟(1-1-3),統(tǒng)計針對當前記錄所做投入的工作日的總數(shù)量workdayall:
(1-2-3)根據步驟(1-1-4),統(tǒng)計針對當前記錄中最近的反饋時間recencyall:
(1-2-4)根據步驟(1-2-1)、(1-2-2)和(1-2-3),計算不同審核人對當前記錄不同的專業(yè)度expertise(c,r):
其中,c為當前審核記錄,r表示審核人,expertise(c,r)為r在c中的專業(yè)度。它是隨著時間而變化的量,同時與審核人所做的貢獻有關。
所述步驟(2)的步驟如下:
(2-1)提取待審核代碼的路徑信息;
(2-2)依據四種字符串對比技術,構建路徑相似度模型,依次得出當前代碼的路徑與歷史紀錄中代碼路徑的相似度;
所述步驟(2-1)的步驟如下:
(2-1-1)采取類似步驟(1-1-2),提取待審核代碼的路徑信息。
所述步驟(2-2)的步驟如下:
(2-2-1)將步驟(2-1-1)和(1-1-2)中所得路徑信息以反斜杠為分隔符進行劃分;
(2-2-2)依據四種字符串對比技術(最長公共前綴、最長公共后綴、最長公共字串和最長公共序列),求得兩路徑的公共路徑filepathcommon:
filepathcommon=stringcomparison(cipathh,cnewpathk)(8)
其中,cipathh∈filepathci,cnewpathk∈filepathcnew分別表示代碼ci和cnew的子路徑;
(2-2-3)依據步驟(2-2-2)中的公共路徑filepathcommon,求得路徑間的相似度scoreci:
forcipathh∈filepathciandcnewpathk∈filepathcnewdo
scoreci+=filepathcommon/max(|cipathh|,|cnewpathk|)(9)
scoreci=scoreci/(|filepathci|×|filepathcnew|)(10)
其中,|cipathh|和|cnewpathk|表示子路徑被反斜杠劃分之后的元素個數(shù),|filepathci|和|filepathcnew|分別表示待審核代碼ci和cnew子路徑的個數(shù)。
所述步驟(3)的步驟如下:
(3-1)提取已審核代碼的時間信息;
(3-2)在步驟(1)、(2)的基礎上,結合步驟(3-1),構建基于權重的相似度模型;
(3-3)依據步驟(3-2),最終確定針對給定待審核代碼的審核人推薦序列。
所述步驟(3-1)的步驟如下:
(3-1-1)提取已審核代碼的時間信息,計算該代碼的時間權重scoretimeci:
其中,timeci表示代碼ci的最后更新時間,start_time和end_time取決于當前數(shù)據集的開始時間和結束時間,通常start_time取開始日期的前一天,由公式(11)可知,scoretimeci∈(0,1]。
所述步驟(3-2)的步驟如下:
(3-2-1)根據步驟(2)獲得給定代碼與已審核代碼路徑的相似度scoreci;
(3-2-2)根據步驟(2)獲得已審核代碼的審核人序列cir;
(3-2-3)根據步驟(1)的專業(yè)度模型,得到審核人對給定代碼的專業(yè)度scorerj;
(3-2-4)根據步驟(3-1-1)、(3-2-1)和(3-2-3),把時間權重、路徑間的相似度以及審核人的專業(yè)度一一傳播到對應的審核人當中;
c[rj].score+=scoreci×scoretimeci×scorerj(12)
其中,rj∈cir,cir為代碼ci的審核人序列。
所述步驟(3-3)的步驟如下:
(3-3-1)依據步驟(3-2-4),對給定的待審核代碼的審核人序列進行排序,依次確定由四種字符串對比技術確定的四組序列;
(3-3-2)對四組字符串序列進行混合;
(3-3-3)最終確定對給定待審核代碼的審核人推薦序列。
相同或相似的標號對應相同或相似的部件;
附圖中描述位置關系的用于僅用于示例性說明,不能理解為對本專利的限制;
顯然,本發(fā)明的上述實施例僅僅是為清楚地說明本發(fā)明所作的舉例,而并非是對本發(fā)明的實施方式的限定。對于所屬領域的普通技術人員來說,在上述說明的基礎上還可以做出其它不同形式的變化或變動。這里無需也無法對所有的實施方式予以窮舉。凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明權利要求的保護范圍之內。