코드 리뷰 시스템 소개

Preview:

Citation preview

코드 리뷰 시스템 소개

발표자 소개● 오픈소스를 수정해서 밥벌어 먹습니다.● 주로 임베디드 기기에서 사용되는 소프트웨어를 개발합니다.○ 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

● http://goo.gl/Z3mWx

Recommended