이미지 출처
백명석님의 코드리뷰 강의를 듣고 작성한 글입니다.
코드 리뷰 목적
- 주목적은
품질 문제 검수
(버그, 장애)
- 추가적인 목적
- 아키텍처 속성 개선을 위해
코드를 개선
하는 것.
- 코드, 해결책 등과 관련된
지식 공유
에 기여하기 위함.
- 집단
코드 오너십 및 결속 증대
.
코드 리뷰가 어려운 이유
- 저자는 본인이 멋지다고 생각하는 PR을 보내고
- 리뷰어는 왜 멋지지 않은지에 대해 장황한 이유를 작성한다.
- 코드에 대한 비판을 자신에 대한 비판으로 이해한다.
- 피드백을 조심스럽게 표현하는 것이 중요하다.
그래서 어떻게 하라고 ?
1. 지루한 작업은 컴퓨터로 처리한다.
- 기계가 할 수 있는 것들
- 별도의 커밋, PR로 분리해 불필요하게 리뷰할 필요 없게 한다.
2. 스타일 가이드를 통해 스타일 논쟁을 해소한다.
3. 리뷰는 즉시 시작해라.
- 코드리뷰를
높은 우선 순위
로 둔다.
PR의 Size
와 Complexity
가 중요.
- 작고 범위가 좁은 PR ->
- 쉽고 상쾌하게 리뷰하기 좋음 ->
- 빠르게 리뷰 수행
- 리뷰 라운드의
최대 시간은 하루
- 우선 순위 높은 업무로 1일 내 불가하면 다른 리뷰어를 지정한다.
- 재지정이 자주 일어난다면, 그 팀의 일하는 속도를 고려해봐야한다.
4. 고수준으로 시작, 저수준으로 내려가라.
- 한 리뷰에 20~50개의 의견은 위험하다.
- 초기 라운드에서 고수준 피드백으로 제한한다.
- 인터페이스 클래스의 재설계, 복잡한 함수의 분리 등
- 고수준 피드백 처리된 후 저수준의 이슈를 처리한다.
5. 예제 코드 제공에 관대해라.
- 하지만, 너무 긴 예제를 제공하는 것은 억압적으로 보인다.
- 너무 많은 예제를 제공하는 것도 안좋아 보일 수 있다.
- 저자가 코드를 작성할 수 없다고 생각한다는 신호가 될 수 있다.
6. 절대 "너"라고 하지 마라. (=~님도 같다)
- 리뷰의 핵심은 코드가 나아지게 하기 위한 것.
- 너라고 하는 순간 비판의 대상은 저자가 된다.
- 단어가 틀린 경우
"너 스펠링 틀렸어 00" X
-> "스펠링만 정정"
- 주어만 빼라
7. 피드백은 명령이 아니라 요청으로 표현해라.
8. 의견이 아니라 원칙에 기반해서 피드백해라.
- 저자에게 의견을 줄 때는
"제안하는 변경"
과 "변경의 이유"
를 모두 설명해라.
- SW는 항상 원칙에 기반할 수는 없다.
- 단지 그냥 보기 싫거나 직관적이지 않을 수도 있음.
- 무엇을 할 수 있을지
객관적으로 설명
해라.
- 이거 너무 혼란스러워(X)
- 이건 이해하기 어렵다(O)
9. 한 두 등급만 코드레벨을 올리는 것을 목표로 한다.
- D 등급이면 C나 B 등급을 받도록 도와라.
- Working effective with legacy code
Make it work
, make it right, make it fast.
- 완전하지는 않아도 충분히 좋은 코드가 되도록 하면 된다.
- 승인을 보류하는 유일한 이유는 수차례 리뷰 후에도 코드가 F인 경우
10. 반복적인 패턴에 대한 피드백을 제한한다.
- 2~3개 정도만 언급하고 끝낼 것.
- 개별 사례가 아닌
패턴으로 언급할 것.
11. 리뷰의 범위를 존중한다.
- PR 범위에 대해서만 언급해라.
- 하지만 PR이 둘러싼 코드에 영향을 미칠 경우엔 언급한다.
12. 큰 리뷰를 잘게 나눌 기회를 찾아라.
- 400 라인 이상 리뷰는 작게 분리한다.
- 분리를 위한
논리적 경계를 식별
해 짐을 덜어준다.
- 여러 파일에 걸쳐 변경했다면, 파일별로 리뷰를 나눠라.
- 코드 품질이 낮을 때 특히 리뷰 분리를 강조한다.
- 품질이 낮은 코드 리뷰는 라인이 늘수록 리뷰하기 어려워지기 때문
13. 진정한 칭찬을 해라.
- 잘못된 부분만 리뷰하지 말고
긍정적인 행위
에 대해서도 PR 해라.
14. 사소한 이슈만 남았다면 승인해라.
- 모든 comment가 수정되는 걸 확인하고 나서야 승인하지 않아도 된다.
- 중요한 comment가 완료되었다면 승인해도 된다.
- 아래 조건 중 하나라도 만족되면 승인한다.
- 더 이상 comment가 없을 때
- 남겨진 comment가 사소한 이슈일 때 (오타 등)
- 남겨진 comment가 선택적 제안인 경우
- ex) 높은 수준의 리팩토링 / 디자인 패턴 적용 등
15. 교착상태를 적극적으로 처리해라
- comment를 반영하지 않고 승인 거부 하는 경우.
- 저자는 comment 반영을 거부하는 경우
- 인정이 불가한 경우
- 팀장이나 테크 리더에게 Escalation을 권유한다.
- 다른 리뷰어에게 할당
좋은 리뷰어가 되기 위한 방법
- 학습, 연습 뿐이다.
- 사례를 공유한다.
- Letter Grade
- Make it work / right / fast : working 할 정도로만 해라
- PR Template(Chrome Plugin 등)을 사용해라.
안하는 사람들을 어떻게 해야할까
- 자신에게 이득이 되어야 한다.
- Refactoring Tip을 공유한다.
Code Review 문화 정착의 어려움과 극복 방법
- On / Offline의 차이에서 오는 어려움
- 꾸중 vs 토론
- Online에서의 토론이 꾸중처럼 느껴질 수 있다.
- Author의 노력
- 작성자의 노력이 제일 중요하다.
- 어떻게 작성하느냐에 따라 다수의 리뷰어의 시간을 절약하고, 효과적인 리뷰가 가능하다.
- Leader의 관심과 의지가 필요하다.
- 코드 비난에 대한 두려움 -> 나에 대한 비난이 아니다.
PR 효과
- 예상 못한
버그
를 타 프로젝트에서 발견하기도 한다.
선플
이 달리기 시작함.
- 많은 사람이 코드를 보고 있다는 생각에 PR 올리기 전 코드를 더 다듬게 된다.
- 좋은 설계, 아키텍처, 클린코드, TDD 등에 대한 공감대가 형성된다.
기타
- 변경 내역이 많으면, 커밋을 의미있게 나눠서 한 경우
커밋 단위
로 봐달라고 요청을 하자
6번에 행심 -> 핵심 오타 났어요옹