賈一荻, 劉 璘
(清華大學 軟件學院,北京 100084)
在軟件開發過程中,軟件需求分析工作占有重要地位.軟件需求工程的一個主要任務就是將系統的功能需求和非功能需求盡可能完整、準確地表示出來.與描述系統能力的功能需求相比,用于約束系統質量屬性的非功能需求更容易被忽視,卻也造成了許多項目的最終失敗[1].Bajpai 等人[2]更是在實際調研后,得出了如下結論:相較于具備明確非功能需求描述的項目,缺少非功能需求分析的項目會在失敗率上高出60%.李鳳麟等人[3]提出了一種從質量屬性的角度分析非功能需求的方法.Boehm 等人[4]的研究則指出,質量需求之間同樣存在沖突,需要進行權衡和優化取舍.由此可見,在軟件開發的各個階段關注非功能需求,尤其是在軟件開發的前期明確相應的質量屬性,會對項目的最終結果產生積極的影響.
相較于被集中撰寫的功能需求,軟件的非功能需求描述通常分散甚至隱含在不同語句、段落、文檔之中,因此極容易被忽視.而面對復雜的系統和巨大的文本量,人工分析、提取非功能需求意味著大量的時間成本,且難以避免疏漏之處.所以,將上述過程在一定程度上自動化,即通過軟件輔助完成非功能需求的識別、分類工作,對保障需求分析過程的效率和質量具有重要意義.
非功能需求相關的概念本體和分類模型研究在國內外有一定的基礎,但在軟件工程實踐中,用戶在表達非功能需求時沒有明確的規范[5].本文重點圍繞性能、可靠性、可用性、安全性、可維護性這5 類典型、常見的非功能需求展開研究.在識別非功能需求描述的基礎上,將其劃分到最為近似的分類.具體來說,本文的主要貢獻包括:
(1)針對性能、可靠性、可用性、安全性、可維護性這5 類非功能需求,整理了其通用描述詞匯,并針對中文需求文本,整理了功能需求和非功能需求數據集.
(2)針對中文需求文本,提出了一種自動化的非功能需求識別方法,并對其效果進行了實際測試.
(3)針對中文非功能需求描述,提出了一種自動化的分類方法,并對其效果進行了實際測試.
值得一提的是,上述方法主要適用于功能需求和非功能需求界限不清晰的中文需求描述,如非結構化的需求文檔、用戶評論、專家意見等.而結構化很強的需求文本,通常已經區分了功能需求和非功能需求,甚至區分了非功能需求的種類.在這樣的情況下,一般可以直接依據需求模板的格式提取相應內容,無需采用本文的方法.
此外,本文提出的識別方法主要針對非結構化的中文需求文本.例如,可以將需求文檔作為輸入,然后采用本文的識別方法標識出其中可能包含非功能需求的語句,從而縮小人工檢查的范圍.而本文提出的分類方法則用于進一步確定非功能需求的分類.例如,針對人工確認包含非功能需求的語句,或是已區分功能需求和非功能需求的結構化文檔,可以使用此方法完成非功能需求語句的類別劃分.本文將識別和分類的過程分開完成,一方面,可以使上述方法在不同的應用場景下更為靈活;另一方面,如果在識別和分類過程之間加入人工確認的步驟,則能夠以較低的人力成本有效地提升分類效果,具體的討論和相關實驗結果將在后文中進行闡述.
本文第1 節概述國內外現有的研究成果.第2 節對實驗數據集進行描述.第3 節介紹中文文本中的非功能需求識別方法.第4 節闡釋非功能需求分類的具體過程.第5 節總結全文,并對后續可進行的研究工作進行初步探討.
為了高質量、高效地完成需求分析階段的各項工作,自動化的需求文本分析工具曾一度是需求工程領域的研究熱點.而隨著軟件系統的不斷復雜化,非功能需求的重要性也逐漸顯現出來.
針對英文需求文本,已有不少研究圍繞非功能需求的提取和分類展開.Cleland-Huang 等人[6]提出了一種基于特征詞的非功能需求識別方法,從人工標注的訓練數據中提取各類非功能需求的特征詞,并根據特征詞的出現頻率對文本進行分類.在面對新的領域文本時,上述方法可以達到79.9%的召回率,能夠有效縮小人工識別的范圍.但是,其精確率只有20.7%,并且需要人工標注部分數據才能完成迭代訓練,因此仍然需要較多的人工參與.為了降低人力成本,Casamayor 等人[7]提出了一種半監督學習方法,并且達到了70%的準確率.Hindle 等人[8]采用了不同的思路,直接基于話題模型獲得詞匯列表,進而將其對應到各類非功能需求.近年來,Sunner 等人[9]使用基于遺傳算法的神經網絡,實現了非功能需求和功能需求的分類.Ramnani 等人[10]基于文本模式,實現了非功能需求識別.基于模糊規則的問題本方法也在非功能需求分類中得到了有效應用[11].
整體來看,針對英文需求文本自動檢測的研究已頗有進展.但是,由于語言之間的巨大差異性,這些研究成果無法直接對中文需求文本提供支持.中文詞語間無空格分隔、歧義現象普遍、實詞運用靈活等特點,更是形成了其特有的復雜性和難度.劉婷婷等人[12]以情感分析和主題分類兩種任務為背景,基于IMDB、RCV1 這兩個英文數據集和豆瓣影評、搜狐新聞這兩個中文數據集,分別應用傳統機器學習方法和深度學習方法進行實驗.使用傳統的機器學習方法進行情感分類,英文的分類準確率達到了90.70%,而中文的分類準確率僅達84.00%.引入深度學習方法后,雖然部分實驗結果表明中文可能獲得更高的準確率,但是英文分類的整體效果依舊好于中文.考慮到本文所使用的訓練數據量難以滿足深度學習模型所需,我們將重點關注傳統的機器學習方法.雖然對軟件非功能需求代價權衡方法[13]和對非功能性元需求集[14]的研究已經體現出了國內對非功能需求的逐漸重視,但是與國外相比,針對中文非功能需求的自動化分析方法,研究程度尚顯不足.倪瑜澤等人[15]提出了一種基于用戶評論的演化需求發現方法,達到了93.32%的平均精確率和78.42%的平均召回率.由于我們基本上沒有找到對中文非功能需求進行自動分類的相關工作,因此我們的實驗結果將主要對比上述國外相關工作和國內的中文文本分類工作.考慮到我們的訓練數據量以及前文提及的中文文本處理上的難度,我們認為,近似或略低于上述實驗效果的結果均是可接受的.
本文的研究聚焦于兩個方面.第一,識別中文需求文本中的非功能需求.前文已經提到,針對非功能需求的描述往往較為分散,且很有可能隱含于系統的功能描述之中.例如,“系統在用戶登錄過程中,驗證其身份和權限”這句話,就隱含了安全性這一非功能需求.諸如此類識別工作如果均由人工完成,則需要大量的時間成本.因此,本文將首先探討非功能需求的自動化識別方法,并在這一階段重點考慮非功能需求的召回率,以期縮小人工檢查的范圍.第二,針對包含非功能需求的語句,確定相應非功能需求的具體分類,即判定語句是否包含性能、可靠性、可用性、安全性、可維護性這5 類非功能需求中的某一類或某幾類,并通過準確率對分類結果進行評價.
本文所使用的實驗數據可大致分為3 個部分.
第1 部分是需求文本數據,主要來源于清華大學軟件需求工程課程的學生作業,也有部分來源于互聯網上的博客和文檔.我們對上述數據進行了篩選和整理,數據所屬的系統包括信息管理系統、網絡通信軟件、車載導航軟件、在線教育軟件、游戲軟件、微信小程序、手機應用軟件等多種類型,盡可能地保證文本覆蓋較多的項目領域.上述系統的規模相對較小,復雜度相對較低,但其需求描述較為全面.我們將包含非功能需求或純粹描述某一功能模塊的幾句或幾段話作為用于實驗的1 條數據.最終,我們獲得訓練數據400 條,其中,功能需求描述和非功能需求各占200 條,不同類別非功能需求的數據量見表1.考慮到識別非功能需求可以將各類別數據整合使用,本質上屬于二分類問題;而非功能需求分類則基于初始特征詞和語句中的關鍵詞.因此,這一數據量基本上能夠滿足實驗和測試要求.

