본문 바로가기

Crucible

코드 리뷰와 관련된 5가지 팁을 확인해 보십시요

거의 모든 조직에서 팀원들은 협업을 통해 업무를 완료합니다.

소프트웨어 팀에서는 일반적으로 코드 개발, 코드 검토, 테스트 같이 업무가 서로 다른 직원 간에 작업(문제)을 이전합니다 (모두 같은 팀 소속이어도 마찬가지).

 

팀원 간 문제를 이전할 때는 이전받는 사람이 문제에 대해 완벽히 이해하는 데 필요한 램프업(ramp-up) 양을 최소화하는 것이 중요합니다. 작업(문제) 이전은 팀원 한 명이 아닌 두 명의 시간이 필요하므로 많은 비용이 들 수 있습니다.

 


하지만 코드 검토는 소프트웨어 팀 사이에서 모범 사례에 해당합니다. 

 

코드 검토는 코드베이스의 정보를 배포하여 팀이 더욱 유연해지고, 기민해지며, 결함 포용력이 강화되는 데 도움이 됩니다. 코드베이스 지식이 팀 전체에 배포되기 때문에 팀이 코드베이스 전반에 걸처 진전을 이루는 데 팀원 중 누구도 장애물이 되지 않습니다.

 

코드 검토는 개별 지식을 보다 강력한 배포된 지식으로 바꿉니다.

 

 

그렇다면 어떻게 하면 팀원들이 다른 팀원에게 새로운 문제에 대해 효율적으로 쉽게 소개할 수 있을까요?

 

해결책은 적절한 문제 추적 관행입니다. 잘 알려진 문제는 모든 이력을 한 곳에 보관하여 모든 팀원들이 문제를 그 작업 항목에 대한 대시보드로 볼 수 있습니다. 이 대시보드를 만들고 팀원 간 이전 시간을 최소화하는 다섯 가지 핵심 관행을 살펴보겠습니다.

 

1. 완료에 대한 명확한 정의를 내려야 함

 

 

완료에 대해 일관성 있는 정의를 내리면 코드 작성자와 코드 검토자 사이에 명확한 경계가 생깁니다. 개발자들은 개발을 진행하며 보통 서로 협업합니다.

이는 좋은 일이며 팀이 문제를 해결하도록 권장되어야 합니다. 코드 완료의 의미에 관한 명확한 측정 기준이 있으면 검토자가 검토할 때 일관성 있는 기준과 품질 잣대를 갖게 됩니다.

 

결과적으로 JIRA로부터 검토를 요청하는 알림을 받는 사람은 해당 코드가 이미 체크인 및 빌드되었고, 일정 수준의 자동 테스트를 통과했음을 알 수 있습니다.

이를 통해 검토자는 시간이 잘 활용되고 있다는 확신을 갖게 됩니다. 악랄하게 빌드를 중단시키는 코드를 검토하는 것을 좋아하는 사람은 없습니다.

 

2. 명확한 조치를 취해야 함: 상태 및 양수인

 

코드 작성과 코드 검토는 서로 다른 별개의 작업입니다. JIRA 내부에 이 두 작업에 대해 각각 별도의 상태가 있으면 다른 팀원들이 쉽게 작업의 진행상황을 파악할 수 있습니다.

검토 대기 중인 코드는 체크인 및 빌드되어 자동 테스트를 통해 유효성이 검증된 것으로 알려집니다. 이를 다른 팀원들과 회사에 알리는 것이 중요합니다.

 

 

검토 과정에서 원래 문제의 양수인을 코드 검토자로 이전하는 팀도 있지만 검토자라는 맞춤 필드를 생성하고 이 정보를 추적하는 것을 선호하는 팀도 있습니다.

후자의 방법을 선택할 경우 JIRA 관리자는 개발자가 '진행 중'에서 '검토 중'으로 문제를 이전할 때 코드 검토자를 선택하는 화면을 추가할 수 있습니다.

 

ProTip: 팀에서 맞춤 필드의 검토자를 추적하는 경우 JIRA Agile의 기본 필터인 '내 문제만(Only My issues)'을 assignee=currentuser() 또는 reviewer = currentuser로 수정합니다.

 

 

JIRA 6.3의 경우 문제 추적이 개발의 기본 확장 기능이 됩니다. JIRA의 새로운 워크플로우 트리거 기능을 사용하면 상태 간 문제 업데이트 과정을 쉽게 자동화할 수  있습니다.

JIRA는 공통적인 개발자 조치를 잘 듣고 StashBitbucket, GitHub 뿐만 아니라 Subversion, Perforce, Mercurial with Crucible의 워크플로우를 업데이트합니다.

예를 들어, 개발자가 풀 요청(pull request: 코드리뷰 요청)을 생성하면 JIRA는 자동으로 문제를 '진행 중'(in progress)에서 '검토 중'(in review)으로 전환합니다. 그러면 해당 팀의 모든 팀원이 특정 시간에 문제의 상태를 알게 됩니다.

 

 

3. 도구 통합

 

 

JIRA는 Atlassian Marketplace를 통해 전체 Atlassian 도구 세트 뿐만 아니라 기타 많은 도구와 통합됩니다.

도구가 통합되면 검토자가 원 개발자의 작업 흐름을 따르는 것이 더 쉬워집니다. 문제와 관련있는 모든 애셋은 JIRA의 문제 세부정보 보기라는 곳으로 연결됩니다.

 

1. 맥락 알아보기: Confluence로 연결

 

많은 팀들이 Confluence를 사용하여 개념정의 단계의 요구사항을 추적합니다.

제품 소유자가 Confluence에서 JIRA로 요구사항을 불러오면 Confluence는 각각의 JIRA 문제에서 해당 요구사항이 언급된 페이지로 연결되는 링크를 생성합니다.

코드 검토자가 특정 기능이 구현된 이유에 대해 의문이 생길 경우 원래 사양으로 쉽게 돌아갈 수 있습니다.

 

 

 

Confluence 링크는 JIRA 링크 패널의 문제 링크 옆에 나란히 표시됩니다.

 

2. 코드 검증하기 – Bamboo

 

검토자는 코드가 확실히 컴파일되고 최소한 전체 기능 영역에 대한 자동 테스트를 통과할 것을 기대합니다.

JIRA 6.2의 전개판(development panel)은 코드가 제대로 빌드되었는지 검토자가 알 수 있도록 빌드 및 배포 상태로 풀(pull) 합니다.

 

 

분기 워크플로우당 문제를 사용하면 메인라인 분기로부터 개발자의 변경사항을 분리할 수 있습니다.

Bamboo는 개발자 또는 빌드/릴리스 팀의 인건비를 많이 발생시키지 않으면서 분기 빌드에 대해 완전한 검증을 실행할 수 있다는 점에서 차별화됩니다.

이를 통해 코드 검토자는 커밋 된(committed) 코드에 대해 올바른 테스트가 실행되었다는 것을 확인할 수 있습니다.

이 워크플로우는 Git의 간편한 분기 및 병합 기능과 페어링되어 있어 팀에 이상적입니다.

분기가 마스터로 병합되기 전에 쉽고 완벽하게 검증할 수 있습니다. 하위 버전팀(Subversion teams) 역시 CI로 이익을 얻습니다. 검증하고 검증하고 또 검증합니다.

 

3. 검토할 코드 보기 – Bitbucket/Crucible

 

마지막으로 코드 검토자는 검토해야 하는 코드에 쉽게 접근할 수 있어야 합니다.

JIRA의 개발 패널(development panel)에는 직접 접근을 위한 각 분기, 커밋, 풀 요청이 표시됩니다. 검토자는 마스터로 병합되지 않은 풀 요청과 같은 중요한 이력을 확인할 수 있습니다.

 

 

JIRA가 코드베이스에 연결되어 있어 검토자가 쉽게 문제의 코드를 보고, 전문적으로 정확히 맥락을 따져 댓글(Comments)를 남기며, 원 개발자에게로 다시 문제를 이전할 수 있습니다.

Git에는 Stash/Bitbucket, Subversion/Perforce/Mercurial에는 Crucible을 사용합니다.

 

4. @mentions 기능을 사용해 대화내용 한 곳에 보관하기

 

JIRA의 댓글(Comments)는 팀 전체의 협업 관련 내용을 기록하는 탁월한 방법입니다.

개발 중에는 자연히 질문이 나옵니다.

이메일보다 JIRA 내부에 이러한 대화내용을 보관하면 검토자가 개발 과정을 더 잘 파악할 수 있습니다.

 

 

JIRA 내부의 @mentions 기능을 사용하면 외부 당사자에게 의견이 필요하다는 알림이 JIRA로 연결되는 링크와 함께 전달되므로 JIRA  내에 대화내용을 쉽게 보관할 수 있습니다.

활동 패널에는 문제의 자세한 이력이 보관되어 조사가 용이합니다.

 

5. 올바른 문제 생성 용이하게 하기

 

개발자는 문제를 해결하는 데 필요한 올바른 정보를 제공하는 문제를 사용자가 쉽게 등록하도록 할 수 있습니다. JIRA의 탄력적인 REST API는 거의 모든 애플리케이션과 쉽게 통합될 수 있습니다. 따라서 애플리케이션이 로그를 업로드하고 중요한 환경 정보를 JIRA로 바로 보고할 수 있습니다.

 

로그를 가져오는 것은 보통 어렵고 시간 소모가 많은 과정이지만 개발자는 이 단계를 쉽게 자동화하여 해결하기 더 쉬운 문제를 만들 수 있습니다.

개발자의 상황맥락 정보가 풍부할수록 검토자의 상황맥락 정보 역시 풍부해지고 더욱 효과적인 검토가 가능합니다.

간단히 시작하세요. 문제 제기자가 애플리케이션에 입력하는 미리 지정된 JIRA 이슈키로 환경정보를 기록하는 방법을 구축하면 디버그하는 데 매우 유용할 수 있습니다.

 

또한 JIRA Capture는 마크업 뿐만 아니라 JIRA 문제에 대한 웹 환경정보가 포함된 고충실도 캡처 화면을 자동으로 추가하여 비전문 사용자도 JIRA 내부의 풍부한 개발정보를 가져오는 문제를 쉽게 생성할 수 있습니다.

 

이슈 추적 기능

 

이슈 추적 기능은 코드 검토자가 코드 검토에 사용할 수 있는 명확한 대시보드를 제공합니다. 코드 검토는 소프트웨어 개발의 모범사례로 널리 인식되어 있습니다.

팀에서 코드 검토가 너무 부담스러운 작업이라고 보고하는 경우에는 조직의 이슈 추적 시스템의 기본사항을 확인하세요.