實際上,軟件現代化包括用更好的替換壞的漸進過程。選擇專注于軟件可移植性而不是條件編譯是現代化不可或缺的一部分。
考慮與部署平臺現代化相關的工作。假設最初在Windows上使用C++語言開發的應用程序現在需要集成到運行專有操作系統和ARM處理器的現代智能手機中。移植活動需要標識并替換 Microsoft 基礎類上的所有依賴項。它還必須分析和解決對Microsoft編譯器和Microsoft Windows實現的底層線程調度模型的所有依賴關系。雖然其中一些移植問題是由手機供應商的編譯器和鏈接器輸出的診斷消息識別的,但 Microsoft 和智能手機編譯器的代碼生成方法之間的細微差異只能通過對各自技術進行廣泛的測試和/或仔細審查和分析來檢測。同樣,Microsoft 和智能手機操作系統對線程調度隊列、互斥鎖和優先級反轉避免策略的處理之間的差異必須取決于對各自操作系統和應用程序源代碼以及任何可用應用程序設計文檔的廣泛測試和/或仔細審查和分析。
請注意,通過獨立開發的可重用軟件組件的模塊化組合來構建新應用程序的能力取決于這些組件的可移植性。因此,實現軟件可移植性對于開發新系統和維護現有系統至關重要。
條件編譯增加了復雜性
對于典型的C++移植工作,必須更改以支持新平臺的代碼量相對較小,通常不到總代碼的 10%。找出必須更改的 10% 的線路是任何移植工作的最大障礙之一。隨著各種移植障礙的識別和解決,盡職盡責的軟件工程師通過插入有條件編譯的代碼塊并創建文檔來幫助闡明將此代碼移植到另一個平臺(如 Linux、INTEGRITY 或 VxWorks)可能需要的額外工作,從而使應用程序現代化。當然,不能保證從Windows到智能手機的端口可以識別到另一個操作系統或處理器的后續端口可能出現的所有問題。但是,從第一個端口中吸取的經驗教訓為其他端口提供了寶貴的指導。
軟件現代化的一個相互沖突的目標是減少糾正錯誤、解決性能缺陷或隨著系統需求的發展添加增量新功能所需的工作量。通過插入條件編譯指令和每個新端口要考慮的問題的文檔列表來使應用程序變得可移植,這很難發展。如果對原始應用程序的更改影響有條件編譯的代碼,則必須將更改傳播到表示對每個相關平臺的支持的所有有條件編譯的代碼塊中。此外,每個增量更改都必須使用合法條件編譯選項的每個組合進行測試。這大大增加了與常見軟件維護活動相關的工作量。
可移植語言避免條件編譯
使用條件編譯指令的一種流行的替代方法是使用更可移植的編程語言實現軟件。Java通常是首選,許多人使用短語“軟件現代化”來描述將Ada,C或C++軟件遷移到Java語言的過程。Java,包括某些實時版本的Java,解決了Java運行時環境(所謂的虛擬機)本身的可移植性問題,而不是要求應用程序中的條件編譯指令。Java 語言甚至提供了用于解決多處理問題的特殊控制結構,包括用于識別互斥代碼區域的語法以及各個處理器緩存之間的一致性。通過抽象這些可移植性注意事項,Java 語言在典型的軟件維護活動中節省了大量成本。一個開發團隊報告說,與 C 語言相比,在一個項目中節省了 20 倍的成本,該項目包括組裝獨立開發的現成軟件組件以部署到新的嵌入式平臺上。
在一次整體式工作中將整個遺留應用程序重寫為 Java 語言在經濟上很少可行。當今的典型應用程序由數十萬或數百萬行代碼組成;因此,以增量步驟對舊版應用程序進行現代化改造更為常見。隨著每個功能的添加,新功能都在Java中實現,并固定在現有的遺留系統上。如果維護活動顯示遺留應用程序的特定方面難以移植或發展,則應用程序的一部分將替換為更現代的 Java 實現。
審核編輯:郭婷
-
智能手機
+關注
關注
66文章
18499瀏覽量
180380 -
操作系統
+關注
關注
37文章
6838瀏覽量
123400
發布評論請先 登錄
相關推薦
評論