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 full-size slide

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

    View full-size slide

  3. 世成科技

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. 進入主題

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. Legacy Code
    • 年代久遠

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. ⾯對它
    • 不要仇視它

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  46. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  49. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide