羅小利,吳清烈
(東南大學管理工程研究所 南京211189)
“軟件即服務”(software as a service,SaaS)是基于互聯網的軟件服務交付和提供模式,用戶不用購買軟件,改向軟件服務商租賃,以“按需使用,按需費用”方式消費[1]。SaaS的兩大亮點是基于Internet的提供和服務形式的托管[2],是未來軟件發展的一大趨勢。
大規模定制以批量生產成本和交貨期限來滿足用戶個性化需求[3]。隨著世界經濟一體化,用戶需求差異也越來越明顯,企業面臨的挑戰也越來越嚴峻:滿足用戶個性化需要的同時也要注重低成本,高效率。大規模定制的對象既可以是產品,又可以是服務[4]。大規模定制為SaaS軟件服務提供強有力的支撐。
在全球化的市場環境下,為了優化業務過程,很多企業經常會進行業務流程重組,這就造成業務過程的動態不穩定,對各種軟件的需求也會發生變化,這就要求SaaS模式的各種軟件能動態適應持續變化的業務過程,具備可定制性和柔韌性。在提供個性化軟件服務的前提下,為了降低成本、提高效率,SaaS軟件服務大規模定制是SaaS應用的一個重要突破口。為此,本文提出SaaS軟件服務基于大規模定制的業務邏輯框架,當面對不同客戶的需求或者其需求發生變化時,只需要更改相應的軟件構件,通過事先定義好的構件接口,快速組裝應用軟件,體現SaaS軟件服務的柔性以及企業的柔性,對SaaS應用具有重要意義。
本文首先分析SaaS軟件服務應用大規模定制的必要性,提出SaaS軟件服務基于大規模定制的業務邏輯框架,解決SaaS軟件服務批量定制問題;接著對此框架進行分析,詳細描述如何尋找個性化定制點集以及應用軟件的定制生成算法;最后用案例證明SaaS軟件服務大規模定制業務邏輯框架的可行性。
不同行業、不同管理模式對同一軟件的需求是不一樣的,但是相同行業、相同管理模式、相同規模所需要同一應用軟件卻大體相同,所以軟件生產不是面向單個客戶的需求,而是面向特定行業市場的需求[5],這為SaaS軟件服務采用大規模定制提供了可能性。
大規模定制的重要特點就是規模經濟效率,而SaaS軟件服務商與客戶是一對多的關系。每個企業對應用軟件的需求是不同的,即使是同一企業,由于市場的變化,企業的產品或服務結構、生產規模以及業務過程都會發生變化,其對應用軟件的需求也會發生變化,這就要求SaaS軟件服務商提供的軟件服務不僅要滿足客戶各式各樣的需求,而且要動態適應不斷變化的業務過程[6,7]。
根據以上兩點,本文提出SaaS軟件服務大規模定制的業務邏輯框架,確保企業所租賃的軟件能緊密匹配企業經常改動的業務流程模型,增加應用軟件的柔性。其實現途徑為:對企業進行業務流程建模,將企業業務過程抽象成軟件業務構件,存儲在軟件構件庫中,當為客戶定制軟件時,以客戶需求為基礎,選擇適合客戶的軟件業務構件,通過業務構件的組裝或重組,生成滿足客戶個性化需求的應用軟件,實現軟件的敏捷生產。這種方式,既降低了軟件生產成本,又可以為廣大客戶提供個性化軟件服務。
SaaS軟件服務大規模定制的業務邏輯框架可使客戶或其管理員以熟悉的方式快速構建動態業務流程模型或對其調整,把企業的業務流程作為輸入,在標準的企業參考業務流程模型基礎上,迅速地將業務流程映射到所需的軟件系統上,該系統就會自動配置,能夠按企業的需求來運行,這是一個動態過程,是自動完成的,不需要客戶手工維護和安裝一系列的驅動。當客戶的業務流程發生變化時,基于大規模定制的SaaS軟件服務不需要對原有租賃軟件的全盤否決,只需更改業務流程模型,就可以自動生成客戶所需軟件,這有利于提高軟件的適應性和柔性,降低成本提高效率,以期在競爭激烈的市場環境中求得生存和發展。
SaaS軟件服務大規模定制的業務邏輯框架的整體結構如圖1所示,包括面向客戶需求分析的動態業務流程模型、配置文檔、配置引擎、建模資源庫、軟件構件庫、應用系統文檔。
根據上述框架,業務邏輯的定制過程可以分為如下幾步。

