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