작년에 심각한 품질 문제가 발생한 후 회사에서 최근 코드 검토를 도입했습니다. 가이드 라인이나 어떤 종류의 체크리스트없이 코드 검토 프로세스가 빠르게 도입되었습니다.
다른 개발자와 나는 시스템에 대한 모든 변경 사항을 트렁크에 병합하기 전에 검토하기로 결정했습니다.
우리는 또한 "기술 리드"로 선정되었습니다. 이는 코드 품질에 대한 책임이 있지만 프로세스 변경을 구현하거나 개발자를 재 할당하거나 프로젝트를 보류 할 권한이 없음을 의미합니다.
기술적으로 병합을 거부하여 다시 개발로 되돌릴 수 있습니다. 실제로 이것은 거의 항상 상사에게 제 시간에 배송되도록 요구합니다.
우리의 관리자는 다가오는 프로젝트 일정을 만드는 데 주로 관심이있는 MBA입니다. 그는 노력하는 동안 비즈니스 관점에서 소프트웨어가 무엇을하는지 거의 알지 못하며 개발자의 설명없이 가장 기본적인 고객 요구 사항을 이해하기 위해 고심하고 있습니다.
현재 개발은 SVN의 개발 지점에서 수행되며 개발자가 준비가되었다고 생각하면 티켓 시스템의 티켓을 관리자에게 다시 할당합니다. 관리자는 우리에게 그것을 할당합니다.
코드 검토로 인해 팀 내에서 긴장이 고조되었습니다. 특히 나이가 많은 회원 중 일부는 변경 사항에 의문을 제기합니다 (즉, "우리는 항상 이렇게했습니다"또는 "이 방법이 합리적인 이름을 가져야하는 이유는 무엇입니까?").
처음 몇 주 후 동료가 물건을 미끄러지기 시작하여 동료들에게 문제를 일으키지 않았습니다. 개발자가 지적한 것에 대해 그녀에게 화를 냈습니다).
반면에, 나는 현재 커밋 된 코드의 문제점을 지적하기위한 엉덩이로 유명합니다.
나는 내 기준이 너무 높다고 생각하지 않습니다.
현재 나의 점검표는 다음과 같습니다.
- 코드가 컴파일됩니다.
- 코드가 작동하는 적어도 하나의 방법이 있습니다.
- 이 코드는 대부분의 일반적인 경우에 작동합니다.
- 이 코드는 대부분의 경우와 함께 작동합니다.
- 삽입 된 데이터가 유효하지 않으면 코드에서 적절한 예외가 발생합니다.
그러나 나는 피드백을 제공하는 방식에 대한 책임을 전적으로 받아들입니다. 나는 왜 무언가가 왜 바뀌어야하는지, 때로는 왜 특정한 방식으로 왜 구현되었는지를 설명하는 실행 가능한 포인트를 제공하고 있습니다. 그것이 나쁘다고 생각하면 다른 방법으로 개발했을 것이라고 지적합니다.
내가 부족한 것은 "좋은"것으로 지적 할 무언가를 찾는 능력이다. 나는 나쁜 소식을 좋은 소식에 끼 우려 고 노력해야한다는 것을 읽었습니다.
그러나 나는 좋은 것을 찾기가 힘듭니다. "이번에 당신이 한 모든 일을 실제로 저지른 것"은 훌륭하거나 도움이되는 것보다 더 모호합니다.
코드 검토 예
조,
Library \ ACME \ ExtractOrderMail 클래스의 변경 사항에 대해 몇 가지 질문이 있습니다.
"TempFilesToDelete"를 정적으로 표시 한 이유를 이해하지 못했습니까? 현재 "GetMails"에 대한 두 번째 호출은 파일을 추가 한 후 삭제 한 후 절대로 제거하지 않기 때문에 예외를 발생시킵니다. 함수가 실행 당 한 번만 호출된다는 것을 알고 있지만 앞으로는 변경 될 수 있습니다. 인스턴스 변수로 만들면 병렬로 여러 객체를 가질 수 있습니다.
... (작동하지 않는 다른 점들)
사소한 포인트 :
- "GetErrorMailBody"가 예외를 매개 변수로 사용하는 이유는 무엇입니까? 내가 뭘 놓 쳤니? 예외를 던지지 않고 그냥 전달하고 "ToString"을 호출하면됩니다. 왜 그런 겁니까?
- SaveAndSend는 메소드의 이름이 아닙니다. 메일 처리가 잘못되면이 메소드는 오류 메일을 보냅니다. 이름을 "SendErrorMail"또는 이와 유사한 이름으로 바꿀 수 있습니까?
- 오래된 코드를 주석 처리하지 말고 삭제하십시오. 우리는 여전히 subversion에 있습니다.