金星波
(中國人民解放軍92493部隊(duì),遼寧葫蘆島125000)
關(guān)于軟件生產(chǎn)線(SPL:Software-Product Line)的研究最早可追溯至上個(gè)世紀(jì)70年代初,David[1]對程序家族進(jìn)行了研究,但軟件生產(chǎn)線的實(shí)際應(yīng)用始于上個(gè)世紀(jì)80年代中期,并在一些項(xiàng)目上取得了成功。其中瑞士CelsiusTech公司從軍方獲取艦艇防御系統(tǒng)的研制項(xiàng)目,利用產(chǎn)品線技術(shù),同時(shí)進(jìn)行了兩個(gè)艦艇的防御系統(tǒng)開發(fā),使系統(tǒng)開發(fā)時(shí)間大大縮短,(從9年降低至3年);并大大降低軟件開發(fā)費(fèi)用,系統(tǒng)軟硬件費(fèi)用比由65∶35下降到20∶80[2]。
從20世紀(jì)90年代,學(xué)者開始對軟件生產(chǎn)線的理論系統(tǒng)進(jìn)行研究,當(dāng)時(shí)主要的研究對象都是一些實(shí)例,從實(shí)例分析中建立生產(chǎn)線的理論模型。從此對軟件生產(chǎn)線的理論研究以及實(shí)際系統(tǒng)的研制一直都是軟件工程中的焦點(diǎn),其發(fā)展非常迅猛,最具代表性的的卡內(nèi)基梅隆大學(xué)軟件工程學(xué)院(SEI)的研究,如諾基亞的生產(chǎn)即采用了SEI的技術(shù)。直到目前,仍有很多學(xué)者對軟件生產(chǎn)線進(jìn)行研究,如Thum等[3]對特征模型進(jìn)行了探討,Vierhauser等[4]對軟件生產(chǎn)線模型以及支持工具進(jìn)行了研究。
國內(nèi)也有許多學(xué)者對生產(chǎn)線技術(shù)進(jìn)行了研究,并對軟件生產(chǎn)線的關(guān)鍵技術(shù)以及建模方法進(jìn)行了深入的探討[5-7]。雖然生產(chǎn)技術(shù)已日趨成熟,但仍有缺陷。筆者針對該缺陷,提出過程模型和遷移模型。并根據(jù)該模型建立模擬系統(tǒng)。經(jīng)實(shí)例驗(yàn)證,該模型可以解決軟件生產(chǎn)線初期投入大且遷移困難的問題。
許多學(xué)者從不同角度出發(fā),對軟件生產(chǎn)線給出了多種定義。如Weiss等[8]提出將利用產(chǎn)品之間的共同部分,并提前對產(chǎn)品的可變性進(jìn)行充分考慮的產(chǎn)品家族定義為生產(chǎn)線;Margaret[9]提出生產(chǎn)線是由多個(gè)系統(tǒng)構(gòu)成的軟件家族,這些系統(tǒng)在功能方面及組成的元素方面具有共性(communalities),并具有個(gè)性(variabilities),系統(tǒng)間有一定的相似性。這些定義都從一定角度描述了生產(chǎn)線的特征,也都非常經(jīng)典,但筆者更傾向于卡內(nèi)基梅隆大學(xué)軟件工程學(xué)院的定義,它更全面、準(zhǔn)確的描述了軟件生產(chǎn)線的主要基本特性。
軟件生產(chǎn)線是多個(gè)軟件密集系統(tǒng)組成的集合,這些系統(tǒng)共享一個(gè)公共的、可管理的特征集,該特征集能滿足選定的市場或任務(wù)領(lǐng)域的特定需求,這些系統(tǒng)遵循一個(gè)預(yù)描述的方式,在公共的核心資源(core assets)基礎(chǔ)上開發(fā)的。
STARS最早提出了生產(chǎn)線的理論模型[10],該模型將生產(chǎn)線的生產(chǎn)過程分成兩個(gè)相互交叉的生命周期,分別命名為領(lǐng)域工程部分以及應(yīng)用工程部分。領(lǐng)域工程部分分為領(lǐng)域分析、領(lǐng)域設(shè)計(jì)和領(lǐng)域?qū)崿F(xiàn)3個(gè)階段;相似的,應(yīng)用工程部分也分為需求分析、系統(tǒng)設(shè)計(jì)及系統(tǒng)實(shí)現(xiàn)3個(gè)階段。圖1給出了該模型。
圖1 STARS軟件生產(chǎn)線雙周期生命模型Fig.1 STARS model of double life cycle of SPL
SRARS模型定義了經(jīng)典的軟件生產(chǎn)線的開發(fā)過程與進(jìn)化方式,當(dāng)前有許多生產(chǎn)線的開發(fā)模型都是基于此設(shè)計(jì)的。
經(jīng)過多年的發(fā)展,軟件生產(chǎn)線技術(shù)已經(jīng)越來越成熟,但始終有部分缺陷未能克服。
1)大部分生產(chǎn)線技術(shù)都是依托SRARS模型或其發(fā)展進(jìn)化生成的模型,如此軟件生產(chǎn)線的開發(fā)多數(shù)都分為兩個(gè)開發(fā)團(tuán)隊(duì)(卡梅隆模型則分為3個(gè)團(tuán)隊(duì),多了一個(gè)管理團(tuán)隊(duì)):核心資源(Core Assets)團(tuán)隊(duì)、應(yīng)用工程(Application Engineering)團(tuán)隊(duì)。應(yīng)用工程團(tuán)隊(duì)的開發(fā)人員要利用核心資源,針對特定的產(chǎn)品,分析其結(jié)構(gòu),并手工去除在核心資源的代碼中粘貼特定產(chǎn)品的代碼,或反之;由于人與人之間是有差別的,這就難以保證代碼的統(tǒng)一,并且安全性上也無法保證。另外,一個(gè)軟件生產(chǎn)線的產(chǎn)品有可能多,產(chǎn)品越多,應(yīng)用工程的團(tuán)隊(duì)也會(huì)越大,帶來的問題也會(huì)越來越多。
2)一個(gè)生產(chǎn)線上的產(chǎn)品在對核心資源進(jìn)行復(fù)用時(shí),往往有自己的上下文。有時(shí),這些在應(yīng)用工程中的成果應(yīng)該充實(shí)到核心資源中,但因其獨(dú)特的環(huán)境因素,往往很難實(shí)現(xiàn)。這就導(dǎo)致在生產(chǎn)線對多個(gè)產(chǎn)品進(jìn)行生產(chǎn)時(shí),只能為每個(gè)單獨(dú)的產(chǎn)品編寫它單獨(dú)的代碼,降低了生產(chǎn)線的實(shí)用價(jià)值。
3)在一個(gè)軟件生產(chǎn)線的生產(chǎn)過程中往往有兩個(gè)單獨(dú)的團(tuán)隊(duì),這會(huì)導(dǎo)致若產(chǎn)品出現(xiàn)了偏差,很難辨別是哪個(gè)團(tuán)隊(duì)出現(xiàn)了問題。為了改善此問題,SEI的生產(chǎn)線生命模型增加了一個(gè)管理團(tuán)隊(duì)協(xié)調(diào)工作,但在實(shí)際生產(chǎn)過程中還是很容易出現(xiàn)團(tuán)隊(duì)間的矛盾,互相推卸責(zé)任,導(dǎo)致開發(fā)效率的降低。
4)開發(fā)產(chǎn)品時(shí)使用生產(chǎn)線技術(shù),不論是資金、人員以及時(shí)間,初期都需要較大的投入,而且在采用生產(chǎn)線技術(shù)時(shí),往往第1個(gè)產(chǎn)品的出現(xiàn)時(shí)間要遠(yuǎn)遠(yuǎn)長于采用非產(chǎn)品線技術(shù)開發(fā)所得,即這些投入可能短時(shí)間得不到任何回報(bào)。因此除了技術(shù)上的原因,這也是中小型公司較少采用生產(chǎn)線技術(shù)進(jìn)行產(chǎn)品開發(fā)的重要原因之一。
5)隨著一個(gè)生產(chǎn)線技術(shù)在實(shí)踐中的不斷應(yīng)用,其核心資源也在一步步的擴(kuò)張,其復(fù)雜程度也是越來越高,不論生產(chǎn)線的維護(hù)還是它的擴(kuò)展都需要越來越多的費(fèi)用,以至最后難以維持。這也導(dǎo)致一個(gè)生產(chǎn)線利用另一個(gè)生產(chǎn)線的資源難以實(shí)現(xiàn),想把一個(gè)生產(chǎn)線的核心資源遷移至另一個(gè)生產(chǎn)線其難度則更大。
以上討論了軟件生產(chǎn)線的相關(guān)缺陷,現(xiàn)對其進(jìn)行分析。
1)對于實(shí)際應(yīng)用于工業(yè)上的生產(chǎn)線,如汽車生產(chǎn)線,其開發(fā)上沒有兩個(gè)獨(dú)立的團(tuán)隊(duì),生產(chǎn)一輛汽車并不需要工人去做生產(chǎn)線的再次開發(fā)工作。這也給予軟件生產(chǎn)線一個(gè)提示,若一個(gè)軟件生產(chǎn)線沒有應(yīng)用工程開發(fā)團(tuán)隊(duì),而只有一個(gè)唯一的開發(fā)團(tuán)隊(duì)(核心資源團(tuán)隊(duì)),缺陷1)~3)都已不存在。所以筆者認(rèn)為,應(yīng)用工程團(tuán)隊(duì)?wèi)?yīng)給予取消,即核心資源應(yīng)該可以直接對產(chǎn)品進(jìn)行開發(fā)。
2)對于缺陷4),即初期投資龐大是生產(chǎn)線實(shí)際應(yīng)用的一個(gè)重大限制,尤其對中小型的軟件公司。其產(chǎn)生的原因主要有兩點(diǎn):①生產(chǎn)線的開發(fā)不同于一個(gè)單獨(dú)產(chǎn)品的開發(fā),要經(jīng)過多個(gè)領(lǐng)域?qū)<覍φ麄€(gè)領(lǐng)域進(jìn)行分析建立產(chǎn)品集的領(lǐng)域模型,而且還要考慮產(chǎn)品未來各種可能的發(fā)展方向;②核心資源的目的之一即是要為復(fù)用服務(wù),其編寫時(shí)自然多了很多的限制條件,這也增加了代碼編寫的復(fù)雜程度。針對這兩個(gè)原因,如果:①領(lǐng)域模型的變化并不會(huì)導(dǎo)致軟件有較大的變化;②代碼在縮寫時(shí)能遵守一定的即定規(guī)則,就可滿足被復(fù)用的條件。那么這兩個(gè)問題將會(huì)得到很大程度的弱化。
3)針對缺陷5),數(shù)據(jù)庫技術(shù)是此缺陷的天然解決方案,把軟件依不同級別的復(fù)用粒度分別放在數(shù)據(jù)庫中,而關(guān)系數(shù)據(jù)庫其強(qiáng)大的組織以及檢索功能,恰恰可為生產(chǎn)線的維護(hù)以及遷移提供強(qiáng)大的支持。
基于以上分析,筆者提出了兩個(gè)模型:軟件生產(chǎn)線過程模型和軟件生產(chǎn)線無縫遷移模型。二者間關(guān)系密切,此軟件生產(chǎn)線過程模型在很大程度上考慮到遷移問題,是為了盡可能簡單地復(fù)用以往的資源,如代碼、模塊等;而遷移后生產(chǎn)線的資源也可以很容易歸并至軟件庫中,與之前的資源一起可以為下一個(gè)遷移所利用。
軟件生產(chǎn)線的過程模型如圖2所示。
圖2 軟件生產(chǎn)線過程模型Fig.2 A process model of SPL
1)軟件庫分為4層。
基礎(chǔ)庫層:位于軟件庫的最底層,由開發(fā)語言本身提供的類庫與COST構(gòu)件庫組成。
自定義類庫層:建立在基礎(chǔ)庫上,存儲(chǔ)依據(jù)實(shí)際需要建立的類。
模塊庫層:存儲(chǔ)相互獨(dú)立、可組裝的模塊。
模板庫層:存儲(chǔ)模板,提供的是類似于配置器的程序,通過模板即可生產(chǎn)出所需產(chǎn)品。
2)生產(chǎn)線建立流程。
①進(jìn)行領(lǐng)域分析,建立領(lǐng)域模型。領(lǐng)域模型的建立應(yīng)盡可能全面覆蓋領(lǐng)域范疇,采用大規(guī)模軟件定制的策略,充分考慮生產(chǎn)線的可擴(kuò)展性與可裁剪性。但可以只開發(fā)與當(dāng)前產(chǎn)品相關(guān)的模塊及代碼。
②將領(lǐng)域模型轉(zhuǎn)化為AO樹特征模型。
③依據(jù)AO樹特征模型劃分功能模塊。本步驟與②是為了方便將領(lǐng)域模型轉(zhuǎn)化為計(jì)算機(jī)實(shí)現(xiàn),實(shí)現(xiàn)的方法并不限于AO樹。
④依據(jù)需求建立需要的自定義類。在此如何去建立需要的類也可以根據(jù)自身狀況靈活掌握,可以采用面向?qū)ο蟮姆椒ǎ部梢圆捎妹嫦蚍矫娴姆椒?,但必須將此類繼承自何類或引用或使用的方法必須標(biāo)注在數(shù)據(jù)表中。
⑤建立模塊。與④相同,也須將本模塊包含的類標(biāo)注在數(shù)據(jù)表中。
⑥組織模板,軟件生產(chǎn)線建成。
依據(jù)上述軟件生產(chǎn)線過程模型建立生產(chǎn)線,則生產(chǎn)線的維護(hù)及遷移問題就轉(zhuǎn)化為軟件庫中數(shù)據(jù)的轉(zhuǎn)移問題。模型如圖3所示。
圖3 軟件生產(chǎn)線無縫遷移模型Fig.3 A seamless migration model of SPL
從原軟件庫向新軟件庫轉(zhuǎn)移時(shí),仍應(yīng)遵循自項(xiàng)而下的模式,首先對新的領(lǐng)域進(jìn)行分析,建立領(lǐng)域模型,建立AO特征模型。然后依據(jù)AO模型先從原軟件庫中提取可用的模塊,提取可用的自定義類,在提取模塊時(shí)須能同進(jìn)提取此模塊所涉及至的自定義類及COTS構(gòu)件,提取自定義類時(shí)亦如此。此后新生產(chǎn)線的建立依前述生產(chǎn)線過程模型建立即可。
依托軟件生產(chǎn)線過程模型,筆者建立了一個(gè)車載多媒體模擬系統(tǒng)。系統(tǒng)包括領(lǐng)域分析過程、形式化過程、AO模型建立過程等,并在SQL Server之上建立了系統(tǒng)的支持工具,詳細(xì)情況見文獻(xiàn)[10]。系統(tǒng)可以根據(jù)用戶的選擇自動(dòng)生成所需要的產(chǎn)品。生產(chǎn)線的建立并不比生產(chǎn)一個(gè)產(chǎn)品復(fù)雜多少,而且因?yàn)殛P(guān)系數(shù)據(jù)庫的作用可以相對容易剝離出較大粒度的復(fù)用,利于生產(chǎn)線的遷移。
在研究了軟件產(chǎn)品線的概念、相關(guān)方法的基礎(chǔ)上,深入分析了當(dāng)前軟件產(chǎn)品線方法的一些不足之處,并提出了相應(yīng)的對策。在此基礎(chǔ)上,筆者提出軟件生產(chǎn)線過程模型及無縫遷移模型。這兩個(gè)模型可以有效降低生產(chǎn)線的初期投入,并對日后的遷移建立了基礎(chǔ),具有一定的實(shí)用價(jià)值以及推廣價(jià)值。
[1]DAVID PARNAS.On the Criteria to be Used in Decomposing Systems into Modules[C]∥Communication of the ACM.[S.l.]:ACM,1972:1053-1058.
[2]LISA BROWNSWORD,PAUL CLEMENTS.A Case Study in Sueeessful Produet Line Development[R].[S.l.]:Software Engineering Institute,Carnegie Mellon University,1996,10.
[3]THUM T,BATORY D,KASTNER C.Reasoning about Rdits to Feature Models[C]∥Software Engineering,2009.ICSE 2009.IEEE 31st International Conference on.Vancouver,Canada:IEEE,2009:254-264.
[4]VIERHAUSER M,HOLL G,RABISER R.A Deployment Infrastructure for Product Line Models and Tools[C]∥Software Product Line Conference(SPLC),2011 15th International.Munich,Germany:IEEE,2011:287-294.
[5]聶坤明,張莉,樊志強(qiáng).軟件產(chǎn)品線可變性建模技術(shù)系統(tǒng)綜述[J].軟件學(xué)報(bào),2013,24(9):2001-2019.NIE Kunming,ZHANG Li,F(xiàn)AN Zhiqiang.Systematic Literature Review of Software Product Line Variability Modeling Techniques[J].Journal of Software,2013,24(9):2001-2019.
[6]孫連山,王今雨.一種面向特征的軟件產(chǎn)品線非功能需求建模方法[J].計(jì)算機(jī)工程與科學(xué),2013,39(5):67-76.SUN Lianshan,WANG Jinyu.A Feature-Oriented Approach to Modeling Non-Functional Requirements in Software Prodect Line[J].Computer Engineering& Science,2013,39(5):67-76.
[7]趙卓,吳慧玲.基于復(fù)用的軟件產(chǎn)品線工程關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2013,41(12):2012-2015.ZHAO Zhuo,WU Huiling.Towards Software Reuse and Its Applications in Software Product Line Engineering[J].Computer& Digital Engineering,2013,41(12):2012-2015.
[8]WEISS DAVID M,CHI TAU LAI.Software Product-Line Engineering:A Family-Based Software Development Approach[J].Addison-Wesley,1999,41(3):49-56.
[9]MARGARET J DAVIS.Reengineering and the Product Line Approach to Software Development[J].Boeing Defense& Space Group,1995,29(4):128-131.
[10]金星波.軟件產(chǎn)品線方法研究及在嵌入式軟件開發(fā)中的應(yīng)用[D].長春:吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,2011.JIN Xingbo.Research Software Production Line and Its Application in hte Embedded Software Development[D].Changchun:College of Computer Science and Technology,Jilin University,2011.