SVN 트렁크에 투입되기 전에 코드를 검토하는 가장 좋은 방법은 무엇입니까? 내가 생각하고있는 한 가지 아이디어는 개발자가 지점에 코드를 커밋 한 다음 지점 개정을 트렁크에 병합하면서 코드를 검토하는 것입니다. 이것이 좋은 습관입니까? 그렇지 않은 경우 코드가 트렁크에 커밋되기 전에 코드를 검토하기 위해 무엇을 할 수 있습니까?
SVN 트렁크에 투입되기 전에 코드를 검토하는 가장 좋은 방법은 무엇입니까? 내가 생각하고있는 한 가지 아이디어는 개발자가 지점에 코드를 커밋 한 다음 지점 개정을 트렁크에 병합하면서 코드를 검토하는 것입니다. 이것이 좋은 습관입니까? 그렇지 않은 경우 코드가 트렁크에 커밋되기 전에 코드를 검토하기 위해 무엇을 할 수 있습니까?
답변:
그래도 두 가지 학교가 있습니다-당신이 제안하거나 "커밋하기 전에 검토". 차이의 대부분은 부정 및 / 또는 긍정적으로 볼 수 있습니다. -예를 들어, 검토로 인한 변경 사항 추적 없음-이 변경 사항을 개별 커밋으로 보시겠습니까, 아니면 최종 작업에만 관심이 있습니까?
커밋 전 검토-분기가 필요하지 않지만 (원하는 경우 수행 할 수 있지만) 검토 자에게 작업 폴더에 대한 액세스 권한을 부여해야합니다. 검토없이 추적 후 코드를 변경할 수 있습니다. 검토로 인한 수정 사항은 저장소에 나타나지 않습니다.
커밋 후 검토 (지점에서)-각 검토마다 분기를 회전해야합니다 (이것은 이미 워크 플로에있을 수 있음). 검토를 위해 제출 된 코드는 변경 사항을 추적하지 않고는 변경할 수 없습니다. 누군가는 검토 된 지점을 병합하고 검토 된 내용과 그렇지 않은 내용을 추적해야합니다.
팀 문화와 경험에 크게 의존합니다. 모델을 신뢰하는 것은 무엇이며 리뷰의 주요 목적은 무엇입니까? 검토 결과 변경 사항을 추적 할 수 있기 때문에 커밋 후 검토를 개인적으로 선호합니다. 우리는 이제 Git과 Gerrit를 사용하여 두 옵션 사이의 균형을 잘 잡습니다.
이상적인 세상이 있고 실제 세상이 있습니다.
에 이상적인 세계, 모든 코드는 당신이 확신 할 수 있도록, 테스트 그 뜻 저작물에 확인됩니다 또는 하나 개 이상의 테스트를 실패하기 때문에 당신이 생겼습니다 알 수 아무것도.입니다 또한 경험이없는 사람은 경험이있는 사람과 짝을 이룰 수 있으므로 코드 검토가 즉시 수행됩니다 (진행할 때 커밋).
에서 실제 세계 상황이 다르다. 비즈니스는 지금 그 변화를 원합니다완벽하게 똑바로 얼굴을 말하면 나중에 코드를 정리하고 테스트 사례를 추가 할 시간이 생깁니다. 코드를 검토 할 시간이 없을 것입니다. 테스트에서 다루는 코드의 비율이 지속적으로 줄어 듭니다. 코드 검토의 주된 이유는 주니어 개발자가 경험이 많은 사람이 변경 사항을 살펴보고 "더 나은 방법 (TM)"을 제안함으로써 상급 개발자로부터 배울 수 있기 때문입니다 (시간이있을 때). 선임 개발자가 검토되지 않은 코드를 커밋합니다. 코드 검토를 위해 분기 한 다음 병합하는 것은 엄청난 시간 낭비입니다. 이 문제를 극복하는 한 가지 방법은 주 단위로 2 시간 (또는 그 이상)의 정기적 인 팀 회의를 선언하여 사람들이 짧은 통지로 작업 한 최근 한두 가지 변경 사항을 선택하고 저자가 "현재"표시하도록하는 것입니다. 프로젝터 나 다른 코드에서 코드를 함께 보면서 접근하는 방식으로 흥미로운 토론이 나올 수 있지만 (일반적으로 주제를 많이 벗어난) 일반적인 방법으로 모든 사람의 이해를 향상시킵니다. 또한 코드를 제시해야한다는 압력으로 인해 사람들이 더 잘 수행 할 수 있습니다.
또는 운이 좋으며 그렇게 열악하지 않은 실제 환경에서 일할 수도 있습니다. 프로그래머는 실제로 학대 대신에하는 일에 대해 감사하고 모든 것을 올바르게 할 시간이 있습니다. 어떤 경우에는 제 대답은 다음과 같습니다. 여기에 답변에서 제안 된 다른 방법 중 일부를 시도하고 팀에 적합한 방법과 가장 적합한 방법을 확인하십시오.
지사는 사전 업무시 사전 커밋 검토에서 사용한 경험에 따라 제대로 작동해야합니다.
당시 우리는 프로덕션 릴리스 후보 코드에 대한 중요 패치에 대해서만 사전 커밋 검토를 사용하고 있었기 때문에 분기가 많지 않았습니다 (일반적인 변경 사항은 커밋 후 검토를 통해 전달됨).
모든 변경 사항에 대해 커미트 사전 검토를 사용하는 것처럼 보이므로 많은 분기를 관리해야합니다. 개발자가 일주일에 한 번 "검토 가능"변경을 기대할 경우 팀의 모든 개발자에 대해 매년 약 50 개의 지점을 갖게됩니다. 1, 2, 3 ... 일을 복용하는 것과 같이 작은 작업 덩어리를 사용하는 경우 50에 2, 3, 5 ...를 곱하십시오.
다음은 최선의 방법으로 원하는 경우 고려해야 할 몇 가지 사항 입니다.
코드 검토 마감일과 관련된 충돌을 설정, 모니터링 및 해결합니다. 과거 프로젝트 중 하나에서 처리 한 일상적인 변경 사항에 대한 사전 커밋 검토를 회상 할 때, 합리적인 마감일은 약 3 일이며 걱정할 시간은 제출 후 1 일 이상 검토가 완료되지 않은 시점입니다.
비교를 위해 커밋 후 검토에서 이러한 요구 사항이 훨씬 완화되었습니다 (2 주 기한을 사용하고 1 주 후에 걱정하기 시작합니다).하지만 커밋 전 검토를 대상으로하기 때문에 이것은 흥미롭지 않을 것입니다.
코드가 검토를 기다리는 동안 다른 사람이 저지른 변경 내용이 충돌하여 검토 된 코드에 대한 커밋이 차단 된 경우 어떻게해야합니까?
고려해야 할 몇 가지 옵션은 다음과 같습니다.
비교를 위해, 커밋 후 리뷰에는 이러한 종류의 문제가 없습니다 (이것은 이미 정의에 의해 병합 된 코드를 다루기 때문에)-커밋 전 리뷰를 대상으로하기 때문에 아마도 흥미롭지 않을 것입니다.
검토를 제출 한 개발자가 새 작업으로 전환해야하는지 또는 다른 작업 (예 : 추적자 검토)을 수행해야하는지에 대한 명시 적 정책을 설정하십시오.
비교를 위해 커밋 후 검토에는 명시 적 정책이 거의 필요하지 않습니다 (코드를 커밋하고 검토 마감일이 1 주일 또는 2 주라는 점을 고려한 후 다음 작업으로 진행하는 것이 당연하기 때문에). 그러나 커밋 전 검토를 대상으로하기 때문에 아마도 흥미롭지 않습니다.
검토가 필요한 모든 개발 부분은 별도의 지점에 있어야합니다. 따라서 검토 시점이되기 전에 지점이 이미 존재해야합니다. 그런 다음 단계는 다음과 같아야합니다.
병합은 어려운 일입니다. 지점이 독립적으로 오래 머무를수록 트렁크로 다시 병합하기가 더 어려워집니다. 테스트하기가 더 어려울 수도 있습니다.
교차 병합은 가능한 솔루션입니다. 트렁크에 병합하기 전에 (4 단계 또는 이전 단계, 즉 3 단계 또는 1 단계 이전) 트렁크를 분기에 병합합니다. 개발자는이를 수행하고 테스트 할 수 있습니다. 그런 다음 분기가 트렁크를 따라 잡고 트렁크로 병합하기가 더 쉬워집니다. 트렁크에 병합하는 것은 본인 또는 트렁크를 담당하는 사람이 수행하는 것이 가장 좋습니다.
일부 사람들은 교차 병합 대신 리베이스를 시도합니다. 어떤 사람들은 재난이 악하다고 주장합니다. 또 다른 토론입니다.