專利名稱:一種網絡環境下根據用戶需求生成軟件服務的方法
技術領域:
本發明涉及一種為用戶提供軟件服務的方法,尤其是在網絡環境中,根據用戶需求,利用軟件構件,動態地生成服務程序,完成用戶服務按需定制的方法。
背景技術:
在傳統的軟件行業中,一套軟件經過軟件開發者的設計、開發和測試后,以統一的版本向全社會發布。一套軟件的用戶可能很多,每個人的需求不盡相同,但是軟件開發者不可能考慮到用戶的個人需求而為每個用戶都提供不同的軟件版本。于是,有的用戶可能只為使用其中一個很小的功能而不得不去購買包含此功能的龐大軟件系統,從而造成資金和資源的浪費;還有一些用戶難于找到包含所需功能集合及相應處理流程的軟件,只能利用不同的軟件完成不同的功能,然后手動按照流程進行處理,從而難以有效地利用軟件達成工作的高效。這種情況還有很多,概括來說就是軟件用戶難以根據自己的需求來獲得定制的軟件服務,在本發明中,凡是能夠獨立完成某項功能的應用程序邏輯單元統稱為軟件服務。
隨著Internet(英特網)及其相關技術的發展,到了今天,網絡已經成為人們生活中重要的工具,通過網絡按需獲取信息和網絡服務成為人們工作、學習的一部分,于是人們也渴望能夠通過網絡獲取按需定制的軟件服務。同時,現代社會工作節奏的加快也進一步加劇了對按需化軟件服務的需求。于是,網絡成為按需軟件服務的最合適的提供途徑。
在網絡上,現在已經有一些服務提供商開始嘗試為用戶提供軟件服務,現有的方式主要有兩種。一.直接為用戶提供軟件模塊的下載服務,用戶可以將下載到的模塊集成到自己的程序中去。像ComponentSource(http//www.componentsource.com)就是這其中比較具有代表性的網站之一,它將軟件模塊進行分類組織,然后提供給用戶下載。二.為用戶提供調用軟件服務的接口,從而使用戶可以通過Internet來直接使用軟件服務或者將其集成到客戶端軟件中。例如搜索引擎Google(http//www.google.com)為用戶提供了搜索服務的Web API,用戶可以通過注冊來直接使用或進行軟件集成。這幾種軟件服務在不同的時間、面向不同的用戶時,提供的是同樣的功能和接口,并沒有根據用戶的需求進行軟件服務的個性化和按需化定制。
面對用戶的這種需求,軟件開發技術有了相應的發展。軟件構件和軟件復用技術的出現,為軟件開發提供了一種新的模式。軟件構件是指具有相對獨立功能的可復用的軟件模塊,是軟件復用中常用的模塊形式,通過軟件構件可以實現靈活的功能組合,同時達到軟件復用的目的。為了支持軟件復用,一些組織和公司紛紛推出自己的構件技術標準。目前,有影響的構件標準有SUN公司提出的Java構件標準JavaBeans、EJB,微軟公司提出的COM、DCOM標準以及對象管理組織(OMG)CORBA3.0規范中的CCM標準。Internet上出現了很多遵循上述構件技術標準的專門的構件庫。
目前業界對構件的研究主要集中在構件的描述、建模以及構件的組裝技術上。清華大學網絡系統組提出了一種基于多種異構構件的統一封裝和組裝技術(參見本申請人的專利ZL200410030654.5和CN200510105239.6),該技術將各種類型構件以統一構件封裝件結構(簡稱UCDL)進行封裝,通過設置構件庫計算機、構件目錄庫計算機以及構件組裝計算機來完成構件組裝。其中,構件庫計算機存儲的是各種軟件構件,構件目錄庫計算機存儲的是構件庫計算機中每個構件的UCDL封裝件,構件組裝計算機提供構件組裝平臺。構件目錄庫計算機提供根據構件ID進行構件信息提取和構件封裝件下載的服務。當進行構件組裝時,首先需要從構件目錄庫計算機上提取構件封裝件并下載到構件組裝計算機上,然后在構件組裝計算機上完成構件組裝。利用這種技術,我們可以更為靈活地對各種類型的構件進行組裝。
在目前的實際應用中,軟件構件主要被軟件開發人員用在軟件開發過程中來完成軟件系統的開發,并沒有面向終端用戶需求的軟件定制技術方案出現。
發明內容
針對現有技術不能提供面向終端用戶的按需軟件服務的問題,本發明基于UCDL封裝件及其組裝技術,提出了一種在網絡環境下,根據用戶需求生成軟件服務的方法。
本發明的特征在于,所述方法依次含有以下步驟步驟(1)服務器端的需求分析計算機上定義一個構件領域信息表,其中,構件是指具有相對獨立功能的可復用的軟件模塊;構件領域是指共享某種功能的軟件系統或應用程序的集合,以下簡稱領域,每個構件都有自己所屬的構件領域;所述的構件領域信息表包括領域ID、功能關鍵詞表、領域功能描述和領域構件信息,其中,領域ID是構件領域的唯一標識,用于組織、存儲和提取構件領域,功能關鍵詞表存放的是代表該領域所具有的功能的關鍵詞,其中包括了一個功能近義詞表,存放的是與功能關鍵詞意思相近的近義詞;領域功能描述用于提供該領域功能特性和描述;領域構件信息則存放屬于該領域的構件的ID,用于提取屬于該領域的構件的信息及構件封裝件;步驟(2)客戶端啟動,用戶以功能關鍵詞為首選,功能近義詞為次選的文字形式向客戶端輸入對所需要的軟件服務的描述,客戶端把該軟件服務的描述發送給服務器端的需求分析計算機;步驟(3)需求分析計算機按以下步驟對接收到的用戶軟件需求的文本進行領域分析,提取出與用戶需要的功能相關的構件領域步驟(3.1)若用戶需求文本已經為空,轉步驟(3.7);否則,找出構件領域信息表中功能關鍵詞和功能近義詞中最長的一個詞的字長;步驟(3.2)比較步驟(3)中所述的用戶需求文本字長與步驟(3.1)中所述的功能關鍵詞和功能近義詞中最長的一個詞的字長若整個用戶需求文本的字長大,則從用戶需求文本中從開頭順序按步驟(3.1)中所述的字長取出一個字符串;若整個用戶需求文本的字長等于或小于功能關鍵詞和功能近義詞中最長的一個詞的字長,則把整個用戶需求文本作為字符串取出;步驟(3.3)遍歷構件領域信息,把當前取出的字符串與功能關鍵詞比較,當與某一功能關鍵詞匹配時,則結束遍歷,轉到步驟(3.5);否則,轉下一步驟;步驟(3.4)遍歷構件領域信息,把當前取出的字符串與功能近義詞比較,當與某一功能近義詞匹配時,則結束遍歷,轉入下一步驟;否則轉步驟(3.6);步驟(3.5)把匹配成功的功能關鍵詞或功能近義詞所在的構件領域的標識ID作為用戶需求構件領域之一,選入一個保存領域ID的詞表記錄下來,然后,從用戶需求文本開頭去掉匹配成功的字符串,轉入步驟(3.1);步驟(3.6)步驟(3.4)中所述的匹配不成功,則判斷步驟(3.1)中所述字長是否為1若為1則把用戶需求文本中的開頭第一個字去掉,轉入步驟(3.1);若非1則把當前取出的字符串的末尾一個字去掉,轉步驟(3.3);步驟(3.7)用戶需求文本為空,得到了用戶軟件服務的所需領域的ID,領域分析結束;步驟(4)如果提取到的構件領域為空,則說明沒有與用戶軟件服務需求相關的構件領域,這時需求分析計算機向客戶端的用戶發送失敗信息,用戶需要重新輸入軟件服務的需求描述;如果構件領域提取成功,需求分析計算機根據步驟(3)得到的用戶需求相關的領域ID,提取各個領域包含的領域構件ID,并從所述服務器端的構件目錄庫計算機中提取對應的至少包括構件功能描述和構件接口信息在內的構件封裝件信息,并把這些信息以所在領域分類組織后,作為備選的構件信息發送給客戶端;
步驟(5)客戶端在接收到步驟(4)所述的備選的構件封裝件信息后,以領域為目錄把各自領域的構件封裝件信息展現給用戶,以使用戶據此選擇自己所需要的構件封裝件;步驟(6)在用戶對構件進行了選擇之后,客戶端把用戶選擇的構件以圖形化的方式顯示出來,對構件的調用接口和被調用接口以不同的圖標來表示;在用戶根據需要對構件的接口進行連接之后,客戶端再對用戶的方案進行連接的有效性驗證,形成XML格式的構件連接方案發送給服務器端的需求分析計算機;步驟(7)需求分析計算機把步驟(6)所述的構件連接方案發送給所述服務器端的構件組裝計算機;步驟(8)該構件組裝計算機對收到的用戶構件連接方案進行分析,從所述服務器端的構件目錄庫計算機中提取相關的組裝用的構件封裝件,生成XML文檔格式的組裝運行腳本,解釋該運行腳本,再利用提取到的構件封裝件進行構件組裝,生成用戶需要的服務程序;步驟(9)該構件組裝計算機再把組裝好的程序通過所述需求分析計算機發送給客戶端的用戶;采用本發明中從用戶需求到軟件構件的映射,進而生成軟件服務的方法,用戶可以根據自己需要的程序功能來進行軟件服務的定制,與傳統的軟件發布和使用方式相比,提高了軟件服務的靈活性和面向用戶的個性化程度,方便了用戶的使用。
圖1是本發明的系統示意2是本發明中構件領域信息表示結構3是本發明中用戶需求領域分析流程4是本發明中客戶端和服務器端的交互流程5是本發明中構件圖形化示意6是本發明中構件連接方案XML文檔結構圖7是本發明中組裝運行腳本的文檔結構圖具體實施方式
下面參照圖示對本發明進行詳細說明。
圖1描述了本發明的系統示意圖,有多個客戶端102和提供按需軟件服務的服務器端103共同位于一個計算機網絡101上。其中,服務器端包括需求分析計算機104和組裝系統105,組裝系統又分為構件組裝計算機106、構件目錄庫計算機107和構件庫計算機108。用戶通過客戶端和服務器端的需求分析計算機進行交互109來獲取按需的軟件服務(詳見圖4說明)。在這個過程中,需求分析計算機104根據對用戶需求的分析向構件目錄庫計算機107發送相關構件信息請求110,在收到構件信息111后將其作為備選構件信息返回給用戶進行選擇。用戶對構件選擇后,在客戶端上以圖形化的方式對選擇的構件進行連接,將結果發回給需求分析計算機104,需求分析計算機將用戶構件選擇和連接方案112發送給構件組裝計算機106,構件組裝計算機106向構件目錄庫計算機107發送構件封裝件提取請求113,構件目錄庫計算機107將請求的構件封裝件集合114返回給構件組裝計算機106進行組裝,組裝完成后將組裝結果115返回給需求分析計算機104,然后通過交互109將組裝結果返回給用戶。其中構件目錄庫中的封裝件集合是通過向構件庫計算機提取構件信息116并進行UCDL封裝后組織形成的。
本發明根據用戶需求生成軟件服務的方法主要包括以下步驟1.客戶端啟動,用戶以文字的形式輸入對所需要的軟件服務的描述,客戶端將其發送給服務器端的需求分析計算機;2.需求分析計算機對接收到的用戶需求進行分析,確定與用戶需求相關的構件領域;3.需求分析計算機從構件領域信息表中提取上一步確定的構件領域中包含的構件信息,從目錄庫計算機中提取這些構件的構件封裝件信息,和構件領域信息一起發送給客戶端;4.客戶端將構件封裝件信息以所屬的構件領域分類呈現給用戶,用戶根據相關信息對自己需要的構件進行選擇;5.客戶端將用戶選擇的構件以圖形化方式顯示出來,對構件的調用接口和被調用接口以不同的圖標表示;用戶根據需要對構件的接口進行連接;客戶端對用戶的連接方案進行連接的有效性驗證后,形成XML格式的連接方案發送給服務器端的需求分析計算機;6.需求分析計算機將用戶的構件連接方案發送給構件組裝計算機;構件組裝計算機對用戶連接方案進行分析,從構件目錄庫計算機提取相關的構件封裝件,生成組裝的運行腳本,此處的運行腳本采用XML文檔的格式;構件組裝計算機解釋執行運行腳本,利用提取到的構件封裝件進行構件組裝,生成用戶需要的服務程序;7.構件組裝計算機將組裝好的程序通過需求分析計算機發送給客戶端用戶;上述根據用戶需求生成軟件服務的步驟1中,用戶以文字的形式輸入自己的服務需求時,盡量圍繞需求的功能描述展開,用功能上的關鍵詞來表述需求可以使得服務器端對需求的分析更為準確;用戶需求輸入確認之后,客戶端將用戶的需求文本以明文的方式、基于TCP/IP協議發送給服務器端的需求分析計算機。
上述根據用戶需求生成軟件服務的方法中,步驟2-3完成了用戶需求與軟件構件的映射。本發明中使用構件領域作為用戶需求和軟件構件之間的橋梁,這里的領域是指共享某種功能特性的系統或應用程序的集合,每個構件都有一個適用的領域,我們稱之為構件領域。在本發明中,通過對用戶需求的分析,首先提取出用戶功能需求相關的領域,然后根據領域信息來提取對應的軟件構件。
下面介紹用戶需求到軟件構件映射的具體實施方法。
如圖2,本發明定義了一個構件領域信息表示結構圖,構件領域信息用來輔助完成用戶需求領域的分析。每個構件領域描述201包括領域ID 202,功能關鍵詞表203,領域功能描述204和領域構件信息205三部分。領域ID是每個構件領域的唯一標識,用來組織、存儲和提取構件領域。功能關鍵詞表中存放的是代表該領域具有功能的關鍵詞,其中包括一個功能近義詞表205,存放的是與功能關鍵詞意義相近的那些詞,通常來說,每個領域的功能關鍵詞有3-5個,而每個功能關鍵詞又有多個近義詞。領域功能描述用來提供該領域功能特性的描述。領域構件信息存放屬于該領域的構件的ID,主要用來提取屬于該領域的構件的信息及構件封裝件。每個構件領域都通過圖2中的結構進行描述,所有構件領域的領域信息形成一個領域信息表存放在服務器端的需求分析計算機上。
領域信息表是隨著構件的增多而逐步建立起來的,最初只是一個空的表,每當構件目錄庫計算機中增加一個構件封裝件時,就需要根據構件的功能在需求分析計算機上其所屬的領域信息中將構件ID添加到領域構件信息,并根據需要添加功能關鍵詞和功能近義詞;如果需求分析計算機上沒有相關的領域,則需要在領域信息表中新建相關領域,并設置領域描述中的各項值。
利用構件領域信息表,我們就可以進行用戶需求的領域分析,圖3給出了步驟2中用戶需求領域分析流程圖,主要包括如下步驟2.1.接收到用戶需求301后,設置一個字符串變量String來保存用戶需求,并新建一個詞表Domain來記錄要提取的構件領域(用領域ID表示)302;2.2.設置一個整數Len,將其賦值為領域信息表里所有領域的功能關鍵詞和功能近義詞中長度最長的詞的字長303;2.3.從String中順序(從左到右)取出長度為Len的字符串賦給Str,如果String的長度小于或等于Len,則將String賦給Str 304;這時判斷Str是否為空305,如果Str為空,則完成了對用戶需求字符串的領域分析,所得到的領域詞表Domain即為用戶需求的領域分析結果306,分析結束;如果Str不為空,則進入下一步;
2.4.遍歷構件領域信息表,將Str與每個領域的功能關鍵詞進行匹配,如果Str與某個功能關鍵詞相同則遍歷終止,否則就要遍歷完所有領域才能終止307,遍歷終止時的情況決定下一步的動作308;如果Str與功能關鍵詞匹配成功,則認為Str所代表的功能的構件領域已經找到,轉步驟6;如果匹配不成功,則進入下一步;2.5.重新遍歷構件領域信息表,進一步將Str與各領域的功能近義詞進行匹配,與第一次遍歷類似,當匹配成功或遍歷完所有領域后遍歷終止310;然后根據遍歷終止時的情況來進行下一步動作311,如果Str與功能近義詞匹配不成功則轉步驟7;如果匹配成功則進入下一步;2.6.將匹配成功的功能關鍵詞或功能近義詞對應的構件領域的領域ID添加到Domain中,將String中的Str部分去掉,然后將Str置為空309,轉步驟2;2.7.步驟312判斷當前的Len值是否等于1,如果Len值為1,則將String開頭第一個字去掉,置Str為空313,轉步驟2;如果Len值不是1,則將Len值減去1314,這里減1是為了縮短字長,與更小字長的功能關鍵詞或功能近義詞進行匹配,轉步驟3;經過上面的分析過程,Domain里就保存了一系列構件領域的領域ID,這些領域ID代表的就是與用戶需求相對應的構件領域。
用戶領域分析主要是一個將用戶需求字符串中順序預取的可能的功能詞匯與領域功能關鍵詞和功能近義詞進行匹配的過程。由于每個領域的功能關鍵詞比較少,而功能近義詞比較多,所以我們設計的是一個兩層匹配的方法,當與功能關鍵詞匹配成功時就可退出當前的匹配過程,如果不成功則需要進行與功能近義詞的匹配。功能關鍵詞是表示構件領域功能的最準確和通用的詞,多數情況下,用戶都是用功能關鍵詞來表述自己的需求,通過兩層匹配的方法,可以減少與功能近義詞的不必要的比較,從而提高分析的效率。
通過用戶需求領域分析我們得到了用戶功能相關的構件領域,然后對這些構件領域的領域描述進行遍歷,就可以提取到這些構件領域中的領域構件信息,這里的構件信息指的是構件ID。構件ID可以唯一地對構件進行標識,從而我們可以根據構件ID提取出相關的構件封裝件信息,實現用戶需求到軟件構件的映射,完成了上述根據用戶需求生成軟件服務方法的步驟2-3的任務。
上述根據用戶需求生成軟件服務方法的步驟4-7中,通過和用戶交互完成了利用提取到的構件生成用戶需要的軟件服務的過程,下面結合圖4中描述的本發明的整個工作流程介紹一下生成軟件服務的具體實施方法。
用戶通過客戶端410和服務器端420的交互來獲取按需軟件服務的。用戶啟動客戶端411,開始進行按需軟件服務的定制。
首先,在客戶端上,用戶以文字形式輸入所需要的軟件服務的描述,客戶端將其發送給服務器端的需求分析計算機412。需求分析計算機對用戶需求進行領域分析,提取出與用戶功能需求相關的構件領域421;如果提取到的構件領域為空,則說明沒有與用戶需求相關的領域,向客戶端的用戶發送失敗信息,用戶需要重新輸入自己的服務需求;如果提取成功,則從這些領域中得到相關構件的構件ID。
需求分析計算機利用獲取到的構件ID從構件目錄庫計算機中提取對應的構件封裝件信息,這里的構件封裝件信息主要包括構件功能描述、構件接口信息等,需求分析計算機將這些構件封裝件信息以所屬的領域進行分類組織后,作為被選構件信息發送給客戶端423。
客戶端在接收到備選的構件封裝件信息后,以領域為目錄將各自領域內的構件封裝件信息展現給用戶,其中每個構件都有一個選擇框,從而使用戶可以根據構件功能描述和接口信息來選擇自己需要的構件封裝件413,如果用戶對構件提取結果不滿意,則可以返回到上一步重新進行服務需求的輸入412。
在用戶對構件進行了選擇之后,客戶端將用戶選擇的構件以圖形化的方式顯示出來,并給用戶提供手動連接構件的功能。這里,客戶端根據用戶選擇的構件封裝件的信息,特別是構件封裝件的接口信息,將所要組裝的構件及其外部接口以圖形化的方式顯示出來,如圖5所示,一個構件501可以用一個圖標來顯示,圖標上標有構件名稱,圖標內部從上到下順序列出構件的各個接口,并根據接口信息并在各個接口旁標上連接線和連接點,入口(即被其它構件調用的接口)502和出口(即調用其它構件的接口)503的連接線和連接點采用不同的標注方式。
當把用戶選擇的各個構件圖形化顯示出來之后,用戶就可以根據自己的需要,通過查看相關構件的接口信息來連接各個構件,連接的起點必須是某構件出口的連接點,終點是另一構件入口的連接點,用戶通過拖拽的方式進行連接,客戶端根據用戶的操作自動為用戶生成連接線。
當用戶完成所有連接后,客戶端對用戶的連接方式進行有效性驗證,這里的驗證主要是根據構件的接口信息來判斷接口之間的調用交互關系是否正確,如果不正確則向用戶提示錯誤,用戶需要重新進行連接的調整,如果驗證通過,客戶端則將用戶連接的方案發送給服務器端的需求分析計算機414。
用戶的構件連接方案是一個描述各個構件接口之間連接關系的XML文檔,圖6給出了這個XML文檔的結構,文檔以<Scheme>為起始的根元素601,每個連接方案涉及多個構件元素<Component>602,每個構件有標識自己ID的元素<Id>603和各接口信息的元素<Interface>604,接口信息元素包括若干個構件接口元素<Unit>605,接口元素中包括了各構件接口的描述和連接關系,其中,<UnitId>是接口的ID,用來標識一個構件的接口606,<UnitType>表示一個接口的類型(包括只是出口、只是入口和既是出口又是入口三種類型)607,<PreCom_Unit>表示與這個入口相連的構件和接口(出口)608,用“構件ID接口ID”來表示,當此接口不是入口時,此項為空,<PostCom_Unit>表示與這個出口相連的構件和接口(入口)609,同樣用“構件ID接口ID”來表示,當此接口不是出口時,此項為空。通過上面的XML文檔,服務器端可以很清楚地了解用戶的連接方案。
需求分析計算機在收到用戶的構件連接方案后轉交給構件組裝計算機424,構件組裝計算機對用戶的構件連接方案進行分析,從中提取連接方案中涉及的構件信息以及各個構件之間連接調用的關系,并根據需要向構件目錄庫計算機提取構件封裝件和相關信息,生成本連接方案的組裝運行腳本。
組裝運行腳本采用XML文檔的方式,結構如圖7所示,<RunningScript>701是文檔的根元素,腳本由構件聲明<Components>部分702、接口連接關系定義<Links>部分707和構件組裝控制流程定義<Process>部分711組成,每一部分的內容如下1.構件聲明<Components>部分描述所要組裝的構件,包括對構件ID、構件名以及構件接口的描述,由一個或者多個<Component>元素703組成,每個<Component>元素標識一個構件的聲明,它包括id和name兩個屬性,前者是構件的唯一標識符,后者是構件的名稱,在整個運行腳本中可以使用該名稱引用此構件,<Component>元素包含一個或者多個<Interface>元素704,<Interface>元素用來標識該構件在組裝過程中要使用的接口聲明,其子元素<InputMessage>705和<OutputMessage>706則分別標識了該接口的輸入輸出消息;2.接口連接關系定義<Links>部分定義在組裝過程中不同構件接口之間的連接關系,包含一個或者多個<Link>元素708,每個<Link>元素定義了兩個構件之間接口的連接關系,<Link>元素的name屬性是組裝腳本中對該Link引用的唯一標識符,每個<Link>元素下,進一步包含<From>709和<To>710兩個子元素,分別代表該連接的源接口(出口)和目的接口(入口),每個接口用“構件ID接口ID”形式表示。
3.構件組裝控制流程定義<Process>部分定義構件的執行流程,描述構件之間的組裝關系,包括對構件調用順序以及構件之間的消息傳遞的定義,<Process>包括了表示各種基本活動的子元素,其中,<Sequence>元素712定義一組構件之間的順序執行關系,一個Sequence控制流包含一個或多個按順序執行的活動,在組裝過程中,腳本解釋程序將按照這些活動在<Sequence>元素中被列出的先后次序,順序執行這些活動;<Invoke>元素713調用某個構件的接口,<Invoke>元素的兩個屬性Component和Interface,進一步指明所要調用的構件ID和該構件的接口ID;<Switch>元素714定義一組構件之間的分支執行關系,一個Switch控制流包含一個或多個Case元素組成的有序列表和最后可選的Otherwise分支,每個Case元素定義了一個條件分支,執行時以Case分支的出現順序來測試其條件,被滿足的第一個分支被執行,如果所有Case分支的條件都未被滿足,那么Otherwise分支將被執行,當被選的分支中的活動完成后,該Switch控制流結束;<While>元素715定義一組構件之間的循環執行關系,While控制流實現循環,它執行重復的活動直到給出的While循環條件不再被滿足;<Flow>元素716定義一組構件之間的并發執行關系,Flow控制流中所包含的一組活動在運行腳本解釋執行中將被并發地執行,當Flow中的所有活動完成時,Flow控制流結束;從用戶的構件連接方案到組裝運行腳本轉化過程如下1.寫入運行腳本文件的頭信息。
2.遍歷用戶構件連接方案文檔,根據構件ID從構件目錄庫計算機上提取每個需要的構件封裝件信息;3.從提取到的封裝件信息中抽取構件名和接口類型描述等信息,按照運行腳本所定義的結構,填入到運行腳本中構件聲明所對應的文檔結構<Components>元素中;4.根據用戶構件組裝方案中構件接口的連接關系,將有連接的構件接口之間的連接方式按照運行腳本所定義的結構,填入到對應<Links>元素中;5.對所有構件之間的連接關系進行分析,將每個并行執行的構件組合作為并發活動獨立出來,將它們分別填入<Flow>元素中,將每個并行的構件組合在用戶組裝方案中分別作為獨立的構件模塊對待;6.對經過上述步驟處理過的構件連接方案進行分析,將每個分支執行的構件組合作為分支選擇執行活動獨立出來,將它們分別填入<Switch>元素中,并根據提取到的詳細的接口信息確定其中每個分支活動對應的條件,將每個分支選擇的構件組合在用戶組裝方案中分別作為獨立的構件模塊對待;7.對經過上述步驟處理過的構件連接方案進行分析,將每個循環執行的構件組合作為循環執行活動獨立出來,將它們分別填入<While>元素中,并根據提取到的詳細的接口信息確定循環的條件,將每個循環的構件組合在用戶組裝方案中分別作為獨立的構件模塊對待;8.經過上述步驟處理之后,用戶方案中剩下的應該就是一組順序執行的序列,將序列中每個構件相應接口的調用都轉化為一個invoke活動,將它們填入<Sequence>元素中;通過上面的步驟生成了進行構件組裝的運行腳本,接下來就可以對運行腳本進行解釋執行,來完成構件的組裝,運行腳本的解釋執行過程如下1.解釋執行構件聲明部分。通過<Component>元素中指定的構件id和name屬性,將每個涉及到的構件封裝件進行初始和實例化,根據<Interface>元素中定義的構件接口描述對相關的接口函數進行聲明和初始化,并寫入相關的程序文件。
2.解釋執行構件接口連接關系部分。<Link>標簽中定義了構件之間接口的連接關系,解釋程序首先檢查接口連接關系是否匹配,接口之間的消息定義是否一致等。如果檢查通過,運行腳本解釋程序將每個連接關系記錄為一個調用,轉入下一步解釋。否則,運行腳本的解釋過程中斷,返回組裝錯誤信息。
3.解釋執行構件組裝控制流程部分。<Process>元素通過定義構件的執行流程來定義構件連接執行的順序關系,在解釋過程中,對不同的執行順序采用不同的程序語句來組織,每個連接關系用上一步中的相應調用來表示,在這個過程中,要根據構件接口信息為不同類型的接口參數生成相應的變量,用變量在接口之間傳遞消息。
4.對生成的程序文件進行編譯和鏈接,生成用戶需要的程序。在這個過程中如果發生錯誤,則組裝過程中斷,返回組裝錯誤信息。
通過用戶構件連接方案的分析以及運行腳本的生成和解釋執行就完成了用戶所需服務的組裝過程425,上述的組裝腳本生成、解釋執行的技術細節參見本申請人的專利ZL200410030654.5和CN200510105239.6。
如果用戶服務組裝成功,則構件組裝計算機將組裝好的程序發送給需求分析計算機,如果組裝失敗,則向其發送組裝失敗信息426。相應地,需求分析計算機將收到的程序或組裝失敗信息發送給客戶端427。
用戶通過客戶端來查看從需求分析計算機返回的組裝結果,如果組裝失敗,則用戶可以返回上一步重新進行構件的連接,也可以選擇退出;如果組裝成功,用戶可以對獲取到的程序進行試用,如果需要對程序進行調整則可以返回上一步調整構件的連接方案,如果對獲取到的程序滿意,則可以成功退出415。
以上描述的具體實施方式
只是對本發明進行示例,本領域技術人員在不脫離本發明實質性思想的基礎上進行各種修改和改進后得到的技術方案,均視為在本發明的范圍之內。本發明適當的范圍以權利要求書為準進行確定。
權利要求
1.一種網絡環境下根據用戶需求生成軟件服務的方法,其特征在于,所述方法依次含有以下步驟步驟(1)服務器端的需求分析計算機上定義一個構件領域信息表,其中,構件是指具有相對獨立功能的可復用的軟件模塊;構件領域是指共享某種功能的軟件系統或應用程序的集合,以下簡稱領域,每個構件都有自己所屬的構件領域;所述的構件領域信息表包括領域ID、功能關鍵詞表、領域功能描述和領域構件信息,其中,領域ID是構件領域的唯一標識,用于組織、存儲和提取構件領域,功能關鍵詞表存放的是代表該領域所具有的功能的關鍵詞,其中包括了一個功能近義詞表,存放的是與功能關鍵詞意思相近的近義詞;領域功能描述用于提供該領域功能特性和描述;領域構件信息則存放屬于該領域的構件的ID,用于提取屬于該領域的構件的信息及構件封裝件;步驟(2)客戶端啟動,用戶以功能關鍵詞為首選,功能近義詞為次選的文字形式向客戶端輸入對所需要的軟件服務的描述,客戶端把該軟件服務的描述發送給服務器端的需求分析計算機;步驟(3)需求分析計算機按以下步驟對接收到的用戶軟件需求的文本進行領域分析,提取出與用戶需要的功能相關的構件領域步驟(3.1)若用戶需求文本已經為空,轉步驟(3.7);否則,找出構件領域信息表中功能關鍵詞和功能近義詞中最長的一個詞的字長;步驟(3.2)比較步驟(3)中所述的用戶需求文本字長與步驟(3.1)中所述的功能關鍵詞和功能近義詞中最長的一個詞的字長若整個用戶需求文本的字長大,則從用戶需求文本中從開頭順序按步驟(3.1)中所述的字長取出一個字符串;若整個用戶需求文本的字長等于或小于功能關鍵詞和功能近義詞中最長的一個詞的字長,則把整個用戶需求文本作為字符串取出;步驟(3.3)遍歷構件領域信息,把當前取出的字符串與功能關鍵詞比較,當與某一功能關鍵詞匹配時,則結束遍歷,轉到步驟(3.5);否則,轉下一步驟;步驟(3.4)遍歷構件領域信息,把當前取出的字符串與功能近義詞比較,當與某一功能近義詞匹配時,則結束遍歷,轉入下一步驟;否則轉步驟(3.6);步驟(3.5)把匹配成功的功能關鍵詞或功能近義詞所在的構件領域的標識ID作為用戶需求構件領域之一,選入一個保存領域ID的詞表記錄下來,然后,從用戶需求文本開頭去掉匹配成功的字符串,轉入步驟(3.1);步驟(3.6)步驟(3.4)中所述的匹配不成功,則判斷步驟(3.1)中所述的字長是否為1若為1則把用戶需求文本中的開頭第一個字去掉,轉入步驟(3.1);若非1則把當前取出的字符串的末尾一個字去掉,轉步驟(3.3);步驟(3.7)用戶需求文本為空,得到了用戶軟件服務的所需領域的ID,領域分析結束;步驟(4)如果提取到的構件領域為空,則說明沒有與用戶軟件服務需求相關的構件領域,這時需求分析計算機向客戶端的用戶發送失敗信息,用戶需要重新輸入軟件服務的需求描述;如果構件領域提取成功,需求分析計算機根據步驟(3)得到的用戶需求相關的領域ID,提取各個領域包含的領域構件ID,并從所述服務器端的構件目錄庫計算機中提取對應的至少包括構件功能描述和構件接口信息在內的構件封裝件信息,并把這些信息以所在領域分類組織后,作為備選的構件信息發送給客戶端;步驟(5)客戶端在接收到步驟(4)所述的備選的構件封裝件信息后,以領域為目錄把各自領域的構件封裝件信息展現給用戶,以使用戶據此選擇自己所需要的構件封裝件;步驟(6)在用戶對構件進行了選擇之后,客戶端把用戶選擇的構件以圖形化的方式顯示出來,對構件的調用接口和被調用接口以不同的圖標來表示;在用戶根據需要對構件的接口進行連接之后,客戶端再對用戶的方案進行連接的有效性驗證,形成XML格式的構件連接方案發送給服務器端的需求分析計算機;步驟(7)需求分析計算機把步驟(6)所述的構件連接方案發送給所述服務器端的構件組裝計算機;步驟(8)該構件組裝計算機對收到的用戶構件連接方案進行分析,從所述服務器端的構件目錄庫計算機中提取相關的組裝用的構件封裝件,生成XML文檔格式的組裝運行腳本,解釋該運行腳本,再利用提取到的構件封裝件進行構件組裝,生成用戶需要的服務程序;步驟(9)該構件組裝計算機再把組裝好的程序通過所述需求分析計算機發送給客戶端的用戶。
全文摘要
本發明涉及一種在網絡環境下根據用戶需求生成軟件服務的方法,其特征在于,包括以下步驟用戶通過客戶端提交服務需求;服務器端分析用戶需求,提取用戶需要的功能及相關軟件構件領域,獲取這些領域中所有構件的信息并發送到客戶端;用戶查看返回的構件信息,選擇自己所需的構件,利用客戶端提供的圖形化工具對這些構件的接口按需進行連接;客戶端將用戶的連接方案形成XML文檔發送到服務器端;服務器端根據用戶的連接方案生成組裝運行腳本、提取構件統一封裝件,然后解釋執行運行腳本完成軟件服務組裝,最后將生成的服務程序返回給客戶端用戶。本發明可實現從用戶需求到軟件構件的映射,進一步生成相應的軟件,從而實現按需的軟件服務。
文檔編號G06F17/30GK1845069SQ200610011940
公開日2006年10月11日 申請日期2006年5月19日 優先權日2006年5月19日
發明者張堯學, 田鵬偉, 方存好, 鐘鳴, 徐廣斌 申請人:清華大學