Table 1 Amount of data for various NFRs表1 各類非功能需求的數據量
第2 部分是用于非功能需求分類的初始特征詞.本文以需求工程領域對非功能需求的常用描述詞匯為基礎,實現基于文本相似度的分類方法.上述描述詞匯主要整理、提取自相關研究文獻[16-18].同時,考慮到同一英文詞匯可能對應多種中文表達,因此,我們適當進行了同義詞擴充,其結果見表2.
第3 部分是在實際測試中使用的數據.這一部分的測試數據及結果來自工業界實際項目,項目規模大,復雜度較高,需求描述也比較規范和準確.

Table 2 NFRs and descriptive words表2 非功能需求及其描述詞匯
中文需求文本中,非功能需求描述可能分散、隱含在各個語句中,但也有部分語句與非功能需求無關.例如,“用戶可以對文本進行查看,增加,刪除,編輯等操作.”就是純粹的功能描述.因此,需要首先識別出與非功能需求相關的語句,即對語句是否包含非功能需求進行判斷,本質上是一個二分類問題.本節將重點介紹中文非功能需求識別的具體流程,并對實現效果和測試結果進行總結和說明.為了盡可能地縮小人工檢查的范圍,這一部分工作將重點關注非功能需求的召回率.
中文非功能需求識別包含分詞和提取關鍵詞、選擇文本特征、訓練分類模型、測試文本分類這4 個主要步驟,其流程如圖1 所示.接下來,我們將對每一步驟的實現方法進行具體介紹.

