민첩한 사례 : 코드 검토-검토 실패 또는 문제 제기?


53

2 주 스프린트가 끝나면 작업에 코드 검토가 있습니다. 검토에서 우리는 작동하고 읽을 수있는 기능을 발견하지만 읽을 수는 있지만 꽤 길고 코드 냄새가 약간 있습니다. 쉬운 리팩터링 작업.

그렇지 않으면 작업이 완료의 정의에 적합합니다.

우리는 두 가지 선택이 있습니다.

  • 이 스프린트에서 티켓이 닫히지 않도록 코드 검토에 실패하고 티켓을 전달할 수 없기 때문에 사기에 약간의 영향을 미칩니다.
  • 리 팩터는 작은 작업으로, 다음 스프린트에서 (또는 시작하기 전에) 작은 반점 이야기로 끝날 것입니다.

내 질문은 : 리뷰 대신 티켓을 올리는 데 내재 된 문제 나 고려 사항이 있습니까?

내가 찾을 수 있고 상세 코드 리뷰를 100 % 또는 전혀 읽지 않은 리소스는 일반적으로 현실적이지 않다는 것을 알았습니다.


23
따라서 코드 검토에 실패하지 못하면 검토의 목적은 무엇입니까? 지금 당장은 무언가가 작동하는지 확인하는 것 같지만 , 코드 검토가 아닌 테스트 또는 테스터의 일입니다.
VLAZ

21
나는 대부분의 답변이 귀하의 질문에서 중요하지 않다고 생각합니다. 그렇지 않으면 작업이 완료의 정의에 적합합니다. 언급 한 문제가 팀에서 "완료되지 않은"작업으로 간주하는 부분입니까? 또는 "완료"작업이 무엇인지에 대해 이러한 문제를 고려하지 않습니까? "완료"에 대한 정의에 "코드 냄새 없음"이 포함되어 있으면 작업이 완료되지 않습니다.
Josh Part

1
@ErdrikIronrose는 변경 사항이 표준에 따르지 않았으며 유지 관리가 쉽지 않은 것처럼 들립니다. 다른 의견은 변경 사항이 요청의 일부가 아님을 나타내는 것으로 보이지만이 경우 코드 검토의 일부가되어서는 안됩니다. 누군가 기존의 추악한 해킹 옆에 올바른 최신 표준 코드를 작성하면 추악한 해킹을 해결하기 위해 티켓을 올리고 현재 코드 검토를 통과하십시오. 누군가가 정확하지만 표준이 아닌 코드를 작성하는 경우 (질문에 나와 있듯이) 코드 검토가 올바르게 완료 될 때까지 완료하지 마십시오.
VLAZ

9
@ ErdrikIronrose : 아, 그래서 리뷰중인 이야기를 작업하는 동안 코드 냄새가 나지 않지만 이미 존재합니까? 중요한 차이점입니다. 질문 편집을 고려하십시오.
sleske

1
@vlaz 당신은 당신의 코멘트에서 대답해야합니다
Ister

답변:


67

리뷰 대신 티켓을 올리는 데 내재 된 문제 나 고려 사항이 있습니까?

본질적으로 아닙니다. 예를 들어, 현재 변화의 구현은 이미 있었지만 지금까지 알려지지 않았던 문제를 발굴했을 수 있습니다. 실제로 설명 된 작업과 관련이없는 것으로 인해 티켓을 실패하면 불공정하게됩니다.

검토에서 우리는 기능을 발견

그러나 여기의 기능이 현재 변경으로 추가 된 것으로 가정합니다. 이 경우 코드가 냄새 테스트를 통과하지 못하여 티켓이 실패해야합니다.

이미 그린 위치가 아니라면 어디를 그리겠습니까? 이 코드가 현재 형태로 코드베이스에 머무르기에 충분하다고 생각하지 않습니다. 그렇다면 왜 티켓을 패스하는 것을 고려 하시겠습니까?

이 스프린트에서 티켓이 닫히지 않도록 코드 검토에 실패하고 티켓을 전달할 수 없기 때문에 사기에 약간의 영향을 미칩니다.

이 티켓을 코드베이스의 품질에 이익이 아니라 팀 사기에 도움이 될 수 있도록 패스하려고한다고 간접적으로 주장하는 것처럼 보입니다.

이 경우 우선 순위가 섞여 있습니다. 깨끗한 코드의 표준은 단순히 팀을 더 행복하게 만들기 때문에 변경해서는 안됩니다. 코드의 정확성과 청결은 팀의 분위기에 달려 있지 않습니다.

리 팩터는 작은 작업으로, 다음 스프린트에서 (또는 시작하기 전에) 작은 반점 이야기로 끝날 것입니다.

