簡述
軟體再工程是預防性維護所錄用的主要技術,是為了以新形式重構已存在軟體系統而實施的檢測、分析、受替,以及隨後構建新系統的工程活動。這個過程包括其他一些過程,諸如逆向工程、文檔重構、結構重建、相關轉換以及正向工程等。軟體再工程的目的是理解已存在的軟體(包括規範、設計、實脫),然後對該軟體重新實現以期增強它的功能,提高它的性能,或降低它的實現難度,客觀上達到維持軟體的現有功能並為今後新功能的加入做好準備的目標。
軟體再工程的對象是某些使用中的系統,這些系統常常稱為遺留系統。遺留系統通常缺乏良好的設計結構和編碼風格。因此,對該類軟體的修改費時費力。同時,相關的公司或組織由於長久地依賴它們,不怨或不太可能將這螻遺留系統完全拋棄。這樣,軟體再工程所面臨的挑戰就是對這些系統進行分析研究,利用好的軟體開發方法,重新構造一個新的目標系統,這樣的系統將保持坂系統所需要的功能,並使得新系統易於維護。簡而言之,軟體再工程就是將新技術和新工具套用於老的軟體的一種較徹底的一種預防性維護。軟體再工程還可以理解成“把今天的方法學用於昨天的系統以滿足明天的需要”。
目標
一般來說,軟體再工程的具體目標有以下4個方面。
(1)為追加、增強功能做準備。軟體再工程通過對原系統用新的設計思想(如面向對象的思想)加以重新實現,對原有文檔實現更新。使今後能方便地對系統進行功能的追加和增強。
(2)提高可維護性。經過不斷維護日趨複雜的系統.經過軟體的再工程和再設計,其模組劃分會更合理,接口定義更清晰,文檔更齊全,從而更易維護。
(3)軟體的移植。軟體再工程將一些優秀軟體移植到新硬體平台、作業系統或語言環境中,從而使它們能夠利用新環境的新特性,更好地發揮作用。
(4)提高可靠性。軟體的維護修改容易引起“波動效應”,即修改一處,波及多方。這將導致系統的穩定性和可靠性逐漸降低,讓人無法接受。軟體的再工程可較好地解決這一問題。
過程
在Pressman建議的一個軟體再工程過程模型中,它為軟體再方程定義了6類活動:一般情況下,這些活動是順序發生的,但每個活動都可能重複,形成一個循環的過程。這個過程可以在任意一個活動之後結束。以下從信息庫分析開始,依次塒符類活動做簡要說明。
信息庫中保存了由軟體公司維護的所有套用軟體的基本信息.包括套用軟體的設計、開發及維護方面的數據,例如最初構建時間、以往維護情況、訪問的資料庫、接口情況、文檔數量與質量、對象與關係、代碼複雜悱等。在確定對一個軟體實施再工程之前。首先要收集上述這些數據,然後根據業務重要程度、壽命、當前可維護情況等對應軟體進行分析。
文檔重構是重新構建原本缺乏文檔的套用系統的文梢。根據套用系統的重要性和複雜性。可以選擇對文檔全部重構或維持現狀。
逆向工程是一個恢復原設計的過程。通過分析現存的程式,從抽取數據、體系結構和過程的設計信息。
代碼重構是在保持系統完整的體系結構基礎上,對套用系統中難於理解、測試和維護的模組重新進行編碼,同時更新文檔。
數據重構是重新構建系統的數據結構。數據重構是一個全範圍的再工程活動,它會導致軟體體系架構和代碼的改變。
正向工程也稱革新或改造,它根據現存軟體的設計信息,改變或重構現存系統,以達到改善其整體質量的目的。
方法
大致有三種軟體再工程實踐實踐方法。三種方法的主要區別在於它們產生的新系統對遺留系統的替換程度與步驟上。每一種方法都有其固有的風險和好處。具體如下:首先是”大爆炸”方法,這個方法將整個遺留系統用新系統一下子替換;其次是增量方法,這一方法是階段性的推進方法,首先依原有系統的結構劃分成若干模組,然後分階段地逐一改造和組裝;最後是演化方法,該方法類似於增量力法,不同之處是在演化方法中,改造的劃分更多的是基於功能模組,而不是基於原有的結構,並通過對功能模組的逐一替換來達到改造和集成的目的。