Fig.1 Chinese non-functional requirements identification process圖1 中文非功能需求識別流程
(1)分詞和提取關鍵詞
本文采用的非功能需求識別方法基于文本關鍵詞,因此,首先需要對需求文本進行分詞和詞性標注處理,并提取其中的關鍵詞.ICTCLAS[19]、HanLP[20]等近年來廣泛應用的中文文本分析工具均提供了上述功能,因此,本文將直接使用HanLP 工具完成上述工作.
(2)選擇文本特征
在獲得需求文本中的關鍵詞后,需要確定文本特征的表達方式.常用的文本特征模型包括BoW(bag-ofwords)和TF-IDF 模型.BoW 模型統計文檔中各詞匯的出現次數,并使用無序詞集合表示整個文檔.TF-IDF 模型的主要思路是:如果一個詞語在某一文檔中出現次數較多,且出現該詞語的文檔數量較少,則該詞語對文檔的區分能力較強.我們分別嘗試使用上述兩種特征進行后續實驗,并對其結果進行了比較,具體實驗結果將在第3.2節給出.
(3)訓練分類模型
將文本以特征形式表示后,即可基于此訓練分類模型.我們分別嘗試了邏輯斯蒂回歸(LR)、樸素貝葉斯(NB)、NBSVM(Na?ve Bayes-support vector machine)[21]等分類模型,并在參數調整后選取了最優模型用于后續的測試文本分類,具體的實驗結果同樣在第3.2 節給出.
(4)測試文本分類
使用步驟(1)中的分詞和關鍵詞提取方法及步驟(2)中的文本特征選擇方法,將測試文本以特征的形式進行表述.之后,將特征作為分類模型的輸入,模型會給出“包含非功能需求”和“不包含非功能需求”兩類標簽.
我們組合使用不同的文本特征和分類模型,實現非功能需求識別,并采用五折交叉驗證的方法進行測試,即將全部數據平均劃分為5 份,每次取其中的4 份用于訓練,1 份用于測試.實驗和測試均采用第2 節中所描述的數據集.5 次實驗的精確率、召回率及其均值見表3.

