江東宇+康達(dá)+周王順
摘要:傳統(tǒng)的軟件開發(fā)模式下,從提出需求到完成設(shè)計之間跨越的鴻溝是降低開發(fā)效率的主要因素。為了輔助設(shè)計人員進(jìn)行高效的軟件開發(fā),文中提出一個基于本體的需求分析和軟件體系結(jié)構(gòu)設(shè)計方法。首先建立領(lǐng)域本體模型、需求本體模型和軟件體系結(jié)構(gòu)本體模型;接著在需求分析階段,通過本體映射將用戶需求映射到本體概念上,進(jìn)行準(zhǔn)確地需求質(zhì)量評估;然后在體系結(jié)構(gòu)設(shè)計階段,通過對網(wǎng)上共享的設(shè)計文檔進(jìn)行五種維度的語義標(biāo)注生成語義索引,實現(xiàn)跨領(lǐng)域的語義搜索,為設(shè)計人員提供更全面、更詳細(xì)的設(shè)計文檔作為參考;最后結(jié)合自己項目的特點,逐步構(gòu)建、完善系統(tǒng)體系結(jié)構(gòu)。本文將本體作為描述需求和體系結(jié)構(gòu)的基礎(chǔ),實現(xiàn)了需求到設(shè)計的平滑過度,減少了設(shè)計人員和用戶進(jìn)行交流的時間開銷,對于整體提高軟件開發(fā)效率來說具有一定的幫助。
關(guān)鍵字:本體;語義網(wǎng);語義標(biāo)注;語義搜索;軟件體系結(jié)構(gòu)設(shè)計
中圖法分類號:TP311文獻(xiàn)標(biāo)識碼: A doi:
Abstract:In the traditional software development mode,the wider gap betweenrequirementanddesign which is the main factor to reduce the development efficiency. In order to assist designers to carry out efficient software development, this paper addressedaframeworkwithontologytechnology. Firstly, theDomainOntologyModel, Requirement OntologyModel and SoftwareArchitectureOntologyModelware built.Then in the requirements analysis phase, userrequirementswaremappedto the ontologynode inorder to moreaccuratelyassessneeds.During the summary design phase, it achieved interdisciplinarysemanticsearch through multidimensional semanticannotationof the design document and provided a more comprehensive and detailed template for designers, then using it to completesystems or subsystemarchitecturedesign.This paperdescribes the ontology as thebasis for the requirementsandarchitecture, not only to achieve a smooth transition from requirements to design, but also reduces the time overhead of the communication between the designer and the user.It is helpful to improve the efficiency of software development.
Keywords:Ontology;Semantic Web;Semantic Annotation; Semantic Search;Software ArchitectureDesign
1. 引言
隨著軟件的普及,用戶對系統(tǒng)提出的需求也在與日俱增,軟件開發(fā)過程變得越來越復(fù)雜。一個良好的需求規(guī)格說明對于成功的軟件開發(fā)項目來說是至關(guān)重要的。但是需求工程階段是既耗時又容易出錯的,主要表現(xiàn)在如何獲取用戶的真實需求以及如何發(fā)現(xiàn)需求中存在的錯誤,這需要開發(fā)人員與客戶不斷的溝通交流,并且許多錯誤是在執(zhí)行或測試階段才被檢測出來,這大大增加了軟件開發(fā)周期,降低了整體開發(fā)效率[1-4]。在需求分析完成之后,接下來就要進(jìn)行系統(tǒng)體系結(jié)構(gòu)設(shè)計,這一階段要求開發(fā)人員從整個系統(tǒng)的角度進(jìn)行考慮,設(shè)計一個從整體到部分的最高層次的劃分[5]。在這過程中,面臨的最困難的問題就是如何滿足用戶需求和常見的體系結(jié)構(gòu)設(shè)計目標(biāo),如可靠性、安全性、可擴(kuò)展性、可維護(hù)性等。除了提升設(shè)計人員自身的知識能力水平之外,另一種辦法就是調(diào)研同類產(chǎn)品的情況以及技術(shù)特征[6]。通過了解當(dāng)前世界上對這種產(chǎn)品所能提供的理論支持和技術(shù)平臺支持,再結(jié)合自己項目的特點,逐步構(gòu)建完善系統(tǒng)體系結(jié)構(gòu),但是如何理解設(shè)計文檔中的領(lǐng)域詞匯,如何從網(wǎng)上海量的數(shù)據(jù)中高效的選擇和自己項目類似的文檔,這些都是我們所要解決的問題。
近幾年研究人員探討使用人工智能技術(shù),用以解決這些問題[1][2]。Avgeriou P等人在文獻(xiàn)[1]中將軟件工程定義為一個跨學(xué)科的問題,與大量的情景、社會學(xué)、心理學(xué)、人類學(xué)和教育因素等有關(guān),并且分析了其中可能產(chǎn)生的問題,例如需求是不完整的、模糊的、不精確的等。針對這些原因,Hany H Ammar等人在文獻(xiàn)[3]中分析并提出有必要探索一個新的技術(shù)和方法,用于整合在軟件工程中積累的理論、技術(shù)和資源,提供一個統(tǒng)一的、共享的、公認(rèn)的知識基礎(chǔ)設(shè)施。因此他們將人工智能技術(shù)引入軟件工程,具體包括自然語言需求處理(NLR)、知識庫系統(tǒng)(KBS)、本體和智能計算。
本體作為人工智能技術(shù)的一種,能夠用于復(fù)用、集成、合并數(shù)據(jù)和知識,構(gòu)建一個統(tǒng)一的、共享的、公認(rèn)的知識基礎(chǔ)設(shè)施,并且通過推理得到信息中蘊(yùn)含的隱藏信息或錯誤信息。M. P. S. Bhatia等人在文獻(xiàn)[4]中詳細(xì)介紹了軟件工程領(lǐng)域中各個本體的定義和實際應(yīng)用價值,包括Upper Ontology、Domain Ontology、Architecture and Design Ontologies等,但僅僅是一些概要性描述,沒有給出一個完整的知識體系來實現(xiàn)在整個軟件開發(fā)周期中理解和溝通的共享。
針對本體在軟件工程中應(yīng)用的研究方向,LI Zong-yong等人在文獻(xiàn)[7]中提出一個多本體框架用于輔助設(shè)計人員進(jìn)行需求獲取,并且對框架中提及的多種本體進(jìn)行了描述,但是該研究只是理論階段,沒有對本體中的概念進(jìn)行形式化描述,也沒有驗證本體如何對需求進(jìn)行質(zhì)量評估。R?ih? O.等人在文獻(xiàn)[8]中提出一種基于基因遺傳算法的軟件體系結(jié)構(gòu)設(shè)計,它將設(shè)計過程看成是一個搜索問題,即尋找一個應(yīng)用通用方案的組合,能夠以最優(yōu)的方式滿足質(zhì)量要求。通過基因遺傳的啟發(fā)式搜索方法,自動生成一個合理的軟件體系結(jié)構(gòu)。但是該方法的出發(fā)點是一個已經(jīng)滿足功能需求的概念體系結(jié)構(gòu),對于需求與體系結(jié)構(gòu)之間的平滑過度沒有很好地解決。H. Duran-Limon等人將本體引入軟件產(chǎn)品線工程中,在文獻(xiàn)[9]中提出一種基于本體的產(chǎn)品導(dǎo)出方法,用本體作為描述需求模型的基礎(chǔ),然后利用本體的邏輯推理能力,在需求模型到產(chǎn)品體系結(jié)構(gòu)模型轉(zhuǎn)換過程中提供推理服務(wù),以此減少手動導(dǎo)出的開銷,但是該方法只考慮了本體對需求模型的重構(gòu),沒有考慮質(zhì)量屬性在產(chǎn)品體系結(jié)構(gòu)推導(dǎo)過程中對結(jié)構(gòu)變化的影響。
本文利用本體作為描述需求和體系結(jié)構(gòu)的基礎(chǔ),通過建立領(lǐng)域本體模型、需求本體模型和軟件體系結(jié)構(gòu)本體模型,幫助分析人員在需求分析階段更準(zhǔn)確的捕獲和評估用戶需求;在體系結(jié)構(gòu)設(shè)計階段利用語義標(biāo)注和語義搜索技術(shù),輔助設(shè)計人員從海量的設(shè)計文檔庫中選擇具有語義相似的系統(tǒng)體系結(jié)構(gòu)文檔作為參考,對實現(xiàn)需求到設(shè)計的平滑過度和提高軟件開發(fā)效率來說都起到一定的幫助。
文章其余部分結(jié)構(gòu)如下:第二節(jié)概述了我們提出的整個框架以及框架中用到的本體的構(gòu)建。第三節(jié)詳細(xì)介紹本體在需求分析和體系結(jié)構(gòu)設(shè)計階段是如何發(fā)揮作用的。第四節(jié)總結(jié)我們的工作并討論今后工作的研究方向。
2. 框架概述
2.1 總體框架
軟件開發(fā)是一個復(fù)雜的、不斷演變的社會活動,涉及了許多層次和方面。為了能夠幫助開發(fā)人員更準(zhǔn)確地理解整個系統(tǒng),我們提出了一個基于本體的需求分析和軟件體系結(jié)構(gòu)設(shè)計框架。
圖1描述了整個框架,其中可大致分為兩階段,第一階段:根據(jù)用戶給出的需求文檔,結(jié)合領(lǐng)域本體和需求本體進(jìn)行語義映射,為其添加語義信息,同時利用這些語義信息進(jìn)行需求質(zhì)量評估,用以修改、完善用戶需求。第二階段:通過軟件體系結(jié)構(gòu)本體,對網(wǎng)上共享的軟件設(shè)計文檔進(jìn)行語義標(biāo)注,建立體系結(jié)構(gòu)本體和領(lǐng)域本體以及需求本體的一種內(nèi)在語義關(guān)聯(lián),再根據(jù)系統(tǒng)的功能性和非功能性需求以及架構(gòu)限制和目標(biāo)的系統(tǒng)高層架構(gòu),通過這種語義關(guān)聯(lián)進(jìn)行語義搜索,按照搜索條件返回相應(yīng)的結(jié)果,例如整個設(shè)計文檔、文檔中部分段落或者圖表等,用于輔助構(gòu)建、完善系統(tǒng)的體系結(jié)構(gòu)。
文中提出的方法是針對傳統(tǒng)的瀑布式開發(fā)模型,但是在實際開發(fā)過程中很少完全采用瀑布模型,因此在接下來的研究中,將進(jìn)一步探討如何在當(dāng)前一些流行的開發(fā)模型中使用這種本體輔助設(shè)計思路,如敏捷開發(fā)模型、RUP模型、CMMI模型等。
在框架中一共使用了四個本體:頂層本體、領(lǐng)域本體、需求本體和軟件體系結(jié)構(gòu)本體。前三個本體在文獻(xiàn)[7][10][11]中已經(jīng)進(jìn)行了詳細(xì)的定義,我們對其只進(jìn)行簡單的介紹,這里主要對軟件體系結(jié)構(gòu)本體的構(gòu)建進(jìn)行詳細(xì)描述。
2.2本體構(gòu)建
2.2.1頂層本體、領(lǐng)域本體和需求本體
首先我們介紹一個頂層本體[10]。頂層本體描述的是通用的基本概念和它們之間的關(guān)系,例如object、environment、goal、task等都是獨立于特定的應(yīng)用程序的基本概念,其他本體中的概念都是頂層本體中的概念的實例。
領(lǐng)域本體描述的是一種靜態(tài)的、可重用的領(lǐng)域概念和關(guān)系,例如汽車行業(yè)領(lǐng)域本體就表示了有關(guān)汽車部件的知識[7]。在需求分析階段扮演了一個領(lǐng)域字典的角色。
僅僅使用領(lǐng)域本體無法很好地表達(dá)出用戶指定的系統(tǒng)功能需求和非功能需求,因為在領(lǐng)域本體中無法對用戶的業(yè)務(wù)目標(biāo)、質(zhì)量屬性等進(jìn)行語義描述,因此還需要構(gòu)建一個需求本體,也可以叫做系統(tǒng)行為本體[4][11]。需求可以分為兩種類型:功能需求和非功能需求,功能需求可以描述為系統(tǒng)執(zhí)行的操作序列,非功能需求表達(dá)了系統(tǒng)質(zhì)量相關(guān)的方面。系統(tǒng)行為本體是對軟件系統(tǒng)的行為進(jìn)行建模,例如在特定情況下系統(tǒng)將要執(zhí)行什么操作,它還定義了在一個操作執(zhí)行之前需要滿足的條件,以及操作執(zhí)行時系統(tǒng)的狀態(tài)等。
2.2.2軟件體系結(jié)構(gòu)本體
為了能夠?qū)W(wǎng)上共享的設(shè)計文檔進(jìn)行語義標(biāo)注,我們需要建立一個軟件體系結(jié)構(gòu)本體[12][13]。圖2中描述了該本體的高層視圖。我們使用UML圖表示該本體的結(jié)構(gòu),包含的類有:SoftwareArchitecturePattern,SoftwareArchitectureVocabulary,SoftwareArchitectureStyle,Problem。
我們使用本體開發(fā)工具Protégé來構(gòu)建該本體。首先根據(jù)《Software Modeling& Design》[14]書中介紹,將軟件體系結(jié)構(gòu)模式分為三類:結(jié)構(gòu)模式、通信式和事務(wù)模式,將每一個類別中包含的模式概念作為SoftwareArchitecturePattern的子類進(jìn)行描述,然后以一些常用的軟件體系結(jié)構(gòu)風(fēng)格為基礎(chǔ),例如B/S風(fēng)格、管道和過濾器風(fēng)格、面向?qū)ο箫L(fēng)格、倉庫風(fēng)格等,進(jìn)行歸納總結(jié),作為SoftwareArchitectureStyle的子類。我們將每種風(fēng)格中包含的 構(gòu)件、連接件和拓補(bǔ)結(jié)構(gòu)作為SoftwareArchitectureVocabulary的子類,并且與SoftwareArchitectureStyle的關(guān)系是isPartOf。對于每一種軟件體系結(jié)構(gòu)模式或架構(gòu)風(fēng)格來說,都是一些經(jīng)過實踐證實的解決方案,可用于解決領(lǐng)域中的某些核心問題,因此我們將這些問題描述為Problem類,與SoftwareArchitecturePattern和SoftwareArchitectureStyle的關(guān)系是isSolutionTo,圖3表示Protégé中的軟件體系結(jié)構(gòu)本體類和對象關(guān)系。
為了更全面地描述該本體包含的內(nèi)容,這里我們使用了一個本體可視化插件OntoGraf,圖4表示了軟件體系結(jié)構(gòu)本體可視化結(jié)果。
3. 基于本體的需求和設(shè)計方法
3.1基于本體的需求獲取和評估
當(dāng)拿到用戶需求文檔之后,分析人員首先要做的就是挖掘用戶的真實需求,這是由于人與人之間的交流溝通無法達(dá)到100%,因此這一步也是最重要的。對于分析人員來說,要想挖掘出真實的需求,就要求對業(yè)務(wù)和技術(shù)都有所了解,這往往也是最難的,借助本體的輔助或許能夠解決這方面問題。
借助領(lǐng)域本體和需求本體的輔助,可以從用戶的角度來進(jìn)行需求獲取,用戶參與需求分析主要有兩種方法:一是在領(lǐng)域本體的指導(dǎo)下填寫問卷調(diào)查,意味著通過問題解決法來表達(dá)用戶的真實需求。二是借助CASE工具,使用領(lǐng)域本體和需求本體中的領(lǐng)域知識進(jìn)行需求建模??梢钥闯鲱I(lǐng)域本體和需求本體的作用不僅是指導(dǎo)用戶快速的提出需求,而且還能夠保證最終的需求模型沒有違反領(lǐng)域標(biāo)準(zhǔn)和規(guī)范。
除此之外,通過領(lǐng)域本體和需求本體的結(jié)合使用,還能夠?qū)τ脩粜枨蟮臏?zhǔn)確性、完整性、一致性、無二義性進(jìn)行評估分析。為了能夠分析出這些用戶需求的質(zhì)量屬性,必須先建立需求和本體之間的一種映射關(guān)系。首先對于用戶提供的非結(jié)構(gòu)化需求文檔進(jìn)行文字預(yù)處理,針對每個需求進(jìn)行實體和關(guān)系的抽取,然后將其映射到領(lǐng)域本體和需求本體的概念上,如圖5所示。
完成映射后,也就意味著將用戶的需求描述轉(zhuǎn)換為用本體中的概念和關(guān)系進(jìn)行表示,即為需求文檔中的用戶需求添加了語義信息。在假定映射正確的情況下,接下來可以利用這些語義信息進(jìn)行需求質(zhì)量的評估,并且反饋給用戶和分析人員執(zhí)行不同的解決措施。
(1)準(zhǔn)確性檢測:當(dāng)一個需求條目能夠被映射到本體元素上時,我們認(rèn)為它是針對一個問題域的準(zhǔn)確的需求。對于無法映射到本體的需求,反饋給用戶詢問其是否是有必要的,若是由于其中包含的概念是該領(lǐng)域的新型詞匯,那么就交由技術(shù)人員對本體進(jìn)行添加修改,再重新進(jìn)行需求的準(zhǔn)確性檢測。
(2)一致性檢測:如果在兩個需求條目映射的本體元素之間,存在“矛盾”約束屬性,例如兩個類是互斥類(Disjoint classes),那么我們認(rèn)為這兩個需求是不一致的。通過在映射的本體元素中搜索“矛盾”關(guān)系來發(fā)現(xiàn)不一致性的需求條目,根據(jù)需求的優(yōu)先關(guān)系來幫助用戶和分析人員進(jìn)行刪改。
(3)完整性檢測:在理想狀態(tài)下,對于所有相關(guān)聯(lián)的本體中的元素,都應(yīng)該出現(xiàn)在映射的需求條目中,例如一個用戶管理系統(tǒng)的需求“Userscanchange the phonenumber for the binding”映射到本體中的元素為{change, phonenumber},而在需求本體中這些元素與{Add, phone}和{Unbind,phonenumber}存在Complementary(互補(bǔ)的)關(guān)系,這意味著
(4)無二義性檢測:如果一個需求條目被映射為若干個沒有語義關(guān)系的概念,那么可以認(rèn)為該需求存在歧義,擁有多重含義。針對這種情況需要將存在歧義的需求進(jìn)行修改、移除或者分解成多個需求,以此消除歧義。
3.2 基于本體的軟件體系結(jié)構(gòu)設(shè)計
軟件體系結(jié)構(gòu)對于軟件開發(fā)有著舉足輕重的作用,只要需求和體系結(jié)構(gòu)確定之后,這個軟件就基本上可以定型了。這就好比骨骼確定了,這個人的體形就不會有很大的變化。
但是在實際項目開發(fā)中,很少有團(tuán)隊會注重系統(tǒng)體系結(jié)構(gòu)設(shè)計,甚至?xí)雎赃@一過程,主要原因是需求是從用戶角度看待系統(tǒng),體系結(jié)構(gòu)是從設(shè)計角度看待系統(tǒng),因此在需求和設(shè)計之間存在著巨大的鴻溝,這對設(shè)計人員來說不僅要有豐富的軟件開發(fā)經(jīng)驗,還需要擁有一定的領(lǐng)域知識。這里我們希望通過本體將需求和設(shè)計進(jìn)行抽象化,在抽象出的需求模型和設(shè)計模型之間建立語義關(guān)聯(lián)來縮小這個鴻溝。
在前一節(jié)中介紹了如何將需求映射到本體中的概念和關(guān)系上,這也意味著我們已經(jīng)將用戶需求抽象為一個需求模型。接下來我們將探討如何利用語義標(biāo)注[15]技術(shù)來對體系結(jié)構(gòu)進(jìn)行抽象。
3.2.1使用軟件體系結(jié)構(gòu)本體的語義標(biāo)注
如果說本體的構(gòu)建主要是關(guān)于領(lǐng)域知識的抽象表示,那么語義標(biāo)注可以看作是豐富本體的過程,即添加、擴(kuò)展本體實例。因此語義標(biāo)注所要做的工作就是將現(xiàn)實應(yīng)用中涉及的實例和抽象的本體概念聯(lián)系在一起。
這里我們使用的是GATEdeveloper,一個應(yīng)用于自然語言處理領(lǐng)域,尤其是信息標(biāo)注與抽取環(huán)節(jié)的開放源碼架構(gòu)。根據(jù)前面建立的軟件體系結(jié)構(gòu)本體,對匹配的概念、實例等元素進(jìn)行語義標(biāo)注,其流程如圖6所示:
執(zhí)行該流程,為資源文本添加語義信息,這里我們提出可以按照表1中幾個維度進(jìn)行語義標(biāo)注:
內(nèi)容類型
例如我們按照文檔結(jié)構(gòu)維度,即標(biāo)題、段落和句子三個方面進(jìn)行語義標(biāo)注,對標(biāo)題進(jìn)行標(biāo)注的內(nèi)容主要是關(guān)于系統(tǒng)或子系統(tǒng)使用的體系結(jié)構(gòu)風(fēng)格,對段落進(jìn)行標(biāo)注時主要注重整段內(nèi)容語義的索引,對句子進(jìn)行標(biāo)注時主要注重相關(guān)概念的提取。其中語義索引包含的內(nèi)容為本體中出現(xiàn)的概念,索引的鍵是概念及概念的屬性,索引的值是文檔的位置、文檔的內(nèi)容、文檔的語義信息。這種標(biāo)注方法適用于結(jié)構(gòu)化的設(shè)計文檔,對于無結(jié)構(gòu)化的文檔需要先根據(jù)經(jīng)驗對文檔進(jìn)行理解、總結(jié),再按照上面介紹的三個方面進(jìn)行標(biāo)注。
利用本體直接標(biāo)注資源的優(yōu)勢在于標(biāo)注方式靈活,并且能夠確保語義標(biāo)注準(zhǔn)確率,進(jìn)而充分挖掘資源語義,增強(qiáng)語義標(biāo)注效果。經(jīng)上述過程完成的語義標(biāo)注結(jié)果是形成設(shè)計文檔的語義索引,語義索引主要保存了一個文檔的三個主要信息:1.文本的層次級別(篇章、段落、句子)。2.文本段落的內(nèi)容。3.文本段落的語義。標(biāo)注后應(yīng)將文本的索引結(jié)構(gòu)以一定的形式保存起來,以供下一節(jié)的語義搜索使用。我們將標(biāo)注信息以可視化方式顯示在文檔資源中,如下圖所示:
我們希望能夠?qū)γ總€文檔都按照上面五種維度進(jìn)行標(biāo)注,但是這樣一來標(biāo)注過程就變得十分繁瑣,下一步我們將參考近幾年提出的一些新的語義標(biāo)注方法對其進(jìn)行改進(jìn),例如Rajput等人提出的一種基于貝葉斯網(wǎng)絡(luò)的語義標(biāo)注框架[16];Nguyen等人提出一種基于樸素貝葉斯和關(guān)聯(lián)規(guī)則,并結(jié)合本體結(jié)構(gòu)圖和交互網(wǎng)絡(luò)的語義標(biāo)注方法[17]等。
在標(biāo)注完成后,將新的實例信息抽取到本體,即保存在本體類的實例信息中作為新的個體,在下次加載本體時應(yīng)用,通過這種信息抽取也可以促進(jìn)本體進(jìn)化。最后將含有語義標(biāo)注信息的文本資源解析為XML文件格式存儲,形成語義標(biāo)注庫,代碼片段如下:
……
……
3.2.2設(shè)計文檔的語義搜索
在執(zhí)行完語義標(biāo)注和信息抽取之后,下一步便根據(jù)標(biāo)注生成的語義索引以及前面抽象出的需求模型進(jìn)行設(shè)計文檔搜索,我們將上一節(jié)描述的標(biāo)注對象作為搜索條件,根據(jù)不同的搜索條件返回相應(yīng)的搜索結(jié)果。例如需要搜索使用了某個體系結(jié)構(gòu)風(fēng)格的整個項目設(shè)計文檔,便可以通過計算文檔與查詢實例的語義相關(guān)度,以及查詢實例與文檔的相似度后,得到各個文檔的排序得分,按得分高低將排好序的搜索結(jié)果返回給用戶。
這里我們主要探討如何在需求模型和設(shè)計文檔之間建立一種語義關(guān)聯(lián),實現(xiàn)跨領(lǐng)域的語義搜索。關(guān)于搜索步驟、使用何種搜索算法、如何計算文檔的排序得分、搜索返回的相關(guān)文檔的數(shù)量有多少、正確率有多少以及如何評估返回的結(jié)果等問題是接下來我們研究的重點,可以參考第二節(jié)中介紹的基因遺傳算法的使用,以及[18]中介紹的一種設(shè)計模式的匹配搜索。
為了建立這種語義關(guān)聯(lián),我們需要找到需求本體和軟件體系結(jié)構(gòu)本體之間的關(guān)系。在第三節(jié)中,我們構(gòu)建軟件體系結(jié)構(gòu)本體時,將每一種體系結(jié)構(gòu)模式或架構(gòu)風(fēng)格所能夠解決的某些方面的問題歸納總結(jié)為Problem類,而這些問題是從設(shè)計人員角度來進(jìn)行描述的。如果從客戶的角度來看待這些問題,那么Problem類描述的其實就是用戶希望系統(tǒng)能夠?qū)崿F(xiàn)的功能。因此可以將體系結(jié)構(gòu)本體和需求本體,通過對系統(tǒng)行為的不同角度的描述來建立一種關(guān)聯(lián),從而使本體映射后的語義需求模型和語義標(biāo)注后的軟件體系結(jié)構(gòu)設(shè)計文檔之間產(chǎn)生關(guān)系,為實現(xiàn)跨領(lǐng)域的語義搜索提供條件。
3.2.3 系統(tǒng)體系結(jié)構(gòu)設(shè)計過程
接下來我們將利用搜索出的軟件設(shè)計文檔,結(jié)合自己項目的特點,逐步構(gòu)建、完善系統(tǒng)體系結(jié)構(gòu),具體步驟如下:
第一步建立系統(tǒng)體系結(jié)構(gòu)元模型。由于設(shè)計文檔中的概念是跨領(lǐng)域跨平臺的,所以先從中抽象出一個領(lǐng)域無關(guān)、平臺無關(guān)的系統(tǒng)體系結(jié)構(gòu)元模型是有必要的。這里我們參考OMG組織提出的MOF四層模型結(jié)構(gòu)[19],所建立的系統(tǒng)體系結(jié)構(gòu)元模型不僅僅是為了描述系統(tǒng)或子系統(tǒng)的體系結(jié)構(gòu),更重要的是它是從軟件設(shè)計文檔庫中抽象而來的,這意味著我們可以將它看作一個“設(shè)計藍(lán)圖”,更有效、更直觀的指導(dǎo)設(shè)計人員理解、構(gòu)建系統(tǒng)體系結(jié)構(gòu)。
關(guān)于如何構(gòu)建以及構(gòu)建什么樣的元模型將是我們接下來要解決的問題,可以借鑒一些相關(guān)的研究思路,例如[20]中介紹的通過構(gòu)建系統(tǒng)特征模型來完成概念體系結(jié)構(gòu)設(shè)計的方法以及[21]中提出的一種基于本體模型的架構(gòu)知識管理框架等。
第二步建立系統(tǒng)體系結(jié)構(gòu)模型。從系統(tǒng)的整體角度出發(fā),結(jié)合用戶需求進(jìn)行體系結(jié)構(gòu)設(shè)計,這里主要考慮的是系統(tǒng)的非功能需求。
第三步建立子系統(tǒng)(子模塊)體系結(jié)構(gòu)模型。這里可以根據(jù)用戶對子系統(tǒng)的功能需求,有針對性的再次進(jìn)行語義搜索,然后對子系統(tǒng)進(jìn)行元模型建模,進(jìn)而完成子系統(tǒng)體系結(jié)構(gòu)的構(gòu)建。
4. 結(jié)束語
對于大多數(shù)系統(tǒng)的體系結(jié)構(gòu)設(shè)計,我們都可以從現(xiàn)有的項目尋找共同點。鑒于此,本文從本體技術(shù)入手,先利用本體在領(lǐng)域知識表達(dá)方面的優(yōu)勢,幫助用戶提出更加標(biāo)準(zhǔn)化和規(guī)范化的需求。再利用本體內(nèi)在的邏輯推理能力,通過本體映射進(jìn)行需求質(zhì)量評估,快速的找到存在錯誤的需求,減少和用戶交流的時間開銷。然后利用本體在知識統(tǒng)一和共享方面的優(yōu)勢,對網(wǎng)上共享的設(shè)計文檔進(jìn)行語義標(biāo)注,實現(xiàn)跨領(lǐng)域的語義搜索,從而更好地理解和構(gòu)建系統(tǒng)(子系統(tǒng))體系結(jié)構(gòu),縮短需求與設(shè)計之間的鴻溝。
在接下來的研究中,我們將進(jìn)一步細(xì)化框架中的每個細(xì)節(jié),對多個本體進(jìn)行完善修改。針對設(shè)計文檔的語義搜索方面,改進(jìn)多維度的語義標(biāo)注方法,研究智能搜索算法的應(yīng)用,設(shè)計并開發(fā)支持該框架的軟件平臺。
參考文獻(xiàn):
[1] Avgeriou P, Grundy J, Lago P, et al. Relating Software Requirements and Architectures[J]. IEE Proceedings Software, 2005, 152(4):141-142.
[2] Falbo R A, Guizzardi G, et al. Towards semantic software engineering environments[C]// 14th inter1national conference on Software engineering & knowledge engineering, 2002:477-478.
[3] Ammar H H, Abdelmoez W, Hamdi M S. Software Engineering Using Artificial Intelligence Techniques: Current State and Open Problems[C]//Proceedings of the First Taibah University International Conference on Computing and Information Technology, Al-Madinah Al-Munawwarah, Saudi Arabia. 2012:52.
[4] Bhatia M P S, Kumar A, Beniwal R. Ontologies for Software Engineering: Past, Present and Future[J]. Indian Journal of Science & Technology, 2016, 9(9).
[5] Outi, Koskimies K, Kinen E. Multi-objective genetic synthesis of software architecture[C]//Conference Companion on Genetic and Evolutionary Computation. ACM, 2011:249-250.
[6] R?ih? O, Kai K, M?kinen E. Scenario-Based Genetic Synthesis of Software Architecture[C]// International Conference on Software Engineering Advances, Icsea 2009, 20-25 September 2009, Porto, Portugal. 2009:437-445.
[7] Zong-Yong L, Zhi-Xue W, Ying-Ying Y, et al. Towards a Multiple Ontology Framework for Requirements Elicitation and Reuse[C]// International Computer Software & Applications Conference. IEEE Computer Society, 2007:189-195.
[8] R?ih? O, Kundi H, Kai K, et al. Synthesizing Architecture from Requirements: A Genetic Approach[M]// Relating Software Requirements and Architectures. Springer Berlin Heidelberg, 2011:307-331.
[9] Duranlimon H, Garciarios C, Castillobarrera F, et al. An Ontology-based Product Architecture Derivation Approach[J]. IEEE Transactions on Software Engineering, 2015, 41(12):1-1.
[10] Kaiya, H, Saeki, M. Using Domain Ontology as Domain Knowledge for Requirements Elicitation[C]// 14th IEEE International Conference on Requirements Engineering, 2006:189-198.
[11] Jiang H, Yang X. Performance requirement elicitation for financial information system based on ontology[C]//Tencon IEEE Region 10 Conference, 2009, 30(3):1 - 5.
[12] De Graaf K A, Liang P, Tang A, et al. An exploratory study on ontology engineering for software architecture documentation[J]. Computers in Industry, 2014, 65(7):1053-1064.
[13] Akerman A, Tyree J. Using ontology to support development of software architectures[J].IBM Systems Journal, 2006, 45(4):813-825.
[14] 戈馬 H. 軟件建模與設(shè)計[M].彭鑫,吳毅堅,趙文耘,等譯.北京:機(jī)械工業(yè)出版社,2015.
[15] Fernández M, Cantador I, López V, et al. Semantically enhanced Information Retrieval: An ontology-based approach[J]. Web Semantics Science Services & Agents on the World Wide Web, 2011, 9(4):434-452.
[16] Rajput Q, Haider S. BNOSA: A Bayesian network and ontology based semantic annotation framework[J]. Web Semantics Science Services & Agents on the World Wide Web, 2011, 9(2):99-112.
[17] Cao D N, Gardiner K J, Cios K J. Protein annotation from protein interaction networks and Gene Ontology[J]. Journal of Biomedical Informatics, 2011, 44(44):824-9.
[18] Harb D, Bouhours C, Leblanc H. Using an Ontology to Suggest Software Design Patterns Integration[M]// Models in Software Engineering. Springer Berlin Heidelberg, 2009:318-331.
[19] Tang W. Meta object facility[M].Encyclopedia of Database Systems. Springer US, 2009: 1722-1723.
[20] 彭鑫,趙文耘, 劉奕明. 基于特征模型和構(gòu)件語義的概念體系結(jié)構(gòu)設(shè)計[J],軟件學(xué)報, 2006, 17(6):1307-1317.
[21] 張純, 張敬周, 宋俊典. 基于本體的軟件密集型系統(tǒng)架構(gòu)知識管理研究[J]. 計算機(jī)工程與設(shè)計, 2011, 32(6):2050-2053.