답변:
Google은 내가 본 어느 곳에서나 최고의 코드 검토 관행을 보유하고 있습니다. 내가 만난 모든 사람들은 코드 검토를 수행하는 방법에 대해 완전히 동의했습니다. 진언은 "조기 검토"입니다.
Graham Lee가 제안한 것과 유사한 프로세스를 사용한다고 가정하십시오. (내가 이전에 사용한 프로세스는 무엇입니까?) 문제는 검토자가 큰 코드 덩어리를 보도록 요청 받는다는 것입니다. 그것은 훨씬 더 많은 노력이며, 검토 자들이 그렇게하기가 더 어렵습니다. 그리고 그들이 할 때, 그것을 철저히하는 것이 더 어렵습니다. 또한 디자인 문제가 발견되면 개발자가 작업 코드를 모두 개선하고 개선하기 위해 다시 돌아 가기가 더 어려워집니다. 당신은 여전히 물건을 잡아도 가치가 있지만 90 % 이상의 혜택이 누락되었음을 알 수 없습니다.
대조적으로 Google은 소스 제어에 들어가기 전에 모든 단일 커밋 에 대한 코드 검토를 수행 합니다 . 순진하게 많은 사람들은 이것이 무거운 과정이라고 생각합니다. 그러나 실제로는 그렇게 작동하지 않습니다. 작은 코드 조각을 개별적으로 검토하는 것이 훨씬 쉬워졌습니다. 문제가 발견되면 해당 디자인을 중심으로 많은 코드를 작성하지 않았기 때문에 디자인을 변경하는 작업이 훨씬 적습니다. 결과적으로 철저한 코드 검토가 훨씬 쉬워지고 변경된 문제를 훨씬 쉽게 수정할 수 있습니다.
구글처럼 코드 리뷰를하고 싶다면 (정말로 추천한다) 그렇게하는 데 도움이되는 소프트웨어가있다. Google은 Subversion과 Rietveld 로 통합 된 툴을 출시했습니다 . Go (언어)는 Mercurial과 함께 사용하도록 수정 된 Rietveld 버전으로 개발되었습니다. Gerrit git을 사용하는 사람들을 위해 다시 작성되었습니다 . 또한 Crucible 과 Review Board 라는 두 가지 상용 도구가 권장됩니다 .
내가 사용한 유일한 것은 Google 내부 버전의 Rietveld이며 매우 기뻤습니다.
여러 팀에서 사용한 기술은 다음과 같습니다.
검토를하는 것은 코드 작성자의 책임이며, 검토 된 코드 만 병합되도록하는 릴리스 지점 관리자의 책임입니다.
코드 검토를 지원하는 도구가 있지만 사용한 적이 없습니다. 병합에 대한 검토를 수행 한 사람을 추적하면 리포지토리 내에서 수행 할 수 있습니다. 누가 svn 속성과 perforce 작업을 사용하여 커밋에 첨부하여 누가 무엇을 검토했는지 보여줍니다.
커밋 된 / 커밋되지 않은 기준으로 검토 할 코드를 분리 한 적이 없습니다. 내가 만난 유일한 기준은 단위 테스트와 통합 테스트가 녹색이라는 것입니다.
추적과 관련하여 좋아하는 문제 추적기의 흐름을 업데이트하는 것이 좋습니다. 시험 대신 :
한 단계 더 소개하고 싶을 수도 있습니다 (검토).
따라서 구현 됨 상태의 모든 티켓에 대해 검토 자를 할당 할 수 있으며 검토 된 티켓 만 QA로 진행됩니다.
코드 검토 경험이 한 가지뿐이므로 얼마나 좋은지 말할 수 없습니다.
나는 작은 (~ 15-15) 코더 그룹과 함께 일하고 있었고 VS Team Foundation Studio를 사용하고있었습니다. 우리는 하루에 한 번 정도 코드를 커밋하라는 요청을 받았으며 각 커밋 코드를 그룹의 다른 누군가가 검토하기 전에 (바람직하게도 프로젝트에 참여한 누군가가). 커밋하는 동안 사람의 이름도 필드에 포함되었습니다.
나는 일주일에 두 번의 검토 기간 동안 변경 사항으로 체크인 된 모든 것을 코드 검토 한 팀에서 일했습니다. 이것은 우리가 코드 리뷰를 항상 최신 상태로 유지하지는 않았지만 달성하기 위해 설정 한 것을 달성했음을 의미합니다.
먼저 코드를 검토하여 달성하고자하는 것을 물어보십시오. 우리의 경우, 바보 개발자를 잡을 수 없었습니다. 무능함이 아니라 능력에 대한 가정이있었습니다. 이를 통해 팀은 시스템의 다른 영역에 대한 개요를 얻을 수있게되었으며, 의심스러운 설계 결정이 결정을 내리기 전에 수정 될 수있었습니다. 의문의 여지없이, 나는 항상 고양이를 껍질을 벗기는 방법이 하나 이상 있다는 것을 의미하며, 모든 사람들이 이미 도구 상자에 고양이 껍질을 벗기는 칼이 있다는 것을 알고있는 것은 아닙니다.
코드 검토 문제는 프로젝트 추적 소프트웨어의 모든 작업을 검토하는 것이 었습니다. 당시 우리는 Mantis와 SVN을 사용하고있었습니다. 우리의 프로젝트 커밋은 두 시스템에 묶여있었습니다. 모든 커밋은 사마귀의 과제에 묶여 있어야했습니다. 작업이 완료되면 "Ready for Review"상태가 할당되었습니다.
RFR 항목은 검토를 위해 자유 시간이 있거나 특정 사람에게 검토를 위해 할당 된 사람에 의해 수집되었습니다. 금요일에 모든 RFR 항목은 하루가 끝나기 전에 검토되어 다음 주로 이월되지 않았습니다.
이 프로세스에서 발생한 유일한 문제는 많은 파일이있는 큰 항목이었습니다. 이를 처리하기 위해 코더와 검토자는 함께 모여 검토자가 변경 사항을 이해할 때까지 변경 사항을 적용합니다. 그들은 코드 검토를 함께 할 것입니다.
피어 프로그래밍이 완료되면 별도의 코드 검토가 필요하지 않다는 경영진의 지시에 따라이 프로세스가 중단되었습니다. 개발자들은 프로세스에 대해 느슨해졌고 작은 어리석은 버그가 도입되기 시작했습니다. 결국 우리는 원래의 과정으로 돌아 갔고 일들이 함께 돌아 왔습니다.
우리 팀에서는 지난 1 년 동안 연습을 해왔으며 그 방법이 매우 효과적입니다.
우리 조직은 버전 제어를 위해 Perforce를 사용합니다. Perforce (1 년 전)에는 선반 기능이라는 기능이 포함되어 있습니다. 선반을 사용하면 특정 문제에 대한 변경 사항을 "선반"할 수 있습니다. 그것들은 버전 관리 시스템에 저장되었지만 체크인되지 않았습니다. 그런 다음 팀의 다른 개발자에게 코드를 검토하도록 요청합니다.
다른 개발자는 자신의 컴퓨터에서 Perforce의 보류중인 변경 사항을보고 변경 사항을 최신 개정판과 비교할 수 있습니다. 또한 내 변경 사항을 시험해보고 싶을 경우 자신의 로컬 컴퓨터를 "선반 해제"할 수도 있습니다. 검토를 마치면 알려주세요. 그런 다음 주석 끝에 "Bob이 검토 함"을 사용하여 코드를 체크인합니다.
이것은 우리에게 정말 효과적이었습니다. 우선, 코드 검토는 일반적으로 매우 유용한 것으로 입증되었습니다. 또한 Perforce의 선반 기능을 통해 팀이 지리적으로 널리 퍼져 있어도 체크인 또는 큰 어려움없이 리뷰를 수행 할 수 있습니다. 이는 매우 중요합니다. 그리고 그것은 잘 작동합니다.