코드 검토에서 의견을 작성하는 가장 좋은 방법은 무엇입니까?


13

우리 팀은 우리 중 누군가가 체크인 할 때마다 코드 검토를 시작하기 위해 도가니 / 어안을 사용하기 시작했습니다. 우리 중 3 명만이 있으며, 코드를 검토하고 적절한 위치에 의견을 남기도록 권장합니다.

제 질문은 문제가있는 코드 줄에 어떻게 주석을 남기는 것입니까? 거친 것처럼 보이지 않고 요점을 파악하고 싶습니다.

나는 높은 말을 타고있는 것처럼 보이고 싶지 않다. " 나는 이런 식으로하고있다 ... 그리고 나는 권위를 갖고 노력하는 것처럼 보이고 싶지 않다. " 이런 식으로해야합니다 ... "하지만 여전히 그들이하는 일이 그리 좋지 않다는 점을 지적해야합니다.

명확히하기 : 이것은 내가 검토 하고자하는 것에 대한 정말 좋은 자료입니다 . 코드 검토는 주관적이거나 객관적입니까 (정량화 가능)? 에 댓글을 달 수있는 방법 을 찾고 있습니다.


2
FishEye와 Crucible (내가 가장 좋아하는 도구는 btw)이라는 이름을 던지는 것 외에는 여기에 프로그래밍에 대한 내용이 없습니다. 건설적인 피드백을 제공하는 방법
gnat


@caleb, 나는 동의하지 않습니다. 이것은 다른 스레드보다 주석을 표현하는 방법에 관한 것입니다.
HLGEM

1
@HLGEM 나는 그것이 제안 된 속임수에 관한 것입니다 : "어떻게 재치있게 제안 할 수 있을까요 ...". 일반적으로 스타일이나 개인 취향이 아닌 검토중인 코드에 존재하는 문제를 해결하는 데 중점을 둡니다. 당신의 제안이 어떻게 코드를 향상시키는 지 설명하십시오.
Caleb

@stinkycheeseman은 다른 사람들에게 당신의 방식이 더 낫다는 것을 알립니다. 팀원은 프로세스를 통해 무언가를 배우게됩니다.
upton

답변:


8

글쎄, 나는 몇 가지 일반적인 영역에서 의견을 말하는 경향이 있으며 각 유형은 다르게 처리 될 수 있습니다.

필요한 변경. 이것은 코드가 기능적 요구 사항을 충족하지 않거나 작동하지 않으며 프로덕션 환경으로 넘어 가기 전에 수정해야한다는 것을 지적하는 종류의 변경입니다. 나는이 의견들에 대해 매우 솔직한 경향이있다. 요구 사항은 ..., 그렇지 않습니다. 또는 전송 된 값이 null 인 경우 (특히 전송 된 데이터를 기반으로 해당 사례가 발생한다는 것을 알면) 실패합니다.

그런 다음 "이 작동하지만 여기에 더 나은 방법이 있습니다"라는 의견이 있습니다. 당신은 이것들에 대해 더 친절해야하고 더 많은 판매 피치를해야합니다. 성능이 향상 될 가능성이 있기 때문에 대신이 작업을 수행한다고 말할 수도 있습니다 (일반적으로 성능이 매우 중요한 SQL 코드를 검토합니다). 스택 오버플로에 대한 질문에 대답하는 것처럼 왜 더 나은 선택인지에 대한 세부 정보를 추가 할 수 있습니다. 이 특정 코드에 대해 이것을 변경할 필요는 없지만 향후 코딩의 변경을 고려해야한다고 지적 할 수 있습니다. 기본적으로 이러한 유형의 의견을 통해 더 잘 작동하는 것에 대한 경험이 적은 사람들을 교육하고 있습니다.

그런 다음 "이 작동하지만 우리는 이런 식으로 일을합니다"라는 의견이 있습니다. 이것들은 아마도 변경이 필요할 것입니다. 여기에는 회사 표준 또는 우리가 사용할 것으로 예상되는 아키텍처에 대한 의견이 포함됩니다. 표준 또는 아키텍처 문서를 참조하여 표준에 맞게 수정하도록 지시합니다. 주석은 간단하지만 중립적이므로 주석이 누락되었거나 변수 이름이 명명 표준이나 유사한 것을 따르지 않습니다. 예를 들어, SSIS 패키지의 아키텍처는 패키지에 대한 메타 데이터 데이터베이스를 사용하여 패키지에 대한 특정 정보를 저장하고 특정 로깅이 필요합니다. 패키지는 이러한 작업없이 작동하지만 회사의 이유로 필요합니다 (예 : 수입 성공률을보고하거나받는 오류 유형을 분석해야 함).

코드 검토 주석에서 원하지 않는 한 가지는 개인적으로 누군가를 공격하는 것입니다. 또한 그들이 잘한 것을 발견하고 그것이 좋았다고 지적하면 도움이 될 수 있습니다. 때로는 코드 검토에서 새로운 것을 배우고 내가 한 경우 그 사람에게 말합니다.


