陳 磊 王丹丹 王 青,2,3 石 琳
1(中國科學院軟件研究所互聯(lián)網(wǎng)軟件技術實驗室 北京 100190)2(計算機科學國家重點實驗室(中國科學院軟件研究所) 北京 100190)3(中國科學院大學 北京 100049)
在軟件開發(fā)中,需求跟蹤是連接開發(fā)階段中重要活動的鏈條[1],可以輔助軟件開發(fā)生命周期中很多活動的執(zhí)行,比如軟件維護[2]、變更影響分析[3]、需求驗證[4]、需求重構[5]、需求復用[6]、測試用例生成[7]和源代碼理解[8]等.因此獲得軟件工程師及其公司的重點關注[9].然而,建立和維護需求跟蹤關系是一件耗時而且繁瑣的事情,特別是對于一個大型和(或)復雜、周期長的系統(tǒng),手工創(chuàng)建和維護準確的跟蹤鏈接是需要耗費大量人力、時間而且容易出錯[2,9].大量的實踐經(jīng)驗表明:成本及效率問題是制約需求跟蹤使用的根本原因.
為解決該問題,研究人員提出了各種不同的解決方案,以自動化技術為手段輔助開發(fā)人員建立和維護需求跟蹤關系,從而降低成本.其中最常用的是基于信息檢索(information retrieval, IR)[10-14]的方法.該方法利用IR模型計算需求文本與軟件制品文本之間的文本相似度,并按照文本相似度的大小進行排序,通過設置閾值篩選需求與軟件制品之間的跟蹤鏈接.通常需求與軟件制品之間的文本相似度越大,它們之間的跟蹤關系就越有可能是正確的,反之則越有可能是錯誤的.雖然基于信息檢索的方法能夠有效地恢復需求與軟件制品之間的跟蹤鏈接,但是由于不同的軟件制品通常遵循不同的規(guī)范并使用不同的術語[15],忽視了自然語言中語法對于準確語義表達的影響,尤其是詞序信息的缺失.這就容易造成不同制品之間出現(xiàn)術語匹配錯誤的問題,因此建立跟蹤關系的精確率和召回率往往低于預期.為了解決這個問題,研究人員利用深度學習技術來自動學習軟件制品的語義表示,并使用該語義表示來建立跟蹤關系[9].與信息檢索方法相比,深度學習方法可以獲得較高的跟蹤精確率和召回率.然而,這些深度學習方法是有監(jiān)督的學習方法,需要依賴大量標注數(shù)據(jù)來訓練有效的神經(jīng)網(wǎng)絡模型,而獲取標注數(shù)據(jù)是非常費時費力的事情,這限制了它們在實際工作中的應用.
為此,研究人員探索無需標記訓練數(shù)據(jù)生成跟蹤鏈接的無監(jiān)督學習方法.其中,詞向量模型[16]通過建模術語的上下文來捕獲軟件制品的語義,一定程度上解決術語不匹配問題,在無監(jiān)督生成跟蹤鏈接中獲取了不錯的性能.但是針對這些無監(jiān)督的學習方法,為學習制品更加準確和完整的語義,需要在此基礎上同時解決2個問題.
1) 需求的粒度在軟件開發(fā)過程中是不斷變化的.比如從粗粒度(例如高等級需求(high-level requirements, HL)和用例(user cases, UC)到細粒度(例如低等級需求(low-level requirements, LL)、交互圖(interaction diagrams, ID)、測試用例(test cases, TC)和代碼類文件(code classes, CC),這是一個粒度由粗到細的過程.粗粒度制品和細粒度制品之間描述因粒度差異導致缺乏或沒有相同主題詞的關聯(lián),也就是同一語境的詞共現(xiàn)分布信息,從而出現(xiàn)關聯(lián)制品無法匹配的問題.例如,表1所示的2個制品應該有一個跟蹤關系,但是由于它們之間大部分的詞是不同的,很容易被錯誤鏈接.
Table 1 A Sample Terms of Artifacts Matching表1 一個制品詞匹配樣例
2) 制品文本中的詞序信息通常被忽略了.例如,有2個需求描述為“…,Persons can be assigned to work on tasks”和“…provide ability to assign persons to tasks”,在實際語境中,它們是沒有跟蹤關系的,但可能會被錯誤地關聯(lián)在一起.因為基于詞袋模型的信息檢索方法和詞向量模型均不考慮詞序.
為了解決這2個問題,本文提出了一種基于圖挖掘擴展學習的增強方法——GeT2Trace,用來生成需求跟蹤鏈接.該方法利用圖網(wǎng)絡模型,構建項目級和制品級2個不同粒度的文本網(wǎng)絡,根據(jù)項目級的文本網(wǎng)絡挖掘項目內(nèi)的共現(xiàn)詞信息,同時根據(jù)制品級的文本網(wǎng)絡挖掘制品內(nèi)的詞序信息;然后,GeT2Trace利用已挖掘的共現(xiàn)詞信息和詞序信息對制品文本信息進行擴展,增強制品的語義表示,并將其輸入無監(jiān)督神經(jīng)網(wǎng)絡向量學習模型中進行學習;最后,根據(jù)學習結(jié)果對制品間的跟蹤關系進行恢復.
本文的主要貢獻有3個方面:
1) 利用詞圖模型(graph-of-word, GoW)的方法將軟件制品轉(zhuǎn)換為文本網(wǎng)絡表示,然后基于圖挖掘的共現(xiàn)詞和詞序信息增強制品的語義表示;
2) 提出了GeT2Trace方法,該方法通過擴展共現(xiàn)詞和詞序信息來增強制品文本的表示,并將其輸入無監(jiān)督神經(jīng)網(wǎng)絡向量學習模型中學習和恢復相關軟件制品的跟蹤關系;
3) 在5個公共數(shù)據(jù)集進行了評估,實驗結(jié)果表明GeT2Trace在精確率、召回率和F2上優(yōu)于VSM,LSI,WQI,S2Trace和PV-DM-CoT這5種基線方法.
在本節(jié)中,我們討論之前的相關研究工作和方法,以及與我們研究工作的不同之處.
信息檢索是一種最為廣泛的用于解決需求跟蹤問題的無監(jiān)督方法.典型的模型包括:向量空間模型(vector space model, VSM)[12]、潛語義索引模型(latent semantic indexing, LSI)[11,13]和潛在狄利克雷分配模型(latent Dirichlet allocation, LDA)[14].然而,由于軟件制品間存在術語不匹配的問題,因此通過信息檢索建立的跟蹤鏈接結(jié)果并不是很理想.為解決該問題,一些研究人員通過向文檔的向量空間模型中添加新信息和特征來提高其跟蹤性能.Hayes等學者[10]利用同義詞典方法來處理制品中的同義詞,以此減小軟件制品之間的術語不匹配帶來的影響.Capobianco等學者[12]提出通過詞性標注來提高信息檢索方法的性能.Zou等學者[17]提取制品中的關鍵短語,并使用項目術語表給最重要的術語賦予更高的權重.此外,Dietrich等學者[18]提出采用查詢擴展策略,通過將用戶反饋擴展到查詢中,再合并到跟蹤檢索過程以提高生成的跟蹤鏈接的質(zhì)量.王金水等學者[19]利用句法分析抽取制品中具有代表性的動詞和名詞術語,以減輕噪音數(shù)據(jù)的負面影響.雖然以上研究在一定程度上緩解了制品間術語不匹配帶來的問題,改進了基于信息檢索方法建立跟蹤關系的性能,但是這些方法都沒有考慮軟件制品的語義.
本體是表示指定領域中存在的實體及其形式化規(guī)范,它在語義級別明確和關聯(lián)軟件制品的概念和關系,幫助解決需求跟蹤中軟件制品之間術語不匹配的問題[20].Guo等學者[21]利用句法解析來提取特定本體,并建立啟發(fā)式策略來對本體概念之間的語義關系進行推理,以創(chuàng)建準確的跟蹤鏈接.Li等學者[22]將來自通用領域本體和特定領域本體的信息合并到跟蹤過程中,提出根據(jù)本體中概念之間的距離對跟蹤鏈接進行加權,從而更為準確地恢復跟蹤鏈接.Rao等學者[23]提出了一種基于規(guī)則的語義本體選擇方法,用來生成源制品與目標制品之間的鏈接.其核心思想是在詞網(wǎng)(WordNet)的輔助下建立修飾語與關鍵詞的啟發(fā)式規(guī)則,并對關鍵詞進行語義選擇和調(diào)整.然而以上方法在標注本體的過程中會受到現(xiàn)有語法解析工具對復雜長句的解析不準確的影響,并且都需要手工建立合理有效的本體和啟發(fā)式推理規(guī)則,這是一個復雜而繁瑣的過程.
機器學習和深度學習作為近些年應用于需求跟蹤領域的技術,經(jīng)過大量實踐表明是解決需求跟蹤問題的有效途徑之一.Guo等學者[9]提出了一種基于深度學習的神經(jīng)網(wǎng)絡架構,使用一組來自大型工業(yè)數(shù)據(jù)集預訓練的詞向量和遞歸神經(jīng)網(wǎng)絡(recurrent neural network, RNN)來自動生成跟蹤鏈接.Zhao等學者[24]提出了一種基于詞向量的方法WQI,該方法采用預先訓練的軟件工程領域的詞向量和逆文檔頻率(inverse document frequency, IDF)權重的查詢擴展來改進制品間文本相似度算法.Wang等學者[25]使用Doc2vec模型學習制品的語義表示,并作為特征輸入到有監(jiān)督的機器學習算法中,預測制品之間的語義相關性.Chen等學者[26]提出了一種最先進的無監(jiān)督方法S2Trace,該方法結(jié)合了序列模式挖掘和Doc2vec模型來生成軟件制品的文檔向量,借助軟件制品中的詞序信息為構建準確的跟蹤鏈接提供額外的幫助.然而,以上方法沒有同時解決由于不同粒度的制品術語不匹配和缺乏詞序信息的問題,導致學習到的制品語義往往不精確和不完整.另外,有監(jiān)督的機器深度學習方法需要大量的數(shù)據(jù)標注才能訓練有效的預測模型,這限制了它在實際工作中的應用.
在本節(jié)中,我們主要介紹基于圖的文本表示和文檔向量表示及其應用,并且將基于文本網(wǎng)絡的圖挖掘和文檔向量的概念引入需求跟蹤的研究中.
在自然語言處理領域中,傳統(tǒng)詞袋模型的文本表示方法假設文本中的詞與詞之間是相互獨立的,忽略了詞與詞之間順序的依賴關系來進行語義表示.但是,由于詞作為表示文本語義的最小單元,一個詞的語義通常是由它的上下文決定的,換句話說,詞的語義受到其周圍詞的影響,所以詞與詞之間的順序和位置在表示句子或文檔語義時是重要的信息.
為了克服傳統(tǒng)詞袋模型的缺點,Rousseau等學者[27]提出了一種基于詞共現(xiàn)的文本網(wǎng)絡模型,稱為詞圖模型(GoW).基于2個詞的距離越接近,詞與詞之間的相關性越強的假設,該模型將純文本轉(zhuǎn)化為帶結(jié)構信息的文本網(wǎng)絡,借助豐富的結(jié)構信息捕獲詞之間的語境(即上下文)依賴和詞序信息.根據(jù)文本挖掘的需要,詞圖模型通過設置滑動窗口大小、邊方向、邊權重3個參數(shù)來生成不同的文本網(wǎng)絡,其中滑動窗口大小作為詞圖模型最重要的參數(shù),用來控制構建文本網(wǎng)絡語境的范圍.例如,1)在一個滑動窗口內(nèi)同時出現(xiàn)一個或多個詞的無向圖,這些詞作為目標詞的上下文來豐富該詞的語義表示,換句話說,窗口內(nèi)共現(xiàn)的詞構成了目標詞的語境.2)表示詞序信息的有向圖,邊的方向表示文本流的方向,符合人們對文本信息的閱讀習慣和理解方式.3)用一個加權圖表示滑動窗口中的詞之間的關系,邊的權重大小表示詞與詞之間關系的強弱,換句話說,關系越強的詞越有可能在同一語境中.在以往的研究中,詞圖模型被用來提高信息檢索[27]、關鍵字提取和文本分類[28]的性能.因此,我們利用詞圖模型將軟件制品轉(zhuǎn)換為文本網(wǎng)絡表示,挖掘有意義和有區(qū)別的文本特征.據(jù)我們所知,在需求跟蹤領域中,詞圖模型尚未應用于制品表示的構造上.
Doc2vec[29]作為對Word2vec的擴展,是一種無監(jiān)督的淺層神經(jīng)網(wǎng)絡學習模型,能夠聯(lián)合學習詞向量和文檔向量.與Word2vec相比,Doc2vec使用固定長度的向量表示任意長度的句子、段落和文檔,所包含的信息更加豐富多樣.Doc2vec模型分為2種變體:分布式內(nèi)存段落向量(distributed memory paragraph vectors, PV-DM)模型和分布式詞袋段落向量(distributed bag of words paragraph vectors, PV-DBOW)模型.PV-DM考慮了詞序在語義表示的作用,在一個文本窗口內(nèi),通過句向量和詞向量的首尾相接來預測下一個詞.而PV-DBOW則不把上下文中的詞作為輸入,而是強制模型在輸出中從句子中隨機抽取詞匯來進行預測.例如,PV-DBOW利用文檔向量來預測文檔中包含的詞向量.具體地說,D={Doc1,Doc2,…,Docn},目標文檔Doct∈D,需要學習其向量表示f(Doct)={Word1,Word2,…,Wordm},PV-DBOW的訓練目標是預測文檔Doct中出現(xiàn)的某個詞的最大對數(shù)概率:
(1)
Pr(Wordi|Doct)也由softmax函數(shù)定義:
(2)
其中,wi和Dt分別是詞Wordi和文檔Doct的向量,V是D中所有文檔中所有詞的個數(shù).Doc2vec中學習得到的文檔向量可以計算相似文檔在向量空間中的聚類距離,也可以將其輸入到有監(jiān)督的機器學習模型中學習分類器.
在本節(jié)中,我們主要介紹GeT2Trace方法的實現(xiàn)步驟,并且將詞圖概念引入軟件制品文本網(wǎng)絡建模中.GeT2Trace的概述如圖1所示.其主要思路是通過挖掘制品的文本網(wǎng)絡中的語義特征來增強制品文本的語義表示,然后利用Doc2vec模型來學習和比較制品的語義相似性.我們的方法分為6個步驟.
1) 構建文本網(wǎng)絡.對于需要建立跟蹤鏈接的制品,首先通過詞圖模型將其轉(zhuǎn)換為2個不同粒度的文本網(wǎng)絡:在項目級別,構建一個加權無向圖;在制品級別,為每個制品構建一個無加權的有向圖.
2) 挖掘共現(xiàn)詞.基于項目級文本網(wǎng)絡,挖掘粗粒度制品的共現(xiàn)詞(co-occurrence terms, Co -Terms),用于彌補粗粒度制品與細粒度制品之間的術語不匹配的問題.
Fig. 1 Overview of GeT2Trace圖1 GeT2Trace方法概述
3) 挖掘頻繁子圖.基于制品級文本網(wǎng)絡,挖掘每個制品的頻繁子圖(frequent subgraphs, FSGs),獲取制品的詞序信息.
4) 擴展制品特征.將原始軟件制品的文本進行擴展,分別添加步驟2得到的對應的共現(xiàn)詞到粗粒度制品中和步驟3得到的頻繁子圖到對應的粗粒度和細粒度制品中.
5) 學習增強的制品表示.基于步驟4中擴展的制品表示,構建一個Doc2vec模型來學習每個軟件制品的文檔向量作為其語義表示.
6) 跟蹤鏈接恢復.通過計算2個擴展制品向量之間的余弦相似度來恢復跟蹤鏈接.
使用詞圖模型將軟件制品從純文本文檔轉(zhuǎn)換為文本網(wǎng)絡.構建文本網(wǎng)絡之前,我們首先進行制品文本的預處理:
1) 刪除無意義的字符.對所有文本執(zhí)行標記化(tokenization)操作,刪除非字母字符、標點符號、停用詞、無意義的術語.
2) 分詞.從制品中的標識符中提取有意義的單詞.標識符是連接2個或多個單詞(或縮寫)或任何其他分隔符(如下劃線)的復合詞.采用駱駝拼寫法拆分復合詞.
3) 詞干提取.制品中的每個單詞都使用Snow-ball(1)https://snowballstem.org/詞干器進行詞干處理.
在對制品文本進行預處理后,我們將制品文本信息輸入詞圖模型構建2個不同級別的軟件制品文本網(wǎng)絡.
3.1.1 項目級文本網(wǎng)絡
項目級文本網(wǎng)絡是由詞圖模型將一個項目的全部制品轉(zhuǎn)換成一張加權無向圖,定義為Gp=(Vp,Ep).Gp捕獲術語的共現(xiàn)關系,Vp是項目中所有軟件制品中提取的一組術語,eij∈Ep是一個加權邊,表示節(jié)點vi和vj共同出現(xiàn)在滑動窗口中.將節(jié)點vi與vj之間邊的權重wij定義為Jaccard系數(shù):
(3)
其中,Oi和Oj是分別包含出現(xiàn)術語vi和vj的制品的數(shù)量.通過設置滑動窗口的大小控制每個術語的上下文范圍,較小的窗口大小,詞與詞的關系越緊密越有意義,反之詞與詞的關系越疏遠,變得沒有意義[27].共現(xiàn)頻率高的詞對,它們之間的Jaccard系數(shù)也高,代表越相似.圖2給出了一個項目級文本網(wǎng)絡的例子,如果在一個項目中有3個制品(如圖2的左邊所示),所構建的項目級文本網(wǎng)絡Gp將顯示在右邊,滑動窗口的大小被設置為3.
3.1.2 制品級文本網(wǎng)絡
制品級文本網(wǎng)絡是由詞圖模型將每個制品單獨轉(zhuǎn)換為無加權有向圖,定義為Ga=(Va,Ea).對于每個制品,Ga捕獲術語之間的詞序,Va是術語的集合,Ea是有向邊的集合.eij∈Ea表示術語vj在滑動窗口中出現(xiàn)在術語vi之后.為了所捕獲的術語之間的詞序信息更有意義和區(qū)別性,在構建制品文本網(wǎng)絡時限制2個相鄰術語之間的距離是必要的[28],因為在下一步的頻繁子圖挖掘中,距離較近的詞可能在同一語境中,而距離較遠的詞可能分別在2個不同的上下文中.另一個原因是它可以減少冗余帶來的噪聲信息.例如,當滑動窗口的大小設置為3時,將軟件制品表示為圖3中給出的無加權有向圖.
Fig. 2 An example of the project-text network圖2 一個項目級文本網(wǎng)絡例子
Fig. 3 An example of the artifact-text network圖3 一個制品級文本網(wǎng)絡例子
正如我們之前提到的,粗粒度制品和細粒度制品的描述存在詞匯差異,導致缺乏共享信息來構建相應的需求跟蹤鏈接.我們通過能提供豐富信息的跨制品文本的共現(xiàn)詞來擴展粗粒度制品.通過3.1.1節(jié)構建的項目級文本網(wǎng)絡,已經(jīng)將每個術語和與之對應的上下文連接起來,我們挖掘該文本網(wǎng)絡中共現(xiàn)詞構建粗粒度制品和細粒度制品之間的相關性,其共現(xiàn)信息里還包含語境信息,換句話說,共現(xiàn)詞與相應的粗粒度制品的語境密切相關,具體定義和操作為:
對于粗粒度制品中的每一個術語Vi,以Vi為中心節(jié)點,構建詞共現(xiàn)子圖(co-occurrence subgraphs,SGco),定義為SGco=(Vi,Vco,Eco),其中SGco∈Gp,Vco為Vi相鄰詞的集合,Eco為邊的集合,為每個vj∈Vco.eij∈Eco為Vi與vj之間的邊.邊的權重wij為Vi與vj之間的Jaccard系數(shù).Vco中的詞表示為Vi的共現(xiàn)詞.共現(xiàn)詞作為擴展粗粒度制品中術語Vi的候選術語.例如,以圖2中粗粒度制品(粗粒度制品-1)為例,圖4顯示“tmali”詞的共現(xiàn)子圖和“tmali”的所有共現(xiàn)詞及其權重,表2中列出了從粗粒度制品包含的所有詞的共現(xiàn)子圖中提取的共現(xiàn)詞及其權重列表.
Table 2 Co-Terms List表2 共現(xiàn)詞列表
如引言所述,詞序信息通常被忽略,這導致只能捕獲軟件制品的部分語義,從而生成不準確的跟蹤鏈接.為了解決這個問題,我們通過挖掘頻繁子圖(FSGs)來解決這一問題,頻繁子圖相當于制品中的短語或詞與詞的序列,所包含的詞序信息有助于制品精確語義的表示.通過3.1.2節(jié)構建的制品級文本網(wǎng)絡(即制品圖),我們使用基于深度優(yōu)先搜索算法gSpan[30]來挖掘頻繁子圖,該算法保留了從制品圖中發(fā)現(xiàn)的詞序信息.因為gSpan可以通過深度優(yōu)先搜索策略有效地枚舉所有的頻繁子圖,在頻繁子圖的挖掘過程中,gSpan通過支持度參數(shù)來控制挖掘的頻繁子圖的數(shù)量.支持度定義為
(4)
其中,制品圖Gi在圖集合?中,制品圖Gi包含子圖SG.
在確定頻繁子圖時,需要設置一個最小支持度,如果某一子圖的支持度大于或等于最小支持度,則該子圖表示為頻繁子圖,用于對制品特征進行擴展.如圖5左圖所示制品圖集合?={G1,G2,G3},該集合?包含3個制品圖.如果我們將最小支持度設置為0.5,gSpan從集合?中挖掘出3個子圖SG1,SG2,SG3,如圖5右圖所示.由于SG1,SG2,SG3的支持度均大于或等于最小支持度,SG1,SG2,SG3是我們所需要的頻繁子圖.每個頻繁子圖將被分配唯一的編碼作為其標識.當擴展特征時,編碼將用于表示頻繁子圖.
Fig. 5 An example of FSGs mining by gSpan algorithm圖5 通過gSpan算法挖掘頻繁子圖的例子
通過3.1~3.3節(jié)中步驟挖掘出的共現(xiàn)詞(Co -Terms)和頻繁子圖(FSGs)用于擴展制品可以增加制品新特征空間的語義表達能力,因為它們是單一特征集上的非線性特征組合.在機器學習領域,從單一特征到非線性特征的映射得到了廣泛的應用.但是共現(xiàn)詞和頻繁子圖可能存在數(shù)量較多的問題,為了保留更有意義和區(qū)別的特征用于擴展制品,同時減少噪聲對模型的影響,我們通過權重意識的方法選擇共現(xiàn)詞和Elbow方法過濾頻繁子圖,具體操作如3.4.1和3.4.2節(jié)所述.
3.4.1 為粗粒度制品擴展共現(xiàn)詞
Fig. 6 An example of weight-aware terms selection圖6 權重意識選擇共現(xiàn)詞的例子
在3.2節(jié)中,我們通過從項目級文本網(wǎng)絡抽取詞共現(xiàn)子圖SGco,從中挖掘出所有粗粒度制品包含的詞匯所對應的共現(xiàn)詞,且對于每個共現(xiàn)詞都有其對應的權重.
為了對粗粒度制品進行擴展,我們提出權重意識的方法選擇共現(xiàn)詞.其核心思路是基于2個詞的距離越接近,共現(xiàn)頻率越高,詞與詞之間的相關性越強的假設.將每一個粗粒度制品所有組成詞看作一個語境,選擇與該語境密切相關的共現(xiàn)詞用于擴展.為了判定共現(xiàn)詞與粗粒度制品的相關程度我們將該共現(xiàn)詞的權重系數(shù)求和,計算得到該共現(xiàn)詞與對應的粗粒度制品的最終權重:
(5)
其中,wt(s)是粗粒度制品中包含的術語的SGco中存在某一共現(xiàn)詞s的Jaccard系數(shù)權重,t為粗粒度制品與某一共現(xiàn)詞的共現(xiàn)邊的數(shù)量,wco(s)為粗粒度制品與某一共現(xiàn)詞s的最終權重.
高權重(即高共現(xiàn)頻率)的詞與粗粒度制品屬于同一主題的概率也高,最后將高權重的詞擴展到粗粒度制品中.設置擴展規(guī)模來限制擴展到粗粒度制品共現(xiàn)詞的最大數(shù)量,最終選擇權重值最大的前N個詞來擴展粗粒度制品.對粗粒度制品的擴展規(guī)模N的取值將在4.4節(jié)進一步討論.
此外,我們提出下面的規(guī)則來輔助權重意識的共現(xiàn)詞選擇方法:如果2個共現(xiàn)詞的最終權重wco相等,則優(yōu)先選擇與粗粒度制品存在更多邊的共現(xiàn)詞s.
圖6給出了權重意識選擇共現(xiàn)詞的例子.繼續(xù)以圖2中粗粒度制品-1為例,假設擴展規(guī)模N=3.對于“get”,權重是1.34(wco=0.67+0.67).粗粒度制品經(jīng)過擴展之后,單詞“get”“housekeep”和“data”被添加到粗粒度制品-1中,例如“dup-tmali,provid,tmali,hk,dup-ccm,request,get,housekeep,data”.以上擴展的詞建立起了相似語境下術語的關聯(lián),從而緩解了粗粒度制品和細粒度制品之間的術語不匹配問題.
3.4.2 為每個軟件制品擴展詞序信息
在3.3節(jié)中,我們挖掘了保留詞序信息的頻繁子圖,并將每個頻繁子圖與包含該頻繁子圖的軟件制品相關聯(lián)來解決軟件制品詞序語義缺失的問題.以圖7為例,如圖7(a)所示,當最小支持度設置為0.5時,在圖7(a)中挖掘出3個頻繁子圖,每個頻繁子圖將被賦予唯一編碼.因此,每個制品可以根據(jù)圖5所示的制品圖關聯(lián)一組頻繁子圖,關聯(lián)結(jié)果如圖7(b)所示.相應的頻繁子圖編碼將被視為擴展每個制品的新特征.
Fig. 7 An example of expanding artifacts by FSGs圖7 一個通過頻繁子圖擴展制品的例子
Fig. 8 An example of the minimum support threshold setting via Elbow method圖8 通過Elbow方法設置最小支持度閾值的例子
在頻繁子圖挖掘過程中最小支持度不同,挖掘出的頻繁子圖數(shù)量也是不相同的.我們需要選擇合適的最小支持度來確定頻繁子圖范圍,并將與包含該頻繁子圖的制品相關聯(lián).我們根據(jù)Elbow方法[28]設置最小支持度過濾并保留用于擴展的頻繁子圖.圖8所示CM1數(shù)據(jù)集中的Elbow方法.從圖8可以看出,當最小支持度減小時,頻繁子圖數(shù)量略有增加,直至頻繁子圖數(shù)量顯著增加時,該最小支持度為最小支持度閾值,在圖8中是實心三角形突出顯示.
我們利用Doc2vec來學習每個制品的增強表示.Doc2vec與Word2vec具有相同的分布假設,即可以通過上下文來推斷句子的語義.因此,如果2個句子在2個段落中出現(xiàn)在相同的位置,它們在語義或句法上都是非常相關的.在我們的研究中,我們采用PV-DBOW方法,因為它取得了比PV-DM更好的效果.我們也比較了PV-DBOW和PV-DM的性能,并將在4.5.1節(jié)中進一步討論.
在我們的模型中,制品向量被直接學習來預測上下文術語和頻繁子圖,因為它們的向量在制品之間是共享的.術語和頻繁子圖的語義向量在不同制品的上下文中捕獲,而制品向量的學習是通過相似制品生成上下文術語和頻繁子圖,并同時捕獲軟件制品中術語和頻繁子圖之間的潛在關系.此外,制品向量被嵌入到與術語及頻繁子圖向量相同的語義空間中,因此,我們期望一個制品向量中包含多個潛在語義.
圖9給出了利用PV-DBOW模型學習制品向量表示的過程,按照2.2節(jié)中相同的過程進行.我們提出將制品術語和頻繁子圖結(jié)合起來學習軟件制品的語義向量.換句話說,我們將各制品術語與對應的頻繁子圖連接起來作為PV-DBOW模型的輸入,直接學習制品的語義向量.當制品向量包含相似的術語和頻繁子圖時,2個制品的向量在語義空間中是相互接近.
Fig. 9 Learning artifact representations by PV-DBOW圖9 通過PV-DBOW模型學習制品表示
為了恢復軟件制品之間的跟蹤鏈接,我們計算制品向量之間的余弦相似度,并采用比例閾值ε[31]來識別跟蹤鏈接:
ε=c×simmax,
(6)
① http://www.coset.org
其中,c為比例閾值系數(shù)(0≤c≤1),simmax是所有制品對的最大余弦相似度.當制品對的相似度大于或等于ε,則建立它們之間的跟蹤鏈接.由于每個數(shù)據(jù)集都有不同的特征,所以ε在不同的數(shù)據(jù)集中也是不同的.
在本節(jié)中,為驗證本文GeT2Trace方法的有效性,本文實驗主要圍繞3個研究問題展開:
研究問題1. GeT2Trace是否優(yōu)于現(xiàn)有的需求跟蹤關系恢復方法?
研究問題2. 共現(xiàn)詞和詞序信息是否提高了GeT2Trace的性能?
研究問題3. 參數(shù)設置是否影響GeT2Trace的性能?
本研究選擇了5個實驗數(shù)據(jù)集來驗證我們的方法:CM1,GANTT,eTour,iTrust和EasyClinic.這5個數(shù)據(jù)集均來源于CoEST①公共數(shù)據(jù)集,并被廣泛用于需求跟蹤的研究.CM1是NASA項目中一個公共需求的子集,用于分析科學數(shù)據(jù).GANTT用于創(chuàng)建項目管理甘特圖,并執(zhí)行管理項目的資源和進度.eTour是使用Java開發(fā)的為游客提供電子導航服務的系統(tǒng).iTrust作為提供病人和醫(yī)生之間的電子服務系統(tǒng),它是用Java和JSP編寫的.EasyClinic是一套自動化醫(yī)院管理軟件系統(tǒng),也是用Java開發(fā)的.
實驗數(shù)據(jù)集來自4個不同的應用程序領域,包括航空航天、軟件工程、旅行娛樂和醫(yī)療保健領域,使得需求跟蹤任務更加多樣性,并且包含6種基本軟件制品類型:高等級需求HL、低等級需求LL、用例UC、交互圖ID、測試用例TC和代碼類文件CC.實驗數(shù)據(jù)集中制品間的跟蹤類型涉及軟件開發(fā)過程中典型的需求跟蹤應用場景.實驗數(shù)據(jù)集具體的詳情見表3.
為了進行綜合比較,我們選擇了5個基線,主要分為基于信息檢索的方法和基于機器學習的方法這2組.
1) 基于信息檢索的方法
向量空間模型(VSM)[12]和潛語義索引(LSI)[11,13]:最為廣泛用于解決需求跟蹤問題的無監(jiān)督學習方法.
Table 3 Detail of Experiment Datasets表3 實驗數(shù)據(jù)集詳情
2) 基于機器學習的方法
① WQI[24].該方法受到Y(jié)e等學者[32]研究的啟發(fā),采用預先訓練好的軟件工程領域的詞向量和逆文檔頻率(IDF)權重的查詢擴展,通過改進需求文檔相似度算法提升需求跟蹤的性能.
② S2Trace[26].這是最新的基于Doc2vec的方法,它利用PV-DBOW模型來學習文檔向量.S2Trace是第1個提出了通過無監(jiān)督學習方法嵌入序列模式(sequential patterns, SPs)來生成跟蹤鏈接,并取得了最好的性能.S2Trace主要包括3個步驟:序列模式挖掘和文檔向量學習,最后通過主成分分析(principal components analysis, PCA)優(yōu)化文檔向量.
此外,我們考慮使用Doc2vec的另一個變體,即PV-DM,因為它也考慮了在采樣窗口中文本的詞序信息.我們通過擴展共現(xiàn)詞來增強PV-DM作為基線,并將這種基線方法命名為PV-DM-CoT.該方法首先從制品的項目級網(wǎng)絡中提取共現(xiàn)詞,然后將相應粗粒度制品與共現(xiàn)詞連接起來,作為PV-DM模型的輸入.
除VSM和PV-DM-CoT外,LSI,WQI和S2Trace這3種基線方法也在我們選擇的5個公共數(shù)據(jù)集上進行了實驗.因此,我們采用對應論文的實驗結(jié)果來進行比較[24,26].
表4從3個方面展示了5個基線和我們的GeT2Trace方法之間的差異:語義、擴展和詞序.1)語義.單詞級和文檔級的語義信息提供了對軟件制品的深入理解,減少了語義差距.例如Word2vec和Doc2vec模型,它們克服了信息檢索方法存在的不足.2)擴展.粗粒度制品作為短文本,不能提供足夠的詞共現(xiàn)信息來捕獲已學習特性上的重疊,制品擴展技術彌補了不同粒度制品詞匯差距,并有助于在粗粒度制品和細粒度制品之間進行映射.3)詞序.詞序信息包含重要的詞級或短語級的序列語義,詞序的變化可能會產(chǎn)生歧義,影響制品語義的準確表達.相比之下,只有我們的方法GeT2Trace和基線方法PV-DM-CoT同時考慮了影響軟件制品之間語義表示的3個主要因素,我們期望從中得到更多的幫助來生成精確的需求跟蹤鏈接,并將在4.5.1節(jié)和4.5.2節(jié)中進一步討論.
Table 4 Comparison of Artifact Representation of
對應特征.
注意,我們在基線的選擇中排除了深度學習模型,因為該方法需要大量的標記數(shù)據(jù)以訓練一個有效的預測模型,否則會產(chǎn)生過擬合的問題.例如,Guo等學者[9]對769 366個標記制品對進行了調(diào)優(yōu)跟蹤網(wǎng)絡的實驗.在我們的研究中,實驗數(shù)據(jù)集中的數(shù)據(jù)量不能滿足深度學習模型的要求.
為了評價GeT2Trace的性能,采用需求跟蹤研究領域中最基本、最廣泛的3個指標:精確率(precision)、召回率(recall)和F-measure對實驗結(jié)果進行分析.我們對每個數(shù)據(jù)集重復實驗過程10次,并報告平均精確率、召回率和F-measure.精確率和召回率分別計算為
(7)
(8)
F-measure是精確率和召回率的調(diào)和平均值:
(9)
其中,當β=2時,自動跟蹤方法強調(diào)召回率比精確率[10]更重要.因此,我們選擇F2來比較方法的性能指標.
GeT2Trace方法是一種無監(jiān)督學習方法,它有4個參數(shù):用于構建文本網(wǎng)絡(Gp和Ga)的滑動窗口的大小、用于擴展粗粒度制品的擴展規(guī)模、挖掘頻繁子圖的最小支持度閾值以及建立跟蹤鏈接的比例閾值系數(shù).
對于滑動窗口的大小,我們嘗試設置不同的滑動窗口大小,通過實驗分析當滑動窗口的大小設置為4時獲得最佳或接近最佳的整體性能.這與文獻[28]研究中對文本網(wǎng)絡窗口建議大小一致.對于擴展粗粒度制品的擴展規(guī)模,我們嘗試不同數(shù)量的前N個共現(xiàn)詞,通過實驗分析選擇前20個共現(xiàn)詞擴展粗粒度制品,獲得最佳或接近最佳的整體性能.對于挖掘頻繁子圖的最小支持度閾值,通過Elbow啟發(fā)式方法確定,具體方法請參見3.4.2節(jié).對于比例閾值系數(shù),嘗試設置不同的系數(shù)大小,通過實驗分析當系數(shù)設置為0.7時獲得最佳或接近最佳的整體性能.為了進行公平的比較,我們設置與基線S2Trace一樣的Doc2vec模型參數(shù),向量維度為128,迭代次數(shù)為60.
我們使用基于Python的主題建模Gensim庫來訓練Doc2vec模型(2)https://radimrehurek.com/gensim/models/doc2vec.html,該庫提供了Doc2vec模型的API來學習制品的文檔向量.針對需要初始化的4個參數(shù)對GeT2Trace方法的潛在影響,我們也將在4.5.3節(jié)中進一步討論參數(shù)敏感性.
4.5.1 研究問題1:GeT2Trace是否優(yōu)于現(xiàn)有的需求跟蹤關系恢復方法?
為了驗證GeT2Trace方法的有效性,我們將GeT2Trace方法與5個基線方法的實驗結(jié)果進行比較,比較結(jié)果如表5所示.從表5中看出,GeT2Trace在大多數(shù)實驗數(shù)據(jù)集上明顯優(yōu)于5個基線方法.
1) 與基線方法VSM和LSI比較
GeT2Trace在所有數(shù)據(jù)集上都優(yōu)于信息檢索模型VSM和LSI.GeT2Trace的精確率和召回率分別提高了18.78%,25.60%和14.81%,16.64%.
由于VSM和LSI只考慮了基于數(shù)學統(tǒng)計的術語共現(xiàn)信息,而忽略了由于軟件制品詞匯的稀疏性和不均衡性而導致的術語不匹配問題、語義及詞序信息,導致只能捕獲軟件制品的部分語義.相比之下,我們的GeT2Trace可以通過神經(jīng)網(wǎng)絡將共現(xiàn)術語和頻繁子圖的語義聯(lián)合建模,從而獲取更準確和完整的制品語義.實驗結(jié)果表明,GeT2Trace方法通過選擇有效的特征和適用的模型學習到的軟件制品語義表示為生成準確的跟蹤鏈接提供了額外的幫助.
2) 與基線方法WQI比較
GeT2Trace在除EasyClinic(用例→測試用例)之外的所有數(shù)據(jù)集上的性能都優(yōu)于WQI.在CM1,GANTT,eTour和iTrust這4個數(shù)據(jù)集上,相較WQI,GeT2Trace在F2上分別提高25.28%,6.98%,5.93%和17.10%.
WQI和GeT2Trace有2個共同的優(yōu)點:1)WQI利用領域語料庫訓練詞向量來獲得詞的語義,而GeT2Trace方法通過文檔向量學習來建模詞的語義.2)WQI使用基于軟件工程領域的詞向量和術語IDF共同篩選擴展詞.GeT2Trace采用權重意識的共現(xiàn)詞選擇方法,從項目級文本網(wǎng)絡中提取高權重的共現(xiàn)詞.WQI和GeT2Trace的不同之處在于:WQI不捕獲制品底層的詞序語義,而GeT2Trace通過文本網(wǎng)絡挖掘技術從頻繁子圖學習詞序的序列語義.實驗結(jié)果進一步證明了利用詞序信息在需求跟蹤中的必要性.
Table 5 Compare Results of Five Baselines表5 比較5個基線方法的結(jié)果
在EasyClinic(用例→測試用例)中,WQI可以獲得比GeT2Trace更好的性能.通過手動分析之后,我們發(fā)現(xiàn)檢索到的不正確的跟蹤鏈接包含同義詞,比如“book”和“reserve”“cancel”和“delete”,以及制品文本中詞的分布對詞序不敏感.WQI可以利用預先訓練好的詞向量模型對同義詞進行識別,并通過IDF提取重要的詞擴展制品.換句話說,WQI利用詞向量更好地建模和區(qū)別軟件制品的語義表示.
另外,WQI需要外部知識來學習詞向量,例如軟件工程的領域語料庫.構建領域語料庫首先需要花費大量精力和時間收集相關語料資源,如果在收集過程中使用其他領域的語料,則很容易造成學習到的詞向量語義的偏差.相比之下,GeT2Trace所采用的Doc2vec對領域知識不是很敏感,只利用制品內(nèi)部知識學習制品語義表示.
3) 與基線方法S2Trace比較
在精確率、召回率和F2方面,GeT2Trace方法顯著優(yōu)于S2Trace.
S2Trace和GeT2Trace都關注語義和詞序?qū)χ破氛Z義學習的影響.首先,它們采用相同的Doc2vec對詞的語義建模,然后在訓練過程中學習制品的文檔級語義表示.其次,S2Trace通過序列模式挖掘技術學習序列語義,而GeT2Trace利用頻繁子圖挖掘方法來發(fā)現(xiàn)軟件制品的序列語義.然而,S2Trace并沒有考慮到相關術語在制品之間的不均衡分布問題,而GeT2Trace則通過建立項目級文本網(wǎng)絡,再將粗粒度制品的共現(xiàn)詞從對應的共現(xiàn)子圖提取出來彌補這一短板,從而GeT2Trace可以捕獲更完整的制品語義.實驗結(jié)果進一步證明了擴展粗粒度制品在需求跟蹤中解決術語不匹配問題的重要性.
Fig. 10 Evaluation of the benefit from Co-Terms and FSGs圖10 共現(xiàn)詞和頻繁子圖貢獻評估
4) 與基線方法PV-DM-CoT比較
GeT2Trace在所有數(shù)據(jù)集上的性能都優(yōu)于PV-DM-CoT.GeT2Trace的精確率和召回率分別提高20.14%和24.46%.
盡管GeT2Trace和PV-DM-CoT都考慮了影響需求跟蹤領域中制品語義表示的3個因素(參見4.2節(jié)),但是基于PV-DBOW的GeT2Trace的性能要優(yōu)于基于PV-DM的PV-DM-CoT.一種可能的解釋是,我們將共現(xiàn)詞和頻繁子圖結(jié)合到每個制品的特征中,由于它們是非線性特征的無序性擴展,PV-DBOW不僅通過預測其相關術語,還通過預測其頻繁子圖來學習每個制品在語義空間的向量表示.通過這樣做,PV-DBOW比PV-DM利用了更多的有意義和區(qū)別的特征信息.而PV-DM所學習到的詞序信息非常有限,不能充分利用擴展的共現(xiàn)詞捕獲制品間的語義關聯(lián).這表明GeT2Trace從頻繁子圖學習詞序信息比PV-DM-CoT從制品中學習更加有效,并且充分利用了擴展的共現(xiàn)詞帶來的上下文關聯(lián)信息.
總之,不同類型軟件制品抽象層次及文本表達方式之間存在較大差異,為了恢復跟蹤鏈接需要面對的問題有:1)不同軟件制品之間術語不匹配的問題.這會導致與主題相關的軟件制品在其文本內(nèi)容中顯示出很大程度的差異,從而無法建立跟蹤關系.2)不同軟件制品之間復雜的語義關系問題.這會導致一個粗粒度制品和一個細粒度制品,組成兩者的術語部分或大部分完全相同,卻表達不同的語義.為了緩解以上2個問題帶來的挑戰(zhàn),GeT2Trace方法通過挖掘制品中隱藏的語義特征:1)挖掘同一語境中的共現(xiàn)詞緩解不同軟件制品之間術語不匹配的問題;2)挖掘軟件制品之間頻繁子圖捕獲不同軟件制品之間復雜的語義關系問題,并將制品向量嵌入到與共現(xiàn)詞及頻繁子圖向量相同的語義空間中,增強了軟件制品準確語義的表示,獲得了比所有基線方法更好的性能.
4.5.2 研究問題2:共現(xiàn)詞和詞序信息是否提高了GeT2Trace的性能?
為了回答這個問題,我們使用消融測試進行對比,通過忽略部分特征將3個子方法與GeT2Trace進行比較,然后評估需求跟蹤的性能.1)GeT2Trace-NONE.該方法是指只從原始的制品中學習制品向量而不需要擴展任何特征的方法.2)GeT2Trace-CoT.表示從原始制品和共現(xiàn)詞特征中學習制品向量的方法.3)GeT2Trace-FSG.表示從原始制品和頻繁子圖包含的詞序特征中學習制品向量的方法.4)GeT2Trace.該方法從原始制品、共現(xiàn)詞和詞序特征中學習制品向量.對于每個子方法,設置相同的默認參數(shù).
如圖10所示,我們可以看到:1)GeT2Trace-CoT和GeT2Trace-FSG在所有數(shù)據(jù)集上都優(yōu)于GeT2Trace-NONE.這意味著這2種特征擴展都是有效的.通過挖掘共現(xiàn)詞的共現(xiàn)信息和頻繁子圖的詞序信息,可以捕獲更多的制品之間的潛在語義關系.在這個意義上,共現(xiàn)詞和頻繁子圖可以幫助挖掘潛在的語義,進一步提高跟蹤性能.2)以GeT2Trace作為融合特征模型,其性能明顯好于分別從共現(xiàn)詞和頻繁子圖中學習的特征.這意味著共現(xiàn)詞和頻繁子圖是必不可少的.這是因為共現(xiàn)詞和頻繁子圖為構建跟蹤鏈接提供了額外的信息,這在4.5.1節(jié)中已經(jīng)得到了證明.3)特別是在大多數(shù)情況下,GeT2Trace-FSG的性能優(yōu)于GeT2Trace-CoT,這意味著包含詞序信息的頻繁子圖對于軟件制品語義的學習更為重要.
4.5.3 研究問題3:參數(shù)設置是否影響GeT2Trace的性能?
為了回答這個問題,我們分別研究了滑動窗口大小、擴展規(guī)模、最小支持度閾值和比例閾值系數(shù)這4個參數(shù)是如何影響GeT2Trace在實驗數(shù)據(jù)集上的性能.當檢查當前參數(shù)時,其他3個參數(shù)在實驗中被設置為默認值(參見4.4節(jié)).圖11~14為改變參數(shù)值時F2走勢圖.
1) 滑動窗口大小的影響
Fig. 11 Impact of sliding window size圖11 滑動窗口大小的影響
圖11顯示用于構建文本網(wǎng)絡的詞圖模型滑動窗口大小從2增加到10時F2的結(jié)果.我們看到滑動窗口大小對GeT2Trace的性能有影響:滑動窗口設置為4時GeT2Trace的性能到達或接近最佳;在滑動窗口大小為4之前GeT2Trace性能逐步提高,超過4之后GeT2Trace性能都有所降低或保持短暫平緩.因此,通過設置滑動窗口大小為4是可以有效地捕獲中心術語的上下文信息,為后續(xù)基于文本網(wǎng)絡的共現(xiàn)詞和頻繁子圖的挖掘打下良好的基礎.
2) 擴展規(guī)模的影響
圖12顯示粗粒度制品擴展規(guī)模從5增加到40時F2的變化曲線.我們可以看到,擴展規(guī)模對GeT2Trace的性能是有影響的,從F2走勢圖可以看出,擴展規(guī)模在20附近達到或接近最佳性能.此外,GeT2Trace性能在擴展規(guī)模到達20之前時逐步增加的,擴展規(guī)模超過20后下降或保持短暫平緩.因此,本文選擇20作為擴展規(guī)模的閾值,進而通過對擴展規(guī)模的控制,限制共現(xiàn)詞數(shù)量以減少噪聲的影響.
Fig. 12 Impact of expanding size圖12 擴展規(guī)模的影響
Fig. 13 Impact of minimum support圖13 最小支持度的影響
3) 最小支持度閾值的影響
圖13顯示最小支持度設置為5~50時F2的變化曲線,實心三角形表示每個數(shù)據(jù)集Elbow方法選取的最小支持度數(shù)值.我們可以觀察到,每個數(shù)據(jù)集達到最好性能時的最小支持度是不同的,這導致手動設置的困難.而在采用Elbow方法選擇的最小支持度時,GeT2Trace在大多數(shù)情況下都達到或接近最佳性能.因此,使用Elbow方法選擇合適的最小支持度比手動設置最小支持度或通過經(jīng)驗設置為一個固定的值更加方便和高效.
4) 比例閾值系數(shù)的影響
圖14顯示比例閾值系數(shù)從0.1~0.9時F2的結(jié)果.我們看到比例閾值系數(shù)大小對GeT2Trace的性能有影響.比例閾值系數(shù)設置為0.7時,GeT2Trace在大多數(shù)情況下可以達到或接近最佳性能.因此,通過比例閾值法可以比較有效地自動確定構建跟蹤鏈接的相似度閾值,但是在實際應用中還是應該在項目分析的基礎上進行經(jīng)驗評估.因為不同特性的項目可能會造成比例閾值系數(shù)的漂移,從而影響恢復跟蹤鏈接的性能.
Fig.14 Impact of scale threshold coefficient圖14 比例閾值系數(shù)的影響
本文提出了基于圖挖掘擴展學習的增強需求跟蹤恢復方法GeT2Trace,該方法為解決制品所包含詞匯信息的稀疏性和不平衡性造成的術語不匹配問題和忽視了自然語言中語法對于準確語義表達的影響,特別是詞序信息缺失的問題.通過挖掘構建的制品文本網(wǎng)絡中詞共現(xiàn)和詞序的語義特征,利用這些有意義和區(qū)別的語義特征學習更準確和完整的制品語義,以輔助生成準確的跟蹤鏈接.為了驗證我們提出方法的有效性,我們提出了3個研究問題,并在5個公共數(shù)據(jù)集上進行了評估.結(jié)果表明:GeT2Trace在精確率、召回率和F2上優(yōu)于所有的對比基線VSM,LSI,WQI,S2Trace和PV-DM-CoT;從項目級和制品級文本網(wǎng)絡中提取詞共現(xiàn)信息和詞序信息2個擴展特征是必要的和有效的;此外,我們還討論了模型參數(shù)對GeT2Trace方法性能的影響,為參數(shù)的設置提供了一些實用的建議.
在未來的工作中,一方面,我們會收集更多的數(shù)據(jù)集來驗證該方法的有效性;另一方面,我們將整合基于文本網(wǎng)絡模型語義特征和詞向量模型,旨在提高大型工業(yè)數(shù)據(jù)集的需求跟蹤性能.