軟件複用綜述
— 筆記整理自 北京理工大學 計算機學院
重複無處不在
- 代碼拷貝是複用還是Bad Smells?
- 代碼壞味道排名第一的就是代碼拷貝
- 代碼拷貝不是良好的複用方法,也足以說明我們對軟件複用的需求
- 系統在從頭開發的時候一定會存在多多少少重複勞動
- 軟件開發活動中存在大量的重複
- 需求獲取重複
- 設計重複
- 編碼重複
- 測試重複
- 文檔重複
- 避免重複勞動的解決方案?
- 面向對象
- 構建技術
軟件複用的概念
- 1968年的一篇論文“大量生產的軟件構件”
- 軟件複用:重複使用“爲了複用目的而設計的軟件”的過程
- 可複用軟件:爲了複用目的而設計的軟件
- 軟件挽救和代碼沿用
- 軟件挽救:重複使用並非爲了複用而設計的軟件那些活動
- 代碼沿用:在一個系統不同版本之間的代碼重複的活動
- 這麼區分是爲了避免使用複用這個詞,免得把複用狹義、廣義概念混淆
- 重複行爲發生的維度
- 時間維—軟件維護:使用以前軟件的版本作爲新版本的基礎加入新的功能,適應新的需求
- 平臺維—軟件移植:以某個平臺的軟件作爲基礎,修改和運行和平臺相關的部分,使其能夠運行在新的平臺下,這就是軟件移植
- 應用維—真正的軟件複用:將某個軟件或軟件中的某些部件應用到其他系統中去,新的系統具有不同的功能和用途,這是真正意義上的軟件複用
軟件複用的分類
- 按複用對象分類
- 產品複用(主流的複用途徑)
- 狹義上來說:複用哪些已有的軟件構建,通過構建集成得到新的系統
- 廣義上來說,包括以下幾類:
- 數據複用
- 體系結構複用
- 設計複用
- 程序複用
- 過程複用
- 複用已有的軟件開發過程
- 使用可複用的應用生成器來生成或半自動生成我們所需要的系統
- 依賴於軟件自動化技術的發展,只適用於一些特定的應用領域
- 產品複用(主流的複用途徑)
- 按複用方式分類
- 黑盒複用:對已有的構件不做修改,可直接使用,理想的複用方式
- 白盒複用:已有的構建不能完全符合業務需求, 需要根據業務的需求適應性修改(大多數情況下,適應性修改往往是必須的)
- 軟件複用三個基本原則:
- 必須有可複用的對象
- 被複用的對象必須是有用的
- 複用者需要知道如何使用被複用的對象
- 軟件複用包括兩個相關的過程
- 可複用軟件的開發
- 基於可複用軟件應用系統的構造
實現複用的關鍵因素
- 軟件構建技術領域工程
- 軟件架構技術
- 軟件再工程
- 開放系統技術
- 軟件過程
- CASE技術
- 以及各種非技術因素
軟件構件技術
- 構件是可組裝的軟件實體
- 具有相對獨立功能
- 可以明確辨識
- 接口由契約指定
- 和語境有明顯依賴關係
- 可獨立部署
- 多由第三方提供
- 可複用構件
- 構件概念的擴展
軟件架構技術
- 架構與體系結構
- 架構是對系統整體結構設計的刻畫
- 全局組織與控制結構
- 構件間通訊
- 同步和數據訪問的協議
- …
- 軟件架構研究內容
- 研究和應用熱點:SOA(面向服務的體系結構)
領域工程
- 一組具有相似或相近軟件需求的應用系統所覆蓋的功能區域
- 特定領域的軟件複用比較容易成功
- 內聚性:保證領域有足夠的共性
- 穩定性:保證領域工程的投資可獲得足夠的回報
- 領域工程的三個主要階段
- 領域分析 -> 建立領域模型
- 領域模型描述了領域當中系統之間的共同需求
- 這階段的主要活動包括:確定領域邊界, 識別信息源,分析領域當中的系統需求
- 確定哪些需求是可以廣泛共享的,哪些需求是可以改變的,從而建立領域模型
- 領域設計 -> 獲得領域架構
- 領域架構描述了在領域模型當中的解決方案
- 它不是單個系統表示,而是一個高層次的設計
- 能夠適應領域中多個系統的需求
- 領域實現 -> 定義翻譯機制
- 可以把需求翻譯成由可複用構件所創建的應用系統
- 根據所採用的複用策略和領域的成熟和穩定程度的不同
- 這種機制可能是一組與模型和領域架構相關的可複用構件
- 也可能是應用系統的生成器
- 領域分析 -> 建立領域模型
軟件再工程
- 軟件再工程是指對原有的軟件系統進行調查,分析將其重構爲新系統的開發過程
- 最特色是:最大限度的重用原有系統的各種資源
- 軟件再過程是一個工程過程
- 組合了逆向工程、重構和正向工程
- 再工程的基礎是對原有系統的理解,包括:運行系統,源代碼,設計,分析,文檔等的全面理解
- 很多情況下是文檔的丟失,只能對源代碼進行再理解
其他因素
- 開放系統技術
- 使用標準接口
- 分佈對象技術
- 基於構件複用的軟件過程
- 對軟件質量和開發效率的影響
- 不同於傳統的軟件過程
- CASE技術
- 與軟件複用相關的研究內容:可複用構件的提取,描述,分類,存儲,檢索,組裝,度量等等
- 非技術因素
- 機構組織和管理方法如何適應複用的要求
- 開發人員知識更新和心理障礙的克服
- 知識的產權問題,標準化問題等等