원래 티켓의 구현으로 인해 코드 냄새가 나면 원래 티켓에서 해결해야합니다. 코드 냄새가 원래 티켓에 직접 기인 할 수없는 경우에만 새 티켓을 만들어야합니다 (예 : "낙타의 등을 부러 뜨린 밀짚"시나리오).

내가 찾을 수 있고 상세 코드 리뷰를 100 % 또는 전혀 읽지 않은 리소스는 일반적으로 현실적이지 않다는 것을 알았습니다.

합격 / 불합격은 본질적으로 이진 상태 이며 본질적으로 전부 또는 아무것도 아닙니다.

당신이 여기서 말하는 것은 코드 리뷰가 완벽한 코드 를 요구 하거나 그렇지 않으면 실패한다고 해석하는 것 이상 이 아니라고 생각합니다.

이 코드는 성가신 것이 아니며, 팀 / 회사에서 사용하는 합리적인 청결 표준을 준수해야합니다. 이 표준을 준수하는 것은 이진 선택입니다. 준수 (통과) 또는 실패 (실패)입니다.

문제에 대한 설명을 바탕으로 이것이 예상 코드 표준을 준수한다고 생각하지 않기 때문에 팀 사기와 같은 불가피한 이유로 전달해서는 안됩니다.

그렇지 않으면 작업이 완료의 정의에 적합합니다.

"작업 완료"가 코드 품질에 대한 최고의 벤치 마크라면, 깨끗한 코드와 좋은 연습의 원칙을 발명 할 필요가 없었을 것입니다. 컴파일러와 단위 테스트는 이미 자동화 된 검토 프로세스입니다. 코드 검토 나 스타일 인수가 필요하지 않습니다.


26
"코드의 정확성과 청결은 팀의 분위기에 달려 있지 않습니다." 이 경우에만 +1이되지만이 전체 답변에 대한 유일한 경고는 마감 시한을 맞추는 것입니다. 이 코드 검토에 실패하면 예상되는 기능으로 인해 다음 릴리스에 포함되지 않을 것이므로 고객의 요구와 코드의 청결도를 균형있게 유지해야합니다. 그러나 오늘 고객의 마감일을 충족시키는 잘못된 코드는 내일 생산 문제라는 것을 기억하십시오.
Greg Burghardt

11
대단한 답변-견고하지만 무례하지는 않습니다. 하나의 접선 요점도 있습니다. 스프린트 후반에 코드 검토를 어떻게 수행하여 전체 스프린트가 실패하지 않고 쉬운 리팩터링을 수행 할 수 없었습니까?
Daniel

@Daniel : 개발자가 다른 방법으로 참여했거나 계획 문제 일 수 있습니다. 사람들이 스프린트가 끝나는 시점에서 스프린트의 마지막 임무를 마치기 때문에 (종종 이상 세계에서) 스프린트의 마지막 임무를 마치기 때문에 작업 완료와 스프린트 완료 사이의 시간은 일반적으로 최소입니다. 검토 / 수정에 오랜 시간이 걸리지 않습니다. 또는 대안 적으로, 아마도 개발자는 나머지 스프린트 동안 존재하지 않거나 이용 가능하지 않을 수있다.
Flater

8
+1 프로그래머는 좋은 코드를 작성할 때 기분이 좋을 수 있습니다. 품질 관리를 우회하는 것이 사기 개선에 대한 답이 아닙니다. 사소한 문제에 대한 이따금의 거부는 어쨌든 사기를 겪지 않을 것입니다. 정기적으로 품질 관리를 통과하지 못하여 사기가 고통을 겪고 있다면, 항상 표준을 포기하지 않고 QC 실패에 대해 무언가를하는 것이 정답입니다.
jpmc26

1
@GregBurghardt : 많은 회사에서 마감 기한이 남용되는 것을 보았 기 때문에 즉각적인 리팩토링을위한 작업이 출시 후 첫 스프린트를 위해 계획되고 작성 되는 경우에만 나쁜 검토를 통과하는 데 동의하는 경향이 있습니다. 추가 된 시간 비용은 코드 품질을 우회하는 데 의미있는 진입 장벽을 추가합니다.
Flater

38

2 주 스프린트와 작업의 끝에 코드 검토가 있습니다 [...] 쉬운 리 팩터 작업.

스프린트 끝에 왜 팝업이 나타 납니까? 코드 검토는 코드가 완료되었다고 생각되 자마자 (또는 이전에) 수행 되어야합니다. 당신은 당신이 끝내는 각 이야기로 완료의 정의를 확인해야합니다.

