巴元秀,趙逢禹,劉 亞
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
軟件項(xiàng)目復(fù)用對減少開發(fā)工作量和成本、提高軟件項(xiàng)目質(zhì)量具有重要影響。在軟件開發(fā)中,通過復(fù)用技術(shù)可以充分利用已有的開發(fā)成果,從而提高軟件開發(fā)的效率、降低開發(fā)成本。同時,通過復(fù)用高質(zhì)量的已有的開發(fā)產(chǎn)品,避免了重新開發(fā)過程中可能引入的錯誤,從而提高軟件的質(zhì)量。
Gharehyazie等人利用代碼克隆檢測工具Deckard研究項(xiàng)目內(nèi)部以及跨項(xiàng)目的克隆,研究發(fā)現(xiàn)代碼克隆非常普遍,從同一項(xiàng)目的幾行代碼到跨項(xiàng)目的代碼片段之間都檢測到不同程度的相似。Zhang Yun等人研究GitHub上的項(xiàng)目復(fù)用,發(fā)現(xiàn)含有相似的README文件的軟件項(xiàng)目存在相似性。由此可以看出不論是代碼級別還是項(xiàng)目級別,都存在著大量的復(fù)用。
目前最常用的軟件復(fù)用技術(shù)主要是代碼的復(fù)用。軟件開發(fā)人員在進(jìn)行項(xiàng)目開發(fā)的過程中發(fā)現(xiàn),開發(fā)同類型的軟件應(yīng)用時會實(shí)現(xiàn)相似或相同的功能,相應(yīng)的代碼實(shí)現(xiàn)也是相似的。代碼克隆技術(shù)便是代碼復(fù)用方法中最原始且最常用的技術(shù),一般表示為開發(fā)人員通過代碼搜索技術(shù)從開源項(xiàng)目中找到自己所需要的源代碼并復(fù)制到自己的項(xiàng)目中。文獻(xiàn)[5]提出一種代碼級別的復(fù)用技術(shù),該技術(shù)利用提取工具將源代碼的內(nèi)容生成代碼摘要,將用戶輸入的文本與代碼摘要進(jìn)行搜索查詢,最后獲取相似的代碼進(jìn)行復(fù)用。
近年來,隨著開源生態(tài)的完善,人們更多地關(guān)注項(xiàng)目級別的復(fù)用研究。Xu等人研究跨項(xiàng)目復(fù)用,利用歷史開源軟件項(xiàng)目的描述文檔和源代碼,將其與待開發(fā)項(xiàng)目的功能進(jìn)行相似性度量并推薦相似的軟件項(xiàng)目。Thung等人利用相似的項(xiàng)目會共享相似的第三方庫這一原理,提取開源項(xiàng)目使用的庫,利用對庫的相似性匹配相似的項(xiàng)目實(shí)現(xiàn)項(xiàng)目級別的復(fù)用。Nguyen等人提出生態(tài)系統(tǒng)概念,由歷史開源項(xiàng)目、庫以及項(xiàng)目之間的相互依賴關(guān)系組成,將開發(fā)人員對待開發(fā)項(xiàng)目的創(chuàng)建、修改等行為與生態(tài)系統(tǒng)分別構(gòu)建成圖,利用圖的相似性算法選取相似的項(xiàng)目進(jìn)行復(fù)用。
文獻(xiàn)[6~8]在項(xiàng)目級復(fù)用研究中仍有不足之處。文獻(xiàn)[6]主要研究了項(xiàng)目開發(fā)過程中跨項(xiàng)目的代碼復(fù)用技術(shù),是編碼階段的復(fù)用方法。文獻(xiàn)[7]是從項(xiàng)目使用的庫方面考慮復(fù)用,文獻(xiàn)[8]是根據(jù)歷史開源項(xiàng)目、庫以及待開發(fā)項(xiàng)目三者之間的依賴關(guān)系考慮復(fù)用。以上的研究都還沒有實(shí)現(xiàn)從待開發(fā)項(xiàng)目的需求分析考慮項(xiàng)目級別的復(fù)用。
文獻(xiàn)[9]提出一種基于需求規(guī)范文檔進(jìn)行代碼的功能特征復(fù)用的方法,該方法首先從需求規(guī)范文檔中提取出功能特征關(guān)鍵詞,然后將提取出的關(guān)鍵詞與代碼庫中代碼的功能特征關(guān)鍵詞進(jìn)行相似性匹配,最后根據(jù)相似的功能特征進(jìn)行代碼復(fù)用。文獻(xiàn)[9]從需求規(guī)范文檔的功能特征出發(fā),搜索可復(fù)用的代碼,仍然屬于項(xiàng)目局部功能的代碼復(fù)用。
在軟件工程實(shí)踐中,當(dāng)開發(fā)人員獲取項(xiàng)目的軟件需求后,通常需要根據(jù)需求文檔中的問題領(lǐng)域、用例描述、數(shù)據(jù)模型E-R圖搜索開源項(xiàng)目庫中的相似軟件項(xiàng)目。如果能從需求文檔的問題領(lǐng)域、用例描述以及數(shù)據(jù)模型方面找到相似的歷史項(xiàng)目進(jìn)行復(fù)用,可以大大節(jié)省項(xiàng)目設(shè)計(jì)與實(shí)施時間。而用自動化的方法找到相似的歷史項(xiàng)目,是一件復(fù)雜的工作。因此本文提出了一種基于軟件需求規(guī)范的的項(xiàng)目級復(fù)用方法PR-REQ(Project Reuse based on Requirements Specification)。該方法首先分析歷史開源項(xiàng)目,構(gòu)建算法提取歷史項(xiàng)目核心信息,包括項(xiàng)目的領(lǐng)域信息、代碼的功能操作序列以及數(shù)據(jù)模型信息。然后針對待開發(fā)軟件項(xiàng)目的需求文檔,研究提取問題領(lǐng)域、用例的功能操作序列以及數(shù)據(jù)模型等信息的方法。最后分別構(gòu)建領(lǐng)域相似性度量、功能操作序列相似性度量以及數(shù)據(jù)模型相似性度量算法,加權(quán)計(jì)算得到最終的相似性度量值并按由大到小排列。文中從GitHub上下載了8類Java web項(xiàng)目構(gòu)造實(shí)驗(yàn),對本文提出的方法進(jìn)行實(shí)證。
項(xiàng)目級別的復(fù)用是對歷史項(xiàng)目在軟件架構(gòu)、功能實(shí)現(xiàn)、數(shù)據(jù)模型、設(shè)計(jì)與編碼等多方面的復(fù)用,也是軟件復(fù)用中最高級別的復(fù)用。為了實(shí)現(xiàn)項(xiàng)目級別的復(fù)用,圖1給出了該方法的操作流程圖,分為3步,它們分別是歷史開源項(xiàng)目信息的提取、待開發(fā)項(xiàng)目的需求文檔分析以及項(xiàng)目相似性度量計(jì)算。
(1)歷史開源項(xiàng)目信息的提取。
為了復(fù)用歷史項(xiàng)目,需要對開源歷史項(xiàng)目進(jìn)行數(shù)據(jù)分析與特征提取。在每個項(xiàng)目中,大部分都有源代碼和描述文檔。源代碼包含了項(xiàng)目的功能信息和數(shù)據(jù)模型信息。描述文檔通常給出了項(xiàng)目的功能介紹、用法以及如何安裝或部署。
a.描述文檔領(lǐng)域信息的提取。
分析描述文檔中的項(xiàng)目功能介紹,利用自然語言的方法處理文本主題分析提取項(xiàng)目的領(lǐng)域信息。
b.代碼中功能信息的提取。
采用靜態(tài)代碼分析技術(shù)解析歷史項(xiàng)目的代碼,提取項(xiàng)目的各功能操作,構(gòu)建項(xiàng)目的功能操作序列。
c.數(shù)據(jù)模型信息的提取。
從數(shù)據(jù)庫配置文件或源代碼中提取所使用的數(shù)據(jù)庫的表名、列名等信息,構(gòu)建數(shù)據(jù)模型。
(2)待開發(fā)項(xiàng)目的需求文檔分析。
a.領(lǐng)域信息的提取。
在軟件復(fù)用時,屬于同一個領(lǐng)域的項(xiàng)目被復(fù)用的可能性更高。這里通過自然語言處理方法,對需求文檔進(jìn)行分析,提取待開發(fā)項(xiàng)目的領(lǐng)域信息。
b.功能操作信息的提取。
為了從項(xiàng)目的功能方面進(jìn)行相似性度量分析,需提取需求文檔中的用例,根據(jù)用例中的活動和參與活動的對象,構(gòu)建待開發(fā)項(xiàng)目各功能的功能操作序列。
c.數(shù)據(jù)模型信息的提取。
在數(shù)據(jù)模型E-R圖中提取與待開發(fā)項(xiàng)目有關(guān)的實(shí)體信息。
(3)項(xiàng)目相似性度量。
a.領(lǐng)域相似性度量。
為了能夠根據(jù)需求文檔中的領(lǐng)域信息在歷史開源項(xiàng)目中尋找領(lǐng)域方面相似的項(xiàng)目,本文從開源歷史項(xiàng)目的描述文檔和待開發(fā)項(xiàng)目的需求文檔中各提取若干個主題,利用主題的相似性計(jì)算領(lǐng)域的相似度。a
=(a
,a
,…,a
)定義為從待開發(fā)項(xiàng)目的需求文檔描述中提取的n
維主題向量,b
=(b
,b
,…,b
)定義為從開源歷史項(xiàng)目的描述文檔中提取的n
維主題向量,領(lǐng)域相似度計(jì)算如公式(1)所示。(1)
b.功能操作相似性度量。
為了從功能操作方面比較待開發(fā)項(xiàng)目的需求文檔和歷史開源項(xiàng)目之間的相似性,本文構(gòu)建了功能操作序列的相似性度量方法。待開發(fā)項(xiàng)目的需求文檔中的功能操作序列定義為W
={W
,W
,…,W
},其中W
(i
=1,2,…,m
)代表一組功能操作序列的集合。歷史開源項(xiàng)目中提取的功能操作序列定義為T
={T
,T
,…,T
},其中T
(j
=1,2,…,n
)代表一組功能操作序列的集合。序列W
中序列的個數(shù)記為m
,序列T
中序列的個數(shù)記為n
,采用余弦相似度計(jì)算W
中任一個序列W
與T
中任一個序列T
的相似度值記為S
(W
,T
),最后根據(jù)公式(2)計(jì)算最終的相似度值。S
(W
,T
)=(2)
c.數(shù)據(jù)模型相似性度量。
為了更準(zhǔn)確地進(jìn)行項(xiàng)目復(fù)用,本文對數(shù)據(jù)模型也進(jìn)行分析,構(gòu)建數(shù)據(jù)模型相似性分析。歷史開源項(xiàng)目中的數(shù)據(jù)模型定義為A
={A
,A
,…,A
},其中A
(j
=1,2,…,n
)代表由表名、列名信息組成的一組數(shù)據(jù)模型集合,集合A
中的個數(shù)記為n
。待開發(fā)項(xiàng)目的需求文檔中提取出的數(shù)據(jù)模型定義為C
={C
,C
,…,C
},其中C
(i
=1,2,…,m
)代表由需求文檔中表名、列名信息組成的一組數(shù)據(jù)模型集合,集合C
中的個數(shù)記為m
。采用余弦相似度計(jì)算集合A
中任一組數(shù)據(jù)模型A
與集合C
中任一組數(shù)據(jù)模型C
的相似度值記為S
(C
,A
),最后根據(jù)公式(3)計(jì)算集合C
與A
的相似度值。S
(C
,A
)=(3)
d.計(jì)算候選項(xiàng)目的最終相似得分。
在分別計(jì)算上述三種相似度值后,最后采用公式(4)進(jìn)行加權(quán)計(jì)算得到最終的相似性度量分值。
(4)
其中,α
代表領(lǐng)域信息的權(quán)重,β
代表功能操作序列的權(quán)重,γ
代表數(shù)據(jù)模型的權(quán)重。圖1 PR-REQ方法流程圖
PR-REQ項(xiàng)目復(fù)用方法中的關(guān)鍵技術(shù)主要是從歷史開源項(xiàng)目與待開發(fā)項(xiàng)目的需求文檔中提取相關(guān)特征,然后計(jì)算這些特征的相似度并基于特征相似性推薦可復(fù)用的歷史項(xiàng)目。其中的關(guān)鍵技術(shù)主要有歷史開源項(xiàng)目信息的提取和待開發(fā)項(xiàng)目需求文檔信息的提取。
大多數(shù)開源項(xiàng)目中都有描述文檔和源代碼。為了分析歷史開源項(xiàng)目,本文對項(xiàng)目中包含的描述文檔和源代碼進(jìn)行數(shù)據(jù)分析和特征提取。
(1)領(lǐng)域信息的提取
描述文檔是描述軟件項(xiàng)目信息的文檔,它一般包含軟件的基本功能、簡要的使用說明、代碼目錄結(jié)構(gòu)說明等信息。文中使用斯坦福主題模型工具提供的基于概率模型的LDA主題模型算法對描述文檔中的項(xiàng)目功能介紹部分進(jìn)行領(lǐng)域信息的主題提取。
在對領(lǐng)域描述文本進(jìn)行數(shù)據(jù)提取等相關(guān)工作之前,一般要進(jìn)行文本的預(yù)處理。文本的預(yù)處理也就是將需要進(jìn)行分析的文本通過一定的方式轉(zhuǎn)換成方便處理的結(jié)構(gòu)化的數(shù)據(jù)形式, 可以提高文本處理的準(zhǔn)確性。需求規(guī)范文檔大多由中文文本構(gòu)成,因此文中主要使用的預(yù)處理方式是中文文本的預(yù)處理。結(jié)合對于中文文本的特征進(jìn)行分析,在研究的過程中,文本預(yù)處理方式主要包括語料庫清理、分詞、詞性標(biāo)注和停止詞過濾。
①語料庫清理。
語料庫的清理主要是清理和刪除一些非法語言文字等不良數(shù)據(jù)。
②分詞、詞性標(biāo)注。
詞是構(gòu)成語句的基本單元,分析語句前需要先分詞,將文本中詞切分出來作為特征值,是自然語言處理比較重要的一步。中文分詞就是指將句子中漢字序列切分成詞集合。相對于英文而言,中文分詞要復(fù)雜得多。
③停止詞過濾。
在普通文本中含有標(biāo)點(diǎn)符號、介詞、語氣詞等,這些詞對理解文本沒有實(shí)際意義,應(yīng)從分詞結(jié)果中去除,這些詞稱之為停用詞。去停用詞可以省存儲空間,減少停用詞對理解語句造成的噪音,降低文本維度,可以提高處理文本的效率和準(zhǔn)確率。
文獻(xiàn)[13]認(rèn)為對一篇科技文獻(xiàn),提取主題數(shù)量在5到6個時分析效果最好。借鑒該研究的結(jié)論,對軟件需求與歷史項(xiàng)目文檔的主題數(shù)量為5。
(2)代碼中功能操作序列的提取。
如何在軟件項(xiàng)目代碼中提取主要功能的操作序列是本文的關(guān)鍵算法。對于不同的軟件項(xiàng)目,由于其軟件架構(gòu)不同,其功能的操作序列提取方法也有差異,但都可以通過對配置文件與源代碼的靜態(tài)分析獲得。文中以Java web項(xiàng)目為研究對象,給出特征提取算法。Java web項(xiàng)目的功能操作信息主要體現(xiàn)在項(xiàng)目的頁面文件上,因此文中針對Java web項(xiàng)目的頁面文件提取功能操作序列。為了從頁面文件中提取項(xiàng)目的功能操作,需要利用JSOUP解析器從應(yīng)用程序的入口頁面開始對其進(jìn)行數(shù)據(jù)解析,提取對應(yīng)頁面的功能操作,構(gòu)建功能操作序列。在提取功能操作時,在web頁面中,操作功能主要分為靜態(tài)和動態(tài)兩類。 就是一個靜態(tài)頁面的跳轉(zhuǎn),可以從中提取出“注冊”功能; 是一個動態(tài)頁面的跳轉(zhuǎn),在點(diǎn)擊“提交訂單”的同時會調(diào)用saveOrder方法,從后臺數(shù)據(jù)庫中調(diào)取數(shù)據(jù),可以從中提取出“提交訂單”功能。算法1給出了代碼功能操作提取算法。
算法1:代碼功能操作提取算法。
輸入:Java web項(xiàng)目的頁面文件集合P
={p
,p
,…,p
},項(xiàng)目的配置文件config。輸出:項(xiàng)目的功能操作序列T
={T
,T
,…,T
},其中T
(i
=1,2,…,m
)為一組功能操作序列的集合處理:
1.初始化隊(duì)列Queue,G
={V
,E
},V
=Φ,E
=Φ;2.從config中找到項(xiàng)目的入口頁面文件,不失一般性假設(shè)為p
;3.將p
作為訪問的第一個頁面文件入隊(duì)列Queue;4.while(Queue非空)
{
CurrentPage=deQueue(Queue);//隊(duì)頭元素出隊(duì);
V
=V
∪{CurrentPage};利用JSOUP解析器提取CurrentPage頁面中的功能操作信息f
和與之對應(yīng)的跳轉(zhuǎn)頁面p
,p
∈P
;構(gòu)造G
的有向邊,加入到集合E
中,記為E
=E
∪{<(CurrentPage,p
),f
>};if (p
not inV
)p
入隊(duì)列Queue;}
5.在圖G
中,從節(jié)點(diǎn)p
開始按照深度優(yōu)先算法遍歷路徑上的功能操作f
構(gòu)造功能操作序列T
;6.輸出功能操作序列T
,結(jié)束算法。(3)數(shù)據(jù)模型的提取
算法以Java web項(xiàng)目的代碼文檔集合作為輸入,采用一種輕量級的查詢提取工具SQL提取器,該工具使用AST過程內(nèi)的字符串解析,能夠?qū)Υa中的數(shù)據(jù)模型進(jìn)行靜態(tài)分析,提取出帶有元信息的SQL語句,通過對SQL語句進(jìn)行分析,輸出含有數(shù)據(jù)庫的表名、列名信息的集合。文中給出了利用SQL提取器進(jìn)行數(shù)據(jù)模型提取的過程,見算法2。
算法2:數(shù)據(jù)模型的提取。
輸入:項(xiàng)目的代碼文檔集合B
={b
,b
,…,b
}。輸出:表名、列名信息組成的數(shù)據(jù)模型集合A
={處理:
1.初始化集合A
;2.將b
作為訪問的第一個代碼文檔;3.for each (CurrentFile inB
){
利用SQL提取器提取出CurrentFile中SQL語句的表名和Insert語句中的列名,記為
A
=A
∪{對于待開發(fā)項(xiàng)目,需要在需求文檔中提取領(lǐng)域信息、功能操作信息、數(shù)據(jù)模型。其中領(lǐng)域信息的提取方法與歷史開源項(xiàng)目中提取領(lǐng)域信息的方法一致。數(shù)據(jù)模型的提取是對需求文檔的數(shù)據(jù)模型E-R圖中的實(shí)體關(guān)系進(jìn)行分析。功能信息的提取是對需求文檔中的用例進(jìn)行特征提取,提取用例的活動,構(gòu)建待開發(fā)項(xiàng)目的功能操作序列。限于篇幅,文中主要介紹對需求文檔中的功能信息進(jìn)行提取的方法。
用例由用例名稱、描述、角色、編號、前置條件以及主事件流等組成,文中給出了用例功能操作序列的提取算法,該算法使用需求文檔中的用例集合R
={r
,r
,…,r
}作為輸入,提取出與系統(tǒng)進(jìn)行交互的用例活動,構(gòu)建功能操作序列W
={W
,W
,…,W
}作為輸出,見算法3。算法3:用例功能特征的操作序列的提取。
輸入:需求文檔中的用例集合R
={r
,r
,…,r
}。輸出:功能操作序列W
={W
,W
,…,W
},其中W
(i
=1,2,…,m
)為一組功能操作序列的集合。處理:
1.初始化集合W
;2.將r
作為訪問的第一個用例;3.for each (CurrentUse inR
){
根據(jù)CurrentUse中的事件流的交互過程,提取出參與用例活動的操作和對應(yīng)的活動對象,構(gòu)建功能操作序列集合記為W
;W
=W
∪W
;}
4.輸出操作序列W
,結(jié)束算法。在軟件項(xiàng)目級別的復(fù)用研究領(lǐng)域中,目前尚沒有找到包含待開發(fā)項(xiàng)目的需求文檔、歷史項(xiàng)目的源代碼數(shù)據(jù)集,以及它們之間相似度的度量參考標(biāo)準(zhǔn)。因此為了驗(yàn)證文中提出的PR-REQ方法的準(zhǔn)確性,文中構(gòu)造了一個實(shí)驗(yàn),采用人工方法和PR-REQ方法分別對需求文檔進(jìn)行分析,將PR-REQ方法找出的Top N的相似軟件項(xiàng)目與人工找出的Top N的相似軟件項(xiàng)目進(jìn)行一致性和包含性比較。
文中從GitHub上下載了958個Java Web項(xiàng)目,這些項(xiàng)目包含學(xué)校管理類、企業(yè)類、競賽類、網(wǎng)購類、游戲類等八類項(xiàng)目,在這些項(xiàng)目中同時具有需求描述和項(xiàng)目代碼的項(xiàng)目數(shù)共68個。開源軟件項(xiàng)目數(shù)及其類別見表1。
表1 開源軟件項(xiàng)目數(shù)及其類別
基于PR-REQ方法開發(fā)了一個項(xiàng)目復(fù)用推薦程序,該推薦程序首先從數(shù)據(jù)庫中讀取歷史開源項(xiàng)目和待開發(fā)項(xiàng)目的需求文檔。然后分別提取開源項(xiàng)目和需求文檔中的領(lǐng)域信息、功能操作序列以及數(shù)據(jù)模型信息并存儲于數(shù)據(jù)庫中。最后通過調(diào)用相似度量程序?qū)π枨笪臋n和歷史開源項(xiàng)目進(jìn)行相似度量,利用相似度得分機(jī)制將候選項(xiàng)目按得分由大到小排列,并將候選項(xiàng)目的結(jié)果存儲到數(shù)據(jù)庫中。
為了驗(yàn)證該方法的準(zhǔn)確性,文中從百度文庫中下載了5個學(xué)校管理類需求文檔和5個企業(yè)類需求文檔,對其從①到⑩進(jìn)行編號。為了便于實(shí)驗(yàn)中對相似項(xiàng)目進(jìn)行排序,將表1中同時具有需求描述和項(xiàng)目代碼的68個項(xiàng)目進(jìn)行從1到68編號。其次,分別采用人工方法和PR-REQ方法對這10個需求文檔進(jìn)行分析,從68個項(xiàng)目中找出相似的軟件項(xiàng)目。人工方法是由作者共同對每個需求文檔進(jìn)行分析,從領(lǐng)域、功能操作以及數(shù)據(jù)模型三個方面進(jìn)行數(shù)據(jù)分析,找出與之相似程度最高的3個項(xiàng)目,對其進(jìn)行相似度排序并記錄3個項(xiàng)目對應(yīng)的編號。PR-REQ方法則是利用開發(fā)好的項(xiàng)目復(fù)用推薦程序,對這10個需求文檔進(jìn)行特征提取與分析,同樣找出與之相似程度最高的3個項(xiàng)目,對其進(jìn)行相似度排序并記錄3個項(xiàng)目對應(yīng)的編號。最后,分別對人工選取的項(xiàng)目和PR-REQ方法選取的項(xiàng)目進(jìn)行一致率和包含率分析,驗(yàn)證文中提出的PR-REQ方法的準(zhǔn)確性。
定義1:一致率:PR-REQ系統(tǒng)找出的項(xiàng)目與人工找出的項(xiàng)目一致的比率。
定義2:包含率:PR-REQ系統(tǒng)找出的項(xiàng)目包含在人工找出的項(xiàng)目中的比率。
表2是針對每個需求文檔,利用人工方法和PR-REQ方法找出的相似軟件項(xiàng)目對應(yīng)的編號。然后對表2中的編號進(jìn)行一致率和包含率分析,分析結(jié)果見表3。
表2 人工方法和PR-REQ方法選取的相似項(xiàng)目的編號
表3 一致率和包含率分析 %
由表3可以看出,針對這10個需求文檔,人工分析與PR-REQ分析推薦的第一個歷史項(xiàng)目有80%相同,在推薦一個最相似的項(xiàng)目時,一致率與包含率意義相同。Top 2一致率為40%,Top 3一致率為30%,可以看出,隨著推薦的項(xiàng)目越多,一致率會有所下降,這一結(jié)果也符合預(yù)期;而對于包含率,Top 1、Top 2與Top 3都不低于80%,也就是說利用PR-REQ方法找出的1到3個相似項(xiàng)目與人工找出的1到3個相似項(xiàng)目雖然無法在相似程度上保持一致,但包含率在80%以上,這說明文中提出的PR-REQ方法具有較高的準(zhǔn)確性,對于項(xiàng)目復(fù)用具有實(shí)用價值。
軟件項(xiàng)目需求分析是開發(fā)人員開發(fā)一個新項(xiàng)目時的第一階段,目前尚沒有一種項(xiàng)目復(fù)用方法可以根據(jù)待開發(fā)項(xiàng)目的需求文檔進(jìn)行項(xiàng)目級復(fù)用。針對這一問題,文中提出了一種基于軟件需求分析的項(xiàng)目級復(fù)用方法PR-REQ,該方法從項(xiàng)目的主題領(lǐng)域、功能操作信息以及數(shù)據(jù)模型三個方面對待開發(fā)項(xiàng)目的需求文檔和開源歷史項(xiàng)目進(jìn)行特征提取和數(shù)據(jù)分析,最后構(gòu)建相似性度量方法進(jìn)行相似項(xiàng)目推薦。基于文中提出的方法,隨機(jī)選取了企業(yè)類和學(xué)校管理類的需求文檔各5個來構(gòu)造實(shí)驗(yàn)驗(yàn)證其準(zhǔn)確性。
實(shí)驗(yàn)結(jié)果表明,文中提出的基于需求分析的項(xiàng)目級復(fù)用方法在尋找相似的軟件項(xiàng)目方面具有較高的準(zhǔn)確性,該方法對于開發(fā)人員在項(xiàng)目開發(fā)的初期階段具有重要作用。但是本實(shí)驗(yàn)只取了68個歷史項(xiàng)目文件,針對兩類共10個項(xiàng)目需求文檔進(jìn)行了分析,實(shí)驗(yàn)樣本數(shù)量仍然偏少,為了證實(shí)該方法的實(shí)用性,還需下載更多的項(xiàng)目進(jìn)行分析。另外對于非Java web項(xiàng)目,還需基于歷史項(xiàng)目的代碼進(jìn)一步構(gòu)建算法提取功能操作序列與項(xiàng)目的數(shù)據(jù)模型。