文章目錄
- 產生式編程是什嗎?
- 領域工程是什麼
- 基於領域工程的軟體開發(基於MBSE97)
- 主要開發步驟
- 書中提到的其他技術
軟體業對軟體工程期望之高,涉及高度的複雜性,高效的生產效率和品質,以及便於有效地維護和改進。但是,當前的軟體工程並不能滿足這些目標,現在很多開發更像手工作坊的“一種一個”的解決方案,而不像一個成熟的工程,而模型驅動和產品線工程就是應對這些問題的方法。在模型驅動開發(MDD)介紹中介紹過現在存在多種模型驅動開發方法,而Generative Programming - Mehtods,Tools and Applications這本書主要介紹這個方法,我覺得該書的第一部分不錯,提出了非常值得注意到領域工程和元程式設計,讓我對產品線工程有更好的認識,所以本篇主要結合這本書來給大家介紹一下產生式編程這個方法。
在軟體中,向自動化製作軟體的方向轉變需要經曆兩個步驟:
- 把焦點從開發一個系統轉移到開發一個系統族上來:開發出正確的共性組件
- 使實現組件的裝配自動化:使用產生器達到自動化
我感覺它可以作為產品線工程的一種軟體工程方法,產生式編程就是設計實現組件,使之適應於通用產品線結構,同時對配置知識建模,強調如何把抽象的需求轉變成特定的組件群,並且使用產生器實現配置知識,通過這些工作來解決前面說的高複雜性、高效率和高品質等問題。
產生式編程是什嗎?
Generative Programming is a software engineering paradigm based on modeling software system families such that, given a particular requirements specification, a highly customized and optimized intermediate or end-product can be automatically manufactured on demand from elementary, reusable implementation components by means of configurations knowledge [CE00].
GP的目的地組中於系統族,而不是一種一個的系統(one-of-a-kind system),它不是從頭構造一個單獨的系統族成員,而是基於一個通用的產生式領域模型。模型由三部分組成:
- 指定系統族成員(問題空間 problem space)
- 組裝出每一個成員的實現組件(解空間 solution space)
- 在問題空間和解空間之間的配置知識映射關係(配置知識)
架構和組件現在被認為是擷取軟體重用的最有效技術,但不幸地是,沒有一種OO的分析和設計方法來支援它們的開發。GP包含了兩個重要的完整開發迴圈:一個設計和實現一個產生式領域模型(為重用而開發);另一個是使用產生式模型製作具體的系統(使用重用的開發),這個其實在我之前的產品線系列blog中也介紹過。
為重用而進行的開發目的地組中於系統族,它的第一步包括確定感興趣的家族範圍,就是說,決定應該包括哪個特徵,不應該包括哪些特徵。這就要求分析項目風險承擔者和他們的目標、當前和潛在的市場、技術預測等等。
特徵建模
特徵模型代表了領域工程對軟體工程的重要貢獻,並且對產生式程式設計來說是必須的。確定系統族範圍的下一步就是確定家族成員的共同特徵和差異特徵,以及差異特徵之間的依賴,也就是分析出產品的721。特徵建模可以讓我們以一種結構化的方式來記錄分析的結果,支援可變性管理。它具有以下優點:
- 以明確的方式表示可變點(variation point)和它們之間的依賴性。這種表示提供了取得一個系統族的視線組件類別的基礎,並提供了指定家族成員和配置知識的方法。
- 區分在一個家族成員內部和家族成員之間的差異
- 提供了一種與實現無關的表示差異性的方法,這使得可以在分析模型之外做出關於差異性機制的決策
領域工程是什麼
1. 縱向領域(verticaldomain):根據系統類別而組織的領域。如預算軟體、材料管理、合約管理、企業報表系統等。
2. 橫向領域(horizontaldomain):根據軟體組件的類別而組織的領域。比如資料關係計算引擎、報表引擎、工作流程系統等。
3. 領域之間有3中類型的關係:
a) 包含:比如成本管理軟體包含了材料管理系統
b) 使用:比如公司大部分軟體都使用了報表引擎
c) 類似:領域之間側重點不同,但有很多的相似性,通過深入研究一個領域,可以取得對另一個領域的更好理解。比如報表引擎中對於運算式解析和索引部分可能與資料關係計算引擎類似。
應用工程是基於領域工程的結果構建系統的過程。對一個新的具體應用做需求分析的時候是利用已有的領域模型,通過領域分析提供的各種通用功能、支援的變數配置、提供的擴充等來描述客戶需要。如果新的需求在領域模型中不存在,則可以定製,或者反饋到領域工程來擴充領域的支援範圍。
基於領域工程的軟體開發(基於MBSE97)
- 領域分析
-
目的
- 選擇和定義要解決的領域
- 收集相關的領域資訊,把它整合成一個一致的領域模型
- 通常的領域分析活動
- 領域設計
- 目的:開發用於領域中系統族的一個架構,並設計一個製作計劃。生產計劃的實現可能需要編寫開發人員指南、實現領域特定的語言和訂購GUI、產生器和一個支援組件檢索、評鑑、分發等結構的重用結構,並且建立應用程式的生產過程
- 領域實現
主要開發步驟
- 領域範圍界定
- 特徵建模和概念建模
- 設計一個通用架構和識別實現組件
- 為”定製“系統指定領域規範意義
- 指定配置知識
- 實現那些實現組件
- 實現領域特定符號
- 使用產生器實現配置知識
書中提到的其他技術
GP還提供的其他一些技術,這些東西我有些看不懂,下面知識羅列一下備忘而已:
- 動態庫和可擴充編程環境
- 元程式設計和產生器
- 面向方面的編程
- 泛型程式設計
- 協同工作的產生器
歡迎轉載,轉載請註明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]