Table 3 Results of non-functional requirements identification表3 非功能需求識別的實驗結果
為了對實驗結果形成直觀認識,將不同模型的平均精確率和平均召回率以簇狀柱形圖的方式加以呈現,其結果如圖2 所示.可以看到,結合使用BoW 和NBSVM 模型取得了最高的精確率;使用BoW 或TF-IDF 表示文本特征,使用LR 進行模型訓練均得到了91.00%的召回率.
由于我們的實驗文本已經覆蓋了較多的項目領域,并且劃分數據的過程中采用了隨機抽取的方法,因此,實驗結果具有一定的普適性.而表3 中列出的單次實驗結果,也能夠在一定程度上幫助我們判斷模型在不同數據集上的穩定性.

Fig.2 Average precision and average recall rate for different models圖2 不同模型的平均精確率和平均召回率
這一部分工作的主要目的是提取可能包含非功能需求的語句,從而縮小人工檢查的范圍,所以我們將重點關注非功能需求的召回率,并在此基礎上盡可能地保證精確率以及模型效果的穩定性.因此,最終選用TF-IDF表示文本特征,并使用邏輯斯蒂回歸實現分類.我們使用上述模型,在普通配置(Intel(R)Core(TM)i5-4200U CPU@ 1.60GHz,8.00GB RAM)的筆記本電腦上進行實驗,針對包含5 萬字左右的需求文本,可以在20s 內完成非功能需求的識別和導出,其時間成本遠低于人工檢查所需時間,可以滿足實用要求.
最后,由領域專家對上述分類方法進行生產環境中的測試.測試數據來源于實際項目,項目規模大,復雜度較高,需求描述也比較規范和準確.使用的訓練數據共計200 條,其中非功能需求100 條,功能需求100 條;測試數據共計200 條.非功能需求識別的召回率達到88%,精確率約為73%.因此,上述方法的召回率基本上滿足實用要求,可以有效縮小人工檢查的范圍.
整體來看,針對不同系統的需求描述,上述模型均取得了較好的測試結果,比較適用于對召回率要求較高的應用場景.例如,可將需求文檔作為輸入,然后采用本文的識別方法標識或導出可能包含非功能需求的語句,從而縮小人工檢查的范圍.在其他應用場景下,若需要重點關注精確率,則應選取其他特征表示方法或分類模型,本文的實驗結果也可以提供一定的參考.
識別出包含非功能需求的文本后,可將其進一步對應到性能、可靠性、可用性、安全性、可維護性這5 類非功能需求中的某一類或某幾類.值得一提的是,目前非功能需求的分類并不存在統一的標準[22],因此,在和領域專家交流后,我們最終選取了上述典型、常見的非功能需求.另外,safety 與security 雖然均會被翻譯為安全性,但是兩者的實際側重有所差別.前者主要關注人身安全,而后者則強調信息安全.由于軟件涉及的安全性需求主要圍繞后者,而對前者的涉及較少,因此,我們參考ISO/IEC 25010[23]中的軟件質量屬性分類,不對safety 和security 進行區分.本節將重點介紹實現中文非功能需求分類的具體流程,并對實現效果和測試結果進行總結和說明.
中文非功能需求分類包含分詞和提取關鍵詞、劃分關鍵詞類別、擴充特征詞、計算特征詞權重、文本分類這5 個主要步驟,其流程如圖3 所示.接下來,我們將對每一步驟的實現方法進行具體介紹.

