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

  1. 작성자는 변경점을 작성하고, 스냅샷을 생성하여 코드리뷰 툴에 업로드한다.
  2. 작성자는 자동 검토 주석 등을 활용하여 사전 검토 후, 변경 사항을 검토자에게 메일로 전송하여 검토자가 확인 후 댓글을 달 수 있도록 요청한다.
  3. 검토자는 코드리뷰 툴에서 변경사항을 확인 후, 의견을 게시한다. 의견은 명시적 해결을 요청하거나, 단순 정보 제공일 수 있다.
  4. 작성자는 변경 사항을 수정하고 피드백을 기반으로 새 스냅샷을 업로드한 뒤, 검토자에게 다시 응답한다. (3,4 단계의 반복)
  5. 검토자는 변경 사항의 최종 상태에 만족하면, 변경 사항에 동의 후, "Look Good To Me (LGTM)" 표시 후 수락. 기본적으로 1 개의 LGTM이 요구되지만, 관례적으로 모든 검토자의 동의를 필요로 한다.
  6. 모든 주석을 해결하고 변경 사항이 승인되어 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
    • 구글에서는 대부분 대규모 변경에 대해 변경사항 자동 생성
    • 자동 프로세스 또한 검토가 필요함