本發(fā)明涉及一種基于本文混亂度的軟件問題報告分類方法。隨著開源社區(qū)的發(fā)展,開源社區(qū)中的問題管理工具中積累了海量的軟件問題報告數(shù)據(jù)。這些報告包含多種類型,混合在一起難以區(qū)分,例如軟件缺陷、特征需求等。良好的問題分類對于開發(fā)任務(wù)的管理有著巨大的作用,但傳統(tǒng)的人工分類方法開銷巨大,所以自動化的方法對于降低維護開銷,提高軟件開發(fā)與維護效率有著巨大的幫助。
背景技術(shù):
隨著開源運動的推廣,開發(fā)工具的支持,越來越多的人參與到開源軟件的開發(fā)中來,并提供自己的貢獻。在進行大眾貢獻時,向問題管理系統(tǒng)提交問題報告(issue)是開源用戶進行的最多的活動之一。然而,在大型的軟件項目中存在大量缺少分類標(biāo)注的問題報告,需要花費巨大的人工成本進行維護和管理。因此,如何通過自動化的方法,幫助軟件開發(fā)人員快速準(zhǔn)確的明確用戶提出的問題類型具有重要的意義。
目前很多研究都關(guān)注了軟件問題報告的分類技術(shù)。這類技術(shù)的一個基本思路基于問題報告的標(biāo)題和內(nèi)容通過文本挖掘方法構(gòu)建特征向量,然后使用機器學(xué)習(xí)方法來構(gòu)建自動的問題報告分類器模型。目前取得性能較高的方法主要可以分為兩類。第一類技術(shù)是的核心思想首先通過網(wǎng)絡(luò)爬蟲技術(shù),從流行的開源社區(qū)中的問題管理系統(tǒng)獲取海量的問題報告,分析報告文本(包括標(biāo)題、描述信息、討論等)中的結(jié)構(gòu)化語義特征,并建立相應(yīng)的向量特征模型,然后通過傳統(tǒng)的機器學(xué)習(xí)算法來建立分類器模型。第二類技術(shù)是在上述過程的基礎(chǔ)上結(jié)合文本挖掘技術(shù)與數(shù)據(jù)挖掘技術(shù),充分利用問題報告中的文本語義和結(jié)構(gòu)化信息來提高分類的準(zhǔn)確率。
上述的兩類分類技術(shù)能夠幫助軟件項目管理者較好地識別傳統(tǒng)軟件的問題報告類型,但是由于目前開源社區(qū)(如github、bitbucket等)所使用的問題管理系統(tǒng)更加輕量級,只需要用戶提供的簡單的文本描述信息,就能完成問題的報告。這樣一來,用戶提交報告的成本雖然被降低了,但也使得在進行問題分類時能夠利用的信息大大減少。除此之外,因為提交報告的門檻降低了,問題報告的質(zhì)量也受到了一定的影響。這些因素使得傳統(tǒng)分類器的訓(xùn)練過程受到了較大的影響,無法很好的適應(yīng)現(xiàn)有問題報告的新特性。
在當(dāng)前流行的問題管理系統(tǒng)中積累的語義信息逐漸豐富,涉及到項目管理員、問題的匯報者、問題參與的討論人員等,相應(yīng)的文本的混亂度也越來越大。根據(jù)上述現(xiàn)象,本發(fā)明提出了一種基于文本混亂度的問題報告分類方法,輔助軟件項目提升開發(fā)和維護的效率。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:提出一種基于文本混亂度的軟件問題報告分類方法。
為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下:
一種基于文本混亂度的軟件問題報告分類方法,該分類方法具體包括以下步驟:
步驟1:對github平臺進行數(shù)據(jù)采集,所采集的數(shù)據(jù)包括大眾提交的問題報告以及該報告的相關(guān)信息;
步驟2:數(shù)據(jù)集標(biāo)注,通過對問題報告的標(biāo)簽進行人工的抽樣分析,從而實現(xiàn)對數(shù)據(jù)集的標(biāo)注;
步驟3:對數(shù)據(jù)集進行預(yù)處理,包括對文本信息進行預(yù)處理,去除不需要的信息,并通過文本信息數(shù)字化,將文本信息轉(zhuǎn)化為可以進行計算處理的數(shù)字形式;
步驟4:分類模型構(gòu)建,利用已有的機器學(xué)習(xí)方法,構(gòu)建一個兩層的自動化問題報告分類器;
其中,第一層利用問題報告的文本信息進行構(gòu)建,并收集文本信息中的混亂度信息;第二層利用第一層的輸出結(jié)果以及問題報告的結(jié)構(gòu)化信息進行構(gòu)建,并最終對問題報告進行自動化分類。
作為本發(fā)明技術(shù)方案的進一步改進,所述步驟1包括:利用github提供的api,通過腳本從github中爬取軟件項目與問題報告的全面信息,抽取出報告中相關(guān)的數(shù)據(jù);并通過所需的目標(biāo)字段信息獲取結(jié)構(gòu)化的數(shù)據(jù),構(gòu)建token以實現(xiàn)持續(xù)爬取所需的數(shù)據(jù)信息。
作為本發(fā)明技術(shù)方案的進一步改進,所述步驟2包括,
步驟2.1:將具有額外信息的問題報告的標(biāo)簽進行拆分,形成二維向量形式<c,name>,其中c表示這個標(biāo)簽屬于的具體類別是什么,name則表示這個標(biāo)簽中的具體信息,將同屬于一個類別(c)下的所有標(biāo)簽進行聚合形成一個標(biāo)簽組(group),完成問題報告標(biāo)簽的初步聚合;
步驟2.2:通過計算不同類型標(biāo)簽的相似度,將相似度較高的類型進行聚合,其中相似度的計算方法為:
similarity=group1∩group2/min(group1,group2)
當(dāng)兩個不同類型標(biāo)簽組(group1,group2)的相似度計算超過相似度閾值時,將該兩個不同的標(biāo)簽組進行合并形成一個組,從而進一步的將分散的類型標(biāo)簽進行聚合;
步驟2.3:將人工分析能夠表示問題報告類型的標(biāo)簽分為缺陷以及非缺陷,進而將具有這些標(biāo)簽的問題報告標(biāo)注為響應(yīng)的類型。
作為本發(fā)明技術(shù)方案的進一步改進,所述步驟3包括,
步驟3.1:對報告中的所有文本進行字母大小寫轉(zhuǎn)換,全部改成小寫。
步驟3.2:去除文本中的停用詞,并進行詞性轉(zhuǎn)換。
步驟3.3:利用空間向量模型將問題報告數(shù)字化,通過將問題報告進行分詞處理,將每個問題報告轉(zhuǎn)化為單詞的向量形式,并通過tf-idf算法計算每個詞在向量中的權(quán)重。
作為本發(fā)明技術(shù)方案的進一步改進,所述步驟4包括,
步驟4.1:利用svm模型,通過文本信息構(gòu)建第一層分類器,選擇概率輸出,并收集文本混亂度信息;
步驟4.2:收集問題報告的報告者信息,并與第一層中獲取的文本混亂度信息綜合作為第二層的輸入,并以此使用線性回歸方法構(gòu)建分類模型。
作為本發(fā)明技術(shù)方案的進一步改進,所述步驟4.1中,所述文本混亂度信息包括:
缺陷概率:問題報告預(yù)測為缺陷的概率;
句子數(shù)量:通過句子劃分將問題報告劃分為至少一個句子,并統(tǒng)計該問題報告中的句子數(shù)量;
最大缺陷概率:最像缺陷的句子預(yù)測為缺陷的概率;
最小缺陷概率:最不像缺陷的句子預(yù)測為缺陷概率;
非缺陷位置:最不像缺陷的句子在所有語句中的位置;
缺陷句子數(shù)量:預(yù)測為缺陷的句子數(shù)量;
非缺陷句子數(shù)量:預(yù)測為非缺陷的句子數(shù)量;
語義轉(zhuǎn)變次數(shù):不同句子的語義信息從缺陷轉(zhuǎn)變?yōu)榉侨毕莸拇螖?shù);
語義混亂度:首先,采用句子切分技術(shù)將問題報告進行拆分,形成句子序列。接著,將句子序列輸入svm模型,獲得序列中每個句子預(yù)測為缺陷的概率pi。最后,采用自然語言處理領(lǐng)域的混亂度計算方法,計算該句子序列的語義混亂度,即問題報告對應(yīng)的語義混亂度,計算公式如下:
作為本發(fā)明技術(shù)方案的進一步改進,步驟4.2中,具體的報告者信息包括:
是否核心成員:如果是核心團隊的成員,該特征置為1,否則,置為0;
項目內(nèi)問題報告數(shù)量:在該項目內(nèi)報告者提交過的問題報告數(shù)量;
社區(qū)內(nèi)問題報告數(shù)量:在github平臺中報告者提交過的問題報告數(shù)量;
項目內(nèi)評論數(shù)量:在該項目內(nèi)報告者提交過的問題報告評論數(shù)量;
社區(qū)內(nèi)評論數(shù)量:在github平臺中報告者提交過的問題報告評論數(shù)量;
粉絲數(shù)量:在github平臺中報告者具有的粉絲(follower)數(shù)量;
注冊時間:報告者從注冊至今的時間,轉(zhuǎn)化為時間戳形式。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
本發(fā)明面向開源社區(qū)中問題管理系統(tǒng)中混雜的問題報告,提出了一種基于文本混亂度的軟件問題報告分類方法,幫助在項目開發(fā)過程中的項目管理人員更好地對軟件開發(fā)任務(wù)進行分類管理,提高軟件項目的開發(fā)和維護效率。
附圖說明
圖1為本發(fā)明基于文本混亂度的自動分類模型結(jié)構(gòu)圖。
圖2為本發(fā)明基于文本混亂度的軟件問題報告分類方法流程圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明具體實施方法提供一種基于文本混亂度的軟件問題報告分類方法,如圖2所示,該方法包括如下步驟:
步驟1、數(shù)據(jù)收集。
利用github提供的api,通過腳本從github中爬取軟件項目與問題報告的全面信息,并抽取出報告中相關(guān)的數(shù)據(jù),包括問題標(biāo)題、描述內(nèi)容、討論內(nèi)容、屬性標(biāo)簽、報告者信息等。通過api獲取的github數(shù)據(jù)為json格式,因此本發(fā)明通過所需的目標(biāo)字段信息獲取結(jié)構(gòu)化的數(shù)據(jù)。此外,github通過token的形式來限制api的使用時間和頻率,為此,本發(fā)明通過構(gòu)建token池的方式實現(xiàn)持續(xù)爬取所需的數(shù)據(jù)信息。
步驟2、數(shù)據(jù)集標(biāo)注。
通過對標(biāo)簽信息進行分析,從標(biāo)簽信息中抽取其類型信息,從而將扁平化的標(biāo)簽變?yōu)榻Y(jié)構(gòu)化的標(biāo)簽。進而在表示問題報告類型的標(biāo)簽屬性中選擇能夠表示問題報告是否為缺陷信息的標(biāo)簽對問題報告進行標(biāo)注,從而構(gòu)建所需的標(biāo)注數(shù)據(jù)集。
具體步驟如下:
步驟2.1:部分項目中問題報告的標(biāo)簽具有額外信息,如“[type]bug”,“[type]enhancement”。將具有額外信息的問題報告的標(biāo)簽進行拆分,形成二維向量形式<c,name>,其中c表示這個標(biāo)簽屬于的具體類別是什么,name則表示這個標(biāo)簽中的具體信息,然后將同屬于一個類別(c)下的所有標(biāo)簽進行聚合形成一個標(biāo)簽組(group),完成問題報告標(biāo)簽的初步聚合。
步驟2.2:通過計算不同類型(c)標(biāo)簽的相似度,將相似度較高的類型進行聚合,其中相似度的計算方法為:
similarity=group1∩group2/min(group1,group2)
當(dāng)兩個不同類型標(biāo)簽組的相似度計算超過相似度閾值時就將這兩個組進行合并形成一個組,從而進一步的將分散的類型標(biāo)簽進行聚合。
步驟2.3:人工分析能夠表示問題報告類型的標(biāo)簽(如bug,feature,enhancement等),將其分為缺陷以及非缺陷,進而將具有這些標(biāo)簽的問題報告標(biāo)注為響應(yīng)的類型。
步驟3、對數(shù)據(jù)集進行預(yù)處理。
步驟3.1:對報告中的所有文本進行字母大小寫轉(zhuǎn)換,全部改成小寫。
步驟3.2:去除文本中的停用詞,并進行詞性轉(zhuǎn)換。
步驟3.3:利用空間向量模型將問題報告數(shù)字化,通過將問題報告進行分詞處理,將每個問題報告轉(zhuǎn)化為單詞的向量形式,并通過tf-idf算法計算每個詞在向量中的權(quán)重。
步驟4、模型構(gòu)建。
如圖1所示,本發(fā)明分類模型構(gòu)建過程分為兩個階段,在第一個階段,通過預(yù)測模型的概率輸出獲取問題報告的混亂度信息。在第二階段,除了收集第一階段產(chǎn)生的混亂度信息,還需要收集問題報告人的開發(fā)信息,并將該混亂度信息和該開發(fā)信息合并,統(tǒng)一作為問題報告的特征構(gòu)建第二層分類模型。
具體步驟如下:
步驟4.1:利用svm模型,通過文本信息構(gòu)建第一層分類器,選擇概率輸出,并收集文本混亂度信息,包括:
缺陷概率:問題報告預(yù)測為缺陷的概率;
句子數(shù)量:通過句子劃分將問題報告劃分為至少一個句子,并統(tǒng)計該問題報告中的句子數(shù)量;
最大缺陷概率:最像缺陷的句子預(yù)測為缺陷的概率;
最小缺陷概率:最不像缺陷的句子預(yù)測為缺陷概率;
非缺陷位置:最不像缺陷的句子在所有語句中的位置,即第幾句;
缺陷句子數(shù)量:預(yù)測為缺陷的句子數(shù)量;
非缺陷句子數(shù)量:預(yù)測為非缺陷的句子數(shù)量;
語義轉(zhuǎn)變次數(shù):不同句子的語義信息從缺陷轉(zhuǎn)變?yōu)榉侨毕莸拇螖?shù);
語義混亂度:首先,采用句子切分技術(shù)將問題報告進行拆分,形成句子序列。接著,將句子序列輸入svm模型,獲得序列中每個句子預(yù)測為缺陷的概率pi。最后,采用自然語言處理領(lǐng)域的混亂度計算方法,計算該句子序列的語義混亂度,即問題報告對應(yīng)的語義混亂度,計算公式如下:
步驟4.2:收集問題報告的報告者信息,并與第一層中獲取的文本混亂度信息綜合作為第二層的輸入,并以此構(gòu)建分類模型。其中這里使用線性回歸方法構(gòu)建模型。具體的報告者信息包括:
是否核心成員:如果是核心團隊的成員,該特征置為1,否則,置為0;
項目內(nèi)問題報告數(shù)量:在該項目內(nèi)報告者提交過的問題報告數(shù)量;
社區(qū)內(nèi)問題報告數(shù)量:在github平臺中報告者提交過的問題報告數(shù)量;
項目內(nèi)評論數(shù)量:在該項目內(nèi)報告者提交過的問題報告評論數(shù)量;
社區(qū)內(nèi)評論數(shù)量:在github平臺中報告者提交過的問題報告評論數(shù)量;
粉絲數(shù)量:在github平臺中報告者具有的粉絲(follower)數(shù)量;
注冊時間:報告者從注冊至今的時間,轉(zhuǎn)化為時間戳形式。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素”。
盡管已經(jīng)示出和描述了本發(fā)明的實施例,對于本領(lǐng)域的普通技術(shù)人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同物限定。