SlideShare a Scribd company logo
1 of 54
Download to read offline
不妥協的河蟹之道
你今天 code review 了嗎?
⾃自我介紹
• 阿官 - Ken Kuan
• Hooloop - Extreme Programmer
• 專注於
• iOS, Android, Scrum, CI, Testing
何謂不妥協的河蟹之道?
不妥協的軟體品質
和諧的⼯工作氣氛
軟體品質 ⼯工作氣氛
What is Code Review
• 就是程式碼審查
• 分為:
• 直接 review
• 透過⼯工具 (email, github)
• Pair Programming
低密度
⾼高密度時間⻑⾧長
時間短
直接
間接
How we review
Review!
GitFlow + GitHub
Live Demo
究竟,Code Review 如
何讓團隊不妥協⼜又和諧?
Code Review 三⼤大妙⽤用
• 改善團隊氣氛
• 強化團隊學習
• 維持軟體品質
Code Review 妙⽤用⼀一
改善團隊氣氛
情境模擬
• ⼀一早上班更新程式碼後,看到了些許錯誤,你該
怎麼辦呢?
A. 默默幫他改掉
B. ⾛走過去拍拍他肩膀
C. 裝作沒看到
A、默默幫他改掉
你 肇事者
B、⾛走過去拍拍他肩膀
• 你:經過⼀一番掙扎
開放式辦公室
肇事者⼼心理三部曲
真謝謝啊 夠了喔! 你針對我啊
C、裝作沒看到
• 肇事者 - 毫無影響
• 你 - 悶久了也會內傷
軟體品質低落
⻑⾧長此以往......
Code Review 如何解決上
述問題?
權⼒力 責任
權⼒力
• Code Review 賦予團隊成員 review code 的權
⼒力!
• 有沒有權⼒力差很多嗎?
賦予⽼老⿃鳥、菜⿃鳥同等權⼒力
Reviewer Author
讓我們回到剛剛的情境
• 程式碼都還沒進來
• 可以在系統上直接反應
A、默默幫他改掉
B、⾛走過去拍拍他肩膀
• 你、肇事者:⼀一切照規定來!
C、裝作沒看到
• Reviewer 不只是擁有 review code 的權⼒力,更有
認真 review 的責任
責任
• 賦予團隊成員 review 權⼒力的同時, reviewer 也擁
有承擔該段 code 的責任。
Code 的好壞,⼈人⼈人有責!
情境⼆二:⼯工程師最害怕
的夢魘
腥⾵風⾎血⾬雨的檢討會議
找出兇⼿手!
找出兇⼿手以後?
贏了⾯面⼦子,輸了裡⼦子
• 不犯錯 = 各⾃自為政
• 出了問題,找代罪羔⽺羊
以不犯錯為最⾼高指導原則
犧牲軟體品質!
難道,犯錯真的是肇事者
⼀一個⼈人的問題嗎?
Scrum
• 團隊!
責任分擔
• Reviewer 和 Author 同時 OWN 該段 code
• Reviewer 責任更⼤大
• 不再推卸責任
• 增加責任感
另⼀一個好處:信任
• reviewer 給予的建議,是為了產品更好
• ⾝身為 author ,也會更加信任 reviewer 的
feedback
• 培養團隊成員的信任感,達到良好的合作模式
最終⺫⽬目標:和諧
• 真正的和諧是⼀一起為了共同的⺫⽬目標⽽而努⼒力,⽽而⾮非
沈默通過⼀一個提案
• 責任、信任
• 指責 -> 解決問題
• 了解彼此個性
Code Review 妙⽤用 2
強化團隊學習
只有新⼿手需要學習?
• ⽼老⿃鳥更需要學習
軟體的開發技術與觀念與時俱進,往往不
到⼀一年就過時了!
⽼老⿃鳥學習的障礙
• 科學實驗指出:年紀⼤大學習慢不是因為⽣生理退化,
⽽而是因為被⾃自⾝身經驗、觀念束縛!
最好的學習⽅方式
• 看別⼈人寫的 code
如果沒有 code review
• 什麼時候會看別⼈人的 code ?
• 寫新功能剛好需要寫到
• Demo 出包,找戰犯修 bug 的時候
幾乎沒有!
學習最⼤大的動⼒力
強迫看 code
• 在責任感的驅使下,硬著頭⽪皮也要看懂
• 學習 > 指導
• 透過交流進⽽而理解別⼈人想法
Code Review 妙⽤用三
維持軟體品質
對 Code Review 的質疑
浪費時間?
code review 發現問題
的機率?
強化軟體品質
相當⾼高!
改善品質 = 節省時間
結論
• 改善團隊氣氛
• 強化團隊學習
• 維持軟體品質
有了 code review 以後
kenkuan@hooloop.com

