코드 리뷰 시스템 소개
발표자 소개● 오픈소스를 수정해서 밥벌어 먹습니다.● 주로 임베디드 기기에서 사용되는 소프트웨어를 개발합니다.○ PC나 서버가 아닌 기기용 소프트웨어○ 아파트, 지하철 충전기, 광고 패널, 티켓 발권기, 셋탑박스, 교육용 로봇, 집 전화기, 휴대폰, 자동차, 기타 등등
● 제작년부터 코드리뷰 시스템을 써보게 되었습니다.
안드로이드 커밋 통계
정말로 구글러들은 외계인?
과연 그들은
고문당하고 있는 거신가?
Guido Van Rossum● Creator of Python● 한때 구글러
○ 2005 - 2012● 지금은
Dropbox에 Drop 되었습니다.
Guido할아부지의 첫번째 미션
Mondrian 이라는 코드 리뷰 시스템
을 만들었더랬죠.
코드 리뷰 시스템
코드 리뷰의 목적
It is intended to find and fix MISTACKES overlooked.
defined in Wikipedia
코드 리뷰의 목적
Goal is COOPERATION, not fault-finding.
Guido van Rossum
협력
코드 리뷰의 목적
Cooperation
Fault-finding
● 뭔가 좋은거 같긴 한데● 쓰이는데가 별로 없는 것 같애요.
코드 리뷰 시스템을 도입못하는 이유 (1)
그게 뭐하는 거임?
코드 리뷰 시스템을 도입못하는 이유 (2)
그걸 하느니 그 시간에 코드 한줄 더 짜겠심.
코드 리뷰 시스템을 도입못하는 이유 (3)
내가 뭘 하는지도 모르겠는데, 남의 걸 어떻게 봐줌?
Why?
귀찮아 죽겠는데 왜 저런걸 써라는 거지?
모두가 원하는 상황
하지만 현실은 시궁창.
코드 리뷰 시스템
코드 리뷰 시스템
코드 리뷰 도입시 얻을 수 있는 효과● 버그 개수 감소● 팀원의 트레이닝 도구로 활용● 코드 가독성 증가 및 품질 상승● 코드 세부 구현사항에 대한 기록 보존● 팀 역량 상향평준화● 디버깅 시간 및 프로젝트 수행 기간 단축
놀라운 효과!!!
놀라운 효과!!!!!!
사실 코드리뷰는...● Pair Programming 의 일종.○ COOPERATION○ 하지만 실시간으로 여러명이 붙어서 작업할 필요가 없다.
○ 시간날 때 코드를 올리고, 시간날 때 리뷰하면 된다.
코드 리뷰에 대한 오해● 코드 리뷰는 사람이 남아도는 프로젝트에만 적합한거 아닌가요?○ 사람 남아도는 프로젝트. 그런거 업따.○ 서로 다른 의견을 가진 사람이 리뷰할수 있기만 하면 됨.
○ 2명만 있어도 할 수 있다.
코드 리뷰에 대한 오해● 코드 리뷰는 초천재 미소년/미소녀만 할 수 있는거 아닌가요?○ 지금 당신이 바로 초천재 미소년/미소녀!!○ 못 알아보는 부분이라도 마킹해보자.○ 앞에서도 말했지만 코드리뷰의 목적은 잘못한 부분을 찾는 것이 아니라 COOPERATION.
코드 리뷰를 하는 법● 어렵지 않아요.
○ Re(다시, 다르게)○ View(살펴본다)
사실 여러분은 코드 리뷰를 이미 하고 있습니다.● 버그 잡을 때
○ 버그가 있다고 생각하지 않았을 때 코드를 바라보는 관점
○ 버그가 있다고 생각하고 코드를 바라보는 관점● 사실 관점을 다르게 볼 수 있다면 혼자서도 코드 리뷰가 가능
● 하지만 다중인격의 소유자가 아닌 이상, 2명이상 같이 하는게 좋습니다.
코드 리뷰에 대한 오해● 후다닥 처리해야 하는데 리뷰하면 시간만 까먹는거 아네요?○ 그러다가 된통 얻어맏고 야근야근 열매 섭취.○ 코드 리뷰에 투자하는 시간은 결코 배신하지 않습니다.
Gerrit
잠시 살펴보는 Gerrit의 족보
Mondrian● Written by Guido
van Rossum● Written with Python● Announced in 2006● Integrated with
Perforce● Hosted and Used at
Google Internal
RietVeld● Written by Guido van
Rossum● Written with Python● Announced in 2008● Integrated with
Subversion● Host on Google Ap
Engine● Used by Chrome
Project
Gerrit● Gerrit (2008 - 2012)
○ fork from Rietveld○ add Access Control
List feature○ Written by Sean O.
Pearce● Gerrit2 (2008 - )
○ Rewritten Gerrit with JavaEE
○ Written by Sean O. Pearce
○ Used by Android Project
Gerrit의 특징● 여러가지 환경에서 운영 가능
○ jvm이 설치되어 있으면 PC에서도 운영 가능○ 표준 servlet container 지원
● 여러가지 인증 방식 지원○ http/ldap/openid
● 여러가지 database 지원○ mysql/pgsql/h2
Gerrit의 기능● 소스 리뷰 게시판● Access Control List● Git 저장소
Gerrit의 인터페이스● for Human
○ WEB● for External Integration
○ ssh■ git■ gerrit
○ Rest API
DVCS(Hg, Git) Workflow
Remote Repository
User1's Local
Repository
fetch
pushpull request
commitmergerebase
User2's Local
Repository
fetch
pushpull request
commitmergerebase
Gerrit Workflow
Remote Git RepositoryUser1's
Local Git Repository
fetch
push
commitmergerebase
User2's Local Git
Repository
fetch
push
commitmergerebase Pending
Commit
Merge
Gerrit
Gerrit Detailed Workflowpush commit torefs/for/branch
gerrit notifyreviewers& verifiers
Onlinecode quality
review
IPReview Build
Comments& Votes
Run testcases
improves the change
merge the changeinto master
abandonsthe change
change approved
change not approved
flow from http://goo.gl/Kwcxo
Gerrit + Eclipse● Mylyn Gerrit Connector● Mylyn Reviews
DEMO
What's Next?● Search Slide about Gerrit in SlideShare!
○ How Git and Gerrit make you more productive?● Leaning git branch● Why Git is Better then Mercurial?● ProGit● Repo 써보기● Eclipse Mylyn Reviews
● http://goo.gl/Z3mWx