데모 / 스프린트 검토 직전에 스토리를 마무리하여 "작은"작업을 수행 할 수없는 경우 작업을 더 잘 추정해야합니다. 네, 그 이야기는 끝나지 않았습니다. 코드 검토 때문이 아니라 코드 검토의 변경 사항을 통합하지 않았기 때문입니다. "올바른 프로그래밍을하면 제대로 작동합니까?" 그것이 작동하는 방식이 아닙니다. 테스트는 오류를 발견하고 코드 검토는 변경해야 할 사항을 찾습니다. 그렇지 않으면 시간이 많이 걸릴 것입니다.

요약하자면, DoD는 이진입니다. 합격 또는 불합격 코드 검토는 이진이 아니며 진행중인 작업과 비슷해야합니다. 당신은 실패 할 수 없습니다 . 그것은 과정이며 결국 끝났습니다. 그러나 제대로 계획하지 않으면, 그 "완료"단계에 도달하지 못하고 스프린트 종료시 "완료"영역에 갇혀있을 것입니다. 그것은 사기에는 좋지 않지만 계획에서 그 점을 고려해야합니다.


5
이것은 내 마음에 온 정답입니다. 각 스토리가 자체 분기로 구현되는 경우 스프린트가 끝날 때까지 분기를 검토하고 병합하는 것을 연기하지 마십시오. 대신, 분기가 준비되었다고 판단되면 즉시 풀 요청을 작성하고 실제로 완료, 승인 및 병합 될 때까지 해당 분기에서 반복을 계속하십시오. 스프린트 끝에서 해당 프로세스가 완료되지 않은 경우 스토리가 완료되지 않습니다.
Daniel Pryden

20

단순 : 변경 사항을 검토합니다 . 그렇지 않으면 프로그램 상태를 검토하지 않습니다. 3,000 줄 함수에서 버그를 수정하면 변경 사항으로 버그가 수정되는지 확인한 것입니다. 그리고 내 변경 사항으로 버그가 해결되면 변경 사항을 수락합니다.

함수가 너무 길다고 생각되면, 변경을 수락 한 후 변경 요청을 작성하여 함수를 더 짧게 만들거나 분할하면 해당 변경 요청의 중요성에 따라 우선 순위를 지정할 수 있습니다. 팀에 더 중요한 일이 있다고 결정되면 나중에 처리됩니다.

코드 검토 중에 개발 우선 순위를 결정할 수 있다면 어리석은 일이며 그러한 이유로 내 변경을 거부하면 개발 우선 순위를 결정하는 시도가 될 것입니다.

요약하면, 코드 변경을 수락하고 변경 사항을 검토 할 때 확인한 내용에 따라 즉시 티켓을 올리는 것이 절대적으로 허용됩니다. 경우에 따라 변경 자체로 인해 문제가 발생한 경우에도이 작업을 수행 할 수 있습니다. 문제를 해결하는 것보다 지금 변경하는 것이 더 중요한 경우 . 예를 들어 변경 사항을 기다리는 다른 사람이 차단 된 경우 코드를 개선 할 수있는 동안 차단을 해제하려고합니다.


4
이 경우 이전에 없었던 3000 라인 함수를 도입했거나 이전에 10 라인 함수였던 경우 변경 지나치게 긴 기능 이라고 생각 합니다.
user3067860

3
원칙적으로이 답변은 정확합니다. 실제로 ..... 모든 개발자가 노력과 균형을 이룬 우수한 코딩 방법을 믿고 실천한다면이 문제가 자주 발생하지 않을 것입니다. 그러나 지금은 5 분을 절약하기 위해 모든 것을 빠르고 더러운 일을하는 한두 명의 개발자가 항상있는 것 같습니다. 반면에 그들은 작업에 추가하는 시간에서 며칠 또는 몇 개월을 무시합니다. 이 경우이 답변은 전체 시스템을 다시 시작하고 재 설계해야하는 미끄러운 경사에 불과합니다.
Dunk

+1, 문제가있는 코드를 체크인하는 것은 절대 예외가되어야한다는 것을 강조하기 위해 마지막 단락을 바꿔야한다고 생각합니다. 누군가 막힌다는 것만으로도 충분한 변명 이 아닙니다 . 단일 스프린트 실패는 충분한 변명처럼 보이지 않으며 반복적으로 사용될 수있는 변명도 아닙니다.
Frax

@ user3067860 10 라인 기능을 3000 라인 기능으로 전환 한 경우 분명히 실패합니다. 3000 라인 기능을 3010으로 전환했다면 아마도 통과 할 것입니다. 그러나 100 라인 기능 (보통 약간 큰)을 300 라인 기능 ( 확실히 너무 큰) 으로 바꾼 경우 어떻게해야 합니까?
Martin Bonner

9

