코드가 트렁크에 전달되기 전에 코드를 검토하는 가장 좋은 방법은 무엇입니까? (SVN)


14

SVN 트렁크에 투입되기 전에 코드를 검토하는 가장 좋은 방법은 무엇입니까? 내가 생각하고있는 한 가지 아이디어는 개발자가 지점에 코드를 커밋 한 다음 지점 개정을 트렁크에 병합하면서 코드를 검토하는 것입니다. 이것이 좋은 습관입니까? 그렇지 않은 경우 코드가 트렁크에 커밋되기 전에 코드를 검토하기 위해 무엇을 할 수 있습니까?


2
사전 커밋 검토를 지원하는 Crucible 과 같은 도구를 살펴볼 수 있습니다.
Gyan 일명 Gary Buyed

3
코드 가 트렁크에 커밋 된 코드를 검토하지 않는 이유 는 무엇입니까?
gnat

3
@gnat 글쎄, 주니어 개발자가 다른 곳에서 코드를 커밋 한 다음 수석 개발자가 변경 사항을 트렁크에 병합하여 변경 사항이 트렁크에 잘 들어가도록하는 것이 좋습니다. 선임 개발자는 트렁크에 직접 커밋 된 코드를 검토 한 후이 코드에 롤백해야 할 문제가 있다고 판단 할 수 있습니다. 우리는이 문제가되는 코드가 트렁크에 처음 커밋되는 것을 막을 수있었습니다. 그게 전부입니다.
Meysam

다른 방법으로 시도 했습니까? 아니면 그냥 추측입니까?
gnat

답변:


12

그래도 두 가지 학교가 있습니다-당신이 제안하거나 "커밋하기 전에 검토". 차이의 대부분은 부정 및 / 또는 긍정적으로 볼 수 있습니다. -예를 들어, 검토로 인한 변경 사항 추적 없음-이 변경 사항을 개별 커밋으로 보시겠습니까, 아니면 최종 작업에만 관심이 있습니까?

커밋 전 검토-분기가 필요하지 않지만 (원하는 경우 수행 할 수 있지만) 검토 자에게 작업 폴더에 대한 액세스 권한을 부여해야합니다. 검토없이 추적 후 코드를 변경할 수 있습니다. 검토로 인한 수정 사항은 저장소에 나타나지 않습니다.

커밋 후 검토 (지점에서)-각 검토마다 분기를 회전해야합니다 (이것은 이미 워크 플로에있을 수 있음). 검토를 위해 제출 된 코드는 변경 사항을 추적하지 않고는 변경할 수 없습니다. 누군가는 검토 된 지점을 병합하고 검토 된 내용과 그렇지 않은 내용을 추적해야합니다.

팀 문화와 경험에 크게 의존합니다. 모델을 신뢰하는 것은 무엇이며 리뷰의 주요 목적은 무엇입니까? 검토 결과 변경 사항을 추적 할 수 있기 때문에 커밋 후 검토를 개인적으로 선호합니다. 우리는 이제 Git과 Gerrit를 사용하여 두 옵션 사이의 균형을 잘 잡습니다.


1
지속적인 지점 생성과 반복 된 병합은 잠재적으로 (그리고 취소 할 수없는) 오염 트렁크를 능가하는 방해 요소입니다. 일반적으로 버전 관리를위한 주요 지시문은 "빌드를 중단하지 마십시오"입니다. 그렇게 할 수 있다면 체크인에 실질적인 해를 끼치 지 않으며 다른 모든 것은 사실 후에 조정됩니다.
스펜서 Kormos

분기에서 커밋 후 검토는 기능 분기를 사용하여 잘 작동합니다. 각 새 기능 또는 버그 수정에 대해 새 분기를 시작합니다. 완료되고 검토를 통과하면 트렁크에 병합됩니다. 이 방법으로 트렁크에는 검토 된 전체 변경 사항 만 포함됩니다. 기능 분기는 수명이 짧기 때문에 병합은 일반적으로 사소합니다. 또 다른 장점은 트렁크에 완전한 기능과 수정 사항 만 포함되어 있다는 것입니다. 절반 만 구운 것은 지점에만 존재합니다.
Stephen C. Steel

