
摘 要: 軟件產品線方法通過在軟件開發的各個階段引入不同重量級別的重用,可使軟件產品開發如同在流水線上批量生產工業產品,一方面軟件產品的成本可以大幅降低,另一方面軟件產品的生產周期可以大大縮短,同時其質量也可以得以顯著提高[1]。基于軟件產品線驅動的現代組件技術,把軟件產品開發過程劃分為塑造空間和創建空間,以行業組件框架為核心支撐,開發出一系列軟件產品。
關鍵詞: 組件; 軟件產品線方法; 行業組件框架; 塑造空間; 創建空間
中圖分類號:TP311.11 文獻標志碼:A 文章編號:1006-8228(2013)09-08-02
0 引言
當前市場所需要的是大量高品質、低成本和快速應用的軟件產品,傳統的軟件企業采用的生產方式低效、落后,是不可能滿足這些要求的。應用軟件產品如同實物產品非常豐富而又千差萬別,需要有不同行業的企業產品線來生產。軟件產品線驅動著現代軟件企業的形成,分析軟件生產線方法與技術對于軟件企業發展有積極和重要的現實意義。
1 軟件生產線的內容及作用
產品線需要把產品生產分成若干過程,每一個過程基于相同生產工藝和方法,對同一和相似的產品進行生產和加工。工業化的產品線還需要有一個具有統一標準的平臺和零部件,統一標準零部件不僅可以來自于軟件企業自身,也可來自于軟件市場。基于產品線的行業業務組件方法中的產品線,是指軟件企業的工業化產品線。在軟件開發過程中將各種級別的重用引入到產品線,是其他工程學科一直都在追求而又能夠達到的目標,但在軟件工程學中卻往往不盡如人意。然而,在過去的幾年里,一些新的軟件開發范型的出現徹底改變了這種狀況,使得軟件工程能夠在工程學科這個大家族中找到一席之地。其中最引人注目的就是基于組件的軟件開發和產品線工程。按照粒度從小到大排序,一端是組件——即能快速簡單地組裝成新系統的可重用的軟件組件塊,另一端是產品線工程——即在單一的可高度重用的軟件核心內,將產品中一定結構范圍內的所有公共部分合并[1]。
軟件產品線工程要求是以高度重用的方法及工具形成該軟件產品線的生產階段及相關設備,把產品中一定結構范圍內的所有公共部分合并為單一的可高度重用的軟件核心基礎,并根據需求來生產個別具體的產品。這要求一條軟件產品線的產品從內容上能做到最大化的相同性或相似性,從軟件開發的生產終端作出了約束性要求。軟件開發是基于一個具體、個別的軟件,而軟件產品線是基于一個共性的基礎上的批量軟件;軟件開發的主體往往是科研機構和團隊,而軟件產品線的主體是現代軟件企業;軟件開發的目的是軟件本身,而軟件產品線的目的是企業或團體的應用。因此,軟件開發不需要考慮過多的軟件成本和產生軟件的過程的方法成熟度,而軟件產品線要充分考慮軟件成本和產生軟件的過程的方法成熟度。
2 軟件生產線方法的組件技術及方法
軟件生產線方法涵蓋了軟件開發方法,但它需要底層技術和方法支撐,組件技術及方法就屬于后者,軟件生產線方法在空間上具有最大跨度,從軟件企業的生產線直至具體的軟件產品,它也需要組件技術及方法來聯接。組件是一種軟件實體。組件是僅由指定接口和上下文依賴關系所構成的單元。組件具有:服務性、可部署性、合成性、上下文依賴性四種基本性質,它決定了組件與其他軟件實體:對象、函數等的區別[2]。目前,主要的軟件公司所用開發工具均支持組件,所推出的組件模型又各有特色。已有的組件模型包括Microsoft的COM+、Sun的Java Beans和Enterprise Java Beans,以及OMG的CORBA組件標準。根據組件及其基本性質,形成新的軟件開發方法——組件方法[3]。組件方法的特征有以下。
⑴ 形態的不變性:組件是一個,就是在整個系統的分析、設計、實現、部署、升級到維護開發全過程中都是以組件作為自治單元出現,而無需變換形態,只是在不同階段組件的細化程度上存在差異,如圖1所示。
⑵ 隱蔽性:組件不管是在構建時還是在運行時對于使用者來說可見的僅僅是接口,其內部的內容均是不可見的,隱蔽的,盡管組件所采用不同的語言來實現,一個用C++語言描述的組件是不可以在語言層面上調用Java語言描述的組件,而只能用接口來實現調用。組件內部的可見僅是針對其制作者而言。
⑶ 語言上的獨立性:組件與構造的語言無關,組件并不是一個對象,它具可以用對象語言構造,也可以用過程語言構造。由于組件接口與實現能夠分離,組件接口的實現者,可完全自由、獨立地選擇實現的方法和語言[4]。在構建系統時,可視為一個類,在運行時成為一個實例。類與實例的關系如同產品設計圖與具體產品的關系。成熟與不斷發展的組件技術為軟件生產線方法奠定了堅實的技術基礎和保證。
3 基于組件的軟件生產線方法
軟件生產線方法就是以組件技術及方法為基礎,構建軟件企業的軟件產品生產流水線方法。軟件生產線是由兩個空間即:塑造空間與創建空間構成。工程性的生產線的動機是為了支持這樣一個狀態,即大多數應用軟件企業開發一系列相似的、有輕微區別的應用系統,而不是開發一個應用系統。在上述這種環境下,將產品系中公用的部分合并在一個可重的核心(比如框架)里,而不是對每個特定的系統都將所有部分重新開發一遍,這樣做是很有意義的。這樣,對產品系中特定成員的開發,就更多地變成是框架實例化、具體化的問題,而不是一切從頭開始開發。然而,要使得這一方法變得高效,那么企業開發的產品之間必須有相當大的重疊,并且對這些系統之間的共性和差異要有仔細的分析和深入的理解[5]。
塑造空間關注的是行業和共同領域中的一系列個別企業和領域的業務,從關注點作為分離的起點,分離其空間形態,即構建塑造空間,塑造空間是關于行業組件框架的開發,行業組件框架是一個可重用的軟件工件集合,而這些軟件工件的核心被嵌入在企業所開發的所有產品中,塑造空間圍繞行業組件框架為核心的開發和維護相關活動和工件。行業組件框架是由軟件范型產品線驅動,面向行業應用,是一組可重用的、通用的、抽象的、有關業務的組件集合,企業能依照不同用戶需要,通過選擇和決策來確定行業組件框架的具體化、實例化,以此開發行業內一個具體應用系統實例產品。現代軟件企業能否擁有軟件范型產品線,取決于是否建有行業組件框架,行業組件框架是軟件范型產品線核心和標志,行業組件框架是依據行業標準及規則,行業內的企業調研,能使企業用戶重造規范流程,提升企業管理水平和層次。行業組件框架實際上是系列軟件行業組件框架,行業組件框架意味著具有系列產品的共性,特定客戶的需求產品是在該行業組件框架下的特定化,特定客戶的需求產品是產品線上系列產品中的一個,系列產品之間的差異是細小的,差異過大就無法形成一個系列產品,所以說一個產品可被視為基于行業組件框架框架的,軟件產品線使對行業和共同領域內的特定用戶應用系統產品無需從頭至尾進行一遍又一遍重新開發。行業組件框架一般是一組抽象組件模型,但是也允許可執行的二進制代碼的具體形式,抽象組件模型能反映通用性,可執行的二進制代碼的具體形式也能反映通用性,行業組件框架包含了從頂層抽象層至最低層的執行的二進制代碼[6]。
塑造空間與創建空間有本質區別,它的實體是不一致的,在空間的起點是行業和共同領域的業務需要開始,而終點是通用、抽象、合成的組件框架實體,實體在塑造空間需要進行轉換。創建空間的實體從起點到終點都是軟件組件實體,實體的組件形式在創建空間保持其不變性。塑造空間與創建空間是機相聯的,是整個開發周期的兩個空間,兩個空間在通用、抽象的業務組件交匯,即通用、抽象、合成的組件框架是塑造空間終點又是創建空間的起點。
創建空間是基于行業組件框架創建組件業務系統,是關于應用的開發,它通過對行業組件框架進行改寫和擴展來滿足特定用戶或顧客的需要,創建空間圍繞以應用為核心的開發和維護相關的活動和工件。創建空間利用行業組件框架是對產品線上系列產品共性的反映,行業組件框架包含對不同特性的選擇性處理的反映,這些不同特性可能屬于不同的特定客戶產品。但是對不同特性的選擇性處理應當是少量的,根據在于:產品線上系列產品差異性小,因為對不同特性的選擇性處理,實際上是產品線上系列產品不同特性處理的拼湊。要把握好產品系中成員之間的共性和差異,一種強有力的方法是:利用行業組件框架。行業組件框架就是要能接受產品系中所有可能的變型,但還能提供一些手段以在這些變量之間做出選擇。
4 結束語
現代軟件企業在行業需求基礎上研發出行業組件框架后,如同現代制造業都是在生產線上批量制造產品,根據用戶要求生產出系列產品。現代軟件企業一旦形成了這樣的生產線,就能快速生產出高重用、高品質的軟件產品,降低了軟件企業的經濟成本和時間。同時也能降低軟件應用企業的采購成本和縮短信息化建設的周期。
參考文獻:
[1] COLIN M, Gu Jian, etc., translated. Component-based ProductLine Engineering with UML[M]. Mechanical Industry Press,2005.
[2] (美)Alan W.Brown著,趙文耘等譯.大規模基于構件的軟件開發[M].機械工業出版社,2003.
[3] PETER M著,施諾譯.組件級編程[M].清華大學出版社,2003.
[4] PETER H, OLIVER S著,韓柯譯.基于組件的企業級開發[M].機械工業出版社,2005.
[5] 王映輝.構件式軟件技術[M].機械工業出版社,2012.
[6] 楊正武.行業組件框架下的企業管理信息系統創新思路[J].商業時代,2010.13.