코드 리뷰는 실제로 진정한 애자일에서 작동합니까?


13

그래서 이름이 3 글자로 된 대기업에서 일하기 시작했고 그들은 민첩 해 지려고 노력하고 있지만 민첩하다고 느끼지 않는 수많은 프로세스를 가지고 있습니다.

나에게 가장 상처를 준 것은 코드 리뷰입니다. 저의 마지막 직업은 제가 본 적이 있고 가장 많이 본 적이있는 가장 민첩한 개발 팀이라고하는 신생 기업이었습니다.

어쨌든, 내 의견은 Code Reviews는 UX / UI가 극도로 강렬한 반복적이거나 민첩한 개발에 시간 낭비라는 것입니다 (Apple / Steve Jobs 완벽 함을 생각하십시오). 어쩌면 여기 누군가 나를 해고시키기 전에 이해하는 데 도움이 될까요?

여기 내 개발 과정과 마지막 스타트 업 과정이 있습니다. 매우 민첩합니다.

초기 기능 작업을 수행하여 개발 작업 / 할 일을 정렬합니다. 우리는 피드백을 얻기 위해 몇 가지 버전을 조롱하고 사용자, 팀 및 마케팅에 제시 할 것입니다. 그런 다음 위의 동일한 이해 관계자로부터 한 라운드를 얻기 위해 또 다른 모형 반복을 수행합니다. 그런 다음 우리는 일을 나누고 시작합니다. 달성 할 이정표와 날짜가 있지만 계속 연결됩니다. 이 기간 동안 코드 검토가 없습니다. 우리는 개발 기간 동안 여러 차례 이해 관계자와 다시 의견을 나누고 기능 / 기능 / UX / UI가 여전히 적합하고 목표인지에 동의하는지 확인합니다.

8 주 반복주기가 끝날 무렵 QA는 테스트를 시작한 다음 알파 사용자, 최종적으로 베타 사용자에게 전달됩니다. 그러나 알파 및 베타 기간 동안 개발자는 새로운 기능과 이전 기능을 검토하여 UX를 개선하기 위해 UI를 매일 또는 시간 단위로 반복 변경합니다. 따라서 이번 릴리스에서 개발 된 기능은 지난 4 주 동안 기능을 개선하고 완벽하게하거나 몇 가지 작은 기능을 추가하기 위해 마지막 4 주 동안 3 번 이상 변경 될 수 있습니다 (예 : 구성 요소를 좀 더 매끄 럽거나 똑똑하게 만들기). 때로는 변경 사항이 피상적 일 수 있으므로 CRUD 작업이 변경되거나 수정되지는 않지만 모든 UI 만 변경됩니다.

따라서 이러한 유형의 개발 프로세스에서 극단적 인 애자일은 코드 검토가 시간 낭비가되지 않습니까? 다른 개발자 또는 두 명이 내 코드를 검토했다면 모든 UI / UX 개선으로 인해 코드가 문을 열기 전에 3 번 더 변경됩니다. 처음으로 3 번 시간을 낭비하지 않았습니까? 해당 코드 / 구성 요소 / UI가 폐기 되었습니까?

우리는이 과정에서 많은 품질 문제를 겪지 않았으며 개발자가 모든 지식을 잃어 버렸다면 항상 똑똑한 개발자가 그것을 가져 와서 인수하는 것을 발견했습니다.

그렇습니다. 우리는 3 ~ 4 번 정도 다시 테스트해야하기 때문에 많은 테스터가 있습니다. 또한 모든 UI / UX가 왜 변경되는지에 대한 질문에 매달리지 마십시오. 그런 일이 어떻게 수행되는지 ... 그런 다음 앱이 UI / UX에 대한 수많은 상을 수상하고 사용자가 앱. 사고 과정은 내가 한 시간이 더 걸리기 때문에 무언가를 2 % 향상시킬 수 있다면하는 것입니다. 사용자는 더 행복 할 것이며 이는 더 많은 $ 또는 사용자를 의미합니다. 그리고 네, 우리의 사용자는 앱이 지속적으로 변경 되어도 괜찮습니다. 그 이유는 첫날부터 앱이 나쁘거나 부정적인 것으로 보지 않기 때문입니다.