1
3 번 단락 : 저의 경험은 더 나은 기술을 설명 하는 것만으로 는 충분하지 않다는 것입니다 (명확하지 않은 한). 그들이 혜택을 충분히 이해하고 신자가되기 전에 종종 코드를 다시 작성해야합니다. 댓글 전용 검토 시스템에서는이 작업을 수행하기가 어렵습니다. 당신은 "나를 만나고 우리가 그것을 논의 할 것이다"로 의견을 마무리해야 할 수도 있습니다. 그것을 가치있게 만듭니다.
mcmcc

@mcmcc, 그것은 공평한 점이거나 비슷한 기술이 사용되는 코드의 다른 곳을 참조 할 수 있습니다. 나는 보통 사소한 것이 아니라면 주석을 사용하여 실제 토론을 시작합니다.
HLGEM

6

코드가 코딩 표준을 준수하지만 코드가 잘못되었는지 직접 확인해야하는 다른 방식으로 코드를 작성해야합니다.

그렇지 않다면 ... 그것은 당신이 어떻게했을지가 아니고 그냥 떠날 수없는 것입니다. 그렇다면 당신은 그들이 '내가 이런 식으로했을 것이고 당신도 그래야만했다 ...'

프로세스에서 무언가를 배울 수도 있습니다.


4

거친 것처럼 보이지 않고 요점을 파악하고 싶습니다.

간결함과 연마 성을 혼동하지 마십시오. 문제가 발생하면이를 해결하려는 사람이 이해할 수있는 방식으로 문서화하십시오. 사실을 고수하고 에세이를 쓰지 마십시오. 재치 :

  • 이것은 바보가 스노 가츠 인자의 5도 이내에있을 때 frobnitz가 오작동하게 할 것입니다.

  • 이를 위해 설정된 규칙은 새로 초기화 된 Squidge를 사용하여 fazzatz ()를 호출하는 것입니다. 항상 동일한 방식으로 발생하고 복제되지 않도록 메소드로 만드십시오.

    나는 또한 권위있는 사람처럼 보이고 싶지 않고 "이런 식으로해야한다 ..."와 같은 말을하고 싶지 않지만 여전히 그들이하는 일이 그리 좋지 않다는 점을 지적해야합니다. .

코드를 검토하는 목적은 문제를 해결하기 위해 일반적으로 경험이 풍부한 두 번째 눈을 두는 것입니다. 타인의 업무에 대한 판단을 통과 할 수 있고 어떤 것이 좋지 않다고 말할만한 정당한 이유가 있다면, 그렇지 않은 경우 검토 자로서의 책임을 소홀히하는 것입니다.

의견 불일치가 있으며 검토 자와 검토자가 자신의 입장을 변호 할 수있는 기회입니다. 당신이 다른 사람이고 당신이 곤경에 도달한다면, 누군가를 묶어 줄 사람을 찾으십시오.


snorgatz 요인에 대해서만 +1 (잘 나머지 답변도 좋아했습니다)
HLGEM

3

어떤 종류의 문제가 발견되었는지에 달려 있습니다.

  • 카피 라이팅 공지 누락-일반적이고 지루한 문제는 문제를 나타내는 간단한 설명 일뿐입니다.
  • 내가 다르게 할 수있는 곳-일반적으로 진술을하기보다는 여기에서 질문하는 경향이 있습니다. 때로는 대답이 원래의 해결책을 다른 시간으로 정당화하지 못하고 더 명확하게 해결할 수 있습니다.
  • 명확한 결함이있는 곳 (예 : 스택 오버 플로우가 가능한 동일 오버라이드-빨간색 펜에 도달)-결함으로 표시하고 파손 된 이유를 매우 명시 적-다른 유사한 영역을 점검하여 체계적인 문제가 없는지 확인합니다.

1

내 경험에서 :

  1. 코드를 검토하는 동안 항상 코드 작성자에게 문의하십시오. 코드는 화이트 보드에 투사되는 것이 좋으며 두 가지 모두 코드를 잘 볼 수 있습니다.

  2. 친근한 대화를 나누십시오. 코딩의 좋은 부분을 이해하십시오. 코드에서 좋은 부분을 보면 "이것이 내가 본 것 중 최고입니다"라고 말하십시오.

  3. 코드를 검토하고 유효한 포인트에 동의하고 동의하도록 요청하십시오. 코드에서 주석을 존중하면 코드 검토 주석을 자동으로 존중합니다.
  4. 코드 검토 문제를 해결하는 데 매우 중요하거나 더 많은 시간이 필요한 경우가 아니면 개발자 수준에서 처리하십시오. 조건이없는 경우 간단한 문제로 관리자에게 이관하지 마십시오.
  5. 코드에서 실수를 지적하는 대신 "다른 코드에서 배우기"라는 관점을보십시오.
  6. 코드 검토 세션 중에 과거에 저지른 실수와 코드 검토가 어떻게 도움이되었는지, 또 다른 시선이 도움이되어 큰 생산 문제를 피한 방법을 인용하십시오.
  7. 겸손하라. 더 감사하고 그에 대한 의견이 적습니다 :) 코드 검토 중에 많은 것을 배우고 기꺼이 귀하의 의견을 받아들입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.