韓俊明,王 煒,2+,李 彤,2,何 云
1.云南大學 軟件學院,昆明 650091
2.云南省軟件工程重點實驗室,昆明 650091
面向開源軟件的演化確認方法*
韓俊明1,王 煒1,2+,李 彤1,2,何 云1
1.云南大學 軟件學院,昆明 650091
2.云南省軟件工程重點實驗室,昆明 650091
軟件演化;確認;主題模型;開源軟件
軟件系統的構造性和演化性是軟件系統的兩個基本屬性,特別是開源軟件由于其自身的特點導致了如何確認其演化活動成為當前產業界和學術界研究的熱點。
如今,軟件的應用越來越廣泛,已經深入到各個行業內部,成為大部分工作中不可替代的一部分,特別是開源軟件,它的產生和發展是一種社會現象,也是一種經濟現象[1]。開源軟件廣義上的理解,就是讓軟件的使用者能夠得到其源代碼,還可以按照自己的需要修改源代碼,并發布給別人使用。
但是,開源軟件相較傳統軟件,在開發過程上都有著極大的不同[2]。
從開發的角度與傳統方法相比較,首先在項目計劃上,開源軟件就沒有嚴格的時間、人員和資金等管理信息;其次在需求分析方面,傳統軟件開發中,需求一直都是核心問題,而對于開源軟件的開發,項目大多時候是因為某些人把自己的想法公布于眾,卻沒有明確的文檔信息;然后在設計和實現方面,分散開發是開源軟件的一個明顯特點,因此不會產生詳細或統一的開發文檔;最后在測試與維護上,開源軟件由于開發和使用人數眾多,雖然測試缺乏嚴密性,但錯誤的修復人員也是極其龐大的,許多錯誤在很短時間內就能得到修復。
從開發過程的角度來說,傳統的軟件開發方法認為,好的軟件開發過程就能開發出高質量的軟件,但對于開源軟件來說,這個假設是不成立的,因為開源軟件的開發過程很難做到統一管理,原因在于:(1)對于開源軟件,開發人、使用人和維護人三者往往不會存在于一個組織內,因此缺少相應的文檔進行軟件演化記錄,對于使用人而言,就很難去確認一個演化是否與演化意圖相符合。(2)開源軟件采用群智開發模式,無法或很難實現開發過程的建模,導致難以使用基于過程的軟件確認,而當前研究大多關注于對演化過程的驗證,并未對演化產品是否與演化需求一致進行驗證。(3)目前大型的開源軟件,對其進行修改的人很多,因此會出現缺少或沒有相關的文檔,導致無法對演化進行確認。
當前開源軟件還被認為是一種獲取可信軟件的新途徑[3],同時開源軟件價格低廉和性能可靠兩個特點,而被認為是專有軟件的可替代品,其發展和應用都得到了一定程度上的提高,許多組織都投身于這些軟件的開發中,但是因為這些軟件的開發和演化大多都是由不同的組織和個人完成,所以對軟件的可靠性或演化的真實性無法進行確認。特別是近年來,開源活動得到了學術界和工業界的廣泛關注,開源就意味著可以獲取到軟件的源代碼,利用這些源代碼可以迅速完成產品開發。同時開源軟件的貢獻者一般互相不認識,他們在開源社區內進行高效的合作來完成代碼的相關工作,因此開源軟件的演化活動就變得廣泛且不可避免。
綜上所述,由于開源軟件具有與傳統開發模式迥異的特征,導致了傳統軟件確認方法無法實現對開源軟件的自然延伸。因此急需一種面向開源軟件的演化確認方法。同時,相關文獻[4]指出,過去對軟件演化的研究大多把重點放在了軟件開發或演化過程上,而對于演化后的確認工作卻很少有人開展。
本文利用主題模型進行了研究,提出了一種可以對開源軟件進行確認的方法,把源代碼按不同粒度進行聚類分析,每一個聚類結果就代表了源代碼的一個主題,而每一個主題表示軟件系統中的一個功能模塊,從而把確認工作轉換為建立功能模塊與演化需求之間的映射關系。
本文方法具有如下特點:
(1)針對目前研究較少的開源軟件的演化確認,將主題模型應用于軟件源代碼的處理,并提出了一套確認方法。
(2)已演化的和沒有演化的開源軟件在實驗結果中能進行很好的區分,并與其他可以進行確認的方法進行對比,結果表明本文方法更好。
(3)對文中所用方法,已給出相應的確認工具。
本文組織結構如下:第2章介紹軟件確認技術的發展和所用到的相關方法;第3章描述本文所用的方法;第4章介紹面向開源軟件的演化確認方法;第5章介紹實驗所用到的工具;第6章具體描述實驗結果,對結果進行分析,并給出實驗結論;第7章對實驗進行評價,并闡述未來的研究方向。
1978年,首次提出了軟件確認技術[5],當時軟件應用具有不普及,軟件規模小和演化慢等特點,因此當時研究人員認為對于一個軟件系統,其驗證的關鍵在于需要減少復雜性和大量細節,基于該認識,提出了確認軟件演化需要對抽象數據類型進行驗證。若干年后,研究人員在開發重要的系統時,意識到保證軟件質量可靠的主要手段還是確認,同時針對特定的軟件確認提出了一種從軟件開發方法到測試的技術[6]。1992年,軟件行業發生了巨大的變化,計算機和因特網的普及推動了軟件的大量產生,人們開始對軟件的開發過程研究感興趣,并提出了基于Petri網的軟件確認技術[7],并對該方法的前景和驗證過程進行詳細描述,作者認為Petri網能在一定程度上對軟件過程進行驗證,但對演化結果卻無法確認。在隨后的十幾年間,科研人員把主要的研究工作放在了使用形式化方法對過程進行確認。文獻[8]對形式化驗證方法進行了總結,將該方法分為兩類:(1)靜態分析方法,該方法能自動計算其行為信息而不用去執行程序;(2)軟件模型檢測法,該方法實際上是一個算法,用于確認一個系統的模型是否滿足正確性規范。隨后的幾年里,軟件高度普及化,因此人們把確認的主要研究工作放在了模型相關方法上。文獻[9-10]分別采用了有界模型和無界模型的方法對軟件進行確認;文獻[11]則對模型檢測法進行了詳盡的描述,并介紹了相關的工具;而文獻[12]指出軟件確認是一項非常耗時的工作,現存的或者新的代碼必須要加上注釋以說明其用意,但是目前開源軟件的大量使用,來自不同組織的人員對代碼的修改變得特別頻繁,因此就很難有詳細的注釋和相關的文檔來對其演化進行確認。隨著軟件規模日趨龐大,組織形態日益復雜,傳統的演化確認把軟件開發過程認為是“白盒”的方法,已經不能對開源軟件的演化進行確認。例如,軟件系統抽象為Petri網將具有規模龐大的狀態空間,在此基礎上進行狀態空間遍歷將很困難。當前,對軟件演化的研究主要集中在過程上,研究方法也主要是在理論上的推導和證明。文獻[13]通過引用進程代數(algebra of communicating processes,ACP),基于等式推理驗證軟件演化過程模型的行為,對軟件演化過程原模型進行了擴展,但未使用實際的軟件或程序進行分析或證明。
針對上述研究,可以發現其中的3個問題:(1)沒有對軟件演化實質與演化需求是否相符進行確認;(2)對于演化確認的研究,大多沒有采取實驗的方法,并給出實驗數據;(3)對于文檔缺失的開源軟件,目前的研究都沒有明確給出確認的方法。
由于開源軟件的出現和大量使用,同時由于群智開發而缺少相關的文檔,以及演化過程不可建模而無法使用過程確認的方法,導致了前期的研究成果不適用于開源軟件的確認。因此需要采用語義功能的方法,從演化需求和代碼之間的關聯性建模是解決開源軟件演化確認的一條可行之路。
主題模型是一種可以從大量的文檔中提取出文檔中包含主題的方法,因此它可以從語義功能層面分析出軟件源代碼中包含了哪些主題,進而通過主題得到哪些代碼實現了軟件的某個功能。
當前,主題模型大多作為工具用于自然語言和信息檢索領域的研究。文獻[14]將主題模型應用于分析人們看到在線新聞時的情感,并把這些分析結果反饋給新聞發布人員;也有研究人員在文本信息的識別和處理研究中,提出把主題模型用于文本的主題挖掘,并將原有的主題模型進行改造,提出雙稀疏主題模型[15],進而提出了雙層主題模型用來從引文網絡中發現知識[16]。
目前也有一些研究把主題模型與軟件相關領域結合:文獻[17]提出了一種基于構件驗證的API構件測試模型和相關的測試覆蓋標準,并通過相關實驗進行了驗證,可是并沒有對演化實質和需求是否相符進行確認。文獻[18]把主題模型應用于物聯網的服務發現,提出了相應的算法,最終找到與服務請求最相似的服務集合,但使用的數據集仍是自然語言,并沒有將其與軟件領域相結合,而把主題模型與軟件領域相結合進行研究的,國內包括國外都很少有人開展。文獻[19]把軟件源代碼用主題模型進行處理,然后分析出代碼的功能,將分析結果用于幫助開發人員對軟件進行理解,并沒有把主題模型與軟件演化相結合。
主題模型的應用,除了用于自然語言和信息方面的研究,還有人員將其與圖像識別處理技術相結合,并取得了一定的成果。文獻[20]認為目前計算機視覺領域最大的挑戰是從復雜的環境中識別出人的動作,作者通過使用主題模型的方法更好地解決了動作識別的問題。最近,人們還把主題模型應用于實時交通故障偵察[21]、視頻質量評價[22]、圖像質量和特點評估[23]等方面的研究。
由上述研究方向的多樣化和成果可以看出,主題模型是一種成熟的可以處理文本信息的工具,并且自身也被擴展為其他領域的研究工具,因此可以使用它來對軟件演化進行確認。
主題模型(topic model)是用來在一系列文檔中發現抽象主題的一種概率統計模型,其主要應用在自然語言處理和機器學習領域。該模型是從大量的文檔信息中,提取出內在的主題。從更基礎更直觀的角度理解,就是人們在撰寫一篇文章時,都會圍繞一個主題思想開展寫作,就會有一些與該主題相關的詞匯出現,甚至頻繁出現,主題模型就是試圖使用數學中的概率模型來說明該現象,軟件開發人員在編寫代碼時,也會如此。例如當需要不斷獲取參數并賦值時,就會反復使用get和set兩個詞匯。主題模型會自動分析文檔,統計文檔內的詞匯,根據統計結果進行分析,并給出文檔、主題和詞匯三者之間存在的概率關系。人們使用主題模型對文檔的生成過程進行模擬,再通過參數估計得到各個主題[24]。將主題模型應用于文本信息進行建模分析,有互操作性強,降低維度和可自動分類等優點[25]。
隱含狄利克雷分布(latent Dirichlet allocation,LDA)[26]是一種非監督機器學習的方法,其最早是在2003年由Blei等人[24]提出,研究目的是將其應用于自然語言處理和信息檢索領域。主題模型本身就是一種生成模型,它通過一定的樣本訓練后,描述了一種以一定概率生成某一文本信息的過程[27]。同時,LDA也被證實了是LSI(latentsemanticindexing)的一種替代方法,并且在效率和定位上都優于LSI[28]。
在主題模型LDA中,有一個假設稱為詞袋假設[29],其把文檔信息視為詞頻向量,并且不去考慮詞與詞間的順序,這樣一來就把本不能建模的文字信息轉變成了可以建模的數字信息。在整個模型中,包含了文檔、主題和詞匯三層結構,并通過對訓練集的訓練,以概率模型的形式給出了文檔和主題、主題和詞匯間的關系。在LDA[30]的模式下,文檔是若干個主題按照一定的概率生成的,而主題是若干詞匯按照一定的概率生成的,因此對一個文檔集D中的文檔d,LDA假設了下面的生成過程[31-32]:

在使用LDA對文本信息進行處理時,需要輸入一些相關的參數,主要包括以下參數[28]:
D,文檔;
K,主題數;
α,主題比例的Dirichlet超參數;
β,多項式比例的Dirichlet超參數。
而LDA的輸出,包括以下兩項:
φ,詞-主題的概率分布;
θ,主題-文檔的概率分布。
在模型中,超參數α和 β起著平滑作用。詳細地說,α影響著每一個代碼文件的主題分布,β則影響著每一個主題的詞分布。降低超參數的值會使得α和θ矩陣變得更加稀疏。尤其是在α取較小值時意味著代碼文件中更少的主題。同樣對于β,其值越小,通常就會增加描述特定文檔所需的主題數量。LDA模型的粒度歸因于 β的值[33],因為當每一個代碼文件需要更多的主題來描述時,語料庫中的每一個文檔就會被分解得更細。
文獻[33]對于K值的初始化,只給了一些經驗性的參考,并沒有給出一種選擇的方法。文獻[34]介紹了超參數值設置復雜的估計方法,但這些方法對不同的文檔內容的影響尚不清楚。因此超參數的估計通常都是根據經驗性的方法來賦值,通常α=50/K,β=0.1。
對于參數φ和θ,LDA在進行主題分析時,只能做近似的推理,很難進行精確推理。例如在LDA中包含了吉布斯采樣[35],這是用馬爾科夫鏈蒙特卡洛模擬的一個特殊情況,根據詞在各個文檔中的情況得出準確的分布估計是一個消耗很大的問題。
對于參數估計方法,目前主要有變分貝葉斯推斷(variational Bayesian inference,VB)、期望傳播(expectation propagation,EP)和Collapsed Gibbs Sampling。基于Gibbs抽樣的參數推理方法容易理解且實現簡單,能夠非常有效地從大規模文本集中抽取主題,因此Gibbs抽樣算法成為當前最流行的LDA模型抽取算法。
本文參數估計利用MCMC方法中的Gibbs抽樣算法,可以將該算法看作文本生成的反向過程,即在已知生成結果的情況下,利用參數估計得到參數值[36]:

“Collapsed”是指采用了積分的方法避開了實際需要去估計的參數,而對每個包含單詞的主題進行采樣,如果每個單詞的主題不變,參數就可以在統計頻次后計算出來。因此,參數估計問題變為計算單詞序列下主題序列的條件概率:

式中,zi表示第i個詞所對應的主題;乛i表示不包括第i項;表示主題k中出現詞t的次數;βi是詞t的狄利克雷先驗;表示文本m出現主題k的次數;ak是主題k的狄利克雷先驗。
如果能夠獲取到單詞主題標號,需要的參數計算公式可由下面公式計算出[24]:

式中,φk,t表示主題k中詞t的概率;θm,k表示文本m中主題k的概率。
開源軟件普及速度快,利用率高,演化頻繁,同時也由于開源軟件是群智開發而缺少相關文檔,演化過程在不可控的環境下進行而導致過程不可建模,致使傳統軟件確認方法無法實現對開源軟件的自然延伸。因此本文從故能語義的角度,以源代碼主題模型作為工具進行了研究,提出了一種可以對開源軟件演化活動進行確認的方法。本文的演化軟件確認方法為:獲取軟件源代碼中的特征,并把這些特征按不同粒度進行聚類分析,聚類分析的每一個結果就表示源代碼中的一個主題,每個主題表示軟件系統中的功能模塊,把這些主題與演化需求進行相關性計算,找出與演化需求最相似的主題,從而把確認工作轉換為建立功能模塊與演化需求之間的映射關系,進而確認演化是否與演化需求相符合。
本文方法總體上分為3個過程,如圖1所示。