이 게시물이 화려하지는 않지만 코드 리뷰가 얼마나 낭비되지 않는지 알 수 있기를 바랍니다. 검토 된 코드에서 모든 코드의 2 %에 버그가있을 수 있습니다. 각 릴리스마다 코드 검토를 통해 3 개의 버그가 발견 될 수 있습니다. 따라서 개발자 당 릴리스 당 40 시간의 코드 검토 (4 x 40 = 160 시간)가되어 3 ~ 5 개의 버그가 발견됩니까? 어쨌든 QA가 3 ~ 5 개의 버그를 발견했을 가능성은 50 %입니다. 새로운 기능을 추가하거나 기존 기능을 개선하는 개발자 당 40 시간을 소비하는 것이 좋지 않습니까?


@DeadMG : 사용자 경험
Steven A. Lowe

4
@ user25702 : 설명하는 프로세스가 민첩한 것처럼 들리지 않으며 RUP / 나선형처럼 들립니다. 특히 "개발 기간 동안 여러 차례 우리는 이해 관계자들과 다시 의견을 나누고 그들이 여전히 기능 / 기능 / UX / UI가 여전히 적합하고 목표에 동의하는지 확인합니다." 안티 애자일; RUP / 나선 접근과 관련된 이동 대상 문제를 피하기 위해 반복 중에 피처가 정지됩니다. 명목상의 질문에 관해서는 QA가 버그를 발견했을 것이라고 확신하는 경우에만 코드 검토에서 많은 가치를 보지 못합니다.
Steven A. Lowe

1
8 주 반복은 민첩하지 않으며 "극단적 민첩"도 아닙니다.
Martin Wickman

일부 PM은 반복이 시작에 몇 번의 짧은 반복이 있고 중간에 몇 번의 긴 반복이 있고 끝 부분에 필요한만큼의 짧은 반복이 있다고 생각합니다. 문제는 이것이 소프트웨어 개발의 전투 리듬과 버그를 조기에 잡을 수있는 능력으로 인해 혼란스러워한다는 것입니다. 8 주 반복은 중간 반복 중 하나입니다. 이것이 민첩하지 않다는 데 동의합니다.
Berin Loritsch

코드 리뷰를 없애려면 통계를 가져가는 것이 좋습니다. 코드 검토에 소요 된 시간 (총 작업 시간), 버그 / 발견 횟수 및 문제의 심각도를 문서화하십시오. 우리 팀의 경우, 검토 당 적어도 16 시간의 시간을 보냈으며, 평균 2-3 개의 버그가 발견되었습니다. 이러한 우선 순위에 직면 한 동료 리뷰를 대체하기위한 테스트 우선 방법론에 대한 논쟁은 쉬웠습니다.
Berin Loritsch

답변:


13

코드 검토가 할 수있는 몇 가지와 할 수없는 몇 가지가 있습니다. 코드 검토 에 찬성 하는 주장 :

  • 단체 소유권
  • 버그 찾기 (QC)
  • 일관된 스타일 (QA) 시행
  • 멘토링

많은 민첩한 프로세스가 다른 방식으로 프로세스를 처리합니다.

  • 단체 소유권 : 팀의 모든 사람이 프로젝트를 책임집니다. 즉, 모든 사람이 언제든지 코드를 볼 수 있습니다.
  • 무료 리팩토링 : 코드 검토를 한 단계 끌어 올리고 팀의 모든 사람이 필요에 따라 리팩토링을 수행 할 수 있습니다.
  • 단위 테스트 (QC) : 단위 테스트는 육안 검사보다 더 효율적이고 사람의 실수가 적습니다. 사실, 나는 아직 더 효율적인 수단을 찾지 못했습니다.
  • 페어 프로그래밍 (QA) : 멘토링을 처리하고 코드 작성시 초기 리팩토링 조언을 제공합니다. 이것은 여전히 ​​논란의 여지가 있지만 새로운 개발자를 끌어 올리는 데 도움이된다는 것을 알았습니다. 코딩 표준을 시행하기에 좋은시기이기도합니다.

본질적으로 당신이 일반적으로 동료 검토를 할 때 얻을 수있는 잠재적 이익을 돌보는 다른 방법이 있습니다. 동료 리뷰에 대한 개인적 경험은 매우 비효율적 인 메커니즘이며 버그 나 더 큰 디자인 결함을 찾는 데 효과적이지 않다는 것입니다. 그러나 그들은 어떤 팀에서나 자리를 잡았으며, 어떤 이유에서든 민첩성이 실현 불가능한 프로젝트에서는 반드시 필요합니다.