이 스프린트에서 티켓이 닫히지 않도록 코드 검토에 실패하고 티켓을 전달할 수 없기 때문에 사기에 약간의 영향을 미칩니다.

이것은 문제인 것 같습니다.
이론적으로는해야 할 일을 알고 있지만 마감일이 가까워서해야 할 일을하고 싶지 않습니다.

답은 간단합니다. 스프린트 첫날에 코드 검토를 위해 동일한 코드를 가지고 있다면 무엇이든 할 수 있습니다. 그것이 받아 들여질 수 있다면 지금해야합니다. 그렇지 않다면 지금은 그렇지 않습니다.


"고객님, 코드가 작동하여 2-3 주 동안 기능을 사용할 수 없지만 모양이 마음에 들지 않았습니다." !
RandomUs1r

6
@ RandomUs1r 고객은 이런 종류의 정보를 가지고 있지 않아야합니다. 시간이 충분하지 않아서 끝나지 않았습니다. 고객은 코드 작성 방법을 지시합니까? 집에 배선을 수리하기 위해 전기 기술자에게 전화하는 경우, "케이블 만 바꾸고 케이블이 올바른지 확인하지 않아도됩니다"? 아니면 의사에게 "내가 아파서 약을 줘도 먼저 진단하지는 않습니까"라고 말합니까? 코드 검토는 고객이 지시하는 것이 아니라 작업의 본질적인 부분이어야합니다.
VLAZ

1
@ RandomUs1r : "?"친애하는 개발자가 아닌 기능을 완료 한 이유 " -"우리는 품질의 수용 가능한 수준으로 구축 할 시간이 충분하지 않았기 때문에 "대답은해야한다, 어쩌면 다음에"우리는 그것을 제공 할 수 있습니다 품질에 타협 할 의향이 있다면 당신에게. "
Bryan Oakley

1
@ RandomUs1r 따라서 기본적으로 코드 품질을 희생하려는 경우 나중에 기능을 구현하기가 훨씬 어려워 질 수 있습니다. 2 일 수정은 이제 4 주 수정을 매우 잘 저장할 수 있습니다. "고객님, 지금은 작은 기능을 구현하는 데 시간이 오래 걸리기 때문에 2-3 주 동안 더 이상 기능을 사용할 수 없습니다." 또한 스프린트의 끝입니까 아니면 주요 마감일입니까? 주요 마감일 인 경우 지금 합병하여 다음 2 일 동안 수정 사항을 작성하고 마감일 직후 PR을 제기 할 수 있습니다.
xyious

5
내가 말하는 것은 스프린트의 첫날과 마지막 날에 표준이 다르면 표준이 없으며 품질이 필연적으로 배수구로 내려갑니다.
xyious

5

프로세스의 큰 부분은 무슨 이 있었는지 결정하고 총을 고집하는 것입니다. 또한 과도하게 커밋하지 않고 동료 검토를 제 시간에 완료하여 테스트를 통해 기능이 완벽하게 완료되었는지 확인할 수도 있습니다.

코드 검토 문제와 관련하여 처리 할 수있는 몇 가지 방법이 있으며 올바른 선택은 몇 가지 요소에 따라 다릅니다.

  • 당신은 할 수 있습니다 자신까지 코드를 청소 하고 사람이 당신이 무슨 짓을했는지 알려 주시기 바랍니다. 멘토링 기회를 제공하지만 몇 분 안에 수행 할 수있는 매우 간단한 작업이어야합니다.
  • 당신은 무엇이 잘못되었는지에 대한 의견을 가지고 반발 할 수 있습니다 . 오류 처리가 제대로 수행되지 않거나 개발자가 동일한 실수를 계속 반복하면 이것이 보증 될 수 있습니다.
  • 티켓을 만들고 기술 부채가 발생할 수 있습니다 . 티켓은 나중에 지불하도록하기 위해 존재합니다. 시간이 오래 걸리고 변경 사항을 검토하는 과정에서 변경과 직접적인 관련이없는 더 큰 문제가 발생할 수 있습니다.

결론은 작업을 마쳤을 때 작업을 완료해야한다는 것입니다. 개발자가 작업 한 것보다 큰 문제가 있으면 플래그를 올리고 계속 진행하십시오. 그러나 스프린트가 끝나기 몇 시간 전에 위치에 있으면 안되며 지금은 동료 검토를 받고 있습니다. 리소스를 과도하게 커밋하거나 동료 리뷰를 미루는 것 같은 냄새가납니다. (프로세스 냄새).


4