Fig.3 Chinese non-functional requirements classification process圖3 中文非功能需求分類流程
(1)分詞和提取關鍵詞
本文采用的非功能需求分類方法基于特征詞和文本關鍵詞,因此,首先需要對需求文本進行分詞和詞性標注處理,并提取其中的關鍵詞.這一部分工作同樣使用HanLP 工具來完成.
(2)劃分關鍵詞類別
在獲得需求文本中的關鍵詞后,可以計算出每一個關鍵詞與現有特征詞的語義相似度.具體來講,詞語間語義相似度的計算需要從《哈工大信息檢索研究室同義詞詞林擴展版》中獲得詞語編碼,之后即可采用田久樂等人[24]提出的計算方法,依照公式求得兩個詞語間的語義相似度.最后,各個關鍵詞分別被劃分到與其語義相似度最高的特征詞所屬的非功能需求類別.
(3)擴充特征詞
由于詞語相似度的計算沒有考慮到上下文的影響,因此,同一語句中的關鍵詞很可能屬于不同的非功能需求類別.例如,從“高峰時段快速響應用戶請求.”這一語句中,可以提取出“響應”“快速”“高峰”“用戶”等多個關鍵詞.接下來,使用步驟(2)中的方法計算語義相似度,并將關鍵詞劃分到其最近似特征詞所在的分類.前兩個關鍵詞會被劃分為性能;后兩個詞語的最相似特征詞分別為“指紋”和“身份”,因此均被劃分至安全性.
顯然,上述語句描述的是性能這一非功能需求.“用戶”這一名詞本質上可以在各類非功能需求描述中使用,因此不應該作為特征詞出現在任何類別中;而根據經驗,“高峰”傾向于出現在描述性能的語句中,因此應該作為性能的擴充特征詞.這樣一來,對上述兩個詞語的期望處理方式產生了分歧,且其中應用了大量的人工經驗,所以計算機很難對此進行分辨.但是,考慮到非特征關鍵詞可能出現在任何類別的非功能需求中,因此在不斷增加訓練數據的情況下,該關鍵詞會被加入到各個分類,所以可以考慮在后續步驟中降低其權重,而在本步驟中將所有關鍵詞作為擴充特征詞.
接下來,需要確定語句中關鍵詞的最近似分類.為了盡可能地在各分類特征詞中引入上下文信息,將一個語句中的全部關鍵詞作為一個整體,確定其最近似分類.“響應”和“快速”均包含在初始特征詞中.而根據語義相似度的計算結果來看,“指紋”和“身份”與其最近似詞語的相似度并不是很高.所以,相較于直接采用多數投票的方式決定最終分類,對不同的關鍵詞賦予不同的權重更為合理,其計算公式如下:

其中,y表示分類結果,v表示分類,V表示全部非功能需求類別,k表示從文本中提取的關鍵詞數量,δ(v,f(xi))判定關鍵詞xi是否屬于類別v,wi則表示關鍵詞權重.考慮到尚未通過大量訓練完成特征詞的擴充,因此,在現階段的實驗中,初始特征詞的相同關鍵詞被分配較高的權重,相似關鍵詞的權重則隨著其相似程度的下降而遞減.
(4)計算特征詞權重
步驟(3)中已經提到,“用戶”等非特征關鍵詞極有可能會作為擴充特征詞,被加入到各個非功能需求類別中.為了降低這些詞語在實際分類過程中造成的干擾,同時提高重要特征詞的影響力,需要對不同特征詞賦予不同的權重,其計算公式如下:

其中,wi表示特征詞權重,|V|表示非功能需求類別總數,v表示具體的非功能需求分類,t表示特征詞.這樣一來,當特征詞出現在越多的分類中時,其權重就會越小,對最終分類結果的影響也就越小.
(5)文本分類
針對待分類文本,同樣先進行分詞和關鍵詞的提取.接下來,計算關鍵詞的最近似類.如果該關鍵詞已存在于特征詞中,則使用步驟(4)中計算所得的權重;否則,使用統一的基礎權重.這一步驟的計算依舊使用公式(1),只是權重的計算方式與步驟(3)有所差異.
本節的實驗和測試均采用第2 節中所描述的數據集.首先,從每類非功能需求中隨機抽取10 條數據用于測試,共計50 條,其余150 條數據用于特征詞擴充.我們分別使用不同數據量進行特征詞擴充,值得一提的是,用于擴充的數據將從各類非功能需求中分別隨機抽取,盡量保證各類別數據分布均勻.用于特征詞擴充的數據量分別為0、50、100、150,因此,理想情況下,每次總計需要抽取數據50 條,即從各類別未使用數據中隨機抽取10條.但是,考慮到數據本身分布不均勻,因此,當某一類非功能需求的數據不足時,平均使用其他類的數據進行補充即可.上述實驗的結果見表4.

