• 沒有找到結果。

Software Product Line Engineering

在第一章時稍微描述過其概念和效益,此軟體開發方法為此論文欲驗證之重點,其正式 定義為「一個軟體集成系統的集合,集合中的系統彼此分享一套共通和管理的功能集合,此 功能集合是為了滿足某一特定市場區隔或是任務之需求,而基於事先規劃好的共享核心資產 所開發出來的」(A software product line is a set of software-intensive systems sharing a common, managed set of features that satisfy the specific needs of a particular market segment or mission and that are developed from a common set of core assets in a prescribed way.) (Clements、Northrop,2002)。

2.5.1 軟體產品線之必要管理活動

實作軟體產品線的主要活動為(1)在有效的技術和組織管理(Management)支援之下(2)開發 核 心 資 產(Core Asset Development) ,接著 (3)基於已開發之 核心資產來開發產品 (Product Development),核心資產開發通常被稱為領域工程(Domain Engineering),而產品開發通常被

11

圖 6: UML2.3 版分類簡圖

稱為應用工程(Application Engineering)。

如下圖2.7 所示,有三個順向旋轉的圈圈,每一個圈圈代表著一個必要的活動,這三個圈 圈彼此連結且永不間斷地運行著,可以從任何圈圈起始並且高速運轉(Highly iterative)。這三 個圈圈是相互平等的,依使用者環境的需求,可以從管理活動、從核心資產開發活動亦或是 從現有的產品(個別系統)抽取出核心資產開始推動整個軟體產品線的運行。從個別圈圈的箭 頭方向,也可看出它們之間互有回饋機制,核心資產會因為新產品開發的需求而被要求更新 核心資產的更新需要被追蹤,並藉由產品開發時的使用結果來當作核心資產的回饋,如此核 心資產才會產生實際價值;而產品開發也要盡量使用核心資產的元件,盡量反映需求給核心 資產開發活動,避免自己閉門造車。然而這一切都需要強力的、有遠見的管理活動之領導才 能發揮效益。

資料來源:[Clements、Northrop,2002]

以下再就此三項必要之管理活動加以描述。

2.5.2 核心資產開發活動(Core Asset Development)

核心資產開發活動的目標就是建立產品需要的生產要素。圖2.8 表明了核心資產開發活動 需要的輸入和輸出,順時針運轉的箭頭也表明了輸入和輸出之間並沒有明確的因果關係,輸 出和輸入是會相互影響的;例如增加了生產線範疇的廣度(其中一項輸出),就必須考慮是否

12

圖 7: 軟體產品線的必要活動

要增加新的元件輸入至核心資產開發的活動之中。

資料來源:[Clements、Northrop,2002]

核心資產開發活動會使用各種資源當作輸入,分類如下。

1. 產品限制(Product Constraints)

生產線旗下產品的共通與相異點、生產線的功能性需求、系統效能需求、使用何種技 術標準、與哪些外部系統溝通等。

2. 風格、樣式和框架(Styles, Patterns and Frameworks)

現今軟體開發大部分都是採用既有的程式,例如使用Domain-Driven Design、J2EE 的 架構建議、四人幫的設計樣式(GOF Design Patterns)或者是採用開放原始碼社群的框 架等,這些解決方案也提供使用者以客製化方法(介面、繼承、多型等)實作系統相異 點,作為軟體產品線的輸入是很自然的。

3. 生產限制(Production Constraint)

生產線是否要遵守任何商業、軍事或是組織的特定標準?旗下產品一定要使用的設施?

進入市場的時間限制?套裝軟體的整合方式?是否要既有元件和如何使用?

13

圖 8: 核心資產開發

4. 生產策略(Production Strategy)

使用Top-Down(從核心資產到旗下各個產品)或是 Bottom-Up 生產策略(從既有產品萃 取出核心資產)?自己內部製作或是從外部購買核心資產?如何管理核心資產生產流 程?

5. 既有核心資產的管理(Inventory of Preexisting Assets)

既有系統(Legacy System)包含了組織的領域知識甚或是決定市場形象,軟體產品線通 常都會借用這些已驗證的系統和元件作為核心資產的一部分。詳加分析和使用這些既 有系統是重要的。

核心資產開發活動會產生三個輸出,之後作為產品開發活動的輸入使用,以下描述其輸出。

1. 生產線範疇(Product Line Scope)

描述此軟體產品線是由哪些產品所組成。最簡單的方式是列出此生產線所包含的產品 清單;更正統的做法是列出包含產品之間的共同點和相異點,例如產品之間功能性需 求之相同與相異處、非功能性需求之相同與相異處、產品運行之平台與使用技術等。

2. 核心資產(Core Assets)

軟體產品線製造旗下產品的重複使用之基本要素。包含系統架構、軟體元件和領域物 件、系統效能分析、商業邏輯、軟體開發工具和流程、測試計畫和程式、熟悉此生產 線的人力資源(熟悉一個產品 100%等同於熟悉其他產品的 60~70%)。

3. 生產計劃(Production Plan)

描述如何使用核心資產生產產品。每一個核心資產都應該要有相對應的生產計劃,來 指導使用者如何在產品開發活動使用此核心資產。核心資產通常會定義相異點 (Variation Points)讓不同的產品使用,使用生產計畫描述如何使用這些相異點(剪裁、

重新組合等)是尤其重要的。

2.5.3 產品開發活動(Product Development)

成熟的軟體產品線組織重視軟體產品線的健康程度勝於個別產品,但軟體產品線的最終 目標還是要產生出個別產品。產品開發活動除了基於核心資產開發活動的三項輸出,生產線 範疇、核心資產和生產計畫之外,再加上個別產品的需求文件。圖2.9 所示,逆時針方向運

14

行的箭頭代表著一個產品的輸出會成為回饋和影響到下一個產品的生產;例如當產品A 在製 作時,發現有個功能可以整合到核心資產共用,而下一個產品B 需要同樣功能時,就直接使 用核心資產的元件,而不需再重新發明輪胎。

資料來源:[Clements、Northrop,2002]

產品開發活動的四項輸入,描述如下。

1. 需求文件(Requirements)

特定產品的需求文件就如同是生產線範疇文件的變異點描述。

2. 生產線範疇(Product Line Scope)

定義特定產品的變異點是否包含在軟體產品線中。

3. 核心資產(Core Assets)

產品的大部分功能將由核心資產組成。

4. 生產計劃(Production Plan)

指導產品製作者如何使用核心資產來實作產品特定功能。

15

圖 9: 產品開發

2.5.4 管理活動(Management)

1999 年由 eXtreme Programing 提出 test -first programing 概念,和其後於 2002 年由 Kent Beck 所撰寫的 Test Driven Development 一書和其相關開源專案 jUnit 而加以發揚光大的開發 模式,Kent Beck 強調開發軟體專案時先撰寫自動化的測試程式,隨後再撰寫實作,會帶來 簡單乾淨的設計,並且有效提高系統的品質和增加產值。以下條列出此開發模式之步驟 (Beck,2003;Wells,2009) 。

1. 思考你要測什麼?

幫助開發人員深度思考是否真的了解需求,如不了解可快速跟SA 反映。

16

相關文件