More Related Content

What's hot

硬幣遊戲 Agile Summit 2018 side vent
硬幣遊戲 Agile Summit 2018 side vent硬幣遊戲 Agile Summit 2018 side vent
硬幣遊戲 Agile Summit 2018 side ventJen-Chieh Ko
 
Scrum Workshop - Paper Prototyping Game - for Girls in Tech
Scrum Workshop - Paper Prototyping Game - for Girls in TechScrum Workshop - Paper Prototyping Game - for Girls in Tech
Scrum Workshop - Paper Prototyping Game - for Girls in TechJonathan Chen
 
Scrum深入淺出
Scrum深入淺出Scrum深入淺出
Scrum深入淺出Taien Wang
 
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)Sylvia Yang
 
Scrum 開發流程導入經驗分享
Scrum 開發流程導入經驗分享Scrum 開發流程導入經驗分享
Scrum 開發流程導入經驗分享謝 宗穎
 
Common scrum issues
Common scrum issuesCommon scrum issues
Common scrum issuesJen-Chieh Ko
 
Agile1001 Open Course #1 (公开课) Scrum角色
Agile1001 Open Course #1 (公开课) Scrum角色Agile1001 Open Course #1 (公开课) Scrum角色
Agile1001 Open Course #1 (公开课) Scrum角色Bob Jiang
 
如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致Jen-Chieh Ko
 
Mopcon 2021 Scrum 是新的死亡行軍嗎?
Mopcon 2021   Scrum 是新的死亡行軍嗎?Mopcon 2021   Scrum 是新的死亡行軍嗎?
Mopcon 2021 Scrum 是新的死亡行軍嗎?Jen-Chieh Ko
 
Agile taichung 50個人跑scrum
Agile taichung 50個人跑scrumAgile taichung 50個人跑scrum
Agile taichung 50個人跑scrumTerry Wang
 
從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup
從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup
從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean StartupWen-Tien Chang
 
20150714 succeeding with agile
20150714 succeeding with agile20150714 succeeding with agile
20150714 succeeding with agileJen-Chieh Ko
 
如何將 Scrum 團隊轉換成 Kanban 團隊
如何將 Scrum 團隊轉換成 Kanban 團隊如何將 Scrum 團隊轉換成 Kanban 團隊
如何將 Scrum 團隊轉換成 Kanban 團隊Jen-Chieh Ko
 
Agile introduction
Agile introductionAgile introduction
Agile introductionJen-Chieh Ko
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?棋文 鄭
 
Agile meetuphsinchu201508 scrumvskanban
Agile meetuphsinchu201508 scrumvskanbanAgile meetuphsinchu201508 scrumvskanban
Agile meetuphsinchu201508 scrumvskanbanJen-Chieh Ko
 
有效面對技術債
有效面對技術債有效面對技術債
有效面對技術債Kirk Chen
 
客倌您好,有聽過scrum嗎? first time meeting scrum
客倌您好,有聽過scrum嗎?  first time meeting scrum客倌您好,有聽過scrum嗎?  first time meeting scrum
客倌您好,有聽過scrum嗎? first time meeting scrumSylvia Yang
 
How to set up new scrum team in company
How to set up new scrum team in companyHow to set up new scrum team in company
How to set up new scrum team in companyMike Li
 

What's hot (20)

硬幣遊戲 Agile Summit 2018 side vent
硬幣遊戲 Agile Summit 2018 side vent硬幣遊戲 Agile Summit 2018 side vent
硬幣遊戲 Agile Summit 2018 side vent
 
Scrum Workshop - Paper Prototyping Game - for Girls in Tech
Scrum Workshop - Paper Prototyping Game - for Girls in TechScrum Workshop - Paper Prototyping Game - for Girls in Tech
Scrum Workshop - Paper Prototyping Game - for Girls in Tech
 
Scrum深入淺出
Scrum深入淺出Scrum深入淺出
Scrum深入淺出
 
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
 
Scrum 開發流程導入經驗分享
Scrum 開發流程導入經驗分享Scrum 開發流程導入經驗分享
Scrum 開發流程導入經驗分享
 
Common scrum issues
Common scrum issuesCommon scrum issues
Common scrum issues
 