코드 검토 문제의 우선 순위를 결정하는 데 내재 된 문제는 없지만 팀으로서 동의해야하는 주요 문제는 다음과 같습니다.

  1. 코드 검토의 목적은 무엇입니까?
  2. 코드 검토 결과는 작업 항목에 대한 완료 정의와 어떤 관련이 있습니까?
  3. 코드 검토가 게이팅 테스트로 적용되는 경우 어떤 문제가 '차단제'로 간주됩니까?

이 모든 것은 팀이 Done의 정의로 동의 한 것에 달려 있습니다. 작업 문제에 대해 0 이슈로 코드 검토를 통과 한 것이 정의 된 경우이 요구 사항을 충족하지 않는 항목을 닫을 수 없습니다.

단위 테스트 중 단위 테스트가 실패한 것과 같습니다. 단위 테스트를 통과하는 것이 완료가되어야한다면 버그를 수정하고 단위 테스트를 무시하지 마십시오.

팀이 코드 검토를 완료로 정의하는 데 동의하지 않은 경우 코드 검토는 작업 항목의 게이팅 수락 테스트가 아닙니다. 이들은 필요한 추가 작업을 찾기 위해 백 로그 프로세스의 일부인 팀 활동입니다. 이 경우 발견 한 모든 문제는 원래 작업 항목의 요구 사항과 관련이 없으며 팀이 우선 순위를 지정할 새로운 작업 항목입니다.

예를 들어, 팀이 변수 이름 "myObkect"를 보는 것을 싫어하더라도 팀이 일부 변수 이름의 오타 수정을 우선 순위 해제하는 것이 허용 될 수 있습니다.


1

여기에서 투표권이 높은 답변은 매우 좋습니다. 이것은 리팩토링 각도를 해결합니다.

대부분의 경우 리팩토링 작업의 대부분은 기존 코드를 이해하고 있습니다. 그 후에 변경하는 것은 일반적으로 두 가지 이유 중 하나 때문에 작업의 작은 부분입니다.

  1. 코드를 더 명확하고 간결하게 만들면 필요한 변경이 명백합니다. 더 깔끔해 보이는 변경 사항을 시도하고 실제로 작동했는지 또는 더 복잡한 코드에서 미묘한 부분을 놓친 경우를 확인하여 코드에 대한 이해를 얻었습니다.

  2. 새로운 기능을보다 쉽게 ​​구축하는 데 필요한 특정 디자인이나 구조를 이미 염두에 두었습니다. 이 경우, 그 디자인을 개발하는 작업은 그 필요성을 제기 한 이야기의 일부였습니다. 해당 설계에 도달하기 위해 리팩토링을 수행해야하는 것은 독립적입니다.

기존 코드를 배우고 이해하는 것은 비 영구적 인 이익을 위해 상당한 양의 작업입니다 (지금부터 누군가가 코드를 계속 읽거나 사용하지 않으면 코드에 대해 많은 것을 잊었을 가능성이 있음). 문제를 일으키는 코드 영역이나 가까운 장래에 변경하려는 코드 영역을 제외하고는이 작업을 수행하는 것이 합리적이지 않습니다. 결과적으로 이것은 리팩토링의 주요 작업이므로 현재 문제를 일으키거나 가까운 시일 내에 코드를 변경할 계획이 아니라면 코드에서 리팩토링을 수행해서는 안됩니다.

그러나 한 가지 예외가 있습니다. 누군가가 현재 시간이 지남에 따라 누출 될 코드에 대해 잘 이해하고 있다면, 그 이해를 사용하여 나중에 코드를 더 명확하고 더 빨리 이해하도록하는 것이 좋은 투자가 될 수 있습니다. 바로 이야기 개발을 마친 누군가가 처한 상황입니다.

리 팩터는 작은 작업으로, 다음 스프린트에서 (또는 시작하기 전에) 작은 반점 이야기로 끝날 것입니다.

이 경우 리팩토링에 대한 별도의 이야기를 만드는 것은 여러 가지 측면에서 경고 신호입니다.

  1. 리팩토링을 코딩의 일부로 생각하지 않고 별도의 작업으로 생각하면 압력이 가해질 수 있습니다.

  2. 다음에 누군가와 함께 작업해야 할 때 이해하는 데 도움이되는 코드를 개발 중이므로 스토리가 더 오래 걸립니다.

  3. 많은 이익을 얻지 못하는 시간과 에너지 리팩토링을 낭비하고있을 수 있습니다. (나중에 변경이 발생하면 누군가는 여전히 코드를 다시 이해해야합니다. 리팩토링 작업과 더 효율적으로 결합됩니다. 나중에 변경이 발생하지 않으면 리팩토링은 아무 것도 제공하지 않았습니다. 미학적 목적을 제외하고는 전혀 목적이 없습니다.)

