定義
軟體重用(Software Reuse,又稱
軟體復用或軟體再用)的概念對於大家並不陌生。早在1968年的NATO
軟體工程會議上就已經提出可復用庫的思想。軟體重用的定義也很多,比較權威和通用的一種是:軟體重用是利用事先建立好的軟部品創建新
軟體系統的過程。這個定義蘊含著軟體重用所必須包含的兩個方面:
1. 系統地開發可重用的軟部品。這些軟部品可以是代碼,但不應該僅僅局限在代碼。我們必須從更廣泛和更高層次來理解,這樣才會帶來更大的重用收益。比如軟部品還可以是:分析,設計,測試數據,原型,計畫,文檔,模板,框架等等。
2. 系統地使用這些軟部品作為構築模組,來建立新的系統。
抽象層次
指重用的級別。一般可分為代碼重用、設計重用、規範重用和概念重用。設計重用指使用在不同環境下構造的設計。此時應考慮環境中硬體或
性能約束帶來的影響,從相同的設計可以得到不同的代碼。規範重用有同設計重用相似的特徵。但從相同的規範可得出不同的設計和不同的代碼。代碼重用有非常明顯的效益,它能大量節省
程式設計人員的時間,因此為一般人所接受。但代碼重用的問題只能發生在編碼階段,在軟體開發過程的早期階段無法確定是否要重用以及重用帶來的影響。在對設計重用的基本理論進行研究的基礎上,建立了能夠記錄概念設計歷史的基於功能-行為-結構框架的概念設計信息模型,實現了功能、行為和結構的形式化表示,建立了多粒度層次的概念設計重用框架,才系統成為概念設計重用的系統平台。
另一個困難在於很難找到無需修改即可重用的
代碼段,其原因是代碼一般與其運行環境有著緊密的依賴關係。由於規範和設計尚未考慮表示細節,因此其潛在的重用性是巨大的。另外,重用應在
軟體開發的前期階段考慮,所以只有將規範重用、設計重用和代碼重用三者結合起來才能真正達到節省軟體開發費用,提高軟體生產效率的目的。
剪裁方法
軟體重用還涉及如何剪裁和修改可重用部件以適應新的要求。
採用的剪裁方法有:
①根本不剪裁
②手工剪裁法
即手工修改可重用部件的內部細節,它要求開發人員了解可重用部件的內部詳細情況。
③模板修改法
按模板修改比手工剪裁方便且安全,但同手工剪裁一樣,仍有可能因修改可重用部件而使其出錯。
④類屬參數化方法
能保證修改不會使原可重用部件出錯 ,但為設計和編碼有一定要求。可重用技術中一般都採用此方法。
重用條件
可重用軟體應滿足如下的條件:
只有在模組化結構中,模組內部的修改和局部系統的重構(部分模組的替換、部分接口的改動)才不至於影響系統的功能和總體面貌。
在這種結構的系統中,依賴於具體運行環境的部分可以集中在少數模組。一旦系統環境發生變化,就可以用其他模組加以替換。
③軟體系統應建立在標準的、統一的數據接口上,即軟體系統在建立數據模組進行數據操作時,都要求以標準的數據模式為依據。 這樣可以減少系統中模組之間的數據交換和相互依賴關係,並將數據模組的操作集中在少數幾個模組進行統一管理。
這一要求不是必須的,但在
軟體系統進行重構、擴充時,
知識庫系統可以提供並學習系統組合、生成及重用方面的知識,從而提高工作效率、改進工作質量。
好處
1. 提高軟體生成率。
2. 縮短開發周期 。
3. 降低軟體開發和維護費用。
4. 生產更加標準化的軟體。
5. 提高軟體開發質量。
7. 減少軟體開發人員數量。
8. 使開發人員能比較容易的適應不同性質的項目開發。
形式
軟體重用的形式(或手段)很多,重用的級別有大有小。主要有以下幾種:
2. 二進制形式的重用。如組件重用。
3. 組裝式重用。比如:把好幾個應用程式的功能集成在一起。例如,要建立一個門戶站點套用,登入用戶既可以查詢天氣情況,又可以查看股市行情,還可以線上購物。這些功能由不同
網路套用服務供應商提供,通過這種組裝式重用,就可以非常容易地把上述功能都集成到新的門戶站點中。
4. 分析級別重用。
5. 設計級別重用。
6. 軟體文檔重用。
分類
為軟體重用分類比較困難,因為軟體重用技術眾多,一種重用技術可以包括多種重用形式。比如說:
框架即可以包括代碼級重用,也可以包括設計級重用。有一種分類方法是按照軟體重用所套用的領域範圍,把重用劃分為兩種:橫向重用和縱向重用。
橫向重用
指重用不同套用領域中的軟體元素,例如
數據結構、分類算法、人機界面構件等。標準函式館是一種典型的原始的橫向重用機制,標準函式館也是最常用的橫向重用。
縱向重用
指在一類具有較多公共性的套用領域之間進行軟部品重用。因為在兩個截然不同的套用領域之間實施
軟體重用非常困難,潛力不大,所以縱向重用才廣受矚目,並成為軟體重用技術的真正所在。縱向重用活動的主要包括以下幾個步驟:
1) 首先進行域分析。根據套用領域的特徵及相似性預測
軟部件的可重用性。
2) 然後進行軟部品的開發。一旦確認了
軟部件的重用價值,即可進行軟部品的開發並對具有重用價值的軟部品進行一般化,以便它們能夠適應新的類似的套用領域。
3) 最後,
軟部件及其文檔即可進入軟部品庫,成為可供後續項目使用的可重用資源。
技術
最理想的重用技術是它的重用產品能夠和用戶的需求完全一致,不需要用戶做任何自定義,並且能夠無需用戶學習就能夠被使用。然而,一種重用技術能夠適合今天,可能不適合明天。一個重用產品越是能夠被自定義,它越是可能在一個特定的環境下被使用,但是這也需要用戶進行更多的學習,研究和實踐。
自從
軟體重用思想產生以來,計算機科學家和
軟體工程師就致力與軟體重用的技術的研究和實踐。在30多年的時間內,出現多種
軟體重用技術,如:庫函式,模板,面向對象、設計模式、組件、
框架、構架。
下面是應用程式框架和其它三種軟體流行的重用技術的比較。
庫函式
庫函式是很早的
軟體重用技術。很多
程式語言為了增強自身的功能,都提供了大量的庫函式。對於庫函式的使用者,他只要知道函式的名稱,返回值的類型, 函式參數和函式功能就可以對其進行調用。
面向對象
模板
模板相當於工業生產中所用的“模具”。有各種各樣的模板(如文檔模板,網頁模板等),利用這些模板可以比較快速地建立對應的軟體產品。模板把不變的封裝在內部,對可能變化的部分提供了通用接口,由使用者來對這些接口進行設定或實現。
設計模式
設計模式作為重用設計信息的一種技術,在
面向對象設計中越來越來流行。設計模式描述了在我們周圍不斷重複發生的問題,該問題的解決方案的核心和解決方案實施的上下文。設計模式命名一種技術並且描述它的成本和收益,共享一系列模式的開發者擁有共同的語言來描述他們的設計。
構件
普通意義上的構件應從以下幾個方面來理解:
1)
構件應是抽象的系統特徵單元,具有封裝性和信息隱蔽,其功能由它的接口定義。
2)
構件可以是原子的,也可以是複合的。因此它可以是函式,過程或對象類,也可以是更大規模的單元。一個子系統是包含其它
構件的構件。
3)
構件是可配置和共享的,這是基於構件開發的基石,且構件之間能相互提供服務。
構架
普通意義上的構架應從以下幾個方面來理解:
1) 構架是與設計的同義理解,是系統原型或早期的實現。
2) 構架是高層次的系統整體組織。
3) 構架是關於特定技術如何合作組成一個特定系統的解釋。
框架
如果把軟體的構建過程看成是傳統的建築過程;框架的作用相當於為我們的房屋搭建的“架子”。框架從重用意義上說,是一個介於
構件和構架之間的一個概念。
構件,框架和構架三者的主要區別在於:對重用的支持程度的不同:
1)
構件是基礎,也是基於構件開發的最小單元。
構件重用包括可重用構件的製作和利用可重用構件構造新構件或系統,
2) 一個
框架和構架包含多個
構件。這些
構件使用統一的
框架(構架)接口,使得構造一個套用系統更為容易。
3) 框架重用包括代碼重用和分析設計重用,一個套用系統可能需要若干個框架的支撐,從這個意義上來說,框架也是一個“
構件”的同時,框架又是一類特定領域的構架。
4) 構架重用不僅包括代碼重用和分析設計重用,更重要的是抽象層次更高的系統級重用。
5) 框架和構架的重用層次更高,比
構件更為抽象靈活,但也更難學習和使用。