3
현재 답변에 약간의 잘못된 정보가있는 것 같습니다. 단체 소유권이 "항상 모든 코드를 주시"한다는 의미는 아닙니다. 리팩토링은 결함 감지와 관련이 없습니다. 단위 테스트와 검사는 서로 다른 목적으로 사용되며 실제로 서로 다른 종류의 결함을 발견 할 수 있습니다 (다른 답변의 예). 페어 프로그래밍은 검토 형식이지만 Fagan 검사를 대체 할 수는 없습니다. 개인적인 경험은 비정형적인 것으로 보입니다. 특히 디자인 오류와 관련하여 어떤 종류의 리뷰를 했습니까? 리뷰의 효율성을 어떻게 측정 했습니까?
Michael

1
검토 수행 시간과 발견 된 결함 및 심각도 우리는 이것을 단위 테스트와 동일한 메트릭스와 비교했습니다. 코드 검토 중에 발견 된 문제는 거의 항상 코드 형식과 관련되어 있으며 수행하는 데 시간이 더 걸렸습니다. 단위 테스트를 수행하는 데 소요되는 동시에 실제 문제를 발견하고 더 이상 준비하고 수행하지 못했습니다.
Berin Loritsch

"Collective Ownership": 제 경험상 이것은 종종 환상입니다 : 리뷰어들은 종종 작은 세부 사항에 대해 nitpick하고 다른 사람들이 작성한 코드에서 큰 그림을 보지 않습니다. 그런 다음 코드를 수정할 때 실제로 코드를 이해하지 못하고 (1) 감히 변경하지 않거나 (2) 코드를 이해하기 위해 광범위하게 다시 작성합니다. 접근법 (2)에는 종종 두 가지 부작용이 있습니다. (A) 버그가 발생하고 (B) 원래 개발자는 더 이상 코드를 이해하지 못합니다.
Giorgio

포인트 B는 종종 집단 소유가 아니라 개인 소유가 항상 한 개발자에서 다른 개발자로 이동한다는 것을 보여줍니다. 이러한 방식으로 각 팀원은 코드의 기능과 구성 방식을 대략 알지만 실제로는 깊이 이해하지 못합니다. 진정한 집단 코드 소유권은 일반적인 이해를 위해 코드에 대해 훨씬 더 많은 시간과 토론이 필요하지만 종종 이번에는 사용할 수 없습니다.
Giorgio

11

코드 리뷰입니다 하지만 버그를 찾는가? 당신은 그것이 사실이라고 생각하는 것 같습니다.

코드 검토는 코드의 공동 소유권에 대한 자세한 내용이 될 수 있으며, 지식이 여러 헤드에 있는지 확인하고, 새로운 기능과 버그에 대한 코드를 상속받을 수 있도록 다른 사람들을 준비시킬 수 있다고 주장합니다. 나는 누군가가 컨벤션을 유지하기 위해 무언가 재 작성 될 수있는 곳을 알 수 없을 때 알지 못하기 때문에 시스템에 대한 약간의 점검과 균형을 유지하는 방법으로 코드 검토를 좋아합니다.


4

페어 프로그래밍은 코드 검토에 대한 XP의 답변입니다. 기본적으로 모든 코드 줄은 작성된대로 검토됩니다. 코드 검토가 극도로 진행되었습니다.


7
나는 이것에 대해 강력하게 논쟁 할 것이다. 물론, 그것은 두 사람에 의해 검토되고 있지만, 그 사람들은 일반적으로 코드가 작성되는 것과 같은 페이지에 있습니다. 코드 검토는 코드를보고 "doh! 사례를 잊어 버렸습니다"종류의 문제를 찾는 완전히 다른 상태의 사람입니다. XP는 실제로 그 문제를 해결하지 못합니다.
Billy ONeal

4

코드 검토 및 테스트는 종종 같은 종류의 버그를 포착하지 못하며, 버그의 위치를 ​​알고 있기 때문에 코드 검토에서 발견 된 버그를 수정하기가 더 쉽습니다.

코드가 기록되지 않은 상태에서 테스트를 통과했기 때문에 버그가 없는지 알 수 없습니다. "테스트는 버그가 존재한다는 것이 아니라 버그가 있다는 것을 증명할 수 있습니다." (디즈 크라?)

코드 검토는 코드 스타일을 동일하게 유지하며 코드가 좋지 않지만 현재 작동하는 장소를 찾을 수 있습니다. 유지 보수 비용을 줄입니다.

또한 대기업과 스타트 업의 요구도 다릅니다. 스타트 업은 일반적으로 실패하고 빠르게 움직여야합니다. 대기업은 가능한 빨리 수행하지 않고 일을 수행하는 것보다 훨씬 많은 가치를 얻습니다. 대기업보다 신생 기업에서 일하는 것이 좋을 수도 있지만 이것이 적합하지 않은 곳에서 신생 기업 전략을 강구하려는 이유는 아닙니다.