따라서 여기에 대한 대답은 프로세스에서 무언가 실패했음을 분명히하기 위해 항목을 실패하는 것입니다 (이 경우 개발자 또는 팀이 검토를 위해 시간을 할당하지 않고 검토에서 나온 변경 사항을 구현하지 않아야 함)하고 개발자가 즉시 작업을 계속하도록합니다 품목에.

다음 반복에 대한 추정으로 이동하면 검토를 통과하고 다음 반복에 추가하지만 이전 반복의 추정을 유지하기 위해 남은 작업량에 따라 기존 스토리 를 다시 추정 하십시오 . 다음 반복이 끝날 때 스토리가 완료되면 기록 된 총 작업량을 첫 번째 및 두 번째 추정값의 합계로 설정하여 실제로 예상 된 작업량이 얼마나되는지 알 수 있습니다. 이를 통해 현재 프로세스 상태에서 유사한 스토리를보다 정확하게 추정 할 수 있습니다. (즉, 당신의 명백한 과소 평가가 다시는 일어나지 않을 것이라고 가정하지 말고, 적은 일을하면서도 비슷한 이야기를 성공적으로 마칠 때까지 다시 일어날 것이라고 가정하십시오.)


1

코드 검토 "실패"라는 개념에 대한 답변과 의견에 대한 답변이 부족하다는 사실에 놀랐습니다. 개인적으로 친숙한 개념이 아니기 때문입니다. 나는 그 개념을 사용하거나 우리 팀의 어느 누구도 그 용어를 사용하는 데 익숙하지 않을 것입니다.

귀하의 질문은 명시 적으로 "민첩한 관행"을 요구하므로 민첩한 선언문 (강조 광산)을 다시 살펴 보겠습니다.

우리는 소프트웨어를 수행하고 다른 사람들이 소프트웨어를 개발하도록함으로써 소프트웨어를 개발하는 더 좋은 방법을 발견하고 있습니다. 이 사업을 통해 우리는 가치를 얻게되었습니다.

  • 프로세스 및 도구에 대한 개인 및 상호 작용
  • 포괄적 인 문서에 대한 작업 소프트웨어
  • 계약 협상을 통한 고객 협업
  • 계획에 따라 변경응답

즉, 오른쪽에있는 항목에는 가치가 있지만 왼쪽에있는 항목은 더 중요하게 생각합니다.

팀과 이야기하십시오. 문제의 코드를 토론하십시오. 비용과 이점을 평가하고 응집력있는 전문가 그룹으로서이 코드를 지금, 나중에 리팩토링할지, 아니면 리팩토링할지 결정합니다.

협업을 시작하십시오. 코드 검토 실패를 중지하십시오.


나는 협력을 위해 모두입니다. 그러나 "실패"가 아닌 경우 어떤 용어를 사용 하시겠습니까? 심지어 그룹으로서 한 사람이 "충분하지 않다면 리팩토링이 필요하다"고 말할 수 있는데, 이는 단순히 품질 점검에 실패했음을 의미합니까?
Erdrik Ironrose

1
@ErdrikIronrose 코드 검토 "실패"라는 용어를 사용한 적이 없거나 사용해야했습니다. 누군가는 코드를 검토하고, 잠재적 인 개선점에 대해 논의하고, 그 점을 해결할지 여부를 결정합니다. "통과"또는 "실패"는 없으며 단지 의사 소통과 진전입니다. 왜 도장이 필요한지 잘 모르겠습니다.
Ant P

0

리뷰에서 우리는 작동하고 읽을 수있는 기능을 발견하지만 꽤 길며 코드 냄새가 약간 있습니다 ...

리뷰 뒷면에서 티켓을 올리는 데 실패하지 않고 내재 된 문제 나 고려 사항이 있습니까?

(팀 의견으로는) 문제 없습니다. 코드가 티켓에 명시된 수락 기준을 충족한다고 가정합니다 (즉, 작동). 길이와 코드 냄새를 처리하기 위해 백 로그 항목을 작성하고 다른 티켓처럼 우선 순위를 정하십시오. 실제로 작은 경우 다음 스프린트에 우선 순위를 매기십시오.

우리가 말한 것 중 하나는 "지연된 완전성보다 점진적인 개선을 선택하십시오"입니다.

우리는 매우 유동적 인 프로세스를 가지고 있으며 개발 및 테스트를 통해 만들지 만 내부 이해 관계자 검토를 지나치지 않는 상당히 많은 수의 '개념 증명'기능 (스프린트 당 1 또는 2)을 구축합니다. ?), 알파 또는 베타 ... 일부는 생존하지만 일부는 그렇지 않습니다.

