陸金婷,張嘉烽
(1.江蘇工程職業(yè)技術(shù)學(xué)院,江蘇 南通 226007;2.中天射頻電纜有限公司,江蘇 南通 226009)
在軟件開(kāi)發(fā)的過(guò)程中,軟件開(kāi)發(fā)人員常常會(huì)遇到各種各樣的軟件缺陷。軟件缺陷的存在,不僅會(huì)導(dǎo)致計(jì)算機(jī)程序或軟件系統(tǒng)無(wú)法正常實(shí)現(xiàn)其功能,還會(huì)導(dǎo)致軟件制品不能滿足軟件使用者的需求,從而降低了用戶使用軟件的滿意度。軟件缺陷中包含了大量軟件開(kāi)發(fā)過(guò)程中發(fā)生錯(cuò)誤時(shí)的數(shù)據(jù)信息。這些數(shù)據(jù)信息包含著豐富的與軟件質(zhì)量、技術(shù)、資源等相關(guān)的信息。因此,對(duì)軟件缺陷信息進(jìn)行有效的處理分析對(duì)軟件缺陷的修復(fù)以及軟件質(zhì)量的保證具有重要意義。
目前,軟件缺陷常常以缺陷報(bào)告的形式被提交和管理。在諸如Firefox、Eclipse等大型軟件項(xiàng)目中,通常使用缺陷跟蹤系統(tǒng)(BTS)來(lái)存儲(chǔ)、追蹤缺陷數(shù)據(jù)。為方便軟件開(kāi)發(fā)人員快速檢索所需缺陷信息,BTS自身配備了搜索引擎。當(dāng)遇到新缺陷時(shí),開(kāi)發(fā)人員可以直接搜索報(bào)錯(cuò)信息,也可以組織語(yǔ)言表達(dá)需求并輸入到搜索引擎檢索。搜索引擎使用關(guān)鍵字匹配技術(shù)檢索BTS并反饋相關(guān)缺陷信息。一般來(lái)說(shuō),檢索到的信息應(yīng)與開(kāi)發(fā)人員的需要關(guān)聯(lián)性很大,應(yīng)該能夠有效解決開(kāi)發(fā)人員遇到的缺陷,但事實(shí)并非如此。BTS自帶的搜索引擎所采用的關(guān)鍵字匹配技術(shù)常常只匹配了用戶檢索意圖中某個(gè)或多個(gè)關(guān)鍵詞,甚至是某個(gè)字符,導(dǎo)致返回的結(jié)果包含了很多錯(cuò)誤信息和無(wú)效信息,使開(kāi)發(fā)人員需要花費(fèi)大量的時(shí)間和精力去鑒別返回的內(nèi)容是否滿足需求。此外,缺陷數(shù)據(jù)之間常常包含著各種各樣顯式或隱式的關(guān)聯(lián),這種關(guān)鍵字匹配技術(shù)只是單一地比較了缺陷數(shù)據(jù)本身基于單詞級(jí)別的相似度,并未考慮到缺陷信息語(yǔ)義之間的匹配和關(guān)聯(lián)。
基于上述問(wèn)題,本文提出了軟件缺陷畫(huà)像系統(tǒng),用于軟件缺陷信息檢索。軟件缺陷畫(huà)像是一種模擬用戶畫(huà)像衍生出來(lái)的方法[1]。其主要工作是給軟件缺陷信息打標(biāo)簽,并根據(jù)用自然語(yǔ)言描述的關(guān)于軟件缺陷的描述語(yǔ)句來(lái)確定軟件缺陷,然后檢索軟件缺陷庫(kù)中的相關(guān)信息,挖掘軟件缺陷的潛在信息,并以可視化的方式對(duì)軟件缺陷進(jìn)行畫(huà)像處理。從用戶體驗(yàn)上來(lái)看,設(shè)計(jì)一個(gè)軟件缺陷畫(huà)像系統(tǒng)有助于用戶在眾多繁雜的缺陷數(shù)據(jù)中獲取最有效的缺陷信息,從而快速地認(rèn)識(shí)缺陷,對(duì)后續(xù)的缺陷修復(fù)和軟件功能完善有重要意義。
軟件缺陷畫(huà)像系統(tǒng)的核心價(jià)值在于了解軟件缺陷,挖掘軟件缺陷信息中隱含的信息,以便軟件開(kāi)發(fā)人員能夠更好地認(rèn)識(shí)理解軟件缺陷。系統(tǒng)的功能模塊包含普通畫(huà)像和深度畫(huà)像2個(gè)模塊。普通畫(huà)像模塊包含語(yǔ)義匹配和關(guān)鍵詞抽取2個(gè)功能;深度畫(huà)像模塊包含實(shí)體識(shí)別、關(guān)系抽取以及相似性缺陷推薦3個(gè)功能,如圖1所示。
圖1 軟件缺陷畫(huà)像系統(tǒng)的功能模塊
普通畫(huà)像模塊是本系統(tǒng)的基礎(chǔ)功能模塊,通過(guò)將系統(tǒng)中用戶輸入的缺陷描述轉(zhuǎn)換成語(yǔ)義向量,并與歷史缺陷庫(kù)中的缺陷信息進(jìn)行簡(jiǎn)單的向量計(jì)算,完成相應(yīng)的相似度計(jì)算和關(guān)鍵詞提取等任務(wù)。深度畫(huà)像模塊從理解缺陷信息的角度出發(fā),采用較先進(jìn)的機(jī)器學(xué)習(xí)技術(shù)和神經(jīng)網(wǎng)絡(luò)知識(shí),以實(shí)體和實(shí)體關(guān)系標(biāo)識(shí)缺陷,并基于實(shí)體和實(shí)體關(guān)系推薦與原缺陷相關(guān)的缺陷,以補(bǔ)充原缺陷信息,這對(duì)后續(xù)的缺陷修復(fù)工作具有重大意義。
普通畫(huà)像模塊包含語(yǔ)義匹配和關(guān)鍵詞抽取2個(gè)功能,屬于本系統(tǒng)的基礎(chǔ)功能。
語(yǔ)義匹配功能采用免費(fèi)的Python第三方庫(kù)Gensim(topic modeling for humans)模塊實(shí)現(xiàn)。Gensim模塊可以擴(kuò)展語(yǔ)義,能夠完成基于語(yǔ)義結(jié)構(gòu)的純文本文檔分析以及檢索文檔語(yǔ)義相似等任務(wù),具體操作步驟如下:(1)針對(duì)缺陷庫(kù)中的每一個(gè)缺陷,把缺陷的基本屬性(Product、Component、Reporter等)、Summary和Description信息放到一個(gè)文件中,并利用Gensim模塊里面jieba分詞工具完成分詞、過(guò)濾停用詞等操作,將其處理成每個(gè)缺陷對(duì)應(yīng)的向量表示;(2)將用戶輸入的缺陷描述視為某個(gè)缺陷信息,利用Gensim模塊分詞、去停用詞,并將其轉(zhuǎn)換成對(duì)應(yīng)的向量;(3)從向量的角度出發(fā),利用Gensim模塊里面的similarities包計(jì)算系統(tǒng)用戶輸入的缺陷描述和缺陷庫(kù)中每個(gè)缺陷的相似度,得到相似度最高的缺陷。該缺陷視為根據(jù)系統(tǒng)輸入的缺陷描述信息檢索到的缺陷,可以根據(jù)該缺陷的相關(guān)信息輔助理解新缺陷。
本系統(tǒng)使用TF-IDF算法來(lái)抽取軟件缺陷的關(guān)鍵詞,TF-IDF是一種用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)。TF的意思是詞頻(Term Frequency);IDF的意思是逆文本頻率指數(shù)(Inverse Document Fre-quency)。詞頻TF表示關(guān)鍵詞在文檔中出現(xiàn)的頻率;逆文本頻率指數(shù)IDF表示某個(gè)詞的常見(jiàn)程度。根據(jù)公式(1)來(lái)抽取缺陷關(guān)鍵詞:
TF-IDF=TF×IDF
(1)
為完成缺陷關(guān)鍵詞的挖掘,需確定數(shù)據(jù)源。此處所采用的數(shù)據(jù)源是指語(yǔ)義匹配功能所篩選出語(yǔ)音相似度最高的缺陷,對(duì)其進(jìn)行分詞、過(guò)濾掉常見(jiàn)詞并完成缺陷關(guān)鍵詞的抽取。
深度畫(huà)像模塊包含實(shí)體識(shí)別、關(guān)系抽取以及相似性缺陷推薦3個(gè)功能,屬于深度的知識(shí)分析加工。
實(shí)體識(shí)別功能旨在識(shí)別缺陷文本中具有領(lǐng)域特定含義的單詞,例如:“Ruby”“C#”“Python”“Pascal”“Java”等,這些是屬于計(jì)算機(jī)領(lǐng)域的編程語(yǔ)言類別的單詞。明確實(shí)體位置并準(zhǔn)確識(shí)別出實(shí)體所屬的類別有助于了解缺陷文本中所包含的實(shí)體語(yǔ)義關(guān)系,是實(shí)體識(shí)別工作必須完成的目標(biāo)。此處采用Zhou等[2]提出的方法識(shí)別缺陷文本中的實(shí)體。
關(guān)系抽取功能旨在確定特定實(shí)體對(duì)之間的關(guān)系,以便能夠明確缺陷語(yǔ)句的語(yǔ)義關(guān)系。例如:針對(duì)缺陷文本“WhimbooreportedtheBug1848799”,在識(shí)別了實(shí)體“Whimboo(People)”和“Bug1848799(BugID)”后,需要能夠快速明確2個(gè)實(shí)體之間的關(guān)系,以便能夠確定該缺陷文本的語(yǔ)義信息,否則“Whimboo(People)”和“Bug1848799(BugID)”這對(duì)實(shí)體之間可能存在多種關(guān)系,無(wú)法界定它們之間的關(guān)系,對(duì)理解缺陷文本信息的實(shí)際含義造成困難。此處采用馮艷紅等[3]提出的方法抽取實(shí)體對(duì)之間的關(guān)系,通過(guò)謂詞并結(jié)合語(yǔ)境來(lái)表述實(shí)體關(guān)系。
相似性缺陷推薦功能旨在針對(duì)用戶輸入的缺陷描述信息,基于實(shí)體和實(shí)體關(guān)系進(jìn)行相似度計(jì)算,從而推薦相關(guān)的缺陷,用來(lái)補(bǔ)充用戶所需缺陷的相關(guān)信息,輔助理解該缺陷。
在完成了實(shí)體識(shí)別和關(guān)系抽取后,需要構(gòu)建以實(shí)體和實(shí)體之間關(guān)系為基礎(chǔ)的三元組,以Mozilla項(xiàng)目中ID為1848799的某條缺陷信息“WhimbooreportedtheBug1848799”為例,在識(shí)別了“Whimboo(People)”和“Bug1848799(BugID)”2個(gè)實(shí)體以及“BugReporter”這個(gè)實(shí)體關(guān)系后,需要將其表示成三元組的形式“
在完成缺陷三元組構(gòu)建的基礎(chǔ)上,采用TF-IDF和Word Embedding(詞嵌)2種向量分別計(jì)算缺陷三元組的相似度得分,并將其結(jié)果相加得到最終的相似度。根據(jù)TF-IDF計(jì)算相似度的流程,如圖2所示。在將用戶輸入的缺陷描述信息轉(zhuǎn)換成缺陷三元組后,再將其轉(zhuǎn)換成對(duì)應(yīng)的TF-IDF向量A;同時(shí),將Bug歷史缺陷庫(kù)表示為多個(gè)缺陷對(duì)應(yīng)的三元組列表后,再將其轉(zhuǎn)換成每個(gè)缺陷對(duì)應(yīng)的TF-IDF向量B。在得到缺陷文本對(duì)應(yīng)的TF-IDF向量后,使用余弦相似度來(lái)計(jì)算用戶輸入的缺陷信息和Bug庫(kù)中每一個(gè)歷史缺陷基于TF-IDF向量的相似度Score1。余弦相似度計(jì)算如公式(2)所示,其中A、B均為T(mén)F-IDF向量,Score1計(jì)算結(jié)果越大,表明A、B2個(gè)向量越相似,則對(duì)應(yīng)的缺陷文本相似程度越高。
圖2 根據(jù)TF-IDF計(jì)算相似度流程
(2)
根據(jù)Word Embedding向量計(jì)算缺陷文本相似度的流程設(shè)計(jì),如圖3所示。與利用TF-IDF向量計(jì)算缺陷文本相似度的流程類似:首先,需要用戶輸入的缺陷描述文本轉(zhuǎn)換成對(duì)應(yīng)的Word Embedding向量C,并將歷史缺陷庫(kù)中的每個(gè)缺陷轉(zhuǎn)換成對(duì)應(yīng)的Word Embedding向量D;其次,使用余弦相似度來(lái)計(jì)算用戶輸入的缺陷信息和歷史缺陷庫(kù)中每一個(gè)缺陷基于Word Embedding向量的相似度得分Score2。
圖3 根據(jù)Word Embedding計(jì)算相似度流程
對(duì)于用戶輸入的缺陷描述和Bug歷史缺陷庫(kù)中的缺陷,它們的相似度得分Score2可以由公式(3)計(jì)算。其中,Word Embedding向量C代表用戶輸入的缺陷描述對(duì)應(yīng)的詞嵌向量;Word Embedding向量D代表歷史缺陷庫(kù)中某個(gè)缺陷對(duì)應(yīng)的詞嵌向量。
(3)
獲取到上述相似度得分Score1和Score2,由于它們采用不同的方法計(jì)算,且均考慮到了缺陷信息的文本含義,所以需要將它們?nèi)诤仙梢粋€(gè)最終的相似度得分,依據(jù)最終的相似度分?jǐn)?shù)排序推薦與用戶輸入相似的缺陷報(bào)告。由于TF-IDF和Word Embedding 2種方法均是基于缺陷文本計(jì)算相似度,方法本身不分好壞,所以將這2種方法在最終的缺陷相似度得分中所占比重設(shè)置為0.5,故最終的缺陷相似度得分Score計(jì)算公式,如公式(4)所示。
Score=Score1×0.5+Score2×0.5
(4)
本文從缺陷文本信息語(yǔ)義理解的角度設(shè)計(jì)了軟件缺陷畫(huà)像系統(tǒng)。該系統(tǒng)包含普通畫(huà)像和深度畫(huà)像2個(gè)模塊,集多種功能于一體,為軟件開(kāi)發(fā)和維護(hù)領(lǐng)域的研究人員高效獲取所需缺陷信息提供了便利,提高了用戶滿意度。后續(xù)可通過(guò)構(gòu)建缺陷知識(shí)圖譜進(jìn)一步提升缺陷知識(shí)獲取效率,推動(dòng)缺陷修復(fù)進(jìn)程。