2

코드 검토 만 UI / UX 변경 사항을 설정합니까? 코드 검토가 아니라 사용성 테스트라고 주장합니다. 코드 검토는 코드에 있기 때문에 사용자 / 테스터 / 비즈니스 / 보지 못하는 모든 문제를 제기하는 것에 관한 것입니다. 단서가 바로 그 이름입니다.

이제 어딘가에 그려지는 선이 있음에 동의합니다. 동일한 UI 변경의 4 가지 반복을 검토하십니까? 또는 코드를 유지 관리하기가 쉽지 않은 4 가지 반복을 수행합니까? 두 가지 접근 방식을 모두 측정하고 팀에 적합한 균형을 찾으려고하지만 코드 검토를 완전히 포기하지는 않습니다.

코드 검토로 문제가 발생하지 않더라도 문제가 발생하지 않을 때까지 거의 알아 차리지 못하는 이점이 있습니다. 모든 코드는 두 명의 개발자가 검토하므로 두 명의 개발자가 변경 내용과 달성하려는 의도를 알 수 있습니다. . 그래서 그들 중 하나는 다음날 아프게되고 일주일 동안 쉬게되고, 다른 하나는 그들이하고있는 긴급한 일을 주울 수 있습니다.


1

나는 TDD 및 CI와 함께 집단 코드 소유권 및 페어링이 공식 코드 검토 세션에 대한 민첩한 반점이라는 데 동의하는 경향이 있습니다.

UP / Spiral에서도 "코드 검토"라는 특정 프로세스 단계에 대한 열렬한 팬이 아니 었습니다. 왜냐하면 같은 에너지가 일부 선행 투자에 투자 된 경우 발견 될 수있는 문제의 종류가 나중에 발견 될 수 있기 때문입니다. 협업과 간단한 자동화.

디자인에 대한 일부 공유 검토 (보통 화이트 보드에 최소한 UML로 표현됨)는 대규모 디자인 문제 또는 API 사용 부족 등을 의미하며 많은 코드가 작성되기 전에 발생했습니다. -자동 연속 통합 빌드와 함께 FxCop, CheckStyle, FindBugs (또는 이와 유사한)가 실행되어 명명, 스타일, 가시성, 코드 복제 등을 포착합니다.

다운 스트림 코드 검토 습관이 생성 한 것보다 더 빨리 실패하고 피드백을받을 수있었습니다.

나는 앉아서 한 번에 코드베이스를 살펴 보는 것이 시간 낭비라고 말하지는 않지만 코드 검토가 무언가를 호출하는 게이팅 단계가되는 것은 진행중인 많은 작업을 생성하는 것처럼 보입니다. 더 나은 검사 / 협력 업스트림으로 피할 수 있습니다.


0

코드 검토에서 기대하는 주요 목표 중 하나는 코드 유지 관리의 편의성을 높이는 것입니다. 코드 검토를 통해 모든 사람이 우수한 코딩 표준을 준수하는 명확한 코드를 작성할 수 있습니다. 대부분의 코드는 특히 대기업에서 많은 유지 보수를받습니다. 유지 보수 가능한 코드에 대한 회수는 코드가 릴리스되기 전에 시작한 후 계속 진행해야합니다.

코드 검토 자체는 절대로 코드를 변경해서는 안됩니다. 코드 검토 결과 변경이 필요하다고 표시되면 변경을 구현하면 코드가 변경됩니다.

검토 결과 코드 상태가 변경 될 수 있지만 언급 한 문제와는 관련이 없습니다.

코드 검토로 인해 여러 코드가 변경되면 개발 프로세스에서 문제가 발생합니다. 테스터의 수가 주어지면 벽에 던져서 테스터가 문제의 정신을 찾도록 할 수 있습니다.

완료된 상태에서 테스터에게 문제가 발생해야합니다. 테스터가 시간이 지남에 따라 동일한 테스트를 다시 수행하지 않도록 가능한 한 많은 테스트를 자동화해야합니다.

UI / UX에는 약간의 테스트 시간이 필요하지만 프런트 엔드에 디자인 / 개발 전문가가 있으면이를 줄일 수 있습니다. 또한 화면 앞의 얼굴이 필요합니다. 그러나 내가 작업 한 모든 응용 프로그램에서 코드의 상대적으로 작은 부분이었습니다.

변경 사항 (버그 수정 포함)을 구현하는 비용은 일반적으로 모든 단계에서 증가합니다. 개발에서 버그를 찾는 것은 테스트 후에 버그를 수정하는 것보다 일반적으로 저렴합니다.

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