---
# System prepended metadata

title: 程式碼審查有三大好處

---

## 程式碼審查有三大好處
1. 你可以找出一些bug
2. 每個人都會更加理解程式碼
3. 大家都會去寫出讓自己樂於分享的程式碼

---
### bug簽入到專案前，能夠先偵測出bug的存在
前提：實際上你能從程式碼審查過程中獲得多少價值，取決於你投入多少的時間和精力，以及你如何進行審查的做法
步驟

#### 步驟
1. 兩人在同台電腦前
2. 是非正式的。直接找人審查，不用流程
3. 審查者逐一檢視更動，被審查的則針對更動提供說明。
**這是一個對話過程**，審查者提問到都理解所做的更動，或者改動建議，需要測試的地方，還有替代做法...。由被審查者來推動審查過程，是不對的（因為審查者容易相信被審查者所說的，而非靠自己理解）
4. 被審查的要記錄所有建議更動，以及測試
5. 改動範圍可大可小，有時需要五分鐘甚至五小時...
6. 通常一次審查即可，但如果更動太大，就需要審查者重新審查

#### 找到bug的方式
1. 審查前先自己檢查所有更動
2. 透過程式碼與審查者交流，你會被強迫去解釋你的做法，這樣有助於你更理解自己的程式碼為什麼有缺陷
3. 審查過程中，審查者會看到你所遺漏的問題。這會在你描述自己所做的事情時，清楚的呈現誤解。然後針對問題取得共識。

在樣他人解釋東西和理解他人解釋過程中，審查者和被審查者之間如果有任何對不上的假設，在對話過程中很自然就會浮現出來。

### 程式碼審查是為了分享知識
如果每個程式設計師都能對程式碼庫不同部分的工作原理有基本的理解，那絕對是件好事


|  | 高階審查者 | 初階審查者 |
| -------- | -------- | -------- |
| 高階接受審查者     | 有用    | 有用     |
| 初階接受審查者     | 有用     | 無用     |

1. 高階審查初階：發現問題以外還可以釐清一些普遍存在的誤解（沒有遵守團隊統一格式，過早通用化解法，簡單問題複雜解決）
2. 初階審查高階：為了理解怎麼回事，而提出重要的問題，在回答過程中，被審查者就要協助審查者釐清前因後果。審查者也可以學到良好的程式碼範例
3. 高階審查高階，除了找出bug以外，還可以檢查兩個程式設計師在進行改動時，是否符合整體範圍的假設，甚至討論未來方向。

### 程式碼審查的真正價值
**如果你知道有人會查看你的程式碼，每個人都會更努力寫出更好的程式碼**

---
### 程式碼審查本質上就有社交面的效果
1. 你在解釋程式碼時，很容易發現其中bug
2. 你把程式碼解釋得很清楚，審查者下次調用時就能更確定的使用
3. 程式碼審查前，會先清除掉那些不想讓人看到的取巧做法
4. 接受審查者向你解釋他們所使用的技術時，很可能學到某種更簡單的方法做事

**被審查的人若不能敞開心胸聽取審查者的意見，就無法學到任何東西;審查者若不努力去理解，被審查者為何用他們的方式來寫程式碼，這樣大家都學不到東西**