重構總結

最近對一個老的系統進行重構,有些感觸,寫出來做個總結

重構的原則

保證和第三方的交互接口沒有變化,保證新系統上線后,第三方不需要任何改動就可以使用新系統

新系統的功能不能少于老系統正在使用的功能

修正老系統中存在的bug,優化性能

溝通

盡可能的拿到新系統的相關資料

和熟悉業務的開發,測試,項目經理等溝通,熟悉業務

使用老系統,加深對老系統的了解

列出所有需要重構的功能,初步和相關人員達到一致

在本地運行要重構的工程

部署本地的開發環境,包括數據庫,依賴的第三方服務

閱讀別人的重構

拿到源代碼,查看依賴jar和配置文件,了解老系統使用了哪些框架,使用了什么服務

在本地運行老系統代碼,一一運行重構功能,通過系統日志,加深對系統的了解

找出系統的核心業務的代碼入口,從這一部分開始閱讀代碼。在讀的過程中自動會延伸到其它相關的模塊。把這些核心模塊閱讀完成后,一般基本重構功能就看七七八八。最后把剩余的功能看完

在看的過程,需要做以下事情

如果對業務有疑問,隨時和業務熟悉的人員進行交流。如果當時就能確認最好,如果不能,則進行記錄。這些疑問等你讀完代碼后,再回頭看,基本都能明白

看代碼時,會發現老系統中存在的bug,先記錄下來

看代碼時,會產生如何改進系統的想法,這些想法也先記錄下來

重構的內容

依賴jar升級

盡量升級依賴jar包到相應的最新的穩定包

對外服務使用了webservice,則相關服務的jar包盡量不要升級。如使用axis2等webservice做為對外服務,如果沒有安全的問題,盡量不要升級jar包

JDK升級

老系統的JDK一般比較低。在開發前,和運維溝通,能否對現在的JDK進行升級。如果能,那最好

完善系統架構

對現有的服務部署構架進行完善:每個服務(包括做轉發的Ngnix,業務服務)至少保證有兩臺,并且分布到2臺服務器上。

盡量保證每個服務是無狀態,這樣可以保證系統易于水平擴展

重構:保證代碼質量

重復的代碼合并:通過抽象類,工具類等解決

魔法數字和1,2,3等狀態數據轉化為常量值或枚舉值

加強對異常數據的安全處理,避免拋出空指針、數組越界等問題

修正bug:

a.隱藏bug,

b.修正已知但是之前因為各種原因無法修復的問題

相同的數據配置只需要一份,不要多份

功能擴展:第三方調用我們的接口的重要數據入庫,調用第三方接口的結果入庫

提高高頻率接口的執行速度

a. 短信回執接口從1s降低到10ms(建立表索引)

b. 訂購關系接口執行時間從250s降低到xxms(建立表索引)

程序依賴第三方服務的關系處理

外部服務

不可以修改和第三方交互的接口參數,必需和原來保持一致

對外的服務IP和URL保持不變

內部服務

和服務者開發者直接進行溝通,如果搞不定,可以請領導協調

提高安全性

增加的白名單IP,只有指定的IP可以訪問服務

代碼中增加對請求參數的校驗

提高運維工作量,更早發現存在的問題

上報程序狀態到運維平臺(如程序是否關閉,啟動)

上報程序關鍵信息到運維平臺(如業務邏輯處理異常,執行關鍵方法花費的時間等)

數據庫

原來系統數據和別的服務共用表,現在將數據獨立出來,并對數據進行清理,刪除異常數據

對大表進行清理,將2016年及之前的數據移出當前的表,備份到別的表中

增加適當數據庫索引

為了解決一些歷史的BUG,可能需要在數據庫中增加新字段或新表

制定重構計劃

完善重構功能列表:對系統非常熟悉后,對之前的重構的功能列表進行補充

制定開始計劃

對項目的中的風險點進行備案,后期開發測試需要重點注意的地方

和相關人員評審重構計劃

測試

測試

a. 開發,測試,項目經理等人溝通設計測試用例,覆蓋

b. 測試的范圍要細,測試一個功能時,要檢查以下信息

檢查客戶端:是否和預期的相同(如收到短信)

檢查服務端:數據庫的值是否和預期相同

檢查第三方數據:第三方返回的值是否和預期相同,需要請第三一起配合測試

測試異常數據(如發送短信)

測試人員非常重要,需要有足夠的耐心對所有的場景進行測試;需要有

c. 本地測試

搭建本地測試環境

使用測試工作模擬調用接口測試(如SOAPUI)

在測試工具中建立常用場景進行測試

用代碼寫一個客戶端,對常用交互場景進行自動化測試

本地環境測試,使用真實數據模擬調用接口測試

d. 線網測試

第一步:在線網部署新程序。如果程序需要向第三方推送數據,則需要啟動一個新的服務模擬第三方服務,此程序中和模擬第三方程序推送數據。攔截服務的流量,即向生成環境推送,又向新程序推送。運行一段時間后,然后比較兩個程序的產生數據的區別以及各種是否正常運行

第二步:在線網部署新程序,此時程序調用真正的第三方。攔截服務的流量,只將我們測試的請求推送到新程序。

第三步:在線網部署新程序。找一個關系好的接入方,和他們溝通,將他們的一部分流量推送到新服務,請他們確認新服務和他們交互的數據是否正常。等多次測試沒問題,可以將他們的流量全部推送到新服務。然后找下一個接入方按照以上流程依次處理。

第四步:所有服務遷移到新程序后,舊服務停止

e. 壓力測試

在線網測試的后期,等確認基本功能無誤后,需要同時進行壓力測試

f. 灰度發布

建立灰度發布的機制

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容