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