Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP 也有 Day #50:處理前人的遺產—聊 legacy code
Search
Star Rocket
November 26, 2019
Programming
98
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP 也有 Day #50:處理前人的遺產—聊 legacy code
- 什麼是 legacy code
- 重構和重寫的選擇
- 避免寫出新的 legacy code
Star Rocket
November 26, 2019
More Decks by Star Rocket
See All by Star Rocket
PHP 也有 Day #51:高效能框架的曙光 - 以 Laravel 經驗開發 Hyperf 應用
starrocket
1
360
PHP 也有 Day #49:邊緣人救星!用 Laravel 打造私人定製的聊天機器人
starrocket
0
440
PHP 也有 Day #48:我是誰?我在哪?
starrocket
0
86
PHP 也有 Day #48:我是誰?我在哪?
starrocket
0
91
API-整合測試
starrocket
0
140
How we talk about Engineering Culture at Phase
starrocket
0
50
PHP 也有 Day #47:打造好維護的 PHP 程式碼專案
starrocket
0
380
全端起手就用 Laravel+Vue.js 現場實作給你看
starrocket
0
220
PHP 也有 Day #45: VS Code 實戰料理 PHP 套件網站佐 Azure Pipelines
starrocket
0
130
Other Decks in Programming
See All in Programming
5分で問診!Composer セキュリティ健康診断
codmoninc
0
560
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
520
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
150
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
330
フィードバックで育てるAI開発
kotaminato
1
120
継続モナドとリアクティブプログラミング
yukikurage
3
620
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
190
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
act1-costs.pdf
sumedhbala
0
240
Claude Team Plan導入・ガイド
tk3fftk
0
220
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.2k
Mind Mapping
helmedeiros
PRO
1
290
Tell your own story through comics
letsgokoyo
1
1k
Building Applications with DynamoDB
mza
96
7.1k
Believing is Seeing
oripsolob
1
170
Optimizing for Happiness
mojombo
378
71k
Marketing to machines
jonoalderson
1
5.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Code Reviewing Like a Champion
maltzj
528
40k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
410
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Transcript
處理前人的遺產 聊 legacy code
• 前人的遺產 • 重構 v.s. 重寫 • 開始重構 • 分析現況與進度
• 避免寫出新遺產
前人的遺產
工作不是只有 coding
$ whoami • 遊戲公司開發 • 小公司官網開發 • 廣告 DSP 系統開發
• 補習系統開發
什麼是 legacy code
None
什麼是 legacy code 年代久遠 結構龐大
什麼是 legacy code 經歷很多迭代 幾乎沒有文件
什麼是 legacy code (例外)
當 legacy 品質太差時的二選一
重構 v.s. 重寫
約耳趣談軟體(Joel on Software) • Microsoft Excel PM • Stack Overflow
CEO • Trello 作者
約耳趣談軟體 - 你絕對不應該做的事 之一 他們決定把程式從頭重寫過(Netscape)
None
然後就有了 Mozilla(?
重寫的問題
重寫的問題 風險 開啟專案成本
耗費時間 重寫的問題 市場變動
重寫的好處
自由度 重寫的好處 可測試性
有時候逼不得已 • 換語言(Java to PHP) • 換成不相容的框架(yii1 to laravel) •
⋯⋯etc 除了這些狀況之外,盡可能避免重寫整個專案
確認一下,為什麼要重構?
重構的原因 • 這樣程式碼比較簡潔 • 這樣才是好的工程做法
不要對主管這麼說
主管面對的問題 耗費時間成本 耗費人力成本
重構的原因 • 這樣程式碼比較簡潔 • 這樣才是好的工程做法 • 這樣之後修改更快(減少時間成本) • 這樣之後接手的人更好處理(減少人力成本)
長官聽不懂程式碼品質怎麼辦?
重構的原因 • 這樣之後修改更快(減少時間成本) • 這樣之後接手的人更好處理(減少人力成本) 不要聊程式碼品質
為什麼不聊程式碼品質 作為工程師 撰寫程式碼是你的工作,不是主管的工作
為什麼不聊程式碼品質 同理 作為工程師 維護程式碼品質是你的工作,不是主管的工作
開始重構
None
開始重構 先寫測試
先寫測試 不要為了重構,結果搞到離職
利用自動測試保護原有功能
可是舊有架構測試很難寫⋯⋯
先補上功能測試 在 legacy 上面加上測試
隨著重構逐漸補上單元測試 在 legacy 上面加上測試
開始重構
None
開始重構 先補文件
為什麼要先補文件 沒有文件,就算寫得多清楚,後來的人還是不懂 (包括未來的你)
最重要的文件是
README.md
README.md 檔案位置最明顯
README.md 每個人都會看到
README.md 要寫 • 專案用途 • 相依元件 • 建置方式 ◦ 本地
◦ 遠端 • 測試方式
其他文件
不放進 readme.md 的文件 放 repo wiki
不放進 readme.md 的文件 放 docs/ 資料夾
開始重構
分析現況與進度
分析現在的處境有多嚴重
回報重構進度
所謂的重構 就是不會有新功能的
所以 老闆會討厭你
不要為了重構,結果搞到得離職
怎麼辦
逐步改進
逐步改進 維持撰寫新功能(老闆按讚)
逐步改進 重構前人程式(包含測試,文件⋯⋯等)
時間的部分怎麼辦?
提升自己實力 效率不比一般工程師還差
提升自己實力 懂得說「不」
提升自己實力 維持專業
避免寫出新 legacy
避免寫出新 legacy (專案的)資訊並不想要自由
避免寫出新 legacy 開發者並不喜歡寫文件
避免寫出新 legacy 花時間維護文件
避免寫出新 legacy 時常和同事討論文件內容
避免寫出新 legacy 避免將功能塞入單一大專案
避免寫出新 legacy 建立方便修改的小專案
避免寫出新 legacy 時常和同事做 code review
避免寫出新 legacy 多溝通避免資訊遺失
• 花時間維護文件 • 時常和同事討論文件內容 • 建立方便修改的小專案 • 時常和同事做 code review
避免寫出新 legacy
None
tl;dr • 冷靜評估重構和重寫的風險與效益 • 重構之前先補測試和文件 • 隨時使用各種工具分析現況,確認重構進度 • 避免寫出新遺產
問答 • legacy code 的常見特徵(共四點) • 重構之前先補(共兩點) • 避免寫出新遺產(共四點)
問答 • legacy code 的常見特徵 ◦ 年代久遠 ◦ 結構龐大 ◦
經歷很多迭代 ◦ 幾乎沒有文件
問答 • 重構之前先補 ◦ 文件 ◦ 測試
問答 • 避免寫出新遺產 ◦ 花時間維護文件 ◦ 時常和同事討論文件內容 ◦ 建立方便修改的小專案 ◦
時常和同事做 code review
套件程式討論團
@ReccaChaoWebDev
網路技術討論區
投影片網址
None