軟體再工程

軟體再工程

軟體再工程,是指對既存對象系統進行調查,並將其重構為新形式代碼的開發過程。最大限度地重用既存系統的各種資源是再工程的最重要特點之一。

基本概況


軟體再工程是指對既存對象系統進行調查,並將其重構為新形式代碼的開發過程。最大限度地重用既存系統的各種資源是再工程的最重要特點之一。從軟體重用方法學來說,如何開發可重用軟體和如何構造採用可重用軟體的系統體系結構是兩個最關鍵問題。不過對再工程來說前者很大一部分內容是對既存系統中非可重用構件的改造。
軟體工程再工程是以軟體工程方法學為指導,對程序全部重新設計、重新編碼和測試,為此可以使用case工具(逆向工程和再工程工具)來幫助理解原有的設計。
在軟體再工程的各個階段,軟體的可重用程度都將決定軟體再工程的工作量。
再分析 再分析階段的主要任務是對既存系統的規模、體系結構、外部功能、內部演演算法、複雜度等進行調查分析。這一階段早期分析最直接目的就是調查和預測再工程涉及的範圍。北京工業大學軟體工程研究所研製開發的“軟體再工程輔助調查工具——SFRE”正是從整體上支持該分析階段的再工程自動化工具。重用是軟體工程經濟學最重要原則之一,重用得越多,再工程成本越低,所以逆向工程再分析階段最重要的目的是尋找可重用的對象和重用策略,最終確定的再工程任務和工作量也將依存於可重用對象範圍(重用率)和重用策略。
與一次工程不同,再工程分析者最終提出的重用範圍和重用策略將成為決定再工程成敗以及再工程產品系統可維護性高低的關鍵因素。如果重用對象都是既存代碼級的當然理想,然而可能性有限。但是再工程分析者如果因此而放棄重用,以為“改他人的代碼不如自己重新編寫”,便犯了再工程的大忌。因為一個運行良久的既存系統,最起碼的價值是在操作方法和正確性上已被用戶接受。而再高明的程序員在軟體沒有經過用戶一段時間的使用驗證之前都不敢保證自己的程序正確無誤;更何況越是有經驗的程序員越是知道對一個處於局部變更地位的程序進行重新編寫遠比一次工程的原始編程複雜得多,因為他需要對應無數的“副作用”,正所謂“碰一筋而動全身”。所以,讀文檔——即使是“破爛不堪”、讀代碼——即使是“千瘡百孔”,也要堅持住,並且從中篩出可重用對象。
再編碼 根據再分析階段做成的再工程設計書,再編碼過程將在系統整體再分析基礎上對代碼做進一步分析。如果說再分析階段產品是再工程的基本設計書,那麼再編碼階段如同一次工程一樣,先要產生的是類似詳細設計書的編碼設計書。但是再工程比一次工程更難以進行過程分割,換言之,瀑布模型更不適應再工程,無法將再分析、再設計、再編碼截然分開。
再測試 一般來說,再測試是再工程過程中工作量最大的一項工作。如果能夠重用原有的測試用例及運行結果,將能大大降低再工程成本。對於重用的部分,特別是可重用的(獨立性較強的)局部系統,還可以免除測試,這也正是重用技術被再工程高度評價的關鍵原因之一。當然再工程后的系統總有變動和增加的部分,對受其影響的整個範圍都要毫無遺漏地進行測試,不可心存僥倖,以免因“一個蒼蠅壞了百年老湯”。
實用的重用戰略
在判斷既存系統應該如何重用時,首先要明確哪些是可重用對象,以及如何使用這些可重用對象。下面以既存LAN系統重構成Web系統的再工程為例,說明再分析和再編碼將遇到的一些重用課題。
我們可以將既存LAN系統劃分成界面、邏輯、數據三個層次。用既存系統的三個層次去分別對應典型Web系統的表示層、邏輯層和數據層。由此從邏輯上得到對應每個層次的輸入和輸出,然後為每一層尋找能夠實現最大程度重用的重構方法。
● 界面重用策略
界面模擬方法 將基於文本的舊界麵包裝為新的圖形界面。舊界面運行在終端上,新界面可以是基於PC的圖形界面,也可以是運行在瀏覽器上的HTML頁面。新用戶界面通過一個界面模擬工具與舊界面通信。此方法重用率相當高。但是不修改既存系統會同時將舊系統的結構性缺點全部繼承下來。
基於客戶端的Web應用(Java Applet) Applet可以實現從界面、邏輯到資料庫的許多功能。完全用Java語言重寫一個系統是不現實的,重用率也不會很高,這不是軟體再工程所提倡的。但目前已有許多Applet自動轉化工具,而且其轉化後代碼的重用率相當高。
基於伺服器端的Web應用 即重新開發界面。這種方法看上去沒有重用既存界面代碼,其實不然。首先,界面設計完全可以重用,從而節省設計時間;其次,我們可以將某些界面做成可重用的,這樣也會減少工作量。
● 邏輯層包裝原則
通過對邏輯層的分解可以得到可重用和不可重用的兩部分代碼。對可重用部分可直接使用,對於不可重用部分則應盡量通過各種包裝技術按統一標準將其改造成可重用構件。包裝方法有很多,如對象包裝法、部件包裝法等。
● 數據層重用策略
數據層通常要求更高的重用率。邏輯和數據休戚相關,如果改動資料庫,邏輯勢必不能正常運行,對邏輯部分的重用也就無從談起。如果非改不可的話,也要以保證最大限度的重用為原則,爭取做到只增不刪,以保證數據的完整性。
軟體再工程分為哪兩個部分
答:軟體再工程的兩部分:首先,逆向過程:從代碼開始推導出設計或是規格說明(可理解性);其次,改善軟體的靜態質量(可維護性、復用性或演化性)。
為什麼實施軟體再工程
(1)再工程可幫助軟體機構降低軟體演化的風險
(2)再工程可幫助機構補償軟體投資
(3)再工程可使得軟體易於進一步變革
(4)軟體再工程有著廣闊的市場
(5)再工程能力擴大CASE工具集(如:Aidedsoft)
(6)再工程是推動自動軟體維護髮展的動力
再工程工具
再工程工具用來支持重構一個功能和性能更為完善的軟體系統。目前的再工程工具主要集中在代碼重構、程序結構重構和數據結構重構等方面。