현재 프로젝트에서, 우리가 특정 기능을 몇 번이나 구축했는지, 이해 관계자의 손에 넣었는지, 그리고 스프린트 (Sprint) 또는 두 번 후에 제품 방향이 변경되었거나 요구 사항이 발생하여 완전히 제거했습니다. 기능이 어떻게 구현되어야하는지에 대한 완전한 리 캐스트. 삭제 된 피처에 대한 나머지 '정제'작업 또는 새로운 요구 사항에 맞지 않는 백 로그 그루밍의 일부가 삭제됩니다.


0

내 의견으로는이 문제를 보는 두 가지 방법이 있습니다.

  1. 학문적 인 방법
  2. 실제 방법

학문적으로 말하면, 대부분의 코드 검토 프로세스는 코드 품질 표준이 충족되지 않을 때 PBI (제품 백 로그 항목)의 배포에 실패합니다.

그러나 현실 세계의 어느 누구도 (다수의 이유로) T에 대해 민첩성을 따르지 않으며, 산업마다 요구 사항이 다릅니다. 따라서 현재 코드를 수정하거나 기술 부채 (새로운 PBI를 생성 할 가능성이 높음)는 사례별로 결정해야합니다. 스프린트 또는 릴리스를 손상 시키거나 불합리한 양의 위험을 초래할 경우 비즈니스 이해 관계자가 결정에 참여해야합니다.


2
현실 세계의 어느 누구도 T에 민첩성을 따르지 않습니다. 우리가 너무 엄격한 규칙을 가지고 있다면 더 이상 "민첩하지"않을 것입니다.
Paŭlo Ebermann

@ PaŭloEbermann 한 번 인터뷰 한 회사와 재미있는 대화를 나 had습니다. 그들은 프로세스가 민첩한 교과서가 아니기 때문에 민첩하지 않다고 주장했습니다. 비록 그들이 한 모든 일은 민첩한 정신에있었습니다. 나는 그들에게 그것을 지적했지만 (본질적으로) "아니, 우리는 개념을 많이 빌려도 편지에 대한 민첩한 절차를 따르지 않고있다. 따라서 우리는 민첩하지 않다"고만 만족했다. 매우 기이했다.
VLAZ

다른 검토자가 지적 했듯이이 경우 코드가 실제로 검토를 통과하지 못했을 때 배울 교훈이 있습니다. 이 프로젝트의 사람들은 a) 각 스토리에 대해 검토하고 수정하기 위해 시간을 내야하고 b) 깨끗한 코드를 남기는 데 필요한 리팩토링이 필수 요소라는 것을 잘 이해하지 못하는 것처럼 보입니다. 이야기. 이 경우 가장 좋은 방법은 스토리가 실패하여 실제로 이러한 옵션이 선택 사항이 아님을 분명히하는 것입니다.
Curt J. Sampson

@ 커트 나는 내 관점이 개발자의 관점에서 인기가 없을 수도 있다고 생각하지만 (나는 너무 btw이다) 사업이 실제로 먼저 와야하고, 그들은 월급에 서명하고 약간의 존경을받을 가치가있다. 떠나는 한, 나는 다시 현실 세계에 대한 당신의 이해에 도전 할 것입니다. 그리고 당신은 항상 가능한 것은 아니며, 스프린트가 끝날 때해야 할 일이 있기 때문에 많은 스프린트가 꽉 조이는 것을 깨달아야합니다. 부서의 코드 인 SOLID가 2 주마다 1/10 일 동안 발을 차고 아무 것도 할 수없는 것은 아닙니다. 단기적으로는 좋지만 실행 가능한 것은 아닙니다.
RandomUs1r

@ RandomUs1r 나는 실제 세계에서도 일하고 항상 지름길을 가지고 항상 비즈니스를 최우선으로 생각하기 때문에 여기에 대한 이해가 부족하다고 생각하지 않습니다. 그러나 OP의 설명은 "우리는 항상이 권리를 얻었고 이것은 단지 표준적인 작은 트림"이 아니었다. 내 대답 에서 설명했듯이 프로세스 문제처럼 보이며 프로세스를 사용하기 전에 프로세스를 올바르게 수행하여 문제를 해결합니다.
Curt J. Sampson

-2

둘 다 . 코드 검토에 실패하면 작업이 완료되지 않은 것입니다. 그러나 개인적인 의견으로는 코드 검토에 실패 할 수 없습니다. 코드는 통과합니다. 다음 작업으로 넘어갑니다.

