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
58
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
230
PHP 也有 Day #49:邊緣人救星!用 Laravel 打造私人定製的聊天機器人
starrocket
0
320
PHP 也有 Day #48:我是誰?我在哪?
starrocket
0
47
PHP 也有 Day #48:我是誰?我在哪?
starrocket
0
43
API-整合測試
starrocket
0
89
How we talk about Engineering Culture at Phase
starrocket
0
29
PHP 也有 Day #47:打造好維護的 PHP 程式碼專案
starrocket
0
220
全端起手就用 Laravel+Vue.js 現場實作給你看
starrocket
0
170
PHP 也有 Day #45: VS Code 實戰料理 PHP 套件網站佐 Azure Pipelines
starrocket
0
78
Other Decks in Programming
See All in Programming
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
700
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
170
ヤプリ新卒SREの オンボーディング
masaki12
0
130
初めてDefinitelyTypedにPRを出した話
syumai
0
420
Arm移行タイムアタック
qnighy
0
340
イベント駆動で成長して委員会
happymana
1
340
React への依存を最小にするフロントエンド設計
takonda
12
2.7k
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
170
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
120
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
260
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
150
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Documentation Writing (for coders)
carmenintech
65
4.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Into the Great Unknown - MozCon
thekraken
32
1.5k
Music & Morning Musume
bryan
46
6.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
KATA
mclloyd
29
14k
Ruby is Unlike a Banana
tanoku
97
11k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
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