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