給您一劑面對 Legacy 專案的還魂丹 - PHP 升版絕活

活動訊息
給您一劑面對 Legacy 專案的還魂丹 - PHP 升版絕活

在這場分享裡,您可以聽到大型系統重構的技巧,包括如何消滅 Global 變數、整合 PHPUnit、用 Xdebug 追蹤程式碼,以及搭配使用 PhpStorm 的祕技。

活動日期:2020 年 07 月 22 日

活動時間:PM 03:00

主辦單位:

 
講者簡介
陳佑竹
世成科技 資深系統分析師

朋友都稱墨嗓(Mouson),是一位專注於資訊科技整合、應用、開發方法及研究的 T 型人。現任 PHP 資訊系統分析師/人夫/一隻臘腸狗的爸爸。平時喜好羽球、登山及手沖咖啡。

工程師都不喜歡碰別人寫得程式碼,因為那些所謂的 Legacy Code 往往寫法過時、沒有文件,維護起來特別痛苦。但這些 Legacy 專案之所以能持續存在,往往代表其具有絕對的商業價值。身為成熟的開發者,我們應該格守童軍法則,除了讓 Legacy 專案能持續運作外,更應該在每一次的迭代裡往更好的方向前進。在這一場線上技術分享裡,Mouson 以面對它、接受它、處理它、放下它等四個階段,提示大家如何用正確的心態面對 Legacy 專案。

主題分享

在本次的分享裡,Mouson 先跟大家討論何謂 Legacy 專案?在一般的認知裡,都是指那些年代久遠、結構龐大、經歷多次迭代、沒有文件的程式碼。不過,Mouson 曾面對更棘手的情況。他所處理的 Legacy 專案,是跑在 Apache 1.3、PHP 4.1.2 的古老專案。不僅如此,這些 PHP 程式高達 1000 隻、逼近 20 萬行。除了經歷 5 個年代的開發風格且沒留下文件外,專案還使用了不常見的商用資料庫,甚至還包括用 C 寫的 PHP Extension。最頭大的是,一些 Extension 是連原始碼都沒有!

即便面對這種史詩級的專案,Mouson 鼓勵大家以正確的心態面對,並謹記那些不能殺死你的,終將使你更強大的格言,依鐵哥(Jace)在「重構或重寫 Legacy code 的幾個階段」一文裡提到的四個階段 - 面對它、接受它、處理它、放下它,逐一說明他們團隊與 Legacy 專案博鬥的故事與從中累積出來的經驗及方法。

首先,團隊需正視自己手上的 Legacy 專案,綜覽全局,並花時間理解 Legacy Code 的架構,做為後續重構的基礎。接著,他與團隊合力改變工作流程,包括建立 Issue Tracking、更換版本控制系統成 Git、導入 CI/CD 自動化。而在撰寫程式的工作上,他們選擇使用 PhpStorm 來協助檢查可能在升版過程中出錯的程式碼,並以內建的重構工具輔助他們修改程式碼。另外,團隊也開始施行 TDD,針對核心演算法進行重構、補上測試,並定期 Code Review。在逐步改善的過程中建立研發團隊的信譽,讓業務及客服團隊對產品的信心提升。

除了分享團隊升級的心路歷程外,Mouson 也以 PhpStorm 實際示範了幾個重構情境,包括如何用 PhpStorm 搭配 Xdebug 的中斷點、Step Into 等功能追蹤原始碼,加上幾個常用的快速鍵,就可以在眾多 Class 及 Method 間跳躍。以及 PhpStorm 在撰寫 TDD 的測試案例時,可以運用 IdeaVim 的客製化設定一秒複製測試案例,搭配執行測試的快速鍵,讓 TDD 開發更順暢。從 Mouson 示範過程中,能夠發現只要能夠掌握 PhpStorm、Xdebug 的操作技巧,重構程式似乎就沒有這麼複雜,用 TDD 來開發也沒想像中的困難。

問答

##Q. 在程式碼每一行旁邊可以顯示 Commit 紀錄是怎麼做到的?

只要在 IntelliJ IDEA 系列 IDE 裡安裝 GitToolBox 這個外掛,就可以在程式碼的每一行旁邊顯示當初 Commit 的紀錄,非常方便!

Q. Redmine 與 Gitlab 的整合是否好用?

在 Mouson 他們團隊裡並沒有將 Redmine 和 Gitlab 做很深入的整合,不過他們團隊會在 Commit Message 裡加上 Issue ID,這樣 Redmine 就會將兩者關聯起來,在管理團隊任務時會更方便。

問卷調查

在本次活動的一開始,Mouson 有簡單的做了兩題調查。另外,這邊也有來自會後問卷的數據,在這邊一併分享統計結果給大家參考:

Q. 參加這場 Webinar 的目的?

  • 想知道怎麼處理 Legacy Code - 16 票
  • 想了解 PhpStorm 可以帶來什麼幫助 - 18 票
  • 聖佑辦的活動參加就對了 - 30 票

Q. 工作上需要維護的 PHP 版本有?

工作上需要維護的 PHP 版本有哪些

Q. 目前使用的開發工具為?

這題在 Mouson 的問答時,共有 11 票表示正在使用 PhpStorm,而有 16 票表示目前使用其他工具,正在評估是否導入。而從會後調查的數據裡可以看出比例是相近的。

目前使用的開發工具是哪個?

從調查的結果看來,大家對於如何處理 Legacy Code 及 PhpStorm 的重構功能都很有興趣!希望這場「升版絕活」能讓大家面對 Legacy 專案時,不論是在心理層面或是動手層面都能有所助益。未來也會持續舉辦類似主題的線上技術分享,我們下次見!

講者投影片

範例程式碼