韓俊明,王 煒,2+,李 彤,2,何 云
1.云南大學(xué) 軟件學(xué)院,昆明 650091
2.云南省軟件工程重點(diǎn)實(shí)驗(yàn)室,昆明 650091
面向開源軟件的演化確認(rèn)方法*
韓俊明1,王 煒1,2+,李 彤1,2,何 云1
1.云南大學(xué) 軟件學(xué)院,昆明 650091
2.云南省軟件工程重點(diǎn)實(shí)驗(yàn)室,昆明 650091
軟件演化;確認(rèn);主題模型;開源軟件
軟件系統(tǒng)的構(gòu)造性和演化性是軟件系統(tǒng)的兩個(gè)基本屬性,特別是開源軟件由于其自身的特點(diǎn)導(dǎo)致了如何確認(rèn)其演化活動(dòng)成為當(dāng)前產(chǎn)業(yè)界和學(xué)術(shù)界研究的熱點(diǎn)。
如今,軟件的應(yīng)用越來越廣泛,已經(jīng)深入到各個(gè)行業(yè)內(nèi)部,成為大部分工作中不可替代的一部分,特別是開源軟件,它的產(chǎn)生和發(fā)展是一種社會(huì)現(xiàn)象,也是一種經(jīng)濟(jì)現(xiàn)象[1]。開源軟件廣義上的理解,就是讓軟件的使用者能夠得到其源代碼,還可以按照自己的需要修改源代碼,并發(fā)布給別人使用。
但是,開源軟件相較傳統(tǒng)軟件,在開發(fā)過程上都有著極大的不同[2]。
從開發(fā)的角度與傳統(tǒng)方法相比較,首先在項(xiàng)目計(jì)劃上,開源軟件就沒有嚴(yán)格的時(shí)間、人員和資金等管理信息;其次在需求分析方面,傳統(tǒng)軟件開發(fā)中,需求一直都是核心問題,而對于開源軟件的開發(fā),項(xiàng)目大多時(shí)候是因?yàn)槟承┤税炎约旱南敕ü加诒?,卻沒有明確的文檔信息;然后在設(shè)計(jì)和實(shí)現(xiàn)方面,分散開發(fā)是開源軟件的一個(gè)明顯特點(diǎn),因此不會(huì)產(chǎn)生詳細(xì)或統(tǒng)一的開發(fā)文檔;最后在測試與維護(hù)上,開源軟件由于開發(fā)和使用人數(shù)眾多,雖然測試缺乏嚴(yán)密性,但錯(cuò)誤的修復(fù)人員也是極其龐大的,許多錯(cuò)誤在很短時(shí)間內(nèi)就能得到修復(fù)。
從開發(fā)過程的角度來說,傳統(tǒng)的軟件開發(fā)方法認(rèn)為,好的軟件開發(fā)過程就能開發(fā)出高質(zhì)量的軟件,但對于開源軟件來說,這個(gè)假設(shè)是不成立的,因?yàn)殚_源軟件的開發(fā)過程很難做到統(tǒng)一管理,原因在于:(1)對于開源軟件,開發(fā)人、使用人和維護(hù)人三者往往不會(huì)存在于一個(gè)組織內(nèi),因此缺少相應(yīng)的文檔進(jìn)行軟件演化記錄,對于使用人而言,就很難去確認(rèn)一個(gè)演化是否與演化意圖相符合。(2)開源軟件采用群智開發(fā)模式,無法或很難實(shí)現(xiàn)開發(fā)過程的建模,導(dǎo)致難以使用基于過程的軟件確認(rèn),而當(dāng)前研究大多關(guān)注于對演化過程的驗(yàn)證,并未對演化產(chǎn)品是否與演化需求一致進(jìn)行驗(yàn)證。(3)目前大型的開源軟件,對其進(jìn)行修改的人很多,因此會(huì)出現(xiàn)缺少或沒有相關(guān)的文檔,導(dǎo)致無法對演化進(jìn)行確認(rèn)。
當(dāng)前開源軟件還被認(rèn)為是一種獲取可信軟件的新途徑[3],同時(shí)開源軟件價(jià)格低廉和性能可靠兩個(gè)特點(diǎn),而被認(rèn)為是專有軟件的可替代品,其發(fā)展和應(yīng)用都得到了一定程度上的提高,許多組織都投身于這些軟件的開發(fā)中,但是因?yàn)檫@些軟件的開發(fā)和演化大多都是由不同的組織和個(gè)人完成,所以對軟件的可靠性或演化的真實(shí)性無法進(jìn)行確認(rèn)。特別是近年來,開源活動(dòng)得到了學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注,開源就意味著可以獲取到軟件的源代碼,利用這些源代碼可以迅速完成產(chǎn)品開發(fā)。同時(shí)開源軟件的貢獻(xiàn)者一般互相不認(rèn)識,他們在開源社區(qū)內(nèi)進(jìn)行高效的合作來完成代碼的相關(guān)工作,因此開源軟件的演化活動(dòng)就變得廣泛且不可避免。
綜上所述,由于開源軟件具有與傳統(tǒng)開發(fā)模式迥異的特征,導(dǎo)致了傳統(tǒng)軟件確認(rèn)方法無法實(shí)現(xiàn)對開源軟件的自然延伸。因此急需一種面向開源軟件的演化確認(rèn)方法。同時(shí),相關(guān)文獻(xiàn)[4]指出,過去對軟件演化的研究大多把重點(diǎn)放在了軟件開發(fā)或演化過程上,而對于演化后的確認(rèn)工作卻很少有人開展。
本文利用主題模型進(jìn)行了研究,提出了一種可以對開源軟件進(jìn)行確認(rèn)的方法,把源代碼按不同粒度進(jìn)行聚類分析,每一個(gè)聚類結(jié)果就代表了源代碼的一個(gè)主題,而每一個(gè)主題表示軟件系統(tǒng)中的一個(gè)功能模塊,從而把確認(rèn)工作轉(zhuǎn)換為建立功能模塊與演化需求之間的映射關(guān)系。
本文方法具有如下特點(diǎn):
(1)針對目前研究較少的開源軟件的演化確認(rèn),將主題模型應(yīng)用于軟件源代碼的處理,并提出了一套確認(rèn)方法。
(2)已演化的和沒有演化的開源軟件在實(shí)驗(yàn)結(jié)果中能進(jìn)行很好的區(qū)分,并與其他可以進(jìn)行確認(rèn)的方法進(jìn)行對比,結(jié)果表明本文方法更好。
(3)對文中所用方法,已給出相應(yīng)的確認(rèn)工具。
本文組織結(jié)構(gòu)如下:第2章介紹軟件確認(rèn)技術(shù)的發(fā)展和所用到的相關(guān)方法;第3章描述本文所用的方法;第4章介紹面向開源軟件的演化確認(rèn)方法;第5章介紹實(shí)驗(yàn)所用到的工具;第6章具體描述實(shí)驗(yàn)結(jié)果,對結(jié)果進(jìn)行分析,并給出實(shí)驗(yàn)結(jié)論;第7章對實(shí)驗(yàn)進(jìn)行評價(jià),并闡述未來的研究方向。
1978年,首次提出了軟件確認(rèn)技術(shù)[5],當(dāng)時(shí)軟件應(yīng)用具有不普及,軟件規(guī)模小和演化慢等特點(diǎn),因此當(dāng)時(shí)研究人員認(rèn)為對于一個(gè)軟件系統(tǒng),其驗(yàn)證的關(guān)鍵在于需要減少復(fù)雜性和大量細(xì)節(jié),基于該認(rèn)識,提出了確認(rèn)軟件演化需要對抽象數(shù)據(jù)類型進(jìn)行驗(yàn)證。若干年后,研究人員在開發(fā)重要的系統(tǒng)時(shí),意識到保證軟件質(zhì)量可靠的主要手段還是確認(rèn),同時(shí)針對特定的軟件確認(rèn)提出了一種從軟件開發(fā)方法到測試的技術(shù)[6]。1992年,軟件行業(yè)發(fā)生了巨大的變化,計(jì)算機(jī)和因特網(wǎng)的普及推動(dòng)了軟件的大量產(chǎn)生,人們開始對軟件的開發(fā)過程研究感興趣,并提出了基于Petri網(wǎng)的軟件確認(rèn)技術(shù)[7],并對該方法的前景和驗(yàn)證過程進(jìn)行詳細(xì)描述,作者認(rèn)為Petri網(wǎng)能在一定程度上對軟件過程進(jìn)行驗(yàn)證,但對演化結(jié)果卻無法確認(rèn)。在隨后的十幾年間,科研人員把主要的研究工作放在了使用形式化方法對過程進(jìn)行確認(rèn)。文獻(xiàn)[8]對形式化驗(yàn)證方法進(jìn)行了總結(jié),將該方法分為兩類:(1)靜態(tài)分析方法,該方法能自動(dòng)計(jì)算其行為信息而不用去執(zhí)行程序;(2)軟件模型檢測法,該方法實(shí)際上是一個(gè)算法,用于確認(rèn)一個(gè)系統(tǒng)的模型是否滿足正確性規(guī)范。隨后的幾年里,軟件高度普及化,因此人們把確認(rèn)的主要研究工作放在了模型相關(guān)方法上。文獻(xiàn)[9-10]分別采用了有界模型和無界模型的方法對軟件進(jìn)行確認(rèn);文獻(xiàn)[11]則對模型檢測法進(jìn)行了詳盡的描述,并介紹了相關(guān)的工具;而文獻(xiàn)[12]指出軟件確認(rèn)是一項(xiàng)非常耗時(shí)的工作,現(xiàn)存的或者新的代碼必須要加上注釋以說明其用意,但是目前開源軟件的大量使用,來自不同組織的人員對代碼的修改變得特別頻繁,因此就很難有詳細(xì)的注釋和相關(guān)的文檔來對其演化進(jìn)行確認(rèn)。隨著軟件規(guī)模日趨龐大,組織形態(tài)日益復(fù)雜,傳統(tǒng)的演化確認(rèn)把軟件開發(fā)過程認(rèn)為是“白盒”的方法,已經(jīng)不能對開源軟件的演化進(jìn)行確認(rèn)。例如,軟件系統(tǒng)抽象為Petri網(wǎng)將具有規(guī)模龐大的狀態(tài)空間,在此基礎(chǔ)上進(jìn)行狀態(tài)空間遍歷將很困難。當(dāng)前,對軟件演化的研究主要集中在過程上,研究方法也主要是在理論上的推導(dǎo)和證明。文獻(xiàn)[13]通過引用進(jìn)程代數(shù)(algebra of communicating processes,ACP),基于等式推理驗(yàn)證軟件演化過程模型的行為,對軟件演化過程原模型進(jìn)行了擴(kuò)展,但未使用實(shí)際的軟件或程序進(jìn)行分析或證明。
針對上述研究,可以發(fā)現(xiàn)其中的3個(gè)問題:(1)沒有對軟件演化實(shí)質(zhì)與演化需求是否相符進(jìn)行確認(rèn);(2)對于演化確認(rèn)的研究,大多沒有采取實(shí)驗(yàn)的方法,并給出實(shí)驗(yàn)數(shù)據(jù);(3)對于文檔缺失的開源軟件,目前的研究都沒有明確給出確認(rèn)的方法。
由于開源軟件的出現(xiàn)和大量使用,同時(shí)由于群智開發(fā)而缺少相關(guān)的文檔,以及演化過程不可建模而無法使用過程確認(rèn)的方法,導(dǎo)致了前期的研究成果不適用于開源軟件的確認(rèn)。因此需要采用語義功能的方法,從演化需求和代碼之間的關(guān)聯(lián)性建模是解決開源軟件演化確認(rèn)的一條可行之路。
主題模型是一種可以從大量的文檔中提取出文檔中包含主題的方法,因此它可以從語義功能層面分析出軟件源代碼中包含了哪些主題,進(jìn)而通過主題得到哪些代碼實(shí)現(xiàn)了軟件的某個(gè)功能。
當(dāng)前,主題模型大多作為工具用于自然語言和信息檢索領(lǐng)域的研究。文獻(xiàn)[14]將主題模型應(yīng)用于分析人們看到在線新聞時(shí)的情感,并把這些分析結(jié)果反饋給新聞發(fā)布人員;也有研究人員在文本信息的識別和處理研究中,提出把主題模型用于文本的主題挖掘,并將原有的主題模型進(jìn)行改造,提出雙稀疏主題模型[15],進(jìn)而提出了雙層主題模型用來從引文網(wǎng)絡(luò)中發(fā)現(xiàn)知識[16]。
目前也有一些研究把主題模型與軟件相關(guān)領(lǐng)域結(jié)合:文獻(xiàn)[17]提出了一種基于構(gòu)件驗(yàn)證的API構(gòu)件測試模型和相關(guān)的測試覆蓋標(biāo)準(zhǔn),并通過相關(guān)實(shí)驗(yàn)進(jìn)行了驗(yàn)證,可是并沒有對演化實(shí)質(zhì)和需求是否相符進(jìn)行確認(rèn)。文獻(xiàn)[18]把主題模型應(yīng)用于物聯(lián)網(wǎng)的服務(wù)發(fā)現(xiàn),提出了相應(yīng)的算法,最終找到與服務(wù)請求最相似的服務(wù)集合,但使用的數(shù)據(jù)集仍是自然語言,并沒有將其與軟件領(lǐng)域相結(jié)合,而把主題模型與軟件領(lǐng)域相結(jié)合進(jìn)行研究的,國內(nèi)包括國外都很少有人開展。文獻(xiàn)[19]把軟件源代碼用主題模型進(jìn)行處理,然后分析出代碼的功能,將分析結(jié)果用于幫助開發(fā)人員對軟件進(jìn)行理解,并沒有把主題模型與軟件演化相結(jié)合。
主題模型的應(yīng)用,除了用于自然語言和信息方面的研究,還有人員將其與圖像識別處理技術(shù)相結(jié)合,并取得了一定的成果。文獻(xiàn)[20]認(rèn)為目前計(jì)算機(jī)視覺領(lǐng)域最大的挑戰(zhàn)是從復(fù)雜的環(huán)境中識別出人的動(dòng)作,作者通過使用主題模型的方法更好地解決了動(dòng)作識別的問題。最近,人們還把主題模型應(yīng)用于實(shí)時(shí)交通故障偵察[21]、視頻質(zhì)量評價(jià)[22]、圖像質(zhì)量和特點(diǎn)評估[23]等方面的研究。
由上述研究方向的多樣化和成果可以看出,主題模型是一種成熟的可以處理文本信息的工具,并且自身也被擴(kuò)展為其他領(lǐng)域的研究工具,因此可以使用它來對軟件演化進(jìn)行確認(rèn)。
主題模型(topic model)是用來在一系列文檔中發(fā)現(xiàn)抽象主題的一種概率統(tǒng)計(jì)模型,其主要應(yīng)用在自然語言處理和機(jī)器學(xué)習(xí)領(lǐng)域。該模型是從大量的文檔信息中,提取出內(nèi)在的主題。從更基礎(chǔ)更直觀的角度理解,就是人們在撰寫一篇文章時(shí),都會(huì)圍繞一個(gè)主題思想開展寫作,就會(huì)有一些與該主題相關(guān)的詞匯出現(xiàn),甚至頻繁出現(xiàn),主題模型就是試圖使用數(shù)學(xué)中的概率模型來說明該現(xiàn)象,軟件開發(fā)人員在編寫代碼時(shí),也會(huì)如此。例如當(dāng)需要不斷獲取參數(shù)并賦值時(shí),就會(huì)反復(fù)使用get和set兩個(gè)詞匯。主題模型會(huì)自動(dòng)分析文檔,統(tǒng)計(jì)文檔內(nèi)的詞匯,根據(jù)統(tǒng)計(jì)結(jié)果進(jìn)行分析,并給出文檔、主題和詞匯三者之間存在的概率關(guān)系。人們使用主題模型對文檔的生成過程進(jìn)行模擬,再通過參數(shù)估計(jì)得到各個(gè)主題[24]。將主題模型應(yīng)用于文本信息進(jìn)行建模分析,有互操作性強(qiáng),降低維度和可自動(dòng)分類等優(yōu)點(diǎn)[25]。
隱含狄利克雷分布(latent Dirichlet allocation,LDA)[26]是一種非監(jiān)督機(jī)器學(xué)習(xí)的方法,其最早是在2003年由Blei等人[24]提出,研究目的是將其應(yīng)用于自然語言處理和信息檢索領(lǐng)域。主題模型本身就是一種生成模型,它通過一定的樣本訓(xùn)練后,描述了一種以一定概率生成某一文本信息的過程[27]。同時(shí),LDA也被證實(shí)了是LSI(latentsemanticindexing)的一種替代方法,并且在效率和定位上都優(yōu)于LSI[28]。
在主題模型LDA中,有一個(gè)假設(shè)稱為詞袋假設(shè)[29],其把文檔信息視為詞頻向量,并且不去考慮詞與詞間的順序,這樣一來就把本不能建模的文字信息轉(zhuǎn)變成了可以建模的數(shù)字信息。在整個(gè)模型中,包含了文檔、主題和詞匯三層結(jié)構(gòu),并通過對訓(xùn)練集的訓(xùn)練,以概率模型的形式給出了文檔和主題、主題和詞匯間的關(guān)系。在LDA[30]的模式下,文檔是若干個(gè)主題按照一定的概率生成的,而主題是若干詞匯按照一定的概率生成的,因此對一個(gè)文檔集D中的文檔d,LDA假設(shè)了下面的生成過程[31-32]:
在使用LDA對文本信息進(jìn)行處理時(shí),需要輸入一些相關(guān)的參數(shù),主要包括以下參數(shù)[28]:
D,文檔;
K,主題數(shù);
α,主題比例的Dirichlet超參數(shù);
β,多項(xiàng)式比例的Dirichlet超參數(shù)。
而LDA的輸出,包括以下兩項(xiàng):
φ,詞-主題的概率分布;
θ,主題-文檔的概率分布。
在模型中,超參數(shù)α和 β起著平滑作用。詳細(xì)地說,α影響著每一個(gè)代碼文件的主題分布,β則影響著每一個(gè)主題的詞分布。降低超參數(shù)的值會(huì)使得α和θ矩陣變得更加稀疏。尤其是在α取較小值時(shí)意味著代碼文件中更少的主題。同樣對于β,其值越小,通常就會(huì)增加描述特定文檔所需的主題數(shù)量。LDA模型的粒度歸因于 β的值[33],因?yàn)楫?dāng)每一個(gè)代碼文件需要更多的主題來描述時(shí),語料庫中的每一個(gè)文檔就會(huì)被分解得更細(xì)。
文獻(xiàn)[33]對于K值的初始化,只給了一些經(jīng)驗(yàn)性的參考,并沒有給出一種選擇的方法。文獻(xiàn)[34]介紹了超參數(shù)值設(shè)置復(fù)雜的估計(jì)方法,但這些方法對不同的文檔內(nèi)容的影響尚不清楚。因此超參數(shù)的估計(jì)通常都是根據(jù)經(jīng)驗(yàn)性的方法來賦值,通常α=50/K,β=0.1。
對于參數(shù)φ和θ,LDA在進(jìn)行主題分析時(shí),只能做近似的推理,很難進(jìn)行精確推理。例如在LDA中包含了吉布斯采樣[35],這是用馬爾科夫鏈蒙特卡洛模擬的一個(gè)特殊情況,根據(jù)詞在各個(gè)文檔中的情況得出準(zhǔn)確的分布估計(jì)是一個(gè)消耗很大的問題。
對于參數(shù)估計(jì)方法,目前主要有變分貝葉斯推斷(variational Bayesian inference,VB)、期望傳播(expectation propagation,EP)和Collapsed Gibbs Sampling?;贕ibbs抽樣的參數(shù)推理方法容易理解且實(shí)現(xiàn)簡單,能夠非常有效地從大規(guī)模文本集中抽取主題,因此Gibbs抽樣算法成為當(dāng)前最流行的LDA模型抽取算法。
本文參數(shù)估計(jì)利用MCMC方法中的Gibbs抽樣算法,可以將該算法看作文本生成的反向過程,即在已知生成結(jié)果的情況下,利用參數(shù)估計(jì)得到參數(shù)值[36]:
“Collapsed”是指采用了積分的方法避開了實(shí)際需要去估計(jì)的參數(shù),而對每個(gè)包含單詞的主題進(jìn)行采樣,如果每個(gè)單詞的主題不變,參數(shù)就可以在統(tǒng)計(jì)頻次后計(jì)算出來。因此,參數(shù)估計(jì)問題變?yōu)橛?jì)算單詞序列下主題序列的條件概率:
式中,zi表示第i個(gè)詞所對應(yīng)的主題;乛i表示不包括第i項(xiàng);表示主題k中出現(xiàn)詞t的次數(shù);βi是詞t的狄利克雷先驗(yàn);表示文本m出現(xiàn)主題k的次數(shù);ak是主題k的狄利克雷先驗(yàn)。
如果能夠獲取到單詞主題標(biāo)號,需要的參數(shù)計(jì)算公式可由下面公式計(jì)算出[24]:
式中,φk,t表示主題k中詞t的概率;θm,k表示文本m中主題k的概率。
開源軟件普及速度快,利用率高,演化頻繁,同時(shí)也由于開源軟件是群智開發(fā)而缺少相關(guān)文檔,演化過程在不可控的環(huán)境下進(jìn)行而導(dǎo)致過程不可建模,致使傳統(tǒng)軟件確認(rèn)方法無法實(shí)現(xiàn)對開源軟件的自然延伸。因此本文從故能語義的角度,以源代碼主題模型作為工具進(jìn)行了研究,提出了一種可以對開源軟件演化活動(dòng)進(jìn)行確認(rèn)的方法。本文的演化軟件確認(rèn)方法為:獲取軟件源代碼中的特征,并把這些特征按不同粒度進(jìn)行聚類分析,聚類分析的每一個(gè)結(jié)果就表示源代碼中的一個(gè)主題,每個(gè)主題表示軟件系統(tǒng)中的功能模塊,把這些主題與演化需求進(jìn)行相關(guān)性計(jì)算,找出與演化需求最相似的主題,從而把確認(rèn)工作轉(zhuǎn)換為建立功能模塊與演化需求之間的映射關(guān)系,進(jìn)而確認(rèn)演化是否與演化需求相符合。
本文方法總體上分為3個(gè)過程,如圖1所示。
Fig.1 Verification method of evolved software圖1 軟件演化確認(rèn)方法
4.1 源數(shù)據(jù)獲取及處理
本文方法的第一步就是獲取實(shí)驗(yàn)數(shù)據(jù),即軟件的源代碼。但是對于一個(gè)成品軟件,其源代碼文件中除了代碼外,還包含了大量的其他文件[28],例如xml文件、圖片等,就連代碼文件本身都有許多符號和代碼關(guān)鍵字等[37]。這些信息大多都是一些固定的詞組語句,或標(biāo)記類的語言,而圖片也很難用現(xiàn)有方法進(jìn)行處理。如果把源代碼文件直接使用主題模型進(jìn)行分析,不但分析速度會(huì)受到影響,連分析結(jié)果的準(zhǔn)確度也會(huì)受到很大的影響,因此只對代碼本身進(jìn)行主題建模。因?yàn)榇a在編寫時(shí),需要寫入大量與所完成功能無關(guān)的符號和關(guān)鍵字,所以就需要對代碼進(jìn)行特征提取。依據(jù)文獻(xiàn)[38]中的內(nèi)容“……源代碼中的變量名、函數(shù)名、類(對象)名、API函數(shù)、注釋等關(guān)鍵詞中蘊(yùn)含了豐富的主題知識,可以通過其識別源代碼與特征之間的映射關(guān)系”,就需要從代碼文件中提取方法名、變量名和注釋作為能夠反映代碼所完成功能的特征。
根據(jù)上面的描述,本文對實(shí)驗(yàn)源數(shù)據(jù)的處理,可分為以下步驟:
(1)從分布式版本控制系統(tǒng)中下載同一個(gè)軟件的兩個(gè)不同版本,并獲取對應(yīng)的源代碼。
(2)預(yù)處理(主要是指對方法名、變量名和注釋的處理)。把提取后特征按類(針對面向?qū)ο笳Z言)形成單獨(dú)的文件,并以類所在的包名加上自己的類名對該文件進(jìn)行命名。觀察調(diào)整后的特征,發(fā)現(xiàn)由于源代碼的格式較為特殊且復(fù)雜,故需要做相應(yīng)的預(yù)處理達(dá)到去噪的效果。預(yù)處理主要包含:去除停詞(如“the”和“and”等),詞根還原(如把“gone”還原為“go”等)和去除運(yùn)算符等非特征信息。通過這幾個(gè)操作,可以減少無用特征的數(shù)量,提高有用特征的比例。
(3)版本內(nèi)容協(xié)同化處理。在軟件演化過程中,常常會(huì)涉及到功能的增加、刪除和整合,或者說代碼的變化。例如一個(gè)文件在更新時(shí)被刪除了,就會(huì)使得在確認(rèn)時(shí),找不到這個(gè)文件,從而無法確認(rèn);亦或是軟件在更新時(shí),對某個(gè)文件進(jìn)行了大量的增加和刪除,當(dāng)需要對這個(gè)文件進(jìn)行確認(rèn)時(shí),確認(rèn)的精確度就會(huì)受到影響。因此需要對兩個(gè)版本的特征文件集進(jìn)行處理。根據(jù)文獻(xiàn)[39]所描述的方法,需要把在低版本中存在,但是高版本中不存在的添加到高版本中,具體的操作是“若低版本中有而高版本中沒有的文件,則直接把該文件拷貝到高版本中;若某個(gè)文件在低版本和高版本中均存在,則以行為基礎(chǔ),找出低版本中有而高版本中沒有的行,加入到高版本的該文件中”。
表1為提取源代碼中的特征并處理后的文件內(nèi)容示例。
Table 1 Sample of features表1 特征示例
通過使用LDA主題模型對提取后的特征進(jìn)行建模分析后,就可以得到主題和詞之間的概率模型。表2為一生成概率模型示例。
如表2所示,Topic 0包含了3個(gè)單詞,分別是tokenset、classifier和java,它們屬于該主題Topic 0的概率分別為0.022 089 578 250 261 414、0.018 458 812 594 399和0.015 263 738 817 241 778。同樣的情況,Topic 1也是如此。
Table 2 Sample of probabilistic model表2 概率模型示例
4.2 相關(guān)性計(jì)算
演化活動(dòng)的確認(rèn),或者說是特征匹配,本質(zhì)上是識別演化活動(dòng)中被修改的代碼在功能語義上是否與演化需求存在相關(guān)性,建立特征描述向量與代碼主題之間的映射關(guān)系,該過程必須依賴某種相似性的測度方法。主題中各代碼向量在幾何空間上的分布往往是不均勻的,因此不能簡單地將相似性理解為計(jì)算特征描述向量與主題中各代碼向量的中心點(diǎn)間的歐式距離。另外,由于特征描述向量和代碼向量維數(shù)大多超過三維,程序員無法直觀想象代碼向量與特征描述向量的分布情況。
因此相關(guān)性的計(jì)算是演化確認(rèn)的關(guān)鍵,而實(shí)際上要做的就是識別出演化活動(dòng)的影響,或者說就是定位出軟件演化前后工作人員都修改了哪些代碼文件,而如何找到這些被修改了的文件,就需要借用到一些相似度計(jì)算方法。
在對已經(jīng)演化的代碼文件進(jìn)行定位時(shí),需要輸入與演化相關(guān)的描述性語句,將其稱為演化需求。輸入的演化需求在進(jìn)行定位時(shí)意義重大,因?yàn)槠鋬?nèi)容直接關(guān)系到能否準(zhǔn)確定位到相關(guān)文件,也就直接關(guān)系到能否確認(rèn)演化。
選取一條演化需求,并對這條需求也做去除停詞和詞根還原處理。然后計(jì)算該條需求和每一個(gè)主題的相似度,實(shí)際上就是計(jì)算需求和每個(gè)主題夾角的余弦值。根據(jù)計(jì)算出來的相似度,選擇相似度最高的一個(gè)或若干個(gè)主題中所包含的主題詞,然后統(tǒng)計(jì)這些主題詞在所有特征文件中的出現(xiàn)次數(shù),同時(shí)也需要統(tǒng)計(jì)出每個(gè)特征文件中的總詞數(shù)。根據(jù)文獻(xiàn)[39]所提的內(nèi)容,使用“出現(xiàn)率”這一標(biāo)準(zhǔn)來對所有特征文件進(jìn)行排序。
定義1使用ONT(occurrence numbers of topicwords)表示在一個(gè)特征文件中所選主題詞出現(xiàn)的總次數(shù),使用TWD(total words in a document)代表該特征文件中詞匯總數(shù),則出現(xiàn)率(occurrence rate)可定義如下:
4.3 演化確認(rèn)
演化確認(rèn)的方法有很多種,例如對演化的過程模型進(jìn)行驗(yàn)證,亦或是用靜態(tài)的方法去驗(yàn)證,或者進(jìn)行形式化驗(yàn)證,但是這些方法對開源軟件都不可用,原因如下:
(1)開源軟件由于群智開發(fā),開發(fā)過程和演化過程不可建模的特點(diǎn),前期使用過程確認(rèn)的研究成果無法適用于開源軟件。
(2)靜態(tài)方法的基本思想是要考慮程序的所有執(zhí)行路徑,并且需要驗(yàn)證每條執(zhí)行路徑上的斷言是否滿足。如果是大型的系統(tǒng)采用這種方法進(jìn)行確認(rèn),則會(huì)出現(xiàn)數(shù)量極其龐大的路徑網(wǎng),這就需要確認(rèn)人員對系統(tǒng)具有較高的理解程度,而開源軟件的維護(hù)人員往往不是開發(fā)人員,因此維護(hù)人員對系統(tǒng)的理解程度就會(huì)比較低,導(dǎo)致這種方法可行度不高。
(3)形式化的驗(yàn)證方法需要有軟件系統(tǒng)對應(yīng)的文檔支持,但絕大多數(shù)的開源軟件文檔缺失嚴(yán)重,無法使用形式化的方法。
本文提出的軟件演化確認(rèn)方法,是針對具有群智開發(fā),開發(fā)過程和演化過程不可建模,文檔缺失等特點(diǎn)的開源軟件進(jìn)行的,同時(shí)確認(rèn)人員不需要對系統(tǒng)有較高的理解程度,因此最終希望通過實(shí)驗(yàn)給出一個(gè)具體的數(shù)值結(jié)果,根據(jù)這個(gè)結(jié)果來區(qū)分是否演化。
本文不但需要對已經(jīng)演化的需求進(jìn)行實(shí)驗(yàn),也要對沒有演化的需求進(jìn)行實(shí)驗(yàn)。故在本文中,對大量沒有演化的需求也進(jìn)行了實(shí)驗(yàn),并分析兩者的實(shí)驗(yàn)結(jié)果。通過大量實(shí)驗(yàn)結(jié)果和相關(guān)數(shù)據(jù)的分析,得出了本文所題方法在確認(rèn)軟件演化時(shí)的結(jié)論:當(dāng)結(jié)果達(dá)到或高于該標(biāo)準(zhǔn)的某個(gè)值時(shí),就認(rèn)為選取的這條演化需求已經(jīng)成功演化;當(dāng)?shù)陀谠摌?biāo)準(zhǔn)的這個(gè)值時(shí),就認(rèn)為沒有演化或演化失敗。
5.1 實(shí)驗(yàn)數(shù)據(jù)及獲取
為了保證實(shí)驗(yàn)的客觀性,本文構(gòu)建了一個(gè)benchmark。在benchmark中,有相應(yīng)的演化需求和該需求對應(yīng)修改的源代碼文件。
對于實(shí)驗(yàn)數(shù)據(jù)的處理,3.1節(jié)已經(jīng)做了詳細(xì)的介紹。
通過對現(xiàn)有開源軟件的查找和benchmark的分析,并根據(jù)文獻(xiàn)[39]的描述,下載了ArgoUML(http:// argouml-downloads.tigris.org/)0.20和0.22兩個(gè)完整的版本(ArgoUML是由Java編寫),同時(shí)也找到了與這兩個(gè)版本對應(yīng)的benchmark(http://www.cs.wm. edu/semeru/data/benchmarks/),這樣本文所需要的實(shí)驗(yàn)數(shù)據(jù)就基本獲取完畢。
在benchmark中,有多個(gè)文件夾,每個(gè)文件夾內(nèi)文件所對應(yīng)的內(nèi)容如表3所示。
Table 3 File and its content in benchmark表3 benchmark中的文件及其內(nèi)容
本文所用的查詢語句就來自于Queries中的Short-Description。
5.2 實(shí)驗(yàn)過程
本文使用的LDA建模工具為JGibbLDA(http:// jgibblad.sourceforge.net/)。按照其對輸入文件的要求(文件第一行為文檔的數(shù)量,其余每行為文檔內(nèi)的具體詞匯,詞匯與詞匯間用空格分開),把源代碼的特征文件進(jìn)行整理并形成一個(gè)單獨(dú)的文件。輸入文件內(nèi)容和格式如表4所示。
Table 4 File format of input表4 輸入文件格式
經(jīng)過觀察發(fā)現(xiàn),源代碼的特征文件數(shù)量特別龐大,一般都是幾千甚至上萬個(gè),如果將一個(gè)特征文件作為一個(gè)文檔進(jìn)行整理,則輸入文件內(nèi)的行數(shù)會(huì)特別多,導(dǎo)致運(yùn)行結(jié)果的收斂速度慢。因此把一個(gè)包中所有類的特征文件視為一個(gè)文檔進(jìn)行整理。
JGibbLDA是一個(gè)很復(fù)雜的非監(jiān)督機(jī)器學(xué)習(xí)程序,其理論依據(jù)主要來自文獻(xiàn)[26]?,F(xiàn)在非監(jiān)督的機(jī)器學(xué)習(xí)方法或者半監(jiān)督的機(jī)器學(xué)習(xí)方法,大多需要設(shè)置一些參數(shù)調(diào)整后啟動(dòng)運(yùn)行,JGibbLDA也是如此。表5介紹了JGibbLDA啟動(dòng)運(yùn)行時(shí)所需要的主要參數(shù)和這些參數(shù)的意義。
Table 5 Parameter and its meaning表5 參數(shù)及其意義
在這些主要的參數(shù)中,dir、K、niters和twords的設(shè)置都相對簡單,也不會(huì)對運(yùn)行結(jié)果產(chǎn)生很大影響。但是α和β兩個(gè)參數(shù),都屬于超參數(shù),目前國內(nèi)外的研究結(jié)果中,沒有一種帶有理論依據(jù)的設(shè)置方法,需要使用時(shí)賦值大多憑借的是人工經(jīng)驗(yàn)。文獻(xiàn)[33]的研究結(jié)果表明,α和 β可以賦值為50/k(k為輸入文件內(nèi)文檔的數(shù)量)和0.1,因?yàn)檫@樣運(yùn)行結(jié)果會(huì)有較快的收斂速率。
在JGibbLDA運(yùn)行結(jié)束后,使用一個(gè)名為modelfinal.twords的數(shù)據(jù)進(jìn)行相關(guān)性計(jì)算,計(jì)算步驟大致為以下5步[39]:
(1)從ShortDescription中選取一條演化需求,對其進(jìn)行去停詞和詞根還原處理。
(2)假設(shè)參數(shù)ntopics和twords分別設(shè)置為N和T,則生成N個(gè)T維的向量,同時(shí)需要把這N個(gè)T維的向量賦上初始值0。
(3)對這N個(gè)T維向量賦值:假設(shè)主題m(0<m<N+1)包含了處理后的演化需求中的單詞wi(0<i<T+1),那么將單詞wi所對應(yīng)的概率p加到第m個(gè)向量的第i個(gè)位置。
(4)重復(fù)步驟3,直到這N個(gè)T維向量全部賦值完畢。然后將第m個(gè)T維向量的值,與文件modelfinal.twords中第m個(gè)主題詞對應(yīng)的值計(jì)算兩個(gè)向量夾角余弦值,其中m=1,2,…,N。
(5)將計(jì)算出的余弦值按降序排列,取前一個(gè)或者多個(gè)主題的所有主題詞,在所有源代碼的特征文件中進(jìn)行詞頻統(tǒng)計(jì),計(jì)算出現(xiàn)率,把出現(xiàn)率按降序排列。
5.3 實(shí)驗(yàn)結(jié)果文件
使用JGibbLDA對源代碼的特征進(jìn)行分析,其結(jié)果文件可按后綴名分為5類文件,具體如表6所示。
Table 6 Filename extension and its content表6 文件后綴名及其內(nèi)容
6.1 度量標(biāo)準(zhǔn)
為了對本文方法在性能等方面進(jìn)行評測,需要使用一些度量標(biāo)準(zhǔn)。在信息檢索領(lǐng)域,目前常常會(huì)使用查全率和查準(zhǔn)率作為衡量指標(biāo),并通過這兩個(gè)指標(biāo)來對輸出結(jié)果進(jìn)行評價(jià)[40]。
定義2Recall表示查全率,correct代表所需查找的演化文件,retrieved代表使用本文方法查找出來的文件,則查全率的定義為:
查全率,也稱為召回率,是指檢出的相關(guān)文獻(xiàn)量與檢索系統(tǒng)中相關(guān)文獻(xiàn)總量的比率,是衡量信息檢索系統(tǒng)檢出相關(guān)文獻(xiàn)能力的尺度。
定義3 Precision表示查準(zhǔn)率,correct代表所需查找的演化文件,retrieved代表使用本文方法查找出來的文件,則查準(zhǔn)率的定義為:
查準(zhǔn)率,也可稱為精度,是衡量某一檢索系統(tǒng)的信號噪聲比的一種指標(biāo),即檢出的相關(guān)文獻(xiàn)與檢出的全部文獻(xiàn)的百分比。
定義4使用F-measure代表查全率和查準(zhǔn)率調(diào)和平均數(shù),Recall代表查全率,Precision代表查準(zhǔn)率,則調(diào)和平均數(shù)定義為:
6.2 實(shí)驗(yàn)結(jié)果
本文實(shí)驗(yàn)使用了ArgoUML的0.20和0.22兩個(gè)版本的源代碼作為實(shí)驗(yàn)源數(shù)據(jù),按照上文所提到的處理方法進(jìn)行整理后,一共得到1 562個(gè)類(或特征文件)和96個(gè)包,然后按照J(rèn)GibbLDA輸入文件的要求整理成一個(gè)文件。根據(jù)輸入的文檔數(shù)和所需要的結(jié)果,α、β、K、niters和twords共5個(gè)參數(shù)的值分別設(shè)置為0.528、0.1、30、1 000、100和50。
表7為從ShortDescription中選取的10條已經(jīng)演化的描述。
因?yàn)楸疚脑噲D找到一種能夠確認(rèn)軟件是否已經(jīng)演化的方法,所以不但需要對已經(jīng)演化的進(jìn)行實(shí)驗(yàn),而且還要對沒有演化的也進(jìn)行同樣的實(shí)驗(yàn),進(jìn)而找出兩者的區(qū)別。故從其他版本的ShortDescription中,也找了10條在0.20和0.22版本沒有進(jìn)行演化的描述,具體如表8所示。
Table 7 Description of evolution requirement表7 對演化需求的描述
Table 8 Description of non-evolution requirement表8 對沒有演化需求的描述
文獻(xiàn)[40]推薦了取出現(xiàn)率最高的前10%~15%樣本來進(jìn)行查全率和查準(zhǔn)率的計(jì)算,那就取前10%來進(jìn)行計(jì)算。
對于已經(jīng)演化和沒有演化的進(jìn)行實(shí)驗(yàn)后,都計(jì)算查全率和查準(zhǔn)率,具體數(shù)值如表9所示。
為了防止實(shí)驗(yàn)結(jié)果的偶然性,針對一條已經(jīng)演化的需求,需要把10條沒有演化的需求都給出結(jié)果,取平均值。例如對于實(shí)驗(yàn)序號1中的實(shí)驗(yàn),未演化的查全率和查準(zhǔn)率是把表8中的10條沒有演化的都求出查全率和查準(zhǔn)率后取的平均值。從實(shí)驗(yàn)結(jié)果可以得出,已演化的查全率和查準(zhǔn)率平均值為90.00%和1.09%,而沒有演化的卻只有41.58%和0.49%,兩者具有很明顯的差異。
Table 9 Results of experiments with 10%sampling表9 取10%樣本的實(shí)驗(yàn)結(jié)果
圖2是表9中的數(shù)據(jù),其中圖(a)是查全率,圖(b)是查準(zhǔn)率。
Fig.2 Recall and Precision with 10%sampling圖2 取10%樣本的查全率和查準(zhǔn)率
從圖2中可以很明顯地看出,針對每一個(gè)實(shí)驗(yàn),已經(jīng)演化的在查全率和查準(zhǔn)率上都高于沒有演化的,這說明本文方法確實(shí)能區(qū)分演化與否。但是進(jìn)一步思考會(huì)發(fā)現(xiàn),對于查全率和查準(zhǔn)率,已演化和沒有演化的都不能指定一個(gè)數(shù)值,這個(gè)數(shù)值能把10次實(shí)驗(yàn)都區(qū)分開來。
從上述查全率和查準(zhǔn)率的表達(dá)公式可以看出,兩者存在著互逆的關(guān)系,更直觀地說一個(gè)將文檔集合中所有文檔返回為結(jié)果集合的系統(tǒng)有100%的查全率,但是查準(zhǔn)率卻很低(http://baike.baidu.com/view/ 2126615.htm?fr=aladdin)。舉個(gè)例子來說,比如從1 000個(gè)文件中找1個(gè)文件,那么correct就是1,當(dāng)retrieved取1 000時(shí),那查全率必定是100%,反而查準(zhǔn)率只有0.1%。因此為了綜合評價(jià)兩者的性能,就需要使用調(diào)和平均數(shù)F-measure。
表10為取10%樣本的調(diào)和平均數(shù)。
Table 10 F-measure with 10%sampling表10 取10%樣本的調(diào)和平均數(shù)
圖3為已演化和未演化的調(diào)和平均數(shù)對比圖。
Fig.3 F-measure with 10%sampling圖3 取10%樣本的調(diào)和平均數(shù)
從表10和圖3中可以得出,已演化的調(diào)和平均數(shù)的平均值為0.021,而未演化的只有0.009 7,具有很明顯的差異,從一條實(shí)驗(yàn)結(jié)果也可以看出兩者也有差異。但是同樣存在和查全率、查準(zhǔn)率一樣的問題,就是對于整體不能指定一個(gè)數(shù)值來劃分兩者。
從查全率、查準(zhǔn)率和調(diào)和平均數(shù)的圖可以很直觀地看出,對于一個(gè)實(shí)驗(yàn)點(diǎn)是具有很強(qiáng)區(qū)分度的,但是無法將整體進(jìn)行區(qū)分,因此考慮縮小文件數(shù)量,從10%縮小到5%,來重新計(jì)算實(shí)驗(yàn)結(jié)果。
表11為取5%樣本的查全率、查準(zhǔn)率和調(diào)和平均數(shù)的統(tǒng)計(jì)結(jié)果。
Table 11 Recall、Precision and F-measure with 5%sampling表11 取5%樣本的查全率、查準(zhǔn)率和調(diào)和平均數(shù)
從表11中可以得出,已演化的在查全率、查準(zhǔn)率和調(diào)和平均數(shù)三者的平均數(shù)為68.33%、1.28%和2.50%,沒有演化的確只有25.67%、0.56%和1.10%。
圖4為取5%樣本的查全率、查準(zhǔn)率和調(diào)和平均數(shù)三者的比較結(jié)果。其中圖(a)是查全率,圖(b)是查準(zhǔn)率,圖(c)是調(diào)和平均數(shù)。
從圖4中可以直觀地看出,在圖(b)和(c)中,已演化和沒有演化的區(qū)別已經(jīng)比較明顯。若圖(b)中查準(zhǔn)率在1.15%和1.28%之間取值,或圖(c)中調(diào)和平均數(shù)在2.27%和2.44%之間取值,都可以在10條數(shù)據(jù)中按是否演化區(qū)分出9條,區(qū)分度已經(jīng)達(dá)到90%。
Fig.4 Recall、Precision and F-measure with 5%sampling圖4 取5%樣本的查全率、查準(zhǔn)率和調(diào)和平均數(shù)
是否有方法能進(jìn)一步區(qū)分是否演化,或者說是否能再次提高查全率、查準(zhǔn)率和調(diào)和平均數(shù),文獻(xiàn)[39]針對該問題,使用了一類被稱為“組合詞”的詞匯來提高查全率、查準(zhǔn)率和調(diào)和平均數(shù)。所謂的組合詞,就是由兩個(gè)或者兩個(gè)以上的基本單詞復(fù)合而成,類似于“l(fā)istenerlist”和“l(fā)oadedfromfile”。這類詞匯在預(yù)處理時(shí)沒有進(jìn)行分詞操作,同時(shí)在人類的自然語言中是不會(huì)出現(xiàn)的,在使用LDA進(jìn)行分析[41]時(shí)也不會(huì)進(jìn)行特別處理。然而實(shí)際上,這些詞匯在系統(tǒng)開發(fā)人員編寫代碼時(shí),會(huì)經(jīng)常使用到這類的詞匯來表達(dá)一些復(fù)雜的操作,同時(shí)也方便以后維護(hù)時(shí)能很快理解這塊代碼所完成的功能。例如看到“l(fā)istenerlist”,開發(fā)人員很直觀的感受就是這應(yīng)該是個(gè)偵聽列表。組合詞的組合方式很多,同一個(gè)組合詞在整個(gè)系統(tǒng)的源代碼中不會(huì)出現(xiàn)太多次,因此使用組合詞的方式來提高查全率、查準(zhǔn)率和調(diào)和平均數(shù)。
使用組合詞提高相應(yīng)的數(shù)據(jù),具體可以分為以下3步:
(1)將所選主題中的主題詞提取出來;
(2)在所有源代碼特征文件中統(tǒng)計(jì)這些組合詞出現(xiàn)的次數(shù),并把這些出現(xiàn)次數(shù)按降序排列;
(3)若組合詞出現(xiàn)次數(shù)最好的演化文件排第M位,出現(xiàn)率最低的演化文件排第N位,則把前M個(gè)文件和前N個(gè)文件進(jìn)行交集操作,找出公共部分。
對表7中10條已經(jīng)演化的描述,再次利用組合詞的方法進(jìn)行處理,減少了很多無關(guān)文件的數(shù)量,具體如表12所示。
Table 12 Statistical results within compound words表12 考慮組合詞統(tǒng)計(jì)結(jié)果
從表12的統(tǒng)計(jì)結(jié)果可以看出,最好的情況下,可以減少222個(gè)無關(guān)文件,最差減少了2個(gè)文件,平均減少了49。
表13給出了在考慮組合詞后,取前5%樣本的查全率、查準(zhǔn)率和調(diào)和平均數(shù)。
根據(jù)表13的計(jì)算結(jié)果,通過使用組合詞的方法,在取前5%樣本時(shí),10組已演化的查全率、查準(zhǔn)率和調(diào)和平均數(shù)的均值分別是100.00%、2.56%和4.95%,而未演化的只有25.67%、0.56%和1.10%,兩者間的差距與表11相比較更加明顯。
圖5為取5%樣本并考慮組合詞的查全率、查準(zhǔn)率和調(diào)和平均數(shù)的比較結(jié)果。
從圖5的數(shù)據(jù)中可以很明顯地看出,對于查全率和查準(zhǔn)率,若查全率取90%到100%之間的值,或查準(zhǔn)率取1.15%到1.28%之間的值,都可以把10個(gè)已演化的和10個(gè)沒有演化的需求進(jìn)行區(qū)分。
Table 13 Recall、Precision and F-measure with 5% sampling and within compound words表13 取5%樣本并考慮組合詞查全率、查準(zhǔn)率和調(diào)和平均數(shù)
文獻(xiàn)[42]是一種基于文本的確認(rèn)方法,將其作為基線方法用于對表7中的數(shù)據(jù)進(jìn)行處理,并與本文方法進(jìn)行對比。
表14為取前5%樣本,采用基線方法對表7中數(shù)據(jù)處理后得出的結(jié)果。
基線方法與本文方法在查全率、查準(zhǔn)率和調(diào)和平均數(shù)上的對比如圖6所示。
在對比圖中可以直接看出,基線方法在區(qū)分是否演化時(shí)數(shù)值差距小,同時(shí)數(shù)值起伏大,不如本文方法的區(qū)分度強(qiáng)和穩(wěn)定。通過表14和表13,可以直接算出差距。本文方法(在考慮組合詞時(shí))相較沒有演化的,在查全率、查準(zhǔn)率和調(diào)和平均數(shù)上三者均值的差值為74.33%、2.00%和3.86%,而基線方法與沒有演化的差值卻只有24.33%、0.56%和0.91%,差距顯而易見。
Table 14 Recall、Precision and F-measure of baseline with 5%sampling表14 基線方法取5%樣本的查全率、查準(zhǔn)率和調(diào)和平均數(shù)
6.3 實(shí)驗(yàn)結(jié)論
在圖6中,通過對查全率和查準(zhǔn)率取值的調(diào)整,可以對一條演化需求是否已經(jīng)演化進(jìn)行確認(rèn)。對查全率和查準(zhǔn)率兩者的取值,本文取可以進(jìn)行確認(rèn)的最大值和最小值的平均數(shù)給出實(shí)驗(yàn)結(jié)論,故查全率取95%,查準(zhǔn)率取1.215%。
Fig.5 Recall、Precision and F-Measure with 5%sampling and within compound words圖5 取5%樣本并考慮組合詞查全率、查準(zhǔn)率和調(diào)和平均數(shù)
Fig.6 Method comparison of this paper and baseline圖6 本文方法與基線方法的對比
通過上述實(shí)驗(yàn)結(jié)果,可以得出本文實(shí)驗(yàn)的結(jié)論:在使用組合詞,并取出現(xiàn)率前5%高的文件數(shù)量進(jìn)行計(jì)算后,若查全率不低于95%,且查準(zhǔn)率不低于1.215%時(shí),可以確定輸入的演化需求與演化實(shí)質(zhì)符合;若查全率低于95%,或查準(zhǔn)率低于1.215%時(shí),則輸入的演化需求與演化實(shí)質(zhì)不符合。
對于一個(gè)演化需求,軟件是否按照需求進(jìn)行了演化,一直都是軟件演化領(lǐng)域一個(gè)重要的研究方向。過去對軟件演化的研究,大多都是理論上的推演或者證明,而對演化確認(rèn)的研究就更少了。為了能在軟件演化或者軟件工程領(lǐng)域取得一些突破和創(chuàng)新,本文特使用軟件源代碼作為實(shí)驗(yàn)數(shù)據(jù),使用主題模型LDA作為實(shí)驗(yàn)工具,提出了軟件演化確認(rèn)的方法,并用大量的實(shí)驗(yàn)數(shù)據(jù)證明了方法的有效性,同時(shí)開發(fā)出與本文方法所對應(yīng)的確認(rèn)工具。
最開始研究非監(jiān)督性機(jī)器學(xué)習(xí)主題模型的目的是將其應(yīng)用于處理自然語言和檢索信息,本文創(chuàng)新性地將其應(yīng)用于軟件演化領(lǐng)域,并取得一定的成績,這也說明了未來人工智能和軟件工程將有更多的融合,也必將取得更大的成就。
本文方法雖然取得了一定的成果,但是依然存在著一些問題:首先,確認(rèn)軟件是否演化,輸入的演化需求很關(guān)鍵,這些單詞都需要很客觀和準(zhǔn)確地描述在代碼層面上修復(fù)了什么錯(cuò)誤或者缺陷,這樣確認(rèn)出來的效果才能好;其次,很多演化語句描述的是兩個(gè)正式版本間的測試版,使用這些語句時(shí)確認(rèn)效果不會(huì)很好;最后,軟件源代碼文件中存在著許多xml或html文件,這些文件中也有大量的特征信息需要去提取。同時(shí)本文所提出的演化確認(rèn)方法并不是一種通用性的方法,因此有它的適用范圍和局限性。
(1)本文方法需要找到同一個(gè)軟件的兩個(gè)不同版本,并按上文所述方法進(jìn)行處理和整合;若只有一個(gè)版本,則實(shí)驗(yàn)效果會(huì)受到很大的影響。
(2)本文的實(shí)驗(yàn)結(jié)論建立在大量實(shí)驗(yàn)結(jié)果的平均值上,實(shí)驗(yàn)數(shù)據(jù)真實(shí)可靠,實(shí)驗(yàn)結(jié)果可信度高,但是主題模型是一種概率模型,對于極少數(shù)的特殊情況可能會(huì)有一定的誤差。
(3)數(shù)據(jù)源、數(shù)據(jù)預(yù)處理和代碼書寫的規(guī)范程度都會(huì)影響最終的結(jié)果。
本文將軟件演化與機(jī)器學(xué)習(xí)進(jìn)行創(chuàng)新性交叉研究,并采用真實(shí)的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行證明,這給了人們很多啟示和未來的研究方向。首先在設(shè)置JGibbLDA運(yùn)行參數(shù)時(shí),對于兩個(gè)超參數(shù)α和β,是否能提出一種有理論依據(jù)或有大量實(shí)驗(yàn)證明的方法;其次,在對軟件源代碼的處理上,能否引入其他的信息,包括一些簡單的圖片;最后,能否研究出新的方法將演化確認(rèn)進(jìn)行得更好。同時(shí),將進(jìn)一步研究主題模型是否還能應(yīng)用在軟件工程的其他領(lǐng)域,并對本文所開發(fā)的確認(rèn)工具進(jìn)行完善和擴(kuò)展,以支持更多語言的源代碼。
References:
[1]Von Krogh G,Haefliger S,Spaeth S,et al.Carrots and rainbows:motivation and social practice in open source software development[J].MIS Quarterly,2012,36(2):649-676.
[2]Ghapanchi A H,Wohlin C,Aurum A.Resources contributing to gaining competitive advantage for open source software projects:an application of resource-based theory[J].International Journal of Project Management,2014,32(1):139-152.
[3]Wang Huaimin,Shi Peichang,Ding Bo,et al.Online evolution of software services[J].Chinese Journal of Software, 2011,34(2):318-328.
[4]Balsamo S,Marco A D,Inverardi P,et al.Model-based performance prediction in software development:a survey[J]. IEEE Transactions on Software Engineering,2004,30(5): 295-310.
[5]Guttag J V,Horowitz E,Musser D R.Abstract data types and software validation[J].Communications of the ACM, 1978,21(12):1048-1064.
[6]Thomas N C,Reeves Jr H L.Experience from quality assurance in nuclear power plant protection system software validation[J].IEEE Transactions on Nuclear Science,1980,27 (1):899-908.
[7]Heiner M.Petri net based software validation,ICSI TR-92-022[R].Berkeley,USA:International Computer Science Institute,1992.
[8]Silva V D,Kroening D,Weissenbacher G.A survey of automated techniques for formal software verification[J].IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems,2008,27(7):1165-1178.
[9]Ivan?i? F,Yang Z,Ganai M K,et al.Efficient SAT-based bounded model checking for software verification[J].Theoretical Computer Science,2008,404(3):256-274.
[10]Komuravelli A,Gurfinkel A,Chaki S,et al.Automatic abstraction in SMT-based unbounded software model checking [C]//LNCS 8044:Proceedings of the 25th International Conference on Computer Aided Verification,Saint Petersburg,Russia,Jul 13-19,2013.Berlin,Heidelberg:Springer, 2013:846-862.
[11]Bérard B,Bidoit M,Finkel A,et al.Systems and software verification:model-checking techniques and tools[M].Berlin,Heidelberg:Springer,2001.
[12]Philippaerts P,Mühlberg J T,Penninckx W,et al.Software verification with VeriFast:industrial case studies[J].Science of Computer Programming,2014,82:77-97.
[13]Dai Fei,Li Tong,Xie Zhongwen,et al.Towards an algebraic semantics of software evolution process models[J].Journal of Software,2012,23(4):846-863.
[14]Zhang Ying,Su Lili,Yang Zhifan,et al.Multi-label emotion tagging for online news by supervised topic model[C]// LNCS 9313:Proceedings of the 17thAsia-Pacific Web Conference on Web Technologies and Applications,Guangzhou,China,Sep 18-20,2015.[S.l.]:Springer International Publishing,2015:67-79.
[15]Lin Tianyi,Tian Wentao,Mei Qiaozhu,et al.The dual-sparse topic model:mining focused topics and focused terms in short text[C]//Proceedings of the 23rd International Conference on World Wide Web,Seoul,Apr 7-11,2014.New York: ACM,2014:539-550.
[16]Guo Zhen,Zhang Zhongfei,Zhu Shenghuo,et al.A two-level topic model towards knowledge discovery from citation networks[J].IEEE Transactions on Knowledge and Data Engineering,2014,26(4):780-794.
[17]Gao J,Espinoza R,He J.Testing coverage analysis for software component validation[C]//Proceedings of the 29th Annual International Computer Software and Applications Conference,Edinburgh,Jul 26-28,2005.Piscataway,USA: IEEE,2005,1:463-470.
[18]Wei Qiang,Jin Zhi,Xu Yan.Service discovery for Internet of things based on probabilistic topic model[J].Journal of Software,2014,25(8):1640-1658.
[19]Li Meng,Zhao Junfeng,Xie Bing.Obtaining functional topics from source code based on topic modeling and static analysis [J].Scientia Sinica Informationis,2014,44(1):54-69.
[20]Qian Xiao,Jun Cheng.Human action recognition using topic model[C]//Proceedings of the 2014 IEEE International Conference on Information Science and Technology,Shenzhen, China,Apr 26-28,2014.Piscataway,USA:IEEE,2014.
[21]Kinoshita A,Takasu A,Adachi J.Real-time traffic incident detection using a probabilistic topic model[J].Information Systems,2015,54:169-188.
[22]Guo Qun,Lu Xiaoqiang,Yuan Yuan.Video quality assessment via supervised topic model[C]//Proceedings of the 2nd IEEE China Summit and International Conference on Signal and Information Processing,Xi'an,China,Jul 9-13,2014.Piscataway,USA:IEEE,2014:636-640.
[23]Zhang Tianbing,Luo Wang.Image quality assessment using author topic model[C]//Proceedings of the 2013 International Conference on Information Technology and Applications, Chengdu,China,Nov 16-17,2013.Piscataway,USA:IEEE, 2013:63-66.
[24]Xu Ge,Wang Houfeng.The development of topic models in natural language processing[J].Chinese Journal of Computer,2014,34(8):1423-1436.
[25]Cassar G,Barnaghi P,Moessner K.Probabilistic matchmaking methods for automated service discovery[J].IEEE Transactions on Services Computing,2014,7(4):654-666.
[26]Blei D M,Ng A Y,Jordan M I.Latent Dirichlet allocation[J]. The Journal of Machine Learning Research,2003,3:993-1022.
[27]Steyvers M,Griffiths T.Probabilistic topic models[J].Handbook of Latent SemanticAnalysis,2007,427(7):424-440.
[28]Dit B,Revelle M,Gethers M,et al.Feature location in source code:a taxonomy and survey[J].Journal of Software: Evolution and Process,2013,25(1):53-95.
[29]Hoffman M D,Blei D M,Bach F R.Online learning for latent Dirichlet allocation[J].Advances in Neural Information Processing Systems,2010,23:856-864.
[30]Teh Y W,Jordan M I,Beal M J,et al.Hierarchical Dirichlet processes[J].Journal of the American Statistical Association,2012,101(476):1566-1581.
[31]Blei D,Carin L,Dunson D.Probabilistic topic models[J]. IEEE Signal Processing Magazine,2010,27(6):55-65.
[32]Wang C,Paisley J W,Blei D M.Online variational inference for the hierarchical Dirichlet process[J].Journal of Machine Learning Research,2011,15:752-760.
[33]Griffiths T L,Steyvers M.Finding scientific topics[J].Proceedings of the National Academy of Sciences,2004,101 (S1):5228-5235.
[34]Minka T P.Estimating a Dirichlet distribution[J].UAI,2003, 39(3273):115.
[35]Heinrich G.Parameter estimation for text analysis[R].Germany:University of Leipzig,2005.
[36]Wang Zhenzhen,He Ming,Du Yongping.Text similarity computing based on topic model LDA[J].Computer Science,2013,40(12):229-232.
[37]Abebe S L,Haiduc S,Marcus A,et al.Analyzing the evolution of the source code vocabulary[C]//Proceedings of the 13th European Conference on Software Maintenance and Reengineering,Kaiserslautern,Germany,Mar 24-27,2009. Piscataway,USA:IEEE,2009:189-198.
[38]He Yun,Wang Wei,Li Tong,et al.Behavior and topic oriented software feature location method[J].Journal of Frontiers of Computer Science and Technology,2014,8(12): 1452-1462.
[39]Han Junming,Wang Wei,Li Tong,et al.Feature location method of evolved software[J].Journal of Frontiers of Computer Science and Technology,2016,10(9):1201-1210.
[40]Ju Xiaolin,Jiang Shujuan,Zhang Yanmei,et al.Advanced in fault localization techniques[J].Journal of Frontiers of Computer Science and Technology,2012,6(6):481-494.
[41]Zhai K,Boyd-Graber J,Asadi N,et al.Mr.LDA:a flexible large scale topic modeling package using variational inference in MapReduce[C]//Proceedings of the 2014 International Conference on World Wide Web,Seoul,Apr 7-11,2014. New York:ACM,2014:879-888.
[42]Marcus A,Sergeyev A,Rajlich V,et al.An information retrieval approach to concept location in source code[C]//Proceedings of the 11th Working Conference on Reverse Engineering,Delft,Netherlands,Nov 8-12,2004.Washington: IEEE Computer Society,2004:214-223.
附中文參考文獻(xiàn):
[3]王懷民,史佩昌,丁博,等.軟件服務(wù)的在線演化[J].計(jì)算機(jī)學(xué)報(bào),2011,34(2):318-328.
[13]代飛,李彤,謝仲文,等.一種軟件演化過程模型的代數(shù)語義[J].軟件學(xué)報(bào),2012,23(4):846-863.
[18]魏強(qiáng),金芝,許焱.基于概率主題模型的物聯(lián)網(wǎng)服務(wù)發(fā)現(xiàn)[J].軟件學(xué)報(bào),2014,25(8):1640-1658.
[19]李萌,趙俊峰,謝冰.基于主題建模和靜態(tài)分析技術(shù)的軟件代碼功能性主題獲取方法[J].中國科學(xué):信息科學(xué), 2014,44(1):54-69.
[24]徐戈,王厚峰.自然語言處理中主題模型的發(fā)展[J].計(jì)算機(jī)學(xué)報(bào),2014,34(8):1423-1436.
[36]王振振,何明,杜永萍.基于LDA主題模型的文本相似度計(jì)算[J].計(jì)算機(jī)科學(xué),2013,40(12):229-232.
[38]何云,王煒,李彤,等.面向行為主題的軟件特征定位方法[J].計(jì)算機(jī)科學(xué)與探索,2014,8(12):1452-1462.
[39]韓俊明,王煒,李彤,等.演化軟件的特征定位方法[J].計(jì)算機(jī)科學(xué)與探索,2016,10(9):1201-1210.
[40]鞠小林,姜淑娟,張艷梅,等.軟件故障定位技術(shù)進(jìn)展[J].計(jì)算機(jī)科學(xué)與探索,2012,6(6):481-494.
HAN Junming was born in 1988.He is an M.S.candidate at Yunnan University.His research interests include software engineering,software evolution and data mining.
韓俊明(1988—),男,云南文山人,云南大學(xué)碩士研究生,主要研究領(lǐng)域?yàn)檐浖こ?,軟件演化,?shù)據(jù)挖掘。
WANG Wei was born in 1979.He received the Ph.D.degree in system analysis and integration from Yunnan University in 2009.Now he is an associate professor at Yunnan University,and the member of CCF.His research interests include software engineering,software evolution and data mining.
王煒(1979—),男,云南昆明人,2009年于云南大學(xué)系統(tǒng)分析與集成專業(yè)獲得博士學(xué)位,現(xiàn)為云南大學(xué)副教授,CCF會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ蹋浖莼?,?shù)據(jù)挖掘。發(fā)表學(xué)術(shù)論文15篇,出版教材1部,主持國家級項(xiàng)目1項(xiàng)、省部級項(xiàng)目5項(xiàng)。
LI Tong was born in 1963.He received the Ph.D.degree in software engineering from De Montfort University in 2007.Now he is a professor and Ph.D.supervisor at Yunnan University,and the senior member of CCF.His research interests include software engineering and information security.
李彤(1963—),男,河北石家莊人,2007年于英國De Montfort大學(xué)軟件工程專業(yè)獲得博士學(xué)位,現(xiàn)為云南大學(xué)軟件學(xué)院黨委書記、教授、博士生導(dǎo)師,CCF高級會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ?,信息安全。發(fā)表學(xué)術(shù)論文100余篇、專著2部、教材5部,主持國家級項(xiàng)目5項(xiàng)、省部級項(xiàng)目14項(xiàng)、其他項(xiàng)目20余項(xiàng)。
HE Yun was born in 1989.He is a Ph.D.candidate at Yunnan University,and the student member of CCF.His research interests include software engineering,software evolution and data mining.
何云(1989—),男,云南建水人,云南大學(xué)博士研究生,CCF學(xué)生會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ?,軟件演化,?shù)據(jù)挖掘。
Approach of Open Source Software Oriented Evolving Validation*
HAN Junming1,WANG Wei1,2+,LI Tong1,2,HE Yun1
1.College of Software,Yunnan University,Kunming 650091,China
2.Key Laboratory for Software Engineering of Yunnan Province,Kunming 650091,China
+Corresponding author:E-mail:wangwei@ynu.edu.cn
Software evolution is a hot research field in software engineering.Because the open source software has the characteristics of group intelligence development and the process of evolution uncontrollable and not modeling, the traditional validation method can not apply to open source software.This paper proposes a software validation method from semantic function,attempts to cluster the codes in the way of the topic,and each topic presents a function module in software system.This paper transfers the evolving validation into finding the mapping relation between the function module and the requirements of software evolution.Finally,this paper takes advantage of source codes in open software,makes experiment and gets many actual data,then analyzes these data,the results make clear that the proposed method is better than the comparison method in distinguishing whether evolved or not, and it can be used to verify the software evolution.
software evolution;validation;topic model;open source software
10.3778/j.issn.1673-9418.1604026
A
TP311.5
*The National Natural Science Foundation of China under Grant Nos.61462092,61262024,61379032(國家自然科學(xué)基金);the Key Project of Natural Science Foundation of Yunnan Province under Grant No.2015FA014(云南省自然科學(xué)基金重點(diǎn)項(xiàng)目);the Natural Science Foundation of Yunnan Province under Grant No.2013FB008(云南省自然科學(xué)基金).
Received 2016-04,Accepted 2016-06.
CNKI網(wǎng)絡(luò)優(yōu)先出版:2016-06-27,http://www.cnki.net/kcms/detail/11.5602.TP.20160627.0929.008.html
HAN Junming,WANG Wei,LI Tong,et al.Approach of open source software oriented evolving validation. Journal of Frontiers of Computer Science and Technology,2017,11(4):539-555.
摘 要:軟件演化確認(rèn)是軟件工程領(lǐng)域的一個(gè)重點(diǎn)和熱點(diǎn)的研究方向。由于開源軟件具有群智開發(fā),演化過程不可控和不可建模等特點(diǎn),使得傳統(tǒng)的確認(rèn)方法不適合于開源軟件,故從功能語義角度提出了一種軟件演化確認(rèn)方法,試圖將代碼按主題的方式進(jìn)行聚類,每一個(gè)主題表征軟件系統(tǒng)的一個(gè)功能集合,演化確認(rèn)工作被轉(zhuǎn)化為功能集合與演化需求之間的映射關(guān)系。通過對現(xiàn)有開源軟件的源代碼進(jìn)行實(shí)驗(yàn),獲取了大量的真實(shí)可靠實(shí)驗(yàn)數(shù)據(jù),對這些實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析后得出的實(shí)驗(yàn)結(jié)果表明該方法相較基于文本的基線方法,更能有效區(qū)分是否已經(jīng)演化,可以用于對軟件演化進(jìn)行確認(rèn)工作。