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