×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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