Fig.1 Verification method of evolved software圖1 軟件演化確認方法
4.1 源數據獲取及處理
本文方法的第一步就是獲取實驗數據,即軟件的源代碼。但是對于一個成品軟件,其源代碼文件中除了代碼外,還包含了大量的其他文件[28],例如xml文件、圖片等,就連代碼文件本身都有許多符號和代碼關鍵字等[37]。這些信息大多都是一些固定的詞組語句,或標記類的語言,而圖片也很難用現有方法進行處理。如果把源代碼文件直接使用主題模型進行分析,不但分析速度會受到影響,連分析結果的準確度也會受到很大的影響,因此只對代碼本身進行主題建模。因為代碼在編寫時,需要寫入大量與所完成功能無關的符號和關鍵字,所以就需要對代碼進行特征提取。依據文獻[38]中的內容“……源代碼中的變量名、函數名、類(對象)名、API函數、注釋等關鍵詞中蘊含了豐富的主題知識,可以通過其識別源代碼與特征之間的映射關系”,就需要從代碼文件中提取方法名、變量名和注釋作為能夠反映代碼所完成功能的特征。
根據上面的描述,本文對實驗源數據的處理,可分為以下步驟:
(1)從分布式版本控制系統中下載同一個軟件的兩個不同版本,并獲取對應的源代碼。
(2)預處理(主要是指對方法名、變量名和注釋的處理)。把提取后特征按類(針對面向對象語言)形成單獨的文件,并以類所在的包名加上自己的類名對該文件進行命名。觀察調整后的特征,發現由于源代碼的格式較為特殊且復雜,故需要做相應的預處理達到去噪的效果。預處理主要包含:去除停詞(如“the”和“and”等),詞根還原(如把“gone”還原為“go”等)和去除運算符等非特征信息。通過這幾個操作,可以減少無用特征的數量,提高有用特征的比例。
(3)版本內容協同化處理。在軟件演化過程中,常常會涉及到功能的增加、刪除和整合,或者說代碼的變化。例如一個文件在更新時被刪除了,就會使得在確認時,找不到這個文件,從而無法確認;亦或是軟件在更新時,對某個文件進行了大量的增加和刪除,當需要對這個文件進行確認時,確認的精確度就會受到影響。因此需要對兩個版本的特征文件集進行處理。根據文獻[39]所描述的方法,需要把在低版本中存在,但是高版本中不存在的添加到高版本中,具體的操作是“若低版本中有而高版本中沒有的文件,則直接把該文件拷貝到高版本中;若某個文件在低版本和高版本中均存在,則以行為基礎,找出低版本中有而高版本中沒有的行,加入到高版本的該文件中”。
表1為提取源代碼中的特征并處理后的文件內容示例。

Table 1 Sample of features表1 特征示例
通過使用LDA主題模型對提取后的特征進行建模分析后,就可以得到主題和詞之間的概率模型。表2為一生成概率模型示例。
如表2所示,Topic 0包含了3個單詞,分別是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 相關性計算
演化活動的確認,或者說是特征匹配,本質上是識別演化活動中被修改的代碼在功能語義上是否與演化需求存在相關性,建立特征描述向量與代碼主題之間的映射關系,該過程必須依賴某種相似性的測度方法。主題中各代碼向量在幾何空間上的分布往往是不均勻的,因此不能簡單地將相似性理解為計算特征描述向量與主題中各代碼向量的中心點間的歐式距離。另外,由于特征描述向量和代碼向量維數大多超過三維,程序員無法直觀想象代碼向量與特征描述向量的分布情況。
因此相關性的計算是演化確認的關鍵,而實際上要做的就是識別出演化活動的影響,或者說就是定位出軟件演化前后工作人員都修改了哪些代碼文件,而如何找到這些被修改了的文件,就需要借用到一些相似度計算方法。
在對已經演化的代碼文件進行定位時,需要輸入與演化相關的描述性語句,將其稱為演化需求。輸入的演化需求在進行定位時意義重大,因為其內容直接關系到能否準確定位到相關文件,也就直接關系到能否確認演化。
選取一條演化需求,并對這條需求也做去除停詞和詞根還原處理。然后計算該條需求和每一個主題的相似度,實際上就是計算需求和每個主題夾角的余弦值。根據計算出來的相似度,選擇相似度最高的一個或若干個主題中所包含的主題詞,然后統計這些主題詞在所有特征文件中的出現次數,同時也需要統計出每個特征文件中的總詞數。根據文獻[39]所提的內容,使用“出現率”這一標準來對所有特征文件進行排序。
定義1使用ONT(occurrence numbers of topicwords)表示在一個特征文件中所選主題詞出現的總次數,使用TWD(total words in a document)代表該特征文件中詞匯總數,則出現率(occurrence rate)可定義如下:

4.3 演化確認
演化確認的方法有很多種,例如對演化的過程模型進行驗證,亦或是用靜態的方法去驗證,或者進行形式化驗證,但是這些方法對開源軟件都不可用,原因如下:
(1)開源軟件由于群智開發,開發過程和演化過程不可建模的特點,前期使用過程確認的研究成果無法適用于開源軟件。
(2)靜態方法的基本思想是要考慮程序的所有執行路徑,并且需要驗證每條執行路徑上的斷言是否滿足。如果是大型的系統采用這種方法進行確認,則會出現數量極其龐大的路徑網,這就需要確認人員對系統具有較高的理解程度,而開源軟件的維護人員往往不是開發人員,因此維護人員對系統的理解程度就會比較低,導致這種方法可行度不高。
(3)形式化的驗證方法需要有軟件系統對應的文檔支持,但絕大多數的開源軟件文檔缺失嚴重,無法使用形式化的方法。
本文提出的軟件演化確認方法,是針對具有群智開發,開發過程和演化過程不可建模,文檔缺失等特點的開源軟件進行的,同時確認人員不需要對系統有較高的理解程度,因此最終希望通過實驗給出一個具體的數值結果,根據這個結果來區分是否演化。
本文不但需要對已經演化的需求進行實驗,也要對沒有演化的需求進行實驗。故在本文中,對大量沒有演化的需求也進行了實驗,并分析兩者的實驗結果。通過大量實驗結果和相關數據的分析,得出了本文所題方法在確認軟件演化時的結論:當結果達到或高于該標準的某個值時,就認為選取的這條演化需求已經成功演化;當低于該標準的這個值時,就認為沒有演化或演化失敗。
5.1 實驗數據及獲取
為了保證實驗的客觀性,本文構建了一個benchmark。在benchmark中,有相應的演化需求和該需求對應修改的源代碼文件。
對于實驗數據的處理,3.1節已經做了詳細的介紹。
通過對現有開源軟件的查找和benchmark的分析,并根據文獻[39]的描述,下載了ArgoUML(http:// argouml-downloads.tigris.org/)0.20和0.22兩個完整的版本(ArgoUML是由Java編寫),同時也找到了與這兩個版本對應的benchmark(http://www.cs.wm. edu/semeru/data/benchmarks/),這樣本文所需要的實驗數據就基本獲取完畢。
在benchmark中,有多個文件夾,每個文件夾內文件所對應的內容如表3所示。

Table 3 File and its content in benchmark表3 benchmark中的文件及其內容
本文所用的查詢語句就來自于Queries中的Short-Description。
5.2 實驗過程
本文使用的LDA建模工具為JGibbLDA(http:// jgibblad.sourceforge.net/)。按照其對輸入文件的要求(文件第一行為文檔的數量,其余每行為文檔內的具體詞匯,詞匯與詞匯間用空格分開),把源代碼的特征文件進行整理并形成一個單獨的文件。輸入文件內容和格式如表4所示。

Table 4 File format of input表4 輸入文件格式
經過觀察發現,源代碼的特征文件數量特別龐大,一般都是幾千甚至上萬個,如果將一個特征文件作為一個文檔進行整理,則輸入文件內的行數會特別多,導致運行結果的收斂速度慢。因此把一個包中所有類的特征文件視為一個文檔進行整理。
JGibbLDA是一個很復雜的非監督機器學習程序,其理論依據主要來自文獻[26]?,F在非監督的機器學習方法或者半監督的機器學習方法,大多需要設置一些參數調整后啟動運行,JGibbLDA也是如此。表5介紹了JGibbLDA啟動運行時所需要的主要參數和這些參數的意義。

Table 5 Parameter and its meaning表5 參數及其意義
在這些主要的參數中,dir、K、niters和twords的設置都相對簡單,也不會對運行結果產生很大影響。但是α和β兩個參數,都屬于超參數,目前國內外的研究結果中,沒有一種帶有理論依據的設置方法,需要使用時賦值大多憑借的是人工經驗。文獻[33]的研究結果表明,α和 β可以賦值為50/k(k為輸入文件內文檔的數量)和0.1,因為這樣運行結果會有較快的收斂速率。
在JGibbLDA運行結束后,使用一個名為modelfinal.twords的數據進行相關性計算,計算步驟大致為以下5步[39]:
(1)從ShortDescription中選取一條演化需求,對其進行去停詞和詞根還原處理。
(2)假設參數ntopics和twords分別設置為N和T,則生成N個T維的向量,同時需要把這N個T維的向量賦上初始值0。
(3)對這N個T維向量賦值:假設主題m(0<m<N+1)包含了處理后的演化需求中的單詞wi(0<i<T+1),那么將單詞wi所對應的概率p加到第m個向量的第i個位置。
(4)重復步驟3,直到這N個T維向量全部賦值完畢。然后將第m個T維向量的值,與文件modelfinal.twords中第m個主題詞對應的值計算兩個向量夾角余弦值,其中m=1,2,…,N。
(5)將計算出的余弦值按降序排列,取前一個或者多個主題的所有主題詞,在所有源代碼的特征文件中進行詞頻統計,計算出現率,把出現率按降序排列。
5.3 實驗結果文件
使用JGibbLDA對源代碼的特征進行分析,其結果文件可按后綴名分為5類文件,具體如表6所示。

Table 6 Filename extension and its content表6 文件后綴名及其內容
6.1 度量標準
為了對本文方法在性能等方面進行評測,需要使用一些度量標準。在信息檢索領域,目前常常會使用查全率和查準率作為衡量指標,并通過這兩個指標來對輸出結果進行評價[40]。
定義2Recall表示查全率,correct代表所需查找的演化文件,retrieved代表使用本文方法查找出來的文件,則查全率的定義為:

查全率,也稱為召回率,是指檢出的相關文獻量與檢索系統中相關文獻總量的比率,是衡量信息檢索系統檢出相關文獻能力的尺度。
定義3 Precision表示查準率,correct代表所需查找的演化文件,retrieved代表使用本文方法查找出來的文件,則查準率的定義為:

查準率,也可稱為精度,是衡量某一檢索系統的信號噪聲比的一種指標,即檢出的相關文獻與檢出的全部文獻的百分比。
定義4使用F-measure代表查全率和查準率調和平均數,Recall代表查全率,Precision代表查準率,則調和平均數定義為:

6.2 實驗結果
本文實驗使用了ArgoUML的0.20和0.22兩個版本的源代碼作為實驗源數據,按照上文所提到的處理方法進行整理后,一共得到1 562個類(或特征文件)和96個包,然后按照JGibbLDA輸入文件的要求整理成一個文件。根據輸入的文檔數和所需要的結果,α、β、K、niters和twords共5個參數的值分別設置為0.528、0.1、30、1 000、100和50。
表7為從ShortDescription中選取的10條已經演化的描述。
因為本文試圖找到一種能夠確認軟件是否已經演化的方法,所以不但需要對已經演化的進行實驗,而且還要對沒有演化的也進行同樣的實驗,進而找出兩者的區別。故從其他版本的ShortDescription中,也找了10條在0.20和0.22版本沒有進行演化的描述,具體如表8所示。

Table 7 Description of evolution requirement表7 對演化需求的描述

Table 8 Description of non-evolution requirement表8 對沒有演化需求的描述
文獻[40]推薦了取出現率最高的前10%~15%樣本來進行查全率和查準率的計算,那就取前10%來進行計算。
對于已經演化和沒有演化的進行實驗后,都計算查全率和查準率,具體數值如表9所示。
為了防止實驗結果的偶然性,針對一條已經演化的需求,需要把10條沒有演化的需求都給出結果,取平均值。例如對于實驗序號1中的實驗,未演化的查全率和查準率是把表8中的10條沒有演化的都求出查全率和查準率后取的平均值。從實驗結果可以得出,已演化的查全率和查準率平均值為90.00%和1.09%,而沒有演化的卻只有41.58%和0.49%,兩者具有很明顯的差異。

Table 9 Results of experiments with 10%sampling表9 取10%樣本的實驗結果
圖2是表9中的數據,其中圖(a)是查全率,圖(b)是查準率。

Fig.2 Recall and Precision with 10%sampling圖2 取10%樣本的查全率和查準率
從圖2中可以很明顯地看出,針對每一個實驗,已經演化的在查全率和查準率上都高于沒有演化的,這說明本文方法確實能區分演化與否。但是進一步思考會發現,對于查全率和查準率,已演化和沒有演化的都不能指定一個數值,這個數值能把10次實驗都區分開來。
從上述查全率和查準率的表達公式可以看出,兩者存在著互逆的關系,更直觀地說一個將文檔集合中所有文檔返回為結果集合的系統有100%的查全率,但是查準率卻很低(http://baike.baidu.com/view/ 2126615.htm?fr=aladdin)。舉個例子來說,比如從1 000個文件中找1個文件,那么correct就是1,當retrieved取1 000時,那查全率必定是100%,反而查準率只有0.1%。因此為了綜合評價兩者的性能,就需要使用調和平均數F-measure。
表10為取10%樣本的調和平均數。

Table 10 F-measure with 10%sampling表10 取10%樣本的調和平均數
圖3為已演化和未演化的調和平均數對比圖。

Fig.3 F-measure with 10%sampling圖3 取10%樣本的調和平均數
從表10和圖3中可以得出,已演化的調和平均數的平均值為0.021,而未演化的只有0.009 7,具有很明顯的差異,從一條實驗結果也可以看出兩者也有差異。但是同樣存在和查全率、查準率一樣的問題,就是對于整體不能指定一個數值來劃分兩者。
從查全率、查準率和調和平均數的圖可以很直觀地看出,對于一個實驗點是具有很強區分度的,但是無法將整體進行區分,因此考慮縮小文件數量,從10%縮小到5%,來重新計算實驗結果。
表11為取5%樣本的查全率、查準率和調和平均數的統計結果。

Table 11 Recall、Precision and F-measure with 5%sampling表11 取5%樣本的查全率、查準率和調和平均數
從表11中可以得出,已演化的在查全率、查準率和調和平均數三者的平均數為68.33%、1.28%和2.50%,沒有演化的確只有25.67%、0.56%和1.10%。
圖4為取5%樣本的查全率、查準率和調和平均數三者的比較結果。其中圖(a)是查全率,圖(b)是查準率,圖(c)是調和平均數。
從圖4中可以直觀地看出,在圖(b)和(c)中,已演化和沒有演化的區別已經比較明顯。若圖(b)中查準率在1.15%和1.28%之間取值,或圖(c)中調和平均數在2.27%和2.44%之間取值,都可以在10條數據中按是否演化區分出9條,區分度已經達到90%。

Fig.4 Recall、Precision and F-measure with 5%sampling圖4 取5%樣本的查全率、查準率和調和平均數
是否有方法能進一步區分是否演化,或者說是否能再次提高查全率、查準率和調和平均數,文獻[39]針對該問題,使用了一類被稱為“組合詞”的詞匯來提高查全率、查準率和調和平均數。所謂的組合詞,就是由兩個或者兩個以上的基本單詞復合而成,類似于“listenerlist”和“loadedfromfile”。這類詞匯在預處理時沒有進行分詞操作,同時在人類的自然語言中是不會出現的,在使用LDA進行分析[41]時也不會進行特別處理。然而實際上,這些詞匯在系統開發人員編寫代碼時,會經常使用到這類的詞匯來表達一些復雜的操作,同時也方便以后維護時能很快理解這塊代碼所完成的功能。例如看到“listenerlist”,開發人員很直觀的感受就是這應該是個偵聽列表。組合詞的組合方式很多,同一個組合詞在整個系統的源代碼中不會出現太多次,因此使用組合詞的方式來提高查全率、查準率和調和平均數。
使用組合詞提高相應的數據,具體可以分為以下3步:
(1)將所選主題中的主題詞提取出來;
(2)在所有源代碼特征文件中統計這些組合詞出現的次數,并把這些出現次數按降序排列;
(3)若組合詞出現次數最好的演化文件排第M位,出現率最低的演化文件排第N位,則把前M個文件和前N個文件進行交集操作,找出公共部分。
對表7中10條已經演化的描述,再次利用組合詞的方法進行處理,減少了很多無關文件的數量,具體如表12所示。

Table 12 Statistical results within compound words表12 考慮組合詞統計結果
從表12的統計結果可以看出,最好的情況下,可以減少222個無關文件,最差減少了2個文件,平均減少了49。
表13給出了在考慮組合詞后,取前5%樣本的查全率、查準率和調和平均數。
根據表13的計算結果,通過使用組合詞的方法,在取前5%樣本時,10組已演化的查全率、查準率和調和平均數的均值分別是100.00%、2.56%和4.95%,而未演化的只有25.67%、0.56%和1.10%,兩者間的差距與表11相比較更加明顯。
圖5為取5%樣本并考慮組合詞的查全率、查準率和調和平均數的比較結果。
從圖5的數據中可以很明顯地看出,對于查全率和查準率,若查全率取90%到100%之間的值,或查準率取1.15%到1.28%之間的值,都可以把10個已演化的和10個沒有演化的需求進行區分。

Table 13 Recall、Precision and F-measure with 5% sampling and within compound words表13 取5%樣本并考慮組合詞查全率、查準率和調和平均數
文獻[42]是一種基于文本的確認方法,將其作為基線方法用于對表7中的數據進行處理,并與本文方法進行對比。
表14為取前5%樣本,采用基線方法對表7中數據處理后得出的結果。
基線方法與本文方法在查全率、查準率和調和平均數上的對比如圖6所示。
在對比圖中可以直接看出,基線方法在區分是否演化時數值差距小,同時數值起伏大,不如本文方法的區分度強和穩定。通過表14和表13,可以直接算出差距。本文方法(在考慮組合詞時)相較沒有演化的,在查全率、查準率和調和平均數上三者均值的差值為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%樣本的查全率、查準率和調和平均數
6.3 實驗結論
在圖6中,通過對查全率和查準率取值的調整,可以對一條演化需求是否已經演化進行確認。對查全率和查準率兩者的取值,本文取可以進行確認的最大值和最小值的平均數給出實驗結論,故查全率取95%,查準率取1.215%。

Fig.5 Recall、Precision and F-Measure with 5%sampling and within compound words圖5 取5%樣本并考慮組合詞查全率、查準率和調和平均數

Fig.6 Method comparison of this paper and baseline圖6 本文方法與基線方法的對比
通過上述實驗結果,可以得出本文實驗的結論:在使用組合詞,并取出現率前5%高的文件數量進行計算后,若查全率不低于95%,且查準率不低于1.215%時,可以確定輸入的演化需求與演化實質符合;若查全率低于95%,或查準率低于1.215%時,則輸入的演化需求與演化實質不符合。
對于一個演化需求,軟件是否按照需求進行了演化,一直都是軟件演化領域一個重要的研究方向。過去對軟件演化的研究,大多都是理論上的推演或者證明,而對演化確認的研究就更少了。為了能在軟件演化或者軟件工程領域取得一些突破和創新,本文特使用軟件源代碼作為實驗數據,使用主題模型LDA作為實驗工具,提出了軟件演化確認的方法,并用大量的實驗數據證明了方法的有效性,同時開發出與本文方法所對應的確認工具。
最開始研究非監督性機器學習主題模型的目的是將其應用于處理自然語言和檢索信息,本文創新性地將其應用于軟件演化領域,并取得一定的成績,這也說明了未來人工智能和軟件工程將有更多的融合,也必將取得更大的成就。
本文方法雖然取得了一定的成果,但是依然存在著一些問題:首先,確認軟件是否演化,輸入的演化需求很關鍵,這些單詞都需要很客觀和準確地描述在代碼層面上修復了什么錯誤或者缺陷,這樣確認出來的效果才能好;其次,很多演化語句描述的是兩個正式版本間的測試版,使用這些語句時確認效果不會很好;最后,軟件源代碼文件中存在著許多xml或html文件,這些文件中也有大量的特征信息需要去提取。同時本文所提出的演化確認方法并不是一種通用性的方法,因此有它的適用范圍和局限性。
(1)本文方法需要找到同一個軟件的兩個不同版本,并按上文所述方法進行處理和整合;若只有一個版本,則實驗效果會受到很大的影響。
(2)本文的實驗結論建立在大量實驗結果的平均值上,實驗數據真實可靠,實驗結果可信度高,但是主題模型是一種概率模型,對于極少數的特殊情況可能會有一定的誤差。
(3)數據源、數據預處理和代碼書寫的規范程度都會影響最終的結果。
本文將軟件演化與機器學習進行創新性交叉研究,并采用真實的實驗數據進行證明,這給了人們很多啟示和未來的研究方向。首先在設置JGibbLDA運行參數時,對于兩個超參數α和β,是否能提出一種有理論依據或有大量實驗證明的方法;其次,在對軟件源代碼的處理上,能否引入其他的信息,包括一些簡單的圖片;最后,能否研究出新的方法將演化確認進行得更好。同時,將進一步研究主題模型是否還能應用在軟件工程的其他領域,并對本文所開發的確認工具進行完善和擴展,以支持更多語言的源代碼。
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.
附中文參考文獻:
[3]王懷民,史佩昌,丁博,等.軟件服務的在線演化[J].計算機學報,2011,34(2):318-328.
[13]代飛,李彤,謝仲文,等.一種軟件演化過程模型的代數語義[J].軟件學報,2012,23(4):846-863.
[18]魏強,金芝,許焱.基于概率主題模型的物聯網服務發現[J].軟件學報,2014,25(8):1640-1658.
[19]李萌,趙俊峰,謝冰.基于主題建模和靜態分析技術的軟件代碼功能性主題獲取方法[J].中國科學:信息科學, 2014,44(1):54-69.
[24]徐戈,王厚峰.自然語言處理中主題模型的發展[J].計算機學報,2014,34(8):1423-1436.
[36]王振振,何明,杜永萍.基于LDA主題模型的文本相似度計算[J].計算機科學,2013,40(12):229-232.
[38]何云,王煒,李彤,等.面向行為主題的軟件特征定位方法[J].計算機科學與探索,2014,8(12):1452-1462.
[39]韓俊明,王煒,李彤,等.演化軟件的特征定位方法[J].計算機科學與探索,2016,10(9):1201-1210.
[40]鞠小林,姜淑娟,張艷梅,等.軟件故障定位技術進展[J].計算機科學與探索,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—),男,云南文山人,云南大學碩士研究生,主要研究領域為軟件工程,軟件演化,數據挖掘。

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年于云南大學系統分析與集成專業獲得博士學位,現為云南大學副教授,CCF會員,主要研究領域為軟件工程,軟件演化,數據挖掘。發表學術論文15篇,出版教材1部,主持國家級項目1項、省部級項目5項。

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大學軟件工程專業獲得博士學位,現為云南大學軟件學院黨委書記、教授、博士生導師,CCF高級會員,主要研究領域為軟件工程,信息安全。發表學術論文100余篇、專著2部、教材5部,主持國家級項目5項、省部級項目14項、其他項目20余項。

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—),男,云南建水人,云南大學博士研究生,CCF學生會員,主要研究領域為軟件工程,軟件演化,數據挖掘。
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(國家自然科學基金);the Key Project of Natural Science Foundation of Yunnan Province under Grant No.2015FA014(云南省自然科學基金重點項目);the Natural Science Foundation of Yunnan Province under Grant No.2013FB008(云南省自然科學基金).
Received 2016-04,Accepted 2016-06.
CNKI網絡優先出版: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.
摘 要:軟件演化確認是軟件工程領域的一個重點和熱點的研究方向。由于開源軟件具有群智開發,演化過程不可控和不可建模等特點,使得傳統的確認方法不適合于開源軟件,故從功能語義角度提出了一種軟件演化確認方法,試圖將代碼按主題的方式進行聚類,每一個主題表征軟件系統的一個功能集合,演化確認工作被轉化為功能集合與演化需求之間的映射關系。通過對現有開源軟件的源代碼進行實驗,獲取了大量的真實可靠實驗數據,對這些實驗數據進行分析后得出的實驗結果表明該方法相較基于文本的基線方法,更能有效區分是否已經演化,可以用于對軟件演化進行確認工作。