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
0
59
PHP 也有 Day #50:處理前人的遺產—聊 legacy code
- 什麼是 legacy code
- 重構和重寫的選擇
- 避免寫出新的 legacy code
Star Rocket
November 26, 2019
Tweet
Share
More Decks by Star Rocket
See All by Star Rocket
PHP 也有 Day #51:高效能框架的曙光 - 以 Laravel 經驗開發 Hyperf 應用
starrocket
1
240
PHP 也有 Day #49:邊緣人救星!用 Laravel 打造私人定製的聊天機器人
starrocket
0
330
PHP 也有 Day #48:我是誰?我在哪?
starrocket
0
47
PHP 也有 Day #48:我是誰?我在哪?
starrocket
0
44
API-整合測試
starrocket
0
90
How we talk about Engineering Culture at Phase
starrocket
0
30
PHP 也有 Day #47:打造好維護的 PHP 程式碼專案
starrocket
0
240
全端起手就用 Laravel+Vue.js 現場實作給你看
starrocket
0
170
PHP 也有 Day #45: VS Code 實戰料理 PHP 套件網站佐 Azure Pipelines
starrocket
0
80
Other Decks in Programming
See All in Programming
Bedrock Agentsレスポンス解析によるAgentのOps
licux
3
850
GoとPHPのインターフェイスの違い
shimabox
2
190
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
920
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
150
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
1
580
Honoとフロントエンドの 型安全性について
yodaka
7
1.3k
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
170
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
9
1.8k
Djangoにおける複数ユーザー種別認証の設計アプローチ@DjangoCongress JP 2025
delhi09
PRO
4
200
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
5
390
ファインディの テックブログ爆誕までの軌跡
starfish719
2
1.1k
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Side Projects
sachag
452
42k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
450
A Tale of Four Properties
chriscoyier
158
23k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
How to Ace a Technical Interview
jacobian
276
23k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Scaling GitHub
holman
459
140k
Navigating Team Friction
lara
183
15k
A Modern Web Designer's Workflow
chriscoyier
693
190k
GraphQLとの向き合い方2022年版
quramy
44
13k
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