馬春黎 盧 葦
摘要:軟件工廠是軟件開發(fā)工程化最可行的形式,實(shí)際上,它只是軟件開發(fā)方法和實(shí)踐在持續(xù)發(fā)展過程中的下一個合乎邏輯的步驟,但它們承諾通過引入工業(yè)化模式來改變軟件行業(yè)的性質(zhì)。本文首先闡述什么是軟件工廠,然后說明它的實(shí)現(xiàn)基礎(chǔ),即概念和主要的技術(shù),最后闡述它的工作過程。
關(guān)鍵詞:軟件工廠;產(chǎn)品線;供應(yīng)鏈
1 引言
軟件工廠是指為了支持某種特定應(yīng)用程序的快速開發(fā)而配置的開發(fā)環(huán)境。是模式、模型、框架和工具的綜合應(yīng)用。
目前,軟件開發(fā)一般采用人工手動的方法,速度緩慢、代價高昂而又極易出錯,常常會生產(chǎn)出存在大量缺陷的產(chǎn)品,在可用性、可靠性、性能、安全以及其他服務(wù)質(zhì)量方面造成嚴(yán)重的問題。同時,軟件開發(fā)人員面臨著快速發(fā)展的平臺技術(shù)、不斷增長的用戶需求、永無止境地學(xué)習(xí)新技術(shù)、在舊的應(yīng)用軟件中提取可用價值等壓力,這就需要一種既為軟件開發(fā)創(chuàng)造便利,又為用戶帶來效益的方法。
軟件工廠恰恰可以解決上述問題。它使得軟件生產(chǎn)條理化、系統(tǒng)化,工廠式的管理體系確保軟件產(chǎn)品和產(chǎn)品加工過程規(guī)范、標(biāo)準(zhǔn);使項(xiàng)目實(shí)施人員可以對零件(中間件、模塊)進(jìn)行自由組合;軟件工廠適應(yīng)用戶變化,解決了用戶需求不確定性問題;軟件工廠最大可能地利用已有資源,使得軟件構(gòu)件的復(fù)用性得到提高,軟件開發(fā)工作量明顯減少,軟件成本大幅度降低;軟件工廠采取流水作業(yè)方式,為多個項(xiàng)目并行實(shí)施創(chuàng)造了條件,軟件可以實(shí)現(xiàn)批量生產(chǎn),軟件工廠插件式、組裝式的軟件生產(chǎn)方式開拓了系統(tǒng)的擴(kuò)展空間;利用軟件工廠進(jìn)行軟件開發(fā),用戶可以控制項(xiàng)目周期、成本、質(zhì)量,開發(fā)速度得到提高,項(xiàng)目效益和成功性得到保障;軟件工廠使得維護(hù)工作只需針對需要維護(hù)的對象(中間件、模塊)展開,工作量大大減少,軟件產(chǎn)品全壽命周期成本降低。
2 軟件工廠涉及的基本概念和技術(shù)
2.1 軟件產(chǎn)品系列
軟件產(chǎn)品系列是有相同特征的一組產(chǎn)品的集合。軟件產(chǎn)品系列成員具有很多共同特征,成員可以是組件也可是整個產(chǎn)品。
系列成員可以根據(jù)個性問題特征指定,根據(jù)個性解決方案來實(shí)現(xiàn),從而可以忽略共性,減小了解決問題的范圍和需要提供解決方案的范圍。
2.2 軟件產(chǎn)品線
由一個產(chǎn)品線體系結(jié)構(gòu)、一個可重用構(gòu)件集合(核心資源)和一個源自共享資源的產(chǎn)品集合組成,是組織一組相關(guān)軟件產(chǎn)品開發(fā)的方式。
軟件產(chǎn)品線系統(tǒng)獲取生產(chǎn)系列產(chǎn)品成員的知識,以可重用資產(chǎn)的形式使用,例如組件、過程、工具,然后用這些資產(chǎn)生產(chǎn)系列成員。產(chǎn)品就像是家族成員一樣重復(fù)使用需求、體系結(jié)構(gòu)、框架、組件、測試和其他資產(chǎn)。軟件產(chǎn)品線主要有以下建立方式:
(1)將現(xiàn)有產(chǎn)品演化為產(chǎn)品線。
(2)用軟件產(chǎn)品線替代為現(xiàn)有產(chǎn)品集。
(3)全新軟件產(chǎn)品線的演化。
(4)全新軟件產(chǎn)品線的開發(fā)。
2.3 供應(yīng)鏈
供應(yīng)鏈?zhǔn)且粋€網(wǎng)絡(luò),以原始材料為起點(diǎn),將其轉(zhuǎn)換為中間產(chǎn)品,然后轉(zhuǎn)換為最終的產(chǎn)品,以便通過配送系統(tǒng)提供給客戶。
供應(yīng)商互相連接在一起,以便使來自上游供應(yīng)商的輸出變成下游供應(yīng)商的輸入。上游供應(yīng)商可以向下游供應(yīng)商提供實(shí)現(xiàn)資產(chǎn)(例如,組件)或過程資產(chǎn)(例如工具和過程文檔)。由于下游供應(yīng)商生產(chǎn)的產(chǎn)品要結(jié)合上游供應(yīng)商提供的實(shí)現(xiàn)資產(chǎn),因此下游供應(yīng)商具有較窄的活動范圍,并且生產(chǎn)的產(chǎn)品比上游產(chǎn)品更大。
軟件工廠通過劃分軟件架構(gòu)(縱向或橫向)以便將職責(zé)轉(zhuǎn)移給外部供應(yīng)商來促進(jìn)供應(yīng)鏈的形成:
(1)縱向劃分使軟件工廠可以裝配由上游供應(yīng)商提供的組件。例如,實(shí)體框架來自獨(dú)立軟件供應(yīng)商。
(2)橫向劃分可以分隔產(chǎn)品系列和產(chǎn)品開發(fā)人員,使得產(chǎn)品開發(fā)人員可以使用由處于供應(yīng)鏈同一級別的外部產(chǎn)品系列開發(fā)人員提供的生產(chǎn)資產(chǎn)。這可以采取下列兩種形式之一:
①產(chǎn)品系列開發(fā)被外包。例如,開發(fā)軟件工廠的產(chǎn)品系列開發(fā)人員為外部的系統(tǒng)集成商工作,而不是為獨(dú)立軟件供應(yīng)商工作。他們?yōu)榭蛻艚M織中的開發(fā)人員生成軟件工廠,而不是為內(nèi)部開發(fā)人員生成它們。
②產(chǎn)品開發(fā)被外包。例如,產(chǎn)品開發(fā)人員為系統(tǒng)集成商工作,并使用為獨(dú)立軟件供應(yīng)商工作的產(chǎn)品系列開發(fā)人員所開發(fā)的軟件工廠。產(chǎn)品開發(fā)人員可能位于境外成本較低的勞務(wù)市場中。
3 軟件工廠的工作過程
3.1 軟件產(chǎn)品線開發(fā)
產(chǎn)品線開發(fā)的目標(biāo)是為一個產(chǎn)品系列提供生產(chǎn)資產(chǎn)。我們可以把產(chǎn)品線開發(fā)認(rèn)為是產(chǎn)品線的分析、設(shè)計和實(shí)現(xiàn)。
產(chǎn)品線分析是決定產(chǎn)品線開發(fā)什么產(chǎn)品。包括產(chǎn)品線定義、問題和解決方案的領(lǐng)域范圍、商業(yè)案例分析和范圍鑒定。其分析強(qiáng)調(diào):
①通過捕獲風(fēng)險承擔(dān)者的觀點(diǎn)來揭示產(chǎn)品線需求;
②通過系統(tǒng)的推理和分析、集成功能需求和分功能需求來完成產(chǎn)品線需求;
③產(chǎn)品線設(shè)計師對產(chǎn)品線需求的可用性。
產(chǎn)品線設(shè)計決定產(chǎn)品線怎樣開發(fā)產(chǎn)品,其中包括產(chǎn)品線體系結(jié)構(gòu)開發(fā)和映射、產(chǎn)品開發(fā)過程的定義和自動化。
產(chǎn)品線實(shí)現(xiàn)的目的是提供產(chǎn)品線體系結(jié)構(gòu)和需要的實(shí)現(xiàn)資產(chǎn)和過程自動化需要的過程資產(chǎn)。
3.2 產(chǎn)品開發(fā)
3.2.1 產(chǎn)品開發(fā)活動要素
產(chǎn)品開發(fā)活動取決于產(chǎn)品線范圍、核心資源庫、產(chǎn)品計劃和需求的輸出。
產(chǎn)品開發(fā)的輸入有:
(1)特定產(chǎn)品的需求,通常由包含在產(chǎn)品線范圍內(nèi)的一些產(chǎn)品描述來表達(dá);
(2)產(chǎn)品線范圍,指明正在考慮的產(chǎn)品是否適合包含在產(chǎn)品線中;
(3)構(gòu)建產(chǎn)品所需的核心資源庫;
(4)產(chǎn)品計劃,指明核心資源如何應(yīng)用到產(chǎn)品的構(gòu)建中。
本質(zhì)上說,產(chǎn)品線是一組相關(guān)產(chǎn)品的集合,但是,怎樣實(shí)現(xiàn)卻有很大的不同,這取決于資源、產(chǎn)品計劃和組織環(huán)境。
3.2.2 生成產(chǎn)品涉及到的活動
(1)問題分析:確定問題是否位于軟件工廠的范圍內(nèi);
(2)產(chǎn)品規(guī)范:根據(jù)與產(chǎn)品要求之間的差異來定義產(chǎn)品要求;
(3)產(chǎn)品設(shè)計:將要求方面的差異映射到產(chǎn)品系列體系結(jié)構(gòu)和產(chǎn)品開發(fā)過程方面的差異,從而生成產(chǎn)品體系結(jié)構(gòu)和自定義的產(chǎn)品開發(fā)過程;
(4)產(chǎn)品實(shí)現(xiàn):可以使用一系列機(jī)制來開發(fā)實(shí)現(xiàn),具體取決于差異的范圍,例如,屬性表、配置組件的向?qū)Ш凸δ苣P?、裝配組件并生成其他人工制品(例如,模型、代碼和配置文件)的可視模型,以及完成框架擴(kuò)展點(diǎn)或者創(chuàng)建、修改、擴(kuò)展或改裝組件的源代碼;
(5)產(chǎn)品部署:通過供應(yīng)設(shè)備、驗(yàn)證主機(jī)配置來創(chuàng)建或重用默認(rèn)的部署約束、邏輯主機(jī)配置以及可執(zhí)行文件到邏輯主機(jī)的映射,通過安裝和配置必需的資源來重新配置主機(jī),以及安裝和配置所部署的可執(zhí)行文件;
(6)產(chǎn)品測試:創(chuàng)建或重用測試資產(chǎn)(包括測試用例、測試裝置、測試數(shù)據(jù)集和測試腳本)以及應(yīng)用儀表化和度量工具。
4 結(jié)論
軟件工廠的出現(xiàn)使得軟件開發(fā)商可以通過可重復(fù)的開發(fā)過程快速生產(chǎn)出效率高、成本低、質(zhì)量好的企業(yè)級軟件。軟件工廠所提供的軟件基礎(chǔ)架構(gòu)可以實(shí)現(xiàn)快捷的、生產(chǎn)線級的軟件生產(chǎn)能力。具體包括:建立標(biāo)準(zhǔn)結(jié)構(gòu)、軟件中間件、開發(fā)過程、實(shí)踐、擴(kuò)展的集成開發(fā)環(huán)境、組件庫和知識庫以及重用策略等。
軟件工廠是唯一一種在建立工廠的同時生產(chǎn)產(chǎn)品的特殊“工廠”。這種方式可以大大降低現(xiàn)代軟件開發(fā)的成本和復(fù)雜性。
參考文獻(xiàn)
[1] www.ccident.com. 廖錚,組件技術(shù)造就軟件工廠.2001年06月28日.
[2] Kishore Channabasavaiah,Kerrie Holley,Edward M. Tuggle, Jr.遷移到面向服務(wù)的體系結(jié)構(gòu) 第二部分. 2003年12月.