software quality assurance activity in which one or several humans check a program mainly by viewing and reading parts of its source code, and they do so after implementation or as an interruption of implementation. At least one of the humans must not be the code's author. 코드 리뷰가 답이다
• 오픈 소스 진영은 이미 코드 리뷰가 활성화 된 곳 • 코드 리뷰의 유경험자들 • 서버 개발 언어가 Python • 정적 분석을 통한 오류 검출이 힘든 언어 • 단순 오타 등의 자잘한 실수의 방지는 작업자 스스로 조심하는 것으론 한계가 있음 • 코드 리뷰 경험자들이 필요에 의해서 도입
언제 마련하고 있나요 → 리뷰 시스템 구성은 초반에 손이 많이 가긴 합니다. 하지만 GitLab, GitHub, Bitbucket 등 이미 좋은 도구들이 많으니 활용해 보시면 좋을 것 같습니다. → 몇가지 규칙을 지키면 개선될 수 있습니다 • 코드 한 줄 고쳤는데 반영되는데 이틀 걸렸어요 • 작업할 시간도 없는데 남이 짠 코드 언제 해독하고 있어요 저희가 어떻게 하고 있는지 한번 보여 드릴 게요
코드 파악이 어려워 리뷰어가 어렵기 때문에 리뷰가 너무 오래 걸리거나 리뷰가 충실하지 못함 • 리팩토링 할 땐 작업과 삭제를 분리하기 • 큰 작업은 인터페이스와 구현을 분리하기 ✗아이템에 xx 기능 추가 + 겸사 인벤토리 버그 수정 ✗퀘스트 시스템 ✓퀘스트 시스템 중 재발급 기능 구현
직접적으로 피드백 할 것 • 미사여구는 요점을 흐리고 리뷰를 방해할 뿐 • 스탠다드와 취향의 구분은 명확하게 • 취향을 드러내면 피드백을 주는 것이 나쁜 것은 아니지만 취향에 따른 의견임을 명확히 할 것 • 작은 코멘트(단순 실수 등)는 남기되 미리 Merge를 승인 할 것 • 핑퐁 횟수를 최대한 줄이기 위함
리뷰 잘 안해주는 사람을 지정하는 경향 • 리뷰 잘 해주는 사람을 지정하는 경향 • 잘 아는 사람 + 잘 모르는 사람 을 지정하는 것을 추천 (최소 2명) • 리뷰어의 집중을 방해하지 말아야 함 • 되도록 리뷰의 재촉은 금지하되 모두의 합의 하에 적당한 리마인드만 • 시급도가 높은 경우에만 별도로 호출 • 내 작업이 반영되는 속도가 늦어 지기 때문에 업무를 투트랙으로 진행하는 것을 추천
• 직접 기여하는 것이 물론 베스트 • 다른 사람들의 MR/PR을 구경하는 것도 도움이 된다 • 취미 프로젝트에서 사용해 보자 • 물론 2인 이상일 경우에 가능 • 형식적인 것처럼 느껴지고 어색하더라도 한번 해보자 • 페어 프로그래밍도 일종의 코드 리뷰 • 리뷰 시스템 도입이 힘들다면 페어 프로그래밍을 적극적으로 해보자
게임들 • 비용이 많이 들여 빨리 만든다 • 선택과 집중으로 원하는 재미 포인트만 빠르게 뽑아낸다 • 캐주얼 게임, 인디 게임 • 볼륨이나 리소스 퀄리티를 희생해서 비용을 낮추고 빨리 만든다 • 선택과 집중으로 속도를 희생한다 • 내가 취미로 만드는 게임 • 몇 년째 진척이 없다
• 쏟아지는 작업마다 일일이 문서를 쓰기엔 시간이 부족 • 리뷰 도구의 부재 • 문서 보관소에 문서처럼 작성하고 리뷰 → 리뷰용 도구가 없어서 리뷰가 불편 • 문서를 Git에 보관하고 코드 처럼 리뷰하는 것도 고려 • 어차피 위 문제가 해결이 안되기 때문에 실제로 해보지는 않음 • 결국 대규모 피처일 경우 문서화를 위해 쓰는 정도로 타협 → 원래 의도했던 기능은 수행하지 못하게 됨
미팅을 가지기 • 내가 앞으로 할 일에 대해 설명하고 피드백을 받기 • 스크럼 회의처럼 최대한 간결하게 설명 • 디테일을 이야기 하지 않는다 • 작업 방향에 쟁점이 생긴다면 회의 이후에 관련자들끼리 따로 논의 • 작업 비용에 대한 피드백을 받는 부가 효과 • 일정 예측이 정확해 진다 • 플래닝 포커 등 다양한 방법을 시도 중
해달라고 요청하기 • 의도 ✗ 특정 건축물을 여러 명이 때리면 데미지가 감소하게 해 주세요 ✓ 특정 건축물은 몇명이 때리던지 최소 일정 시간은 부서지지 않게 하고 싶어요 • 구현의 범위 ✗ 아이템을 소비하여 경험치를 올리는 시스템을 만들어 주세요 ✓ 어떤, 어떤 보상을 일정 구간마다 줘야 합니다 ✓ 경험치 올리는 속도를 올리는 상품을 팔 계획이 있습니다 • 구체적 예시 ✗ 아이템에 추가 성능을 붙일 수 있게 해주세요 ✓ 무기에 공격력과 내구도를 올릴 수 있게 해주세요
프로덕트에 따라선 별개의 역할로 존재하기 힘들 수도 • 새로운 게임을 만들 때 • 프로덕트가 크게 변화할 때 • 규모가 일정 이하의 팀일 때 • 별개의 포지션이 없다면 게임플레이 프로그래머가 하기에 가장 적합 • 적극적인 디자이너와의 소통으로 나의 경쟁력을 키워 보자 • 게임플레이 프로그래머의 리더/매니저가 되기 위해선 필수적인 소양