쉬운 호출이어야하며 코드 검토에 대한 충분한 서면 규칙이 명확하지 않다는 것을 암시하지 않습니다.

  1. "기능이 꽤 깁니다". 적어 두십시오 : 함수는 X 줄보다 작아야합니다 ( 함수 길이에 대한 규칙이 좋은 것이라고 제안 하지는 않습니다 ).

  2. "코드 냄새가 있습니다." 쓰기 : 공용 함수는 기능 및 성능에 대한 단위 테스트를 가져야하며 CPU 및 메모리 사용량은 x 및 y 제한 미만이어야합니다.

코드 검토를 통과하기위한 규칙을 수량화 할 수없는 경우 기본적으로 '좋지 않은 코드'에 해당하는 사례가 표시됩니다.

'좋아하지 않은 코드'에 실패해야합니까? 나는 아니오라고 말할 것입니다. 코드가 아닌 측면에 따라 자연스럽게 통과 / 실패하기 시작합니다. 사람을 좋아합니까? 그들은 자신의 사건에 대해 강력하게 주장합니까, 아니면 그냥 말한대로합니까? 그들은 당신을 검토 할 때 코드를 전달합니까?

또한 추정 프로세스에 정량화 할 수없는 단계를 추가합니다. 프로그래밍 방식에 따라 작업을 추정하지만 결국에는 코딩 스타일을 변경해야합니다.

얼마나 오래 걸립니까? 동일한 검토자가 후속 코드 검토를 수행하고 첫 번째 검토 자와 동의하거나 추가 변경 사항을 찾습니까? 변경 사항에 동의하지 않고 다른 의견을 찾거나 사례를 주장하는 동안 변경을 중단하면 어떻게 되나요?

작업을 빠르게 수행하려면 가능한 한 구체적으로 작성해야합니다. 막연한 품질 게이트를 추가해도 생산성에 도움이되지 않습니다.

다시 : 규칙을 적어 둘 수 없습니다!

그렇게 어렵지는 않습니다. 당신은 정말로 "나는 '좋은'코드로 의미하는 것을 표현할 수 없다"를 의미한다 . 당신이 그것을 인식하면, 당신은 누군가의 작업이 처음부터 끝나지 않았다고 말하기 시작하면 분명히 HR 문제라는 것을 알 수 있지만 그 이유를 말할 수는 없습니다.

규칙을 적고 코드를 '좋은'것으로 만드는 것에 대해 맥주에 대해 토론하십시오.


6
"모호함없이 완벽하고 보편적으로 적용 할 수있는 표준을 갖추었다"는 것이 코드 검토를 수행하기위한 현실적인 전제 조건이 아니라는 점을 간과하고 있습니다. 아직 설명하지 않은 새로운 유형의 문제가 항상 있으므로 미지의 영역에서 결정을 내릴 수 있어야합니다. 물론 그 결정을 문서화하여 더 이상 미지의 영역이되지는 않지만, 답을 검토하기 전에 완벽한 규칙을 작성하는 경우 미지의 영역이 없음을 보장 할 수 있다고 가정합니다. 당신은 말 앞에 카트를 넣고 있습니다.
Flater

5
"함수는 x 줄 보다 작아야합니다"와 같은 절대 값도 답이 아닙니다 .
Blrfl

2
Blrfl과 동의 함. 함수 (일반적으로)는 20 줄을 넘지 않아야합니다. 그러나 그것을 절대 규칙으로 만드는 것은 실수입니다. 특정 상황은 항상 일반적인 규칙보다 우선합니다. 기능을 20 줄 이상으로 만들만한 충분한 이유가 있다면 그렇게하십시오.
Matt Messersmith

1
법적 사양으로 작성된 코드에 대한 규칙은 필요하지 않습니다. 지침과 함께 동일한 최종 목표 (작업, 읽기 쉽고 유지 관리 가능한 코드)를 달성하려는 성인 일 수 있습니다. 모든 팀원이 팀에 진정으로 투자하고 함께 일할 의사가있는 것은 Scrum의 중심이므로, 그렇지 않은 경우 Scrum이 팀에 적합하지 않을 수 있습니다.
user3067860

2
@ 이완 물론. 내 요점은 OP가 규칙이 아닌 기능 지침 의 길이를 가지고 있다는 것 입니다. 임계 값이 설정되는 곳마다 사람들이 유지 관리하기 어려운 코드를 찾는 데 도움이되는 조언을 제공하지만 절대적인 규칙은 아닙니다. (OP가 말했듯이) 실제로 완벽하게 읽을 수 있고 리뷰어는 완벽하게 읽을 수 있고 적절하게 테스트하는 데 아무런 문제가 없다고 동의하면 기능의 정의는 올바른 크기입니다. 검토 결과에 "예상보다 길지만 괜찮습니다"라는 단선 메모가 표시되고 작업이 완료된 것입니다. 그 시점 이후 리팩토링은 금도금입니다.
Graham
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.