Table 4 Results of non-functional requirements classification表4 非功能需求分類的實驗結果
為了對實驗結果形成直觀認識,將使用不同數據量實現特征詞擴充后的準確率以折線圖的方式進行呈現,其結果如圖4 所示.

Fig.4 Accuracy for non-functional requirements classification圖4 非功能需求分類準確率折線圖
通過上述實驗可以發現,隨著用于特征詞擴充的數據量的增加,整體的準確率呈現出先降后升的趨勢.分析造成這一現象的原因,特征詞擴充的初期之所以會引入一些錯誤,很大程度上是由于擴充了一些非特征詞匯,并且這些詞匯初始可能只出現在少量類別的文本中,因此未被調整到適宜權重.例如,“用戶”這一名詞本質上可以出現在任何類別的非功能需求之中,因此不應作為任何一類的特征詞.但是,由于其語義與“身份”最為近似,因此會被劃分至安全性.在完成第1 次擴充時,其權重為0.510 825 6,而在完成最后一次擴充后,其權重則下降到0.223 143 55.可見,這類非特征詞的加入可能會對整體分類效果產生一定的影響,但是,隨著數據量的增加,影響將會逐漸降低.
接下來,使用全量數據進行測試,并分別使用其中的0、50、100、150、200 條數據進行特征詞擴充.這一實驗的目的主要分為兩方面:首先,增加測試數據量,使測試結果更為準確.其次,對于測試數據,判斷在逐一對文本進行分類前,先將其用于特征詞擴充的可行性.因為這一做法可能會降低非特征詞匯對測試結果的影響.上述實驗的結果見表5.

Table 5 Results of non-functional requirements classification (test with full dataset)表5 非功能需求分類的實驗結果(全量數據測試)
對于上述實驗結果,使用如圖5 所示的折線圖加以直觀呈現.
整體來看,在文本分類前進行特征詞擴充會對實驗結果產生一定的積極影響.但是,具體來看,隨著用于特征詞擴充的數據量的增加,可靠性的準確率呈現出先升后降的趨勢,可維護性的準確率則維持穩定.經過分析,我們認為,這在一定程度上是由于數據分布不均造成的.由于性能這一分類的非功能需求數據最多,且語句中的特征較為明顯,因而會造成其他類別詞匯或非特征詞匯被加入其中.相較之下,可靠性和可維護性的數據量較少,所以,最后兩次數據擴充中這兩個類別的數據占比較低,因而會影響到擴充的詞匯量.

Fig.5 Accuracy for non-functional requirements classification (test with full dataset)圖5 非功能需求分類準確率折線圖(全量數據測試)
上述方法主要針對包含非功能需求的語句.本文之所以將識別和分類的過程分開完成,一方面,可以使上述方法在不同的應用場景下更為靈活;另一方面,如果在識別和分類過程之間加入人工確認的步驟,則能夠以較低的人力成本有效地提升分類效果.第3 節的實驗結果已經表明,選用TF-IDF 表示文本特征,并使用邏輯斯蒂回歸實現分類,基本能夠達到接近90%的召回率和70%以上的精確率.而邏輯斯蒂回歸本身,能夠表示出分類結果的置信度.因此,在人工確認的過程中,只需重點關注置信度相對較低的語句,所以不會過多地增加人力成本.
作為對比實驗,我們將上述兩個過程合并進行,即省略識別過程,添加“功能需求”這一類別.考慮到功能需求本身的特征詞匯難以定義,我們采用了設置閾值的方法.具體來講,特征詞擴充的過程與上文描述的方法相同,使用全量數據進行特征詞擴充.但是,在對測試文本進行分類時,針對加權投票的得分設定閾值.如果投票所得分類的得分超過該閾值,則將文本分類為相應的非功能需求.反之,如果所有分類的得分均低于該閾值,則將文本劃分至功能需求.使用不同閾值的實驗結果見表6.

