溫趙欣 關(guān)慧 賈成真
摘要
在面向方面需求工程中,橫切關(guān)注點(diǎn)是一類需要單獨(dú)識(shí)別的特殊關(guān)注點(diǎn),因?yàn)樗哂薪豢椇头稚⒌奶匦?。本文提出了一種基于需求依賴關(guān)系來識(shí)別橫切關(guān)注點(diǎn)的方法。首先定義了需求依賴關(guān)系,并提出了一種新的需求依賴關(guān)系分類方法;其次基于定義的需求依賴關(guān)系及分類,分析需求和關(guān)注點(diǎn)之間的依賴關(guān)系并建立依賴關(guān)系矩陣;最后通過橫切關(guān)注點(diǎn)的交織和分散特性以及對(duì)得出的依賴關(guān)系矩陣進(jìn)行運(yùn)算,得出識(shí)別出的橫切關(guān)注點(diǎn)。本文最后通過實(shí)際案例的實(shí)驗(yàn)結(jié)果證明了此方法識(shí)別橫切關(guān)注點(diǎn)的可行性和有效性。
【關(guān)鍵詞】橫切關(guān)注點(diǎn) 需求依賴關(guān)系 面向方面 需求工程 分散 交織
面向方面軟件開發(fā)(AOSD)已經(jīng)成為解決復(fù)雜軟件系統(tǒng)設(shè)計(jì)和開發(fā)的一個(gè)強(qiáng)有力的選擇。然而,由于現(xiàn)代軟件系統(tǒng)的復(fù)雜性,關(guān)注點(diǎn)的分離不可避免地導(dǎo)致橫切關(guān)注點(diǎn)[1,12]的問題,這通常被描述為分散(scattering)和交織(tanglillg)[2]。AOSD提供新的方式來建模橫切關(guān)注點(diǎn),允許其單獨(dú)的設(shè)計(jì)和實(shí)現(xiàn),并與系統(tǒng)的組件進(jìn)一步集成(編織)。
面向方面軟件開發(fā)(AOSD)面臨的主要挑戰(zhàn)在方面識(shí)別。Themeooc[3]方法提供了對(duì)面向方面軟件開發(fā)中分析和設(shè)計(jì)階段的支持,但缺少對(duì)非功能需求的有效處理。文獻(xiàn)[4]提出了基于聚類的橫切關(guān)注點(diǎn)的識(shí)別方法,其通過分析各需求間的相似度及二次聚類來識(shí)別橫切關(guān)注點(diǎn),但操作復(fù)雜不便于應(yīng)用。V型目標(biāo)模型[5]雖然較好地利用了橫切關(guān)注點(diǎn)擴(kuò)散的特點(diǎn),但其只能識(shí)別非功能性橫切關(guān)注點(diǎn),而沒有實(shí)現(xiàn)功能性橫切關(guān)注點(diǎn)的識(shí)別。
目前隨著軟件行業(yè)的發(fā)展速度加快,軟件之間的競(jìng)爭(zhēng)也越來越大,各種軟件不斷推出新的組合業(yè)務(wù),導(dǎo)致業(yè)務(wù)之間的橫切關(guān)注點(diǎn)越來越多,關(guān)注點(diǎn)之間的關(guān)系,越來越復(fù)雜。這樣就給業(yè)務(wù)變更帶來巨大挑戰(zhàn),即在軟件生命周期中,如何客觀準(zhǔn)確識(shí)別橫切關(guān)注點(diǎn)的依賴關(guān)系和影響范圍成為識(shí)別橫切關(guān)注點(diǎn)的重中之重。在這樣的背景下,我們采取基于需求依賴關(guān)系的方法來識(shí)別橫切關(guān)注點(diǎn)。
1 需求依賴關(guān)系及分類
1.1 需求依賴關(guān)系
需求依賴關(guān)系指的是同一個(gè)系統(tǒng)中的一個(gè)需求與另一個(gè)需求之間存在的依賴關(guān)系,本文考慮的是需求與關(guān)注點(diǎn)之間的依賴關(guān)系。關(guān)注點(diǎn)(concem)指的是整個(gè)軟件開發(fā)中出現(xiàn)的特定的目標(biāo)、概念或者興趣域[6]。橫切關(guān)注點(diǎn)指的是軟件開發(fā)中一些具有橫越多個(gè)模塊的行為的一類特殊關(guān)注點(diǎn)。也可以把橫切關(guān)注點(diǎn)理解為一個(gè)需求的集合,該需求集合散亂的分散在其他需求集合中。所以我們?cè)诒疚闹袨榱烁玫姆治鲂枨笾g的依賴關(guān)系,我們考慮的是需求與關(guān)注點(diǎn)之間的需求依賴關(guān)系。在[7,8,9]的基礎(chǔ)上,本文重新總結(jié)并定義了的9種依賴關(guān)系,并對(duì)這9種關(guān)系進(jìn)行了分類和舉例說明。
(1)前提(precede):需求A在需求B的前面,A是B的前提。例子:‘導(dǎo)入音樂是‘播放音樂的前提。
(2)相似(be similarto):兩個(gè)需求分享相似的數(shù)據(jù)信息,這兩個(gè)需求彼此相似。例子:‘通過姓名搜索學(xué)生基本信息和‘通過學(xué)號(hào)搜索學(xué)生基本信息相似。
(3)解釋(exPlain):描述需求之間的構(gòu)成關(guān)系。例子:‘某安全需求是‘授權(quán)需求和‘驗(yàn)證需求的組合。
(4)影響(influence):一個(gè)需求對(duì)另一些需求有影響關(guān)系?!樱悍傻男枨笫堋S或者軟件開發(fā)的生意類型的影響。
(5)異常(be_exception_of):一個(gè)需求描述另一個(gè)需求的異常事件。例子:‘一個(gè)用戶輸入一個(gè)空用戶名,系統(tǒng)提示‘請(qǐng)輸入正確的用戶是‘一個(gè)用戶輸入他的用戶名和密碼,接下來系統(tǒng)驗(yàn)證輸入信息的異常事件。
(6)沖突(conflict):實(shí)現(xiàn)一個(gè)需求逆向的影響另一個(gè)需求。例子:增加系統(tǒng)安全功能可能和系統(tǒng)功能沖突。
(7)發(fā)展(evolve into):一個(gè)需求B是另一個(gè)需求A的新版本,A發(fā)展成B。例子:‘用戶用電腦聽歌發(fā)展為‘用戶用手機(jī)聽歌。
(8)花費(fèi)(increase/deereas_cost_of):一個(gè)需求的實(shí)現(xiàn)能夠增加/減少另一個(gè)需求的花費(fèi)。例子:如果一個(gè)需求聲明了‘響應(yīng)需求小于5秒,它減少了需求的時(shí)間花費(fèi)。
(9)價(jià)值(increase/decrease_value_of):一個(gè)需求的實(shí)現(xiàn)能夠增加/減少另一個(gè)需求的價(jià)值。例子:用戶能在聽音樂的同時(shí)瀏覽照片。在這個(gè)事件中‘用戶聽歌增加了滿意度,因?yàn)樗黾恿恕疄g覽照片需求。
1.2 一種新的需求依賴關(guān)系分類
如圖1所示,通過分析和研究以上需求依賴關(guān)系之間的異同,本文提出的依賴關(guān)系模型在概念層次上分為兩大類,分別是內(nèi)在需求依賴關(guān)系和附加依賴關(guān)系。內(nèi)在需求依賴關(guān)系又分成兩小類,分別為業(yè)務(wù)相關(guān)和演化;附加需求依賴關(guān)系也分成兩小類,分別是價(jià)值和成本。內(nèi)在需求依賴關(guān)系描述的是需求的基本關(guān)聯(lián)狀態(tài)和需求的語義以及需求的結(jié)構(gòu)信息。附加的需求依賴關(guān)系是指特定軟件開發(fā)活動(dòng)存在的關(guān)系。
根據(jù)內(nèi)在需求依賴關(guān)系與附件需求依賴關(guān)系的定義與分類,業(yè)務(wù)相關(guān)依賴關(guān)系包括前提、相似、解釋、影響、異常、沖突,演化依賴關(guān)系有發(fā)展,價(jià)值需求依賴關(guān)系包括價(jià)值,成本需求依賴關(guān)系包括花費(fèi)。通過對(duì)這些依賴關(guān)系分類,我們可以更直觀的判定關(guān)注點(diǎn)和需求之間的相互作用和影響范圍。使開發(fā)人員可以在橫切關(guān)注點(diǎn)更改的最初迅速找到與之相關(guān)的關(guān)注點(diǎn),便于開發(fā)人員掌握工作的重點(diǎn)。
2 橫切關(guān)注點(diǎn)的特征和識(shí)別方法
2.1 橫切依賴關(guān)系分析
橫切關(guān)注點(diǎn)的識(shí)別通常要涉及到兩個(gè)不同領(lǐng)域之間存在的追溯依賴關(guān)系。這兩個(gè)域,一般稱為源和目標(biāo),例如關(guān)注點(diǎn)和需求陳述。從數(shù)學(xué)的角度來看,源和目標(biāo)通過映射或追溯關(guān)系相互關(guān)聯(lián),用可追溯矩陣來表示。在文獻(xiàn)[2]中,作者利用一種關(guān)鍵字匹配技術(shù)來建立關(guān)注點(diǎn)之間的關(guān)聯(lián),而本文則用需求依賴關(guān)系來連接源和目標(biāo)之間的相互關(guān)聯(lián),其可以按照如下所述形式化。
根據(jù)圖2,存在從源域到目標(biāo)域的多值函數(shù)f',如果f'(s)=t,則s和t之間存在追溯關(guān)系。同樣的,定義另一個(gè)從目標(biāo)域到源域的多值函數(shù)g',該函數(shù)可以被認(rèn)為是f‘的一個(gè)特殊的反向函數(shù)。如果f'不是一個(gè)超射,則認(rèn)為目標(biāo)是f'的范圍。顯然,f'和g'可以表示為單值函數(shù),考慮到共域是目標(biāo)和源的非空子集的集合。
Let f:Source→(Targct)和g:Target→(Source)是由以下定義的新函數(shù):
分散、交織和橫切是這個(gè)函數(shù)的一些特殊情況,且橫切是分散和交織的特殊組合
定義1分散(scattering)。一個(gè)元素s∈Source是分散的,如果card(f(s))>1,其中card(f(s))是指f(s)的基數(shù)。換句話說,在源和目標(biāo)之間的映射中,源元素與多個(gè)目標(biāo)元素有依賴關(guān)系時(shí),發(fā)生分散。
定義2交織(tangling)。一個(gè)元素t∈Target是交織的,如果card(g(t)>1。在源和目標(biāo)之間的映射中,目標(biāo)元素與多個(gè)源元素具有依賴關(guān)系,發(fā)生交織。
定義3橫切(Crosscutting)。讓s1,s2ESource,且s1≠s2,如果card(f(s1))>1,t∈f(s1):s2 Eg(t),s1橫切s2。.換句話說,橫切發(fā)生在源和目標(biāo)之間的映射中,源元素分布在目標(biāo)元素中,并且在這些目標(biāo)元素中的至少一個(gè)與其他源元素交織在一起。
根據(jù)前面的定義,可以得出:讓s1,s2∈source,且s1≡s2,如果card(f(s1))>1且f(s1)∩f(s2)≠,則認(rèn)為s1橫切s2。
2.2 依賴矩陣建立
本文用一種可追溯矩陣的依賴矩陣來表示函數(shù)f。表1給出了一個(gè)具有5個(gè)源元素和6個(gè)目標(biāo)元素的依賴關(guān)系矩陣的示例,用行來表示源元素,用列來表示目標(biāo)元素。單元中的A1表示對(duì)應(yīng)列的目標(biāo)元素尋址對(duì)應(yīng)行的源元素(在表1中,s1被映射到t1和t4,這意味著t1和t4尋址s1?;谶@個(gè)依賴關(guān)系矩陣,導(dǎo)出了分散矩陣(表2)和交織矩陣(表3))。
在分散矩陣中,如果該行中的源元素被分散(映射到多個(gè)目標(biāo)元素),則行僅包含從源到目標(biāo)元素的依賴關(guān)系;否則行僅包含零(無分散)。
在交織矩陣中,如果該行中的目標(biāo)元素被交織(映射到多個(gè)源元素),則行只包含依賴關(guān)系從目標(biāo)到源元素;否則行僅包含零(沒有交織)。
通過分散矩陣和交織矩陣的乘積得到橫切積矩陣。橫切積矩陣示出橫切關(guān)系的數(shù)量,并用于推導(dǎo)最終橫切矩陣。表4和表5分別顯示了橫切積矩陣和橫切矩陣的例子。橫切積矩陣不是二進(jìn)制矩陣,因?yàn)樗稚⒑徒豢椌仃嚦朔e的結(jié)果。橫切矩陣是通過將橫切積矩陣轉(zhuǎn)換成二進(jìn)制矩陣來獲得的。在橫切矩陣中,矩陣單元只表示橫切的發(fā)生;它從橫切的數(shù)量中抽象出來。通過一個(gè)簡(jiǎn)單的轉(zhuǎn)換,橫切積矩陣ccpm可以導(dǎo)出橫切矩陣ccm:ccm[i][k]-if(ccpm[i][k]>0)∧(i≠j)then1else0。使用這個(gè)簡(jiǎn)單的轉(zhuǎn)換,任何大于1值被轉(zhuǎn)換1并且對(duì)角線的值被設(shè)置為0(顯然源元素不能橫切本身)。橫切關(guān)注點(diǎn)判斷公式為。cc=∑i=1|s|ccmki(k為行),如果cc>0,則為橫切關(guān)注點(diǎn)。
圖3示出了獲得最終橫切矩陣的整個(gè)過程。
2.3 橫切關(guān)注點(diǎn)識(shí)別
識(shí)別橫切關(guān)注點(diǎn)主要步驟被概括并總結(jié)如下:
2.3.1 識(shí)別源元素
需求通常表示在多個(gè)文件中,它們是從與不同的利益相關(guān)者的訪談中提取的。分析這些需求以確定主要關(guān)注點(diǎn):功能性關(guān)注點(diǎn)和非功能性關(guān)注點(diǎn)(NFCS)。為了識(shí)別NFCS,本文使用一個(gè)目錄,其中定義了常見的NFCS。
2.3.2 識(shí)別目標(biāo)元素
需求通常表示在多個(gè)文件中,它們是從與不同的利益相關(guān)者的訪談中提取的。
2.3.3 建立依賴關(guān)系矩陣
拿關(guān)注點(diǎn)和需求分別得作為源和目標(biāo),并通過需求依賴關(guān)系來建立它們的追蹤關(guān)系。
2.3.4 通過矩陣運(yùn)算識(shí)別橫切
幾個(gè)簡(jiǎn)單的矩陣運(yùn)算(圖3),經(jīng)過計(jì)算后在在需求階段獲取橫切關(guān)注點(diǎn)。
3 實(shí)例分析及比較
3.1 案例分析
為了說明這一過程,本文應(yīng)用了文獻(xiàn)[10]中提出的案例的簡(jiǎn)化版本,CFVS(aconcurrent file versoning system)。CFVS系統(tǒng)不僅支持維護(hù)不同版本的項(xiàng)目文件,還支持一組開發(fā)人員在同一個(gè)項(xiàng)目上工作,同時(shí)修改同一個(gè)文件。在這個(gè)示例中,開發(fā)人員可以下載軟件項(xiàng)目(check-out)的版本。在更改項(xiàng)目的當(dāng)前版本之后,開發(fā)人員可以將項(xiàng)目的新版本上傳到CFVS系統(tǒng)(check-in)。表6列出了系統(tǒng)必須完成的主要需求表7顯示了根據(jù)需求提取的關(guān)注點(diǎn)和非功能關(guān)注點(diǎn)。
接下來分別用關(guān)注點(diǎn)和需求作為源和目標(biāo),并根據(jù)第一章中定義的需求依賴關(guān)系,建立了需求依賴關(guān)系矩陣(表8)。根據(jù)3.1 的定義計(jì)算出橫切積矩陣(表9),從而導(dǎo)出橫切矩陣(表10)。根據(jù)文中橫切關(guān)注點(diǎn)判斷公式cc=∑i=1|s|,ccmki(k為行),得出c2,c4,c7,c8,c10,c11,c12,c13,c14,c15,c16,c17為橫切關(guān)注點(diǎn)。
在上述例子中,本文通過對(duì)CFVS系統(tǒng)的關(guān)注點(diǎn)和需求的需求依賴關(guān)系分析給出了對(duì)于的需求依賴關(guān)系矩陣,并通過該計(jì)算得到了橫切關(guān)注點(diǎn)集。通過該方法計(jì)算出的橫切關(guān)注點(diǎn)與實(shí)際開發(fā)中得到的結(jié)論一致,驗(yàn)證了本文方法的可行性。
3.2 討論
此小節(jié)通過與國外的研究方法的比較進(jìn)一步表示本文方法的可行性。與Conejero J M等人的研究方法[11]相比,他們識(shí)別出了10個(gè)橫切關(guān)注點(diǎn)(表12),我們識(shí)別了13個(gè)橫切關(guān)注點(diǎn)。原方法采用的是一個(gè)橫切模式來識(shí)別橫切關(guān)注點(diǎn)。通過對(duì)關(guān)注點(diǎn)和用例的關(guān)鍵詞的比對(duì),來自動(dòng)的建立源與目標(biāo)的映射關(guān)系,并通過關(guān)注點(diǎn)之間的extend和include關(guān)系來校驗(yàn)和矯正自動(dòng)建立的映射關(guān)系。而我們采用了需求依賴關(guān)系來鏈接源于目標(biāo)之間的映射,這樣可以更全面的分析每種關(guān)注點(diǎn)和需求之間的全面的關(guān)系,找出了找出更多的隱藏的橫切關(guān)注點(diǎn)。與Theme/Doc和V型目標(biāo)模型方法比較,我們可以兼顧的識(shí)別功能的和非功能的橫切關(guān)注點(diǎn)。
4 結(jié)束語
本文首先基于橫切依賴關(guān)系的概念框架引入了重新定義的需求依賴關(guān)系,并通過需求依賴關(guān)系建立需求依賴關(guān)系矩陣;通過依賴矩陣計(jì)算識(shí)別橫切關(guān)注點(diǎn)。最后通過本文的方法對(duì)CFVS系統(tǒng)進(jìn)行分析,驗(yàn)證了本文方法的可行性。本文方法的優(yōu)勢(shì)在于只要分析需求依賴關(guān)系就可以識(shí)別橫切關(guān)注點(diǎn),既包括功能性橫切關(guān)注點(diǎn),也包括非功能關(guān)注點(diǎn),還可以準(zhǔn)確的通過需求依賴關(guān)系來確定橫切關(guān)注點(diǎn)的影響范圍。為開發(fā)人員在需求分析階段識(shí)別橫切關(guān)注點(diǎn)提供了一個(gè)好的方法。希望下一步在需求依賴關(guān)系的識(shí)別上可以在不影響依賴關(guān)系的全面性上減少開發(fā)人員在需求依賴關(guān)系上的判斷所花費(fèi)的時(shí)間,讓橫切關(guān)注點(diǎn)的識(shí)別即準(zhǔn)又快,可以在大型開發(fā)工程中易于應(yīng)用。
參考文獻(xiàn)
[1]FILMAN R,ELRAD T,CLARKE S.Aspect-Oriented Software Development[J].InAspect-Oriented Software Development,2003,43(2):19-26.
[2]BERG K V D.Analysis of crosscuttingin early software developmentphases based on traceability(M]//Transactions on Aspect-OrientedSoftware Development Ⅲ.SpringerBerlin Heidelberg,2007:73-104.
[3]BANIASSAD E,CLARKE S.Theme:AnApproach for Aspect-Oriented Analysisand Design[C]//InternationalConference on Software Engineering,2004. ICSE 2004.Proceedings.IEEE,2004:158-167.
[4]DUAN C,CLELAND-HUANG J.A ClusteringTechnique for Early Detection ofDominant and Recessive Cross-Cutting Concerns[C]//Aspect-Oriented Requirements Engineeringand Architecture Design,2007.EarlyAspects at ICSE:Workshops in.IEEE,2007:1-1.
[5]YU Y,MYLOPOULOS J.From Goals toAspects:Discovering Aspects fromRequirements Goal Models[C]//Proc.IEEE International RequirementsEngineering Conference.2004:38-47.
[6]Moreira A,Rashid A,Araujo J.Multi-Dimensional Separation of Concernsin Requirements Engineering[C]//IEEE International Conference onRequirements Engineering.IEEEComputer Society,2005:285-296.
[7]MANG H,LI J,ZHU L.Investigatingdependencies in software requirementsfor change propagation analysis[J].Information&Software Technology,2014,56(1):40-53.
[8]HARTONG M,GOEL R,WIJESEKERA D.Security requirement derivation bynoun——verb analysis of use——misusecase relationships:a case studyusing positive train control[M].Springer-Verlag New York,Inc.2014.
[9]SOOMRO S,HAFEEZ A,SHAIKH A.Ontology B a s e d RequirementInterdependency Representation andVisualization[M]//CommunicationTechno10Gies,Information Securityand Sustainable Development.SpringerInternational Publishing,2013:259-270.
[10]TEKINERDOGAN B,AKSIT M,HENNINGER F.Impact of Evolution of Concerns inthe Model-Driven Architecture DesignApproach[J].Electronic Notes inTheoretical Computer Science,2007,163(02):45-64.
[11]CONEJERO I M,HERNANDEZ J,JURADOE.Mining early aspects basedon syntactical and dependencyanalyses[J].Science of ComputerProgramming,2010,75(11):1113-1141.
[12]何成萬.橫切關(guān)注點(diǎn)管理中的若干關(guān)鍵問題綜述[J].計(jì)算機(jī)科學(xué),2016,43(07):7-12.