Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

世成科技

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

進入主題

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Legacy Code

Slide 10

Slide 10 text

Legacy Code • 年代久遠

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

⾯對它

Slide 16

Slide 16 text

⾯對它 • 不要仇視它

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

接受它

Slide 22

Slide 22 text

接受它 • 導入單元測試

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

處理它

Slide 27

Slide 27 text

處理它 • 選⽤好的⼯具

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

放下它

Slide 32

Slide 32 text

放下它 • 保持正確的⼼態

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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