Table 6 Results of requirements classification (contains functional requirements)表6 需求分類的實驗結果(包含功能需求)
可以看到,隨著閾值的增加,文本更傾向于被分類至功能需求,因此,功能需求的識別準確率不斷上升,非功能需求的識別準確率則有所下降.與之前的實驗相比,當閾值為8.00 時,非功能需求的整體準確率略有下降,功能需求的準確率則與之前的實驗結果存在明顯的差距.而當閾值為9.00 和10.00 時,功能需求的整體準確率接近于之前的實驗結果,非功能需求的整體準確率卻明顯不及.所以,綜合來看,拆分非功能需求的提取和分類過程會獲得更好的效果.
最后,由領域專家對上述分類方法進行生產環境下的實際測試.測試數據共計300 條.在不進行特征詞擴充的情況下,準確率約為70%.在進行特征詞擴充的情況下,準確率約為74%,因此,本方法針對非功能需求分類具備一定的有效性,且擴充特征詞能夠在一定程度上提升分類效果.
整體來看,本節所述的分類方法,比較適用于無法提供額外標注數據時,非功能需求文本的類別劃分.例如,針對已區分功能需求和非功能需求的結構化文檔,可以直接依照需求模板抽取其中的非功能需求,并將其作為輸入,使用本節所述的方法進行需求描述詞匯擴充,進而實現輸入文本的分類.此外,由于本文方法的實現基于特征詞權重,所以可以對需要人工自定義核心詞匯的場景提供良好的支持.
相較于已有的國內外工作,本文將非功能需求的提取和分類過程分開完成.提取過程旨在定位非功能需求,從而縮小人工檢查的范圍.針對這個二分類問題,僅需要較少地標注數據訓練模型,因而更符合工業界的實際情況.接下來,對確認包含非功能需求的語句進行分類,上述過程基于我們整理的非功能需求描述詞匯來進行,并且特征詞會在系統的使用過程中不斷地自動擴充,不再需要額外地標注數據.
隨著軟件系統的日益復雜化,在軟件開發過程中盡早明確非功能需求,對于項目具有積極意義.針對英文需求描述,已有不少研究圍繞其提取和分類展開.但是,由于不同語言需求表述之間的巨大差異性,這些研究成果無法直接對中文需求文本提供支持.
本文重點研究中文非功能需求描述的識別和分類方法.識別過程采用機器學習方法,從文本中提取出可能包含非功能需求的語句,盡可能地縮小人工檢查的范圍.分類過程則基于語義距離和相似度計算,將包含非功能需求的語句劃分為性能、可靠性、可用性、安全性、可維護性這5 類.本文的分類訓練和實驗測試基于課題組工作項目整理的實驗數據集來進行,并通過工業界的實際領域應用案例,驗證了方法的有效性.
我們也注意到,在實驗過程中,對于同一語句,不同的中文文本分析工具可能給出不同的分詞和詞性標注結果.而對于部分領域術語,上述工具也無法很好地進行識別.例如,HanLP 工具會將“用戶體驗”這一術語拆分為“用戶”和“體驗”兩個詞語,其中,前者作為名詞,后者作為動詞.這樣無疑會對特征詞的擴充和識別產生一定的影響.但是,現有的工具基本上支持用戶自定義詞典功能.因此,構建一個非功能需求的領域術語庫,并用其輔助分詞和關鍵詞提取工作,有望優化特征詞的質量,從而進一步提升非功能需求識別和分類的效果,相關工作和實驗將在未來的研究中繼續進行.