Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Ab628671841774343b1020f22f712069?s=47 mouson
July 22, 2020

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

在這份簡報中,我們將介紹 Legacy 專案有什麼特徵,該怎麼面對它,以及我們在面對 Legacy 專案的過程中所發生的故事,最後,我們會針對一些處理 Legacy 可以用到的小技巧作 Live Demo,如怎麼透過 xdebug trace PHP 底層程式、如何透過 PhpStorm 快速建立好物件及如何處理我們所面對的 Legacy Code。

簡報中使用的 Demo 如下:
https://github.com/mouson/20200722-jetbrians-phpstorm-demo

Ab628671841774343b1020f22f712069?s=128

mouson

July 22, 2020
Tweet

Transcript

  1. PHP 升版絕活 墨嗓 Mouson 2020.07.22 給你⼀劑⾯對 Legacy 專案的還魂丹

  2. About Me • 陳佑⽵,朋友都叫我墨嗓 (Mouson)。專注於資訊科技整 合、應⽤、開發⽅法及研究的T 型⼈,現任 PHP 資訊系統分析 師/⼈夫/⼀隻臘腸狗的爸爸/通⽤

    設計(Universal Design)推廣。 平時喜好⽻球、登⼭及⼿沖咖 啡。 • mouson@gmail.com • https://fb.me/mouson
  3. 世成科技

  4. 參加這場 Webinar 的⽬的? • 1) 想知道怎麼處理 Legacy • 2) 想了解

    PhpStorm 可以帶來什麼幫助 • 3) 聖佑辦的參加就對了
  5. 有多少⼈正在⽤ PhpStorm? • A) 正在⽤ PhpStorm • B) ⽤其他⼯具,正在評估是否使⽤

  6. 進入主題

  7. ⼤綱 • 1) Legacy Code ? • 2) 我們與 Legacy

    搏⾾的故事 • 3) Live Demo: 搭配 PhpStorm 處理 Legacy
  8. ⼤綱 • 1) Legacy Code ? • 2) 我們與 Legacy

    搏⾾的故事 • 3) Live Demo: 搭配 PhpStorm 處理 Legacy
  9. Legacy Code

  10. Legacy Code • 年代久遠

  11. Legacy Code • 年代久遠 • 結構龐⼤

  12. Legacy Code • 年代久遠 • 結構龐⼤ • 經歷多次迭代

  13. Legacy Code • 年代久遠 • 結構龐⼤ • 經歷多次迭代 • 沒有⽂件

  14. 怎麼處理 Legacy ? • ⾯對它 • 接受它 • 處理它 •

    放下它 REF: 重構或重寫 Legacy code 的幾個階段 https://jaceju.net/steps-of-refactoring-or-rebuilding/
  15. ⾯對它

  16. ⾯對它 • 不要仇視它

  17. ⾯對它 • 不要仇視它 • 你的薪⽔可能是它提供的

  18. ⾯對它 • 不要仇視它 • 你的薪⽔可能是它提供的 • 綜覽全局

  19. ⾯對它 • 不要仇視它 • 你的薪⽔可能是它提供的 • 綜覽全局 • 了解⽬前的規格、背景故事等

  20. ⾯對它 • 不要仇視它 • 你的薪⽔可能是它提供的 • 綜覽全局 • 了解⽬前的規格、背景故事等 •

    理解 Legacy Code 的架構
  21. 接受它

  22. 接受它 • 導入單元測試

  23. 接受它 • 導入單元測試 • 導入持續整合 CI

  24. 接受它 • 導入單元測試 • 導入持續整合 CI • 導入持續部署/發佈 CD

  25. 接受它 • 導入單元測試 • 導入持續整合 CI • 導入持續部署/發佈 CD •

    導入 E2E ⾃動化測試 • 重構 與 重寫 的選擇
  26. 處理它

  27. 處理它 • 選⽤好的⼯具

  28. 處理它 • 選⽤好的⼯具 • 使⽤功能切換 (Feature Toggle) 來重構

  29. 處理它 • 選⽤好的⼯具 • 使⽤功能切換 (Feature Toggle) 來重構 • 使⽤好的框架改寫

  30. 處理它 • 選⽤好的⼯具 • 使⽤功能切換 (Feature Toggle) 來重構 • 使⽤好的框架改寫

    • 使⽤ BDD (Behavior-Driven Dev)開發
  31. 放下它

  32. 放下它 • 保持正確的⼼態

  33. 放下它 • 保持正確的⼼態 • 童軍守則: • 讓離開時的營地比進去時乾淨

  34. ⼤綱 • 1) Legacy Code ? • 2) 我們與 Legacy

    搏⾾的故事 • 3) Live Demo: 搭配 PhpStorm 處理 Legacy
  35. ⾯對它-概況 • Apache 1.3 • PHP 4.1.2 • 核⼼為使⽤ C

    編寫之 PHP Extension • PHP 程式碼超過 1,000 隻 PHP 程式 • Lines of Code 超過 20 萬(單 PHP 未計算前端程式) • 使⽤常⾒的商⽤資料庫
  36. ⾯對它 - Legacy • 年代久遠 • 結構龐⼤ • 經歷多次迭代 •

    沒有⽂件
  37. ⾯對它 - Legacy • 年代久遠 • 結構龐⼤ • 經歷多次迭代 •

    沒有⽂件 • 沒有原始碼
  38. ⾯對它 - Legacy • 年代久遠 • 結構龐⼤ • 經歷多次迭代 •

    沒有⽂件 • 沒有原始碼 -FHBDZ Ⴉᗇ
  39. None
  40. 啟動 - 接受它 • 建立 Issue Tracking System • 建立版本控制系統

    • 建立研發團隊⼯作流程 GitFlow
  41. 初期 - 接受它 • 透過各種需求了解系統結構、架構 • 初步升級 PHP 5.2.17 及核⼼元件

    • 依然沒有 namespace • 依然沒有 Package 可以⽤
  42. 中期 - 處理它 • 導入單元測試,以測試描述規格 • 導入 TDD 進⾏新功能開發 •

    持續針對重要核⼼演算法重構、補上測試
  43. 中期 - 處理它 • 持續累積研發團隊 Credit • 錯了代表以測試所規格描述還不夠完成 • 補測試後就不會再錯,不再改

    A 壞 B
  44. 中期 - 處理它 • 持續累積研發團隊 Credit • 錯了代表以測試所規格描述還不夠完成 • 補測試後就不會再錯,不再改

    A 壞 B • 程式⼜算錯了!
  45. 中期 - 處理它 • 持續累積研發團隊 Credit • 錯了代表以測試所規格描述還不夠完成 • 補測試後就不會再錯,不再改

    A 壞 B • 不太可能是程式寫錯, 應該是客⼾設定錯誤 • 程式⼜算錯了!
  46. 升級 PHP 7 - 處理它 • ⼤量修正使⽤ Register Global 問題

  47. 升級 PHP 7 - 處理它 • 導入 Code Review 原則

    • 導入持續整合並持續改善流程 • 以 TDD 的⽅法,重寫核⼼元件
  48. 放下它 • 導入容器、ORM 等套件 • 導入持續部署 • 持續改善、持續進化 • 團隊習慣讓⾃⼰更好、更強

  49. 凡不能殺死你的,最終都會 使你更強⼤ What Doesn't Kill You Makes You Stronger Turning

    Bad Breaks Into Blessings 威廉·尼采 Wilhelm Nietzsche
  50. ⼤綱 • 1) Legacy Code ? • 2) 我們與 Legacy

    搏⾾的故事 • 3) Live Demo: 搭配 PhpStorm 處理 Legacy
  51. PhpStorm 使⽤概況 • macOS 10.15.6 • PhpStorm 2020.1.3 • 套件:ideavim

    • Brew 安裝之 PHP 7.4.6 • 已設定完成 XDebug
  52. Demo - Topic • 1) 透過 PHPUnit - Trace Laravel

    Eloquent • 2) 簡單的 TDD 步驟 • 3) 處理 Global Variable • Demo Git Repo: • https://bit.ly/3hkAmC0 • Question Branch: master • Sample Branch: demo
  53. Demo 01 • PHPUnit With XDebug trace Eloquent Blueprint Code

    • test code: • tests/Unit/Demo01EloquentTest.php
  54. Demo 02 • TDD with PhpStorm • test code: •

    tests/Unit/Demo02PhpUnitSampleTest.php • production code: • app/Calculator.php
  55. Demo 03-De Legacy Code • test code: • tests/Feature/Demo03RefactorExampleTest.php •

    production code: • app/Legacies/Demo03Example01.php • app/Legacies/Demo03Global01.php • app/Legacies/Demo03Global02.php • app/Legacies/Demo03Global03.php
  56. 總結 • 重構,需要全團隊⼀同努⼒ • 為內部建立信⼼ • 透過測試案例讓專案更穩健

  57. 總結 • 讓⼯具幫助專案 • 不要讓⼿動編輯的時間,造成思緒斷片 • 善⽤⼯具減少不必要的「編輯」 • 推薦 91

    哥的「極速開發」
  58. • 後端⼯程師 • Angular 前端⼯程師 WE WANT YOU !! https://bit.ly/NovaxJobs

  59. Q & A https://bit.ly/NovaxJobs