面向客戶需求分析的動態業務流程模型包括客戶初始訂單、客戶需求分析、動態業務流程模型。需求分析輸入的是企業的初始訂單(即客戶需要租賃的軟件類型)。需求分析主要輸出的是動態業務流程模型。
(1)客戶需求分析
客戶需求分析主要包括以下步驟:①軟件運營環境分析;②用戶需求和業務狀況調查;③業務狀況分析、強化用戶需求;④確定軟件的總體目標和評價標準。
(2)動態業務流程模型
動態業務流程模型是對企業基本過程進行可視化描述,是在企業參考業務流程模型基礎上建立的。企業參考業務流程模型代表某個領域的業務流程模型,存放在建模資源庫中,為建立動態業務流程模型提供強有力的支持。同時根據客戶自身的需求特點,動態業務流程模型也包括可定制的業務元及其之間的約束和依賴關系。其中業務元是由一系列活動及活動之間的連接符組成,是具有一定意義的相對獨立的最基本成分;依賴是業務元之間存在的值與規則互為條件不可分離的關系;約束是業務元對輸入值、輸入規則的域值要求。當添加或刪除業務元時須定義或刪除與這個業務元相關聯的約束和依賴關系。
根據建立的動態業務流程模型,運用動態個性化定制算法尋找個性化定制點集以及它們之間的時序關系[8],并把它翻譯成配置引擎能夠識別的格式,生成配置文檔。個性化定制點集是客戶根據自身的特點需要向軟件服務商進行定制的元素集合。
以軟件構件庫為基礎,將動態業務流程模型映射到軟件構件庫中,根據配置文檔在軟件構件庫中選擇合適的軟件構件,如果沒有合適的軟件構件,則定義新構件并把它加入構件庫中,把檢索到的構件進行集成組裝或重組生成客戶所需要的租賃軟件。
軟件構件既可獨立運行,也可與其他構件重構成一個新的軟件系統[3]。軟件構件分為領域共性構件和個性構件。領域共性構件是對特定行業、特定領域進行分析,剝離出一些個性的需要做大量更新的軟件成分,產生出在一定領域應用系統共同具有的架構。個性構件是客戶的需求以及應用系統的個性、變化成分。
對客戶定制的租賃軟件進行描述,生成應用系統文檔,以便以后查詢、優化,保存在數據庫中。
此框架把大規模定制的管理理念應用到SaaS模式,在滿足客戶個性化需求的前提下,降低成本,實現應用軟件的敏捷成產,有如下優勢。
(1)應用系統具有柔性和靈活性,能適應企業的不斷發展變化
動態業務流程模型抽象描述了客戶的業務處理過程,反映了客戶對租賃軟件的特殊需求,通過個性構件實現。動態業務流程模型能隨著市場環境的變化而變化,從而使其映射的應用系統動態滿足客戶新需求。
(2)充分利用資源,實現應用軟件的敏捷生產
在建模資源庫中抽取客戶所在領域的企業參考業務流程模型,確定其所對應的構件,在軟件構件庫中檢索,對于領域共性構件可以直接復用或者修改后復用。這樣可以大大降低成本,提高應用軟件的生產效率。
(3)定制操作簡單
客戶或者客戶的管理員不需要具備代碼編程能力,只需要確定企業的業務流程模型,就會自動映射客戶所需求的應用系統。
(4)應用系統易于維護和升級
動態業務流程模型與軟件構件相互隔離,領域共性構件升級不會影響客戶的個性化定制,客戶的個性化定制也不會影響到其他客戶的正常使用,更有利于應用系統的維護和升級。
基于大規模定制的SaaS軟件服務首先需要找到個性化定制點集,然后在軟件構件庫中檢索相應的構件,對這些構件進行組裝生成客戶所需要的應用系統。
動態個性化定制算法就是找到個性化定制點集以及它們之間的時序關系。本文以業務元為單位研究業務元及其約束依賴關系的改變對應用系統造成的影響。
企業的業務流程可以抽象為一個有向圖,業務元是有向圖的頂點,業務元之間的約束依賴關系是有向圖的弧,記為D=(V,A)。在介紹動態個性化定制算法前,先定義如下定理作為此算法的依據。
定理1業務元和其約束依賴關系組成的圖D為簡單有向連通圖。
證明 假設業務元和其約束依賴關系組成的圖不是簡單有向連通圖。則可以分如下幾種情況來討論。
(1)D不是有向連通圖
如果D不是有向連通圖,即存在兩頂點u、v,它們之間不存在一條鏈,即業務元u和v之間沒有約束與依賴關系。這與企業的業務流程圖相悖,任兩個業務元之間都可以通過中間業務元以及它們的約束依賴關系相連接。所以有向圖D是連通圖。
(2)D存在回路或者多重弧
如果D存在回路,即至少存在一條回路,(u1,a1,u2,a2,…,ai,ui),a1∈A。如果 D 存在多重弧,即堝a1,a2,a1∈A,a2∈A,且a1,a2的起點和終點相同。這與客觀現實不符,因為任何高效企業都不存在著循環或者重復操作。所以有向圖D是簡單圖。
綜上所知,有向圖D是一個簡單有向連通圖。證畢。
根據定理1,動態個性化定制算法如下:
S表示個性化定制點集,P標號表示此頂點屬于S,T標號表示此頂點不屬于 S,d(vi)表示頂點 vi的入度,d′(vi)表示頂點vi的出度,λ(vi)=m表示頂點vi的前一個頂點是vm。
(i=0)令 Si={vs},P(vs)=0,λ(vs)=0,對每一個 v≠vs,令T(v)=∞,λ(v)=M,k=s。
(1)如果 d′(vi)=0,vi∈Si,算法終止,這時對每個 vi∈Si,d(vi)=0;否則轉入(2)。
(2)考查每個使(vk,vj)∈A,且 vi埸Si的點。如果 d(vj)>0,則把 d(vj)=d(vj)-1,T(vj)=d(vj),λ(vj)=k;否則轉入(3)。
(3)令 T(vji)=min(T(vj)),vi埸Si。如果 T(vji)=0,則把 vji的T標號變成 P 標號,P(vji)=T(vji)。令 Si+1=Si∪{vji},k=j,i=i+1,轉入(1);否則終止,有向圖D存在回路或多重弧。
根據此算法可以找到所有的個性化定制點及其之間的時序關系。
根據動態個性化定制算法的輸出結果,配置引擎主要負責解析配置文檔、調用構件庫和添加新構件的工作。解析及調用構件過程涉及到的主要算法包括模糊查找、最優匹配等。配置引擎根據配置文檔,將對其每一個命令進行解析,并查找構件庫,根據關鍵字匹配情況,即優先級以及該構件以往的調用情況,選出最優解。當最優解與命令完全匹配時直接輸出該構件;當匹配程度較小,則對最優構件進行修改、繼承、補充等生成滿足命令要求的新構件,將其輸出;當在軟件構件庫中找不到匹配程度相符的構件,則根據命令的要求開發新構件,并將其標準化添入構件庫中,輸出該構件。具體算法如下:
void main()
{read file1;
componentlist list1;
foreach command command1 in file1//根據配置文檔命令檢索構件庫,把最優匹配的構件加入鏈表list1
{component component1=function_add(command1);
list1.add(component1);
}
}
componentfunction_add (command command1) //function_add()即對命令行解析查找構件,并輸出最優結果
{component component1;
componentlist list2;
foreach component component2 in componentlib//遍歷構件庫中的所有構件
{ //若構件component2的關鍵字與命令的關鍵字相同,則設置該構件的優先級為2,并加入鏈表list2
if component2.keyword equals command1.keyword
{component2.priority=2;
list2.add(component2);
}
//若構件component2的關鍵字與命令并非完全匹配,則設置該構件的優先級為1,并加入list2
else if component2.keyword incomplete_matching command1.keyword
{ component2.priority=1;
list2.add(component2);
}
}
foreach component component3 in list2//遍 歷 list2 的所有備選構件。找到最匹配的構件并輸出
{ if component1 equals null//component1若為空,則把list2中的第一個構件賦值給component1
{ component1=component3; }
//如果component3的優先級高于component1,則把component3賦值給component1
else if component3.priority>component1.priority
{ component1=component3; }
else if component3.priority equals componet1.priority
{ //若二者優先級一樣,且component3的以往調用次數高于component1,將其賦值給component1
if component3.invokingcount>component1.invokingcount
{ component1=component3; }
}
}
//如果要輸出的構件的優先級為1,說明該構件與命令只是部分匹配,則需要對該構件進行相應的修改或添加新構件,同時將修改后的構件標準化作為新構件添加到構件庫
if component1.priority equals 1
{ Modify (component1,command); //修改構件component1,使其滿足command對構件的要求
Addtolib(component1); //將修改后的構件作為新構件添加到構件庫里
}
return component1;
}
配置引擎實現算法可以生成客戶所需求的應用系統。
以某學校向軟件服務商租賃能滿足其要求的考試系統為例,驗證SaaS軟件服務基于大規模定制的業務邏輯框架的可行性。
在領域分析方法確定的考試系統參考業務流程模型基礎上,根據此學校的需求,快速建立的動態業務流程模型如圖2所示:
在圖2中,每個業務元都由一系列的活動及連接符組成,例如登錄包括注冊、用戶名驗證、密碼驗證等活動及其之間的連接符。每個業務元也有依賴與約束關系,像在線測試,它必須在規定的時間范圍內答題,依賴于隨機組卷。增加或刪除業務元時,必須增加或刪除與其相關的一系列因素。當刪除某個業務元及其依賴關系后,若存在著沒有依賴關系的業務元,則必須定義新的依賴關系,例如刪除閱讀注意事項這個業務元及其依賴關系后,必須定義登錄與隨機組卷之間新的依賴關系。通過建立動態業務流程模型來生成考試系統,客戶管理員或客戶不需要具備編程知識,只需詳細了解該學校的業務流程,非常的簡單方便。
在動態業務流程模型的基礎上,根據動態個性化定制算法,可以找出所有的個性化定制點以及它們之間的時序關系,結果為:登錄、閱讀注意事項、隨機組卷、在線測試、提交答卷、評分與分析、成績查詢、退出。把這些業務元按照順序翻譯成計算機能夠識別的語言,生成配置文檔。
配置引擎實現算法根據配置文檔,在軟件構件庫中檢索相應的構件,有些領域共性構件可以直接復用,像退出構件;有些構件必須進行修改才能輸出,像登錄構件;有的則需要重新開發,像評分與分析。把這些輸出構件進行集成組裝,即可生成滿足學校要求的考試系統。
對生成的考試系統進行描述,包括考試系統屬性、該學校名字、升級時間、啟用日期等,以便以后查詢,保存在數據庫中。
本文提出了SaaS軟件服務基于大規模定制的業務邏輯框架。將企業的業務過程抽象成軟件業務構件,存儲在軟件構件庫中,通過對客戶進行需求分析建立動態業務流程模型,運用動態個性化定制算法找出所有個性化定制點及其之間的時序關系,并把它翻譯成計算機能夠識別的語言,形成配置文檔,配置引擎實現算法根據配置文檔,在軟件構件庫中檢索相應的構件,并將其組裝或重組生成滿足客戶個性化需求的應用軟件。這種方式既降低了生產成本又能快速地滿足客戶的個性化需求。

1 Jacobs,Dean.Enterprise software as service:online services are changing the nature of software.ACM Queue,2005,3(6):36~42
2 Papazoglou M P,Traverso P,Dustdar S,et al.Service-oriented computing:state of the art and research challenges.IEEE Computer,2007,40(11):38~45
3 黃作明.ERP產品的批量定制研究.北京:中國時代經濟出版,2007
4 關增產.面向大規模定制的服務模塊化研究.價值工程,2009(11):99~103
5 彭榮.SaaS模式下多租戶系統架構及關鍵技術研究.大連:大連海事大學,2010
6 陳偉,沈備軍,戚正偉.面向SaaS應用的業務邏輯定制框架的研究與實現.計算機應用研究,2011,28(1):155~158
7 史玉良,欒帥,李慶忠等.基于TLA的SaaS業務流程定制及驗證機制研究.計算機學報,2010,33(11):2055~2067
8 管永明.多租戶軟件中動態個性化配置與定制技術研究.山東:山東大學,2009