DEVELOPMENT/DX&DC
Software Engineering at Google : CHAPTER 9
heeble
2023. 10. 6. 15:03
본 포스팅은 "Software Engineering At Google"을 읽고 작성되었습니다.
출처: Software Engineering At Google - Chapter 9
Chapter 9 : Code Review
Code Review Flow
- 작성자는 변경점을 작성하고, 스냅샷을 생성하여 코드리뷰 툴에 업로드한다.
- 작성자는 자동 검토 주석 등을 활용하여 사전 검토 후, 변경 사항을 검토자에게 메일로 전송하여 검토자가 확인 후 댓글을 달 수 있도록 요청한다.
- 검토자는 코드리뷰 툴에서 변경사항을 확인 후, 의견을 게시한다. 의견은 명시적 해결을 요청하거나, 단순 정보 제공일 수 있다.
- 작성자는 변경 사항을 수정하고 피드백을 기반으로 새 스냅샷을 업로드한 뒤, 검토자에게 다시 응답한다. (3,4 단계의 반복)
- 검토자는 변경 사항의 최종 상태에 만족하면, 변경 사항에 동의 후, "Look Good To Me (LGTM)" 표시 후 수락. 기본적으로 1 개의 LGTM이 요구되지만, 관례적으로 모든 검토자의 동의를 필요로 한다.
- 모든 주석을 해결하고 변경 사항이 승인되어 LGTM으로 표시된 후, 작성자는 코드베이스에 변경 사항을 커밋할 수 있다.
How Code Review Works at Google
- 변경 사항에 대해 '승인'이 필요한 검토의 세 가지 관점
- 코드가 적절하고, 작성자가 주장하는 기능을 수행하는지
- 수정된 코드가 베이스 코드의 특정 부분에 적합하다는 코드 소유자 중 한 사람의 승인 (작성자가 코드 소유자인 경우 이 승인은 암시적)
- 코드의 작성 방식 (가독성)
- 실제로 둘 이상의 승인이 필요한 대부분의 코드리뷰는 동료 엔지니어로부터 LGTM을 얻은 다음 적절한 코드 소유자/가독성 검토자의 승인을 요구하는 2단계를 거침
- 이를 통해 두 역할이 코드 검토의 서로 다른 측면에 집중하고 검토 시간을 절약할 수 있음
- 1차 검토자는 코드 정확성과 코드 변경의 일반적인 유효성에 집중
- 코드 소유자는 코드의 가독성을 검토 (단순한 이해가 아니라 유지 관리/기술 부채의 측면에서 검토
Code Review Benebit
- Checks code correctness ( 코드 정확성 )
- Ensures the code change is comprehensible to other engineers (코드 변경점에 대한 이해를 보장)
- Enforces consistency across the codebase (베이스코드의 일관성 유지)
- Psychologivally promotes team ownership (팀 오우너십 촉진)
- Enables knowledge sharing (지식 공유)
- Provides a historical record of the code review itself (코드 검토 자체에 대한 기록 제공)
Code Review Best Practices
- Be Polite and Professinal (공손하고 전문적으로)
- Write Small Changes (변경점은 최소한)
- Write Good Change Descriptions (좋은 변경 사항 설명)
- Keep Reviewers to a Minimum (검토자를 최소한으로 유지)
- Automate Where Possible (가능한 경우 자동화)
Types of Code Reviews
- Greenfield Code Reviews
- 완전히 새로운 코드 (그린필드 검토)
- 구글의 경우 광범위한 설계 검토를 받도록 요구
- Behavioral Changes, Improvements, and Optimizations
- 대부분의 변경 사항 (기존 코드에 대한 광범위한 수정)
- API 엔드포인트에 대한 수정, 기능 개선, 성능 향상 등
- 이 변경이 필요한가요? 이 변경으로 코드베이스가 향상됩니까?
- Bug Fixes and Rollbacks
- 버그 수정을 위한 변경사항
- 표시된 버그를 수정에만 집중
- Refactorings and Large-Scale Changes
- 구글에서는 대부분 대규모 변경에 대해 변경사항 자동 생성
- 자동 프로세스 또한 검토가 필요함