Agile1001 Open Course #1 (公开课) Scrum角色
Agile1001 Open Course #1 (公开课) Scrum角色Agile1001 Open Course #1 (公开课) Scrum角色
Agile1001 Open Course #1 (公开课) Scrum角色
 
如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致
 
Mopcon 2021 Scrum 是新的死亡行軍嗎?
Mopcon 2021   Scrum 是新的死亡行軍嗎?Mopcon 2021   Scrum 是新的死亡行軍嗎?
Mopcon 2021 Scrum 是新的死亡行軍嗎?
 
Agile taichung 50個人跑scrum
Agile taichung 50個人跑scrumAgile taichung 50個人跑scrum
Agile taichung 50個人跑scrum
 
從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup
從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup
從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup
 
20150714 succeeding with agile
20150714 succeeding with agile20150714 succeeding with agile
20150714 succeeding with agile
 
如何將 Scrum 團隊轉換成 Kanban 團隊
如何將 Scrum 團隊轉換成 Kanban 團隊如何將 Scrum 團隊轉換成 Kanban 團隊
如何將 Scrum 團隊轉換成 Kanban 團隊
 
Agile introduction
Agile introductionAgile introduction
Agile introduction
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
 
Agile meetuphsinchu201508 scrumvskanban
Agile meetuphsinchu201508 scrumvskanbanAgile meetuphsinchu201508 scrumvskanban
Agile meetuphsinchu201508 scrumvskanban
 
有效面對技術債
有效面對技術債有效面對技術債
有效面對技術債
 
五分鐘保證成功導入Scrum - 鐘點大師 HourMasters.com
五分鐘保證成功導入Scrum - 鐘點大師 HourMasters.com五分鐘保證成功導入Scrum - 鐘點大師 HourMasters.com
五分鐘保證成功導入Scrum - 鐘點大師 HourMasters.com
 
客倌您好,有聽過scrum嗎? first time meeting scrum
客倌您好,有聽過scrum嗎?  first time meeting scrum客倌您好,有聽過scrum嗎?  first time meeting scrum
客倌您好,有聽過scrum嗎? first time meeting scrum
 
How to set up new scrum team in company
How to set up new scrum team in companyHow to set up new scrum team in company
How to set up new scrum team in company
 

Similar to 不妥協的河蟹之道

Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除Chris Wang
 
Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門志龍 陳
 
Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CILiyao Chen
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路AgileCommunity
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Kirk Chen
 
數學系的資訊人生
數學系的資訊人生數學系的資訊人生
數學系的資訊人生Jintin Lin
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityPoga Po
 
Android快速发布&持续集成
Android快速发布&持续集成Android快速发布&持续集成
Android快速发布&持续集成whykill
 
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Poy Chang
 
Pair Programming (结对编程)
Pair Programming (结对编程)Pair Programming (结对编程)
Pair Programming (结对编程)Josh Chen
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜LI Daobing
 
Towards scrum of scrums
Towards scrum of scrumsTowards scrum of scrums
Towards scrum of scrumsPin-Ying Tu
 
unit test & performance optimization
unit test & performance optimizationunit test & performance optimization
unit test & performance optimizationSean Liu
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版Kirk Chen
 
The clean coder
The clean coderThe clean coder
The clean coderAndy Cheng
 
面試心得
面試心得面試心得
面試心得澐 向
 
2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?
2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?
2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?Miles Chou
 
Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手Piece Chao
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介Bo-Yi Wu
 

Similar to 不妥協的河蟹之道 (20)

Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除
 
Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門
 
Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CI
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
 
數學系的資訊人生
數學系的資訊人生數學系的資訊人生
數學系的資訊人生
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your Sanity
 
Android快速发布&持续集成
Android快速发布&持续集成Android快速发布&持续集成
Android快速发布&持续集成
 
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
 
Pair Programming (结对编程)
Pair Programming (结对编程)Pair Programming (结对编程)
Pair Programming (结对编程)
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜
 
Towards scrum of scrums
Towards scrum of scrumsTowards scrum of scrums
Towards scrum of scrums
 
unit test & performance optimization
unit test & performance optimizationunit test & performance optimization
unit test & performance optimization
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版
 
The clean coder
The clean coderThe clean coder
The clean coder
 
面試心得
面試心得面試心得
面試心得
 
2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?
2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?
2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?
 
Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手
 
Agile tour dojo c++
Agile tour dojo c++Agile tour dojo c++
Agile tour dojo c++
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 

不妥協的河蟹之道