7
  1. 커밋하기 전에 'svn diff'를 실행하여 패치 파일을 생성하십시오.
  2. 깨끗한 트렁크 사본에 적용하는 검토 자에게 패치 파일을 보냅니다.
  3. 검토자는 선택한 차이 뷰어를 사용하여 변경 사항을 검토합니다.
  4. 검토자는 빌드를 수행하고 테스트를 실행합니다.
  5. 모두 제대로 진행되면 개발자에게 변경 사항을 확인할 수 있습니다.
    문제가 있으면 개발자는 1 단계로 돌아갑니다.

5

이상적인 세상이 있고 실제 세상이 있습니다.

이상적인 세계, 모든 코드는 당신이 확신 할 수 있도록, 테스트 그 뜻 저작물에 확인됩니다 또는 하나 개 이상의 테스트를 실패하기 때문에 당신이 생겼습니다 알 수 아무것도.입니다 또한 경험이없는 사람은 경험이있는 사람과 짝을 이룰 수 있으므로 코드 검토가 즉시 수행됩니다 (진행할 때 커밋).

에서 실제 세계 상황이 다르다. 비즈니스는 지금 그 변화를 원합니다완벽하게 똑바로 얼굴을 말하면 나중에 코드를 정리하고 테스트 사례를 추가 할 시간이 생깁니다. 코드를 검토 할 시간이 없을 것입니다. 테스트에서 다루는 코드의 비율이 지속적으로 줄어 듭니다. 코드 검토의 주된 이유는 주니어 개발자가 경험이 많은 사람이 변경 사항을 살펴보고 "더 나은 방법 (TM)"을 제안함으로써 상급 개발자로부터 배울 수 있기 때문입니다 (시간이있을 때). 선임 개발자가 검토되지 않은 코드를 커밋합니다. 코드 검토를 위해 분기 한 다음 병합하는 것은 엄청난 시간 낭비입니다. 이 문제를 극복하는 한 가지 방법은 주 단위로 2 시간 (또는 그 이상)의 정기적 인 팀 회의를 선언하여 사람들이 짧은 통지로 작업 한 최근 한두 가지 변경 사항을 선택하고 저자가 "현재"표시하도록하는 것입니다. 프로젝터 나 다른 코드에서 코드를 함께 보면서 접근하는 방식으로 흥미로운 토론이 나올 수 있지만 (일반적으로 주제를 많이 벗어난) 일반적인 방법으로 모든 사람의 이해를 향상시킵니다. 또한 코드를 제시해야한다는 압력으로 인해 사람들이 더 잘 수행 할 수 있습니다.

또는 운이 좋으며 그렇게 열악하지 않은 실제 환경에서 일할 수도 있습니다. 프로그래머는 실제로 학대 대신에하는 일에 대해 감사하고 모든 것을 올바르게 할 시간이 있습니다. 어떤 경우에는 제 대답은 다음과 같습니다. 여기에 답변에서 제안 된 다른 방법 중 일부를 시도하고 팀에 적합한 방법과 가장 적합한 방법을 확인하십시오.


주간 리뷰 아이디어에 +1 나는 이것을 시도해야 할지도 모른다
Jamie Taylor

@JamieTaylor : 글쎄, 그것은 약간의 타협입니다-분명히, 당신과 당신의 개발자 팀이 시간을 가지고 있다면, 대신 전체 코드 검토를 권합니다. 그러나 팀 내에서 지식을 공유하는 좋은 방법입니다.
Amos M. Carpenter

2

지사는 사전 업무시 사전 커밋 검토에서 사용한 경험에 따라 제대로 작동해야합니다.

당시 우리는 프로덕션 릴리스 후보 코드에 대한 중요 패치에 대해서만 사전 커밋 검토를 사용하고 있었기 때문에 분기가 많지 않았습니다 (일반적인 변경 사항은 커밋 후 검토를 통해 전달됨).

모든 변경 사항에 대해 커미트 사전 검토를 사용하는 것처럼 보이므로 많은 분기를 관리해야합니다. 개발자가 일주일에 한 번 "검토 가능"변경을 기대할 경우 팀의 모든 개발자에 대해 매년 약 50 개의 지점을 갖게됩니다. 1, 2, 3 ... 일을 복용하는 것과 같이 작은 작업 덩어리를 사용하는 경우 50에 2, 3, 5 ...를 곱하십시오.

다음은 최선의 방법으로 원하는 경우 고려해야 할 몇 가지 사항 입니다.

1. 검토 지연이 다른 팀 구성원에게 필요한 코드를 차단하는 경우의 처리 사례

