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