資訊系統存在很多共性,如果作為產品來開發,那麼如何能夠通過平台來進行重用和擴充,業界中的產品線工程方法就是進行大範圍複用的一種方法。 在園子裡也住了不短時間,發現關注技術的佔多數,而除了技術外,軟體工程中還有很多我們需要關注的,如,軟體架構平台基於產品線工程開發。前一陣子對Scrum進行了介紹,接下來準備寫幾篇產品線相關的內容,本篇將對產品線中的四個主要概念進行簡要的說明(可變性管理、商業驅動、架構驅動、兩階段生命週期) ,希望對不熟悉產品線知識的有所協助。
在講解之前先解釋兩個概念:
產品族:一組使用通用的資源來構建的產品。一個產品族是基於它的成員產品的結構相似性而定義的。產品族成員建立在一個通用平台之上,主要基於產品之間的技術通性而設定的。產品族可以重用於多個產品線。
產品線:一組共用一組公用管理的特徵的產品,這些特徵滿足一個選定市場的特定需要。一個產品線的定義是基於市場策略的,而不是基於它的成員產品之間的技術相似性。為一個產品定義的特徵,可能需要完全不同於其它成員產品的解決方案。一個產品線可能是與一個產品族一起提供出來,但是它也可能需要不止一個產品族。
在下面介紹過程中,在談架構平台時更偏向於產品族的概念。
為什麼需要產品線方法
隨著軟體應用的普及,企業對軟體也越來越重視,不斷的要求採用軟體提高效率,提升技能增強企業競爭力。隨著客戶的增多,軟體企業這時需要
面對更多的客戶,處理共性和個性問題。如何保證低成本、高品質、快速上市等要求就成為了企業競爭力的主要表現之一,而產品線工程方法就是支援這種大範圍重
用(large-scale
reuse)的方法。產品線區別於傳統的代碼重用就是大量的使用重用(可以達到90%),不僅僅是代碼,還包括需求、業務等。在《OpenExpressApp架構-一個資訊系統的平台》中我畫了一個重用的圖,產品線將基於更大範圍的重用進行開發。
大家都知道,軟體開發成本是成本的一部分,軟體的維護成本也是很大一塊,產品線工程除了可以減少開發成本外,維護成本也可以大大降低,不再需要維護大量不同版本不同架構的代碼,也沒有大量不同的文檔需要維護。
產品基於重用開發,不需要在每個開發環節都重頭開始,這樣可以大大的縮短上市時間。
由於產品線除了可以重用架構,對同類型產品也可以重用開發方法,這樣對於任務估計、開發計劃都可以很好的重用,這樣也可以減少項目開發的風險。
軟體基於大量成熟和經過驗證的核心資產進行開發,這些組件都已經經過大量使用並得到驗證,所以在項目中應用可以保證出現的問題很少。
雖然產品線預計帶來的效果很迷人,但是它並不是一開始就可以給企業帶來效益的,它必須進行一些前期的投資(核心資產的開發、組織的轉變等)才能獲得回報,右圖是產品線的經濟走線圖,在第三個項目時才能達到收支平衡。
產品線方法基本原則
- 產品線方法與傳統的單項目開發的主要不同在於關注點的轉移:從單獨的產品到產品線的項目。這個轉移暗示了一個策略:從特定的項目開發到特定業務領域產品的願景。
- 產品線工程對開發以重用(development for reuse)和使用重用來開發( development with reuse)有
明確的區分。對比傳統的重用,產品線基礎設施包括產品開發週期的所有資產(架構、業務模組、開發計劃,需求到測試階段),而不只是在代碼級的重用。這些重
用資產都包含明確可變性說明的,如需求原型中表明這個功能只在特定子產品中才包括,這對產品業務的理解要求就更高了。
可變性管理(Variability management)
產
品線工程是支援一系列有共性的產品,比較清楚的表明了產品的主要點,可變性(variability)是很重要的一個概念,在產品開發過程中可變性必
須明確的定義、表達、開發、實現和不斷的完善,它必須是被管理的。可變性管理應該在早期範圍界定是就開始,它與所有核心資產相關。其實現在很多公司,只要
做的軟體是產品性質的,很多都是服務大量不同客戶,都需要進行可變性管理,但是因為沒有明確提出是在進行產品線開發,所以可變性的概念並沒有提出來,所以
自然也得不到重視和研究。可變性管理應該成為產品開發的核心問題之一,這也是我後年的關注點。
可變性類型
中顯示了可變性的三種主要類型:共性、變化點、基於特定產品。要注意,隨著產品的進展,基於特定產品的功能可以會變成變化點,變化點可能會變成共性。
共性和變化點在領域工程中解決,特定產品功能在應用工程解決。
三種基本的實現可變性技術
可視化可變性
上面簡單講了一下可變性的概念,那麼我們如何表達出來並與別人交流呢?業界有通過模型來表達的,
展現了一個可變性模型和領域模型的關聯。
可供參考資料:
Software Product Lines in Action
更多內容: 規模化產品開發方法-產品線工程 100222.pdf
歡迎轉載,轉載請註明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]