코드 검토 마감일과 관련된 충돌을 설정, 모니터링 및 해결합니다. 과거 프로젝트 중 하나에서 처리 한 일상적인 변경 사항에 대한 사전 커밋 검토를 회상 할 때, 합리적인 마감일은 약 3 일이며 걱정할 시간은 제출 후 1 일 이상 검토가 완료되지 않은 시점입니다.

비교를 위해 커밋 후 검토에서 이러한 요구 사항이 훨씬 완화되었습니다 (2 주 기한을 사용하고 1 주 후에 걱정하기 시작합니다).하지만 커밋 전 검토를 대상으로하기 때문에 이것은 흥미롭지 않을 것입니다.

2. 검토 된 코드를 제출할 때 병합 충돌

코드가 검토를 기다리는 동안 다른 사람이 저지른 변경 내용이 충돌하여 검토 된 코드에 대한 커밋이 차단 된 경우 어떻게해야합니까?

고려해야 할 몇 가지 옵션은 다음과 같습니다.

  • 롤백을 시작하고 개발자가 변경 사항을 다시 구현하고 다시 검토하도록
    요구합니다.이 경우 팀 사기에 대한 부정적인 영향을 해결해야 할 수도 있습니다.
  • 병합 책임을 다른 팀 구성원에게 전달 ( "병합 마스터")
    이 경우 병합 자체가 사전 커밋 검토를 통과해야하는지 여부와 해당되는 경우 어떻게해야하는지 결정해야합니다. 그 합병은 또 다른 갈등을 만난다.
  • 병합 단계에서 검토 된 코드에 대한 변경 사항 무시이
    경우 커밋 된 코드가 검토 된 코드와 다르다는 사실과 관련하여 팀 사기에 부정적인 영향을 주어야 할 수 있습니다.
  • 충돌을 피할 수있는 방법을 개발합니다.
    간단한 접근 방식은 한 번에 한 명의 개발자 만 특정 파일 세트를 수정할 수 있도록하는 것입니다. 파일을 직접 수정하지는 않지만 내부 API 변경을 통해 파일에 영향을주는 변경으로부터 사용자를 보호하지는 않습니다. . 이런 종류의 "비관적 잠금"은 시스템 전체의 변경과 깊은 리팩토링을 매우 번거롭게한다는 것을 알 수 있습니다.

비교를 위해, 커밋 후 리뷰에는 이러한 종류의 문제가 없습니다 (이것은 이미 정의에 의해 병합 된 코드를 다루기 때문에)-커밋 전 리뷰를 대상으로하기 때문에 아마도 흥미롭지 않을 것입니다.

3. 검토 대기중인 개발자로드

검토를 제출 한 개발자가 새 작업으로 전환해야하는지 또는 다른 작업 (예 : 추적자 검토)을 수행해야하는지에 대한 명시 적 정책을 설정하십시오.

비교를 위해 커밋 후 검토에는 명시 적 정책이 거의 필요하지 않습니다 (코드를 커밋하고 검토 마감일이 1 주일 또는 2 주라는 점을 고려한 후 다음 작업으로 진행하는 것이 당연하기 때문에). 그러나 커밋 전 검토를 대상으로하기 때문에 아마도 흥미롭지 않습니다.


0

검토가 필요한 모든 개발 부분은 별도의 지점에 있어야합니다. 따라서 검토 시점이되기 전에 지점이 이미 존재해야합니다. 그런 다음 단계는 다음과 같아야합니다.

  1. 리뷰
  2. 수정 (아마도)
  3. 검토로 돌아 가기 (아마도)
  4. 트렁크로 병합

병합은 어려운 일입니다. 지점이 독립적으로 오래 머무를수록 트렁크로 다시 병합하기가 더 어려워집니다. 테스트하기가 더 어려울 수도 있습니다.

교차 병합은 가능한 솔루션입니다. 트렁크에 병합하기 전에 (4 단계 또는 이전 단계, 즉 3 단계 또는 1 단계 이전) 트렁크를 분기에 병합합니다. 개발자는이를 수행하고 테스트 할 수 있습니다. 그런 다음 분기가 트렁크를 따라 잡고 트렁크로 병합하기가 더 쉬워집니다. 트렁크에 병합하는 것은 본인 또는 트렁크를 담당하는 사람이 수행하는 것이 가장 좋습니다.

일부 사람들은 교차 병합 대신 리베이스를 시도합니다. 어떤 사람들은 재난이 악하다고 주장합니다. 또 다른 토론입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.