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

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

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

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

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

mouson(墨嗓)

July 22, 2020
Tweet

More Decks by mouson(墨嗓)

Other Decks in Programming

Transcript

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

    View Slide

  2. About Me
    • 陳佑⽵,朋友都叫我墨嗓
    (Mouson)。專注於資訊科技整
    合、應⽤、開發⽅法及研究的T
    型⼈,現任 PHP 資訊系統分析
    師/⼈夫/⼀隻臘腸狗的爸爸/通⽤
    設計(Universal Design)推廣。
    平時喜好⽻球、登⼭及⼿沖咖
    啡。
    [email protected]
    • https://fb.me/mouson

    View Slide

  3. 世成科技

    View Slide

  4. 參加這場 Webinar 的⽬的?
    • 1) 想知道怎麼處理 Legacy
    • 2) 想了解 PhpStorm 可以帶來什麼幫助
    • 3) 聖佑辦的參加就對了

    View Slide

  5. 有多少⼈正在⽤ PhpStorm?
    • A) 正在⽤ PhpStorm
    • B) ⽤其他⼯具,正在評估是否使⽤

    View Slide

  6. 進入主題

    View Slide

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

    View Slide

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

    View Slide

  9. Legacy Code

    View Slide

  10. Legacy Code
    • 年代久遠

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. 怎麼處理 Legacy ?
    • ⾯對它
    • 接受它
    • 處理它
    • 放下它
    REF: 重構或重寫 Legacy code 的幾個階段
    https://jaceju.net/steps-of-refactoring-or-rebuilding/

    View Slide

  15. ⾯對它

    View Slide

  16. ⾯對它
    • 不要仇視它

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. 接受它

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 接受它
    • 導入單元測試
    • 導入持續整合 CI
    • 導入持續部署/發佈 CD
    • 導入 E2E ⾃動化測試
    • 重構 與 重寫 的選擇

    View Slide

  26. 處理它

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. 放下它

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. ⾯對它-概況
    • Apache 1.3
    • PHP 4.1.2
    • 核⼼為使⽤ C 編寫之 PHP Extension
    • PHP 程式碼超過 1,000 隻 PHP 程式
    • Lines of Code 超過 20 萬(單 PHP 未計算前端程式)
    • 使⽤常⾒的商⽤資料庫

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  39. View Slide

  40. 啟動 - 接受它
    • 建立 Issue Tracking System
    • 建立版本控制系統
    • 建立研發團隊⼯作流程 GitFlow

    View Slide

  41. 初期 - 接受它
    • 透過各種需求了解系統結構、架構
    • 初步升級 PHP 5.2.17 及核⼼元件
    • 依然沒有 namespace
    • 依然沒有 Package 可以⽤

    View Slide

  42. 中期 - 處理它
    • 導入單元測試,以測試描述規格
    • 導入 TDD 進⾏新功能開發
    • 持續針對重要核⼼演算法重構、補上測試

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. 升級 PHP 7 - 處理它
    • ⼤量修正使⽤ Register Global 問題

    View Slide

  47. 升級 PHP 7 - 處理它
    • 導入 Code Review 原則
    • 導入持續整合並持續改善流程
    • 以 TDD 的⽅法,重寫核⼼元件

    View Slide

  48. 放下它
    • 導入容器、ORM 等套件
    • 導入持續部署
    • 持續改善、持續進化
    • 團隊習慣讓⾃⼰更好、更強

    View Slide

  49. 凡不能殺死你的,最終都會
    使你更強⼤
    What Doesn't Kill You
    Makes You Stronger Turning
    Bad Breaks Into Blessings
    威廉·尼采
    Wilhelm Nietzsche

    View Slide

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

    View Slide

  51. PhpStorm 使⽤概況
    • macOS 10.15.6
    • PhpStorm 2020.1.3
    • 套件:ideavim
    • Brew 安裝之 PHP 7.4.6
    • 已設定完成 XDebug

    View Slide

  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

    View Slide

  53. Demo 01
    • PHPUnit With XDebug trace Eloquent
    Blueprint Code
    • test code:
    • tests/Unit/Demo01EloquentTest.php

    View Slide

  54. Demo 02
    • TDD with PhpStorm
    • test code:
    • tests/Unit/Demo02PhpUnitSampleTest.php
    • production code:
    • app/Calculator.php

    View Slide

  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

    View Slide

  56. 總結
    • 重構,需要全團隊⼀同努⼒
    • 為內部建立信⼼
    • 透過測試案例讓專案更穩健

    View Slide

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

    View Slide

  58. • 後端⼯程師
    • Angular 前端⼯程師
    WE WANT YOU !!
    https://bit.ly/NovaxJobs

    View Slide

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

    View Slide