가능성이 거의없는 사례에 대한 코드 검토에서 의견 불일치를 어떻게 처리합니까?


188

경로 적용 팀에서 로봇 공학 스타트 업에서 일하고 있으며 풀 요청을 제출하면 코드가 검토됩니다.

1 년 이상 팀에 근무한 팀원은 내가 필요하다고 생각하는 것보다 훨씬 더 많은 작업을 수행 할 것을 제안하는 내 코드에 몇 가지 의견을 제시했습니다. 아니요, 저는 게으른 개발자가 아닙니다. 나는 좋은 주석, 변수 이름, 들여 쓰기가 있고 케이스를 올바르게 처리하는 우아한 코드를 좋아합니다. 그러나 그는 동의하지 않는 다른 유형의 조직을 염두에두고 있습니다.

예를 들어 보겠습니다.

나는 내가 만든 전환 발견 알고리즘으로 변경하기 위해 테스트 케이스를 작성하는 데 하루를 보냈다. 그는 내가 일어날 가능성이 거의없는 불분명 한 사건을 처리 할 것을 제안했다. 실제로는 그것이 일어날 가능성조차 확실하지 않다. 내가 만든 코드는 이미 모든 원래 테스트 사례와 내가 찾은 일부 새로운 사례에서 작동합니다. 내가 만든 코드는 이미 야간에 실행되는 300 개 이상의 시뮬레이션을 통과합니다. 그러나이 모호한 사례를 처리하려면 로봇 성능을 개선하는 데 더 많은 시간이 소요될 수 있습니다. 분명히, 지금까지 우리가 사용했던 이전 알고리즘은이 모호한 사례를 처리하지 않았으며 생성 된 40k 보고서에서 한 번도 발생하지 않았습니다. 우리는 신생 기업이며 제품을 개발해야합니다.

나는 이전에 코드 검토를 한 적이 없으며 너무 논쟁 적인지 확실하지 않습니다. 내가 조용히하고 그가하는 말을해야합니까? 나는 시간을 잘 활용한다는 것에 강력하게 동의하지 않더라도 머리를 쓰지 않고 변경하기로 결정했습니다.


나는 동료를 존중하며 그를 지능적인 프로그래머로 인정합니다. 나는 단지 그 점에 동의하지 않고 코드 검토에서 의견 불일치를 처리하는 방법을 모른다.

선택한 답변이 주니어 개발자가 코드 검토에서 의견 불일치를 처리하는 방법을 설명하는이 기준을 충족한다고 생각합니다.


152
단위 테스트는 부분적으로 누군가가 코드 변경을 확인하여 모호한 방식으로 코드를 깨뜨릴 때 백만 분의 1 개의 결함을 잡아야한다는 것을 알고 있습니까? 단위 테스트는 코드가 올바른지 보장에 관한없는 지금 뿐만 아니라 3 년 동안 다른 사람이 당신이 쓴 코드를 유지하는 경우.

189
@Klik "실제 입력은 절대 이렇지 않을 것입니다." 나는 "이런 식으로 입력하지 않을 것"이라는 사례를 너무 많이 경험했으며 "이런 식으로"놀라 울 때 놀라고 있었습니다 . 프로덕션 환경에서는 모든 종류의 이상한 일이 발생할 수 있습니다. 소프트웨어 작동 방식 뿐만 아니라 어떻게

38
@Snowman 포인트 코드 검토 는 부분적으로 단위 테스트와 무작위 테스트 / 퍼지에서 찾을 수없는 100 만 개의 결함을 포착하기위한 것입니다.
데릭 엘 킨스

11
또한 코드 검토는 문제를 포착하기위한 것이 아니라 사용자가 더 잘 수행 할 수있는 방법을 배우기 위해 학습 기회로 취급 할 수 있다는 점도 기억해야합니다.
Steve Barnes

72
@Klik, 여기에 근본적인 문제처럼 들린다. 화를 내지 말고 항상 미소를 짓고 마음을 말하십시오. 당신은 즉시 그 사람에게 "음, 적어도 이틀이 걸릴 것입니다. 이것만큼 가치가 있습니까? 우리 상사에게 물어 보죠?" 둘째 당신은 사실입니다, 우리는 로봇에서 작업하는 사람을 잊지 마세요 "라고해야 가능하지 의 우리가 원하는 얼마나 많은 안티 물리적 코너의 경우 보스를 물어 보자 - 왼쪽 센서가 바로 센서의 오른쪽에 일하기 덮다". 귀하의 문제는 당신 , 당신의 문제는 교환 할 필요가있다 분노 에 대한 이야기 .
Fattie

답변:


227

일어날 가능성이 거의없는 불분명 한 사례-사실 나는 그것이 일어날 가능성조차 확신하지 못한다

코드에 테스트되지 않은 동작이없는 것이 매우 중요합니다. 코드 조각을 초당 50 회 실행하는 경우 약 5.5 시간의 런타임마다 100 만 번의 기회가 발생합니다. (귀하의 경우 확률은 더 낮아 보입니다.)

당신은 당신의 관리자 (또는 당신이 일하는 부서의 상급자 인 사람)와 우선 순위에 대해 이야기 할 수 있습니다. 예를 들어 코드 성능 작업이나 방탄 코드 작업이 최우선 순위인지 여부와 그 모퉁이 사례가 얼마나 어려운지 더 잘 이해할 수 있습니다. 검토자가 우선 순위에 대한 왜곡 된 아이디어를 가질 수도 있습니다. 담당자와 이야기를 나눈 후에는 검토 자의 제안에 동의하기가 더 쉬워지고 참조 할 것이 있습니다.

검토자를 두 명 이상 보유하는 것이 좋습니다. 한 동료 만 코드를 검토하는 경우 해당 코드를 알고있는 다른 사람이나 일반적으로 코드베이스를 살펴 보도록 요청하십시오. 두 번째 의견은 다시 검토 자의 제안에보다 쉽게 ​​동의하지 않는 데 도움이됩니다.

여러 코드 검토 중에 반복되는 주석이 여러 개 있으면 일반적으로 더 큰 내용이 명확하게 전달되지 않고 동일한 문제가 반복해서 발생합니다. 더 큰 것을 찾아서 검토 자와 직접 논의하십시오. 충분한 질문 질문. 코드 검토 연습을 시작할 때 많은 도움이되었습니다.


9
@ 9000 대답은 "인생이 그렇게 되었기 때문에"좌절 할 수도 있습니다. 예를 들어, 이것은 최근에 수행 한 것입니다 : "탭 위에 공백 사용" "왜?" "스타일 가이드가 말한대로." "왜?" "모릅니다. 쓰지 않았습니다." "하하, 당신은 분명히 틀렸고 맞습니다. 그리고 저는 코드를 탭으로 남겨 둘 것입니다!" 그런 다음 커밋 후 후크가 어쨌든 바뀌었지만 여전히 5 가지 이유 기술을 사용하는 경우 다른 사람을 좌절시킬 때까지가 아니라 합리적인 대답을 얻을 때까지 가십시오.
Nic Hartley

111
@QPaysTaxes : 모두는 왜 (공간 이상 또는 탭) 탭을 통해 공간 인수 알아야한다 : 모두가 정확하지만 일관성이 더 중요하기 때문에, 그래서 그냥, 하나를 선택 일치와 낭비하지 않는 시간 bikeshedding
slebetman

30
Not having untested behaviors in code can be very important. If a piece of code is run e.g. 50 times a second, a one in a million chance will happen approximately every 5.5 hours of runtime. (In your case, the odds seem lower.)-- 뭐? 아닙니다. Monte-Carlo 시뮬레이션을 실행하거나 코드에 임의의 요소가 포함되어 있지 않는 한 아닙니다. 컴퓨터는 특별히 지시하지 않는 한 종 곡선 또는 표준 편차에 따라 소프트웨어를 실행하지 않습니다.
Robert Harvey

10
@RobertHarvey : 정확히 무작위 화 된 요소 인 경쟁 조건과 같은 것을 고려하십시오. 또한 스트리밍 데이터를 처리하는 동안 데이터 종속 버그를 고려하십시오. 데이터는 임의적이지는 않지만 반복성이 높지 않으면 특정 바이트 조합이 반복해서 발생할 수 있습니다. 백만 분의 1 = 20 비트의 특정 조합에 의해 트리거되며, 이와 같은 버그는 비디오 스트림을 처리 할 때 즉시 볼 수 있습니다. 드물지만 정기적으로 발생하는 작업 (예 : 40 비트)
9000

7
@RobertHarvey : 아마도 가능합니다! 나는 단지 아주 드물게 일어날 가능성이없는 "불분명 한 사례"를 언급하면서 특정 호출에서 1e-6 확률 (0이 아닌 1이 아님)을 가질 수있는 코드 조각이 있다고 지적하고 싶었다. 이와 같은 버그는 일반적으로 테스트에서 보이지 않지만 프로덕션 에서는 볼 수 있습니다.
9000

323

재난의 원인이 될 수없는 코너 케이스의 예를들 수 있습니다.

아리아 4 측면에서 값을 개발되고 있었다 가속도계 (A) 내로 맞게 조정 된 16 비트 부호있는 정수 와 가속도계의 최대 가능 출력을 스케일링 할 때, 수 있기 때문에 결코 32,767을 초과하는 초과하지 않고 최소가 있었다 절대 아래 빠지지 - 32768“범위 확인 오버 헤드가 필요하지 않습니다”. 일반적으로 모든 입력은 변환하기 전에 범위를 확인해야하지만이 경우 불가능한 코너 케이스를 잡으려고합니다.

몇 년 후 Ariane 5 가 개발되고 측면 가속도계 스케일링을위한 코드는“사용이 입증 된”최소한의 테스트로 재사용되었습니다. 불행히도 더 큰 로켓은 더 큰 측면 가속을 기대할 수 있으므로 가속도계가 업그레이드되어 더 큰 64 비트 부동 소수점 값을 생성 할 수 있습니다 .

변환 코드에 "랩"이 더 큰 값은 기억하지 아니 범위 검사를, 그리고 1996 년 첫 출시에 대한 결과는 좋지 않았다. 회사에 수백만 달러가 들었고 프로그램에 큰 어려움을 겪었습니다.

여기에 이미지 설명을 입력하십시오

내가 만들려고 노력하고있는 점은 같은 테스트 케이스를 무시하지 말아야한다는 것입니다 결코 , 일이없는 매우 : 등, 가능성 그들은의 범위 검사를 요구 코딩 된 기준을 모두 외부 입력 값을 설정합니다. 그것이 테스트되고 처리 되었다면 재난을 피했을 수 있습니다.

참고 아리안 4에서이 버그 아니었다 (모든 가능한 모든 값에 대해 잘 작동으로) -이 표준을 준수하기 위해 실패했다. 다른 시나리오에서 코드를 재사용 할 때 코드가 크게 실패한 반면 값 범위가 잘 리면 정상적으로 실패 했을 수 있으며 테스트 케이스 있으면 값을 검토 할 수 있습니다. 또한 코더와 테스터가 폭발 후 수사관들로부터 비판을 받았지만 경영진, QA 및 리더십은 대부분의 책임으로 남았습니다.

설명

모든 소프트웨어가 안전에 중요하지 않거나 실패했을 때 너무 훌륭하지는 않지만, "불가능한"테스트는 여전히 가치가있을 수 있음을 강조하고자했습니다. 이것은 내가 아는 가장 극적인 경우이지만 로봇 공학은 또한 비참한 결과를 낳을 수 있습니다.

개인적으로 누군가 누군가 테스트 팀에 모퉁이 사건을 강조한 후에는이를 확인하기 위해 테스트를 실시해야한다고 말합니다. 구현 팀장 또는 프로젝트 관리자 발견 된 모든 오류를 해결하려고 시도하지 않지만 단점이 있음을 알고 있어야합니다. 또는 테스트가 구현하기에 너무 복잡하거나 비용이 많이 드는 경우 사용중인 추적기 및 / 또는 위험 레지스터에서 문제가 발생하여 테스트되지 않은 사례임을 분명히하기 위해 문제를 해결할 수 있습니다. 사용을 변경하기 전에 또는 부적절한 사용을 방지하십시오.


102
오 세상에이 대답은 이것입니다. OP는 물리적 영향을 갖는 소프트웨어를 다루고 있습니다. 바가 올랐습니다. 검토자는 코드를 다시 볼 때까지이 "가장자리 사례"를 인식하지 못했을 것입니다. 그리고 충분한 시간이 주어지면 아무것도 아닙니다. 실수로 로봇 팔을 누군가의 머리로 스윙하고 싶지는 않습니다 (로봇 팔 이이 코드와 관련이 있다는 것을 알지 못합니다).
Greg Burghardt

11
Greg & Steve, 이것은 좋은 예이지만 버그 의 예 입니다 . 명백히 모호한 버그입니다. 말 그대로 "버그", 0으로 나눕니다. 로보틱스 알고리즘을 작업 할 때는 물리적으로 가능하고 물리적으로 불가능한 개념에 대해 생각하는 것이 중심 아이디어입니다. (만약 당신이 물리적으로 가능한 개념을 아직 모른다면, 현재의 장치를 사용하십시오.) 여기서 논의중인 두 개발자 사이의 혼동은 (이 놀랍게도)이 패러다임에 만족하지 않기 때문입니다. 더 많은 선배들이 패러다임을 포함시키지 않았다면 그들의 팀 전체에 심각한 문제가있다.
Fattie

11
엣지 케이스를 다루어야하는 이유를 입증하는 실제 사례가 있다고 생각합니다. 인용 된 예는 작업에 잘못된 라이브러리를 사용하는 경우입니다 . 바나나 코드는 오렌지에 맹목적으로 사용해서는 안됩니다. 바나나를 다룰 수없는 오렌지 코드를 쓴 사람이 아니라 오렌지에 바나나 코드를 사용한 사람의 잘못입니다. (나는 거기에 큰 기술 회사 때문에이 비유에서 바나나를 위해 애플을 전환해야했다 ...)
Origin

51
@JoeBlow 버그, 그래,하지만 예방 한 추가 테스트 케이스 및 / 또는 코드 리뷰와 함께 잡힌 적이 있었다 하나. 하나님은 어느 시점에 "당신은 사람들을 알고 있습니다, 우리는이 범위를 검증해야한다고 생각합니다 ..."라고 말하고 다른 사람들은 "그것에 대해 걱정하지 마십시오 ... 불가능한 경우? " 만약 우리의 논리가 우리가 원하는 것보다 더 많은 갭을 가지고 있다는 버그가 충분하지 않다면, 나는 무엇을 말할지 모르겠다 ...
code_dredd

30
내가하려고했던 요점은 테스트 케이스가 절대로 일어날 가능성이 거의 없으며 모든 외부 입력 값 의 범위 확인을 위해 코딩 된 표준을 무시해서는 안된다는 것 입니다. 그것이 테스트되고 처리 되었다면 재난을 피했을 수 있습니다. Ariane 3에서 이것은 버그가 아니며 표준을 따르지 않았다는 점에 유의하십시오. 치명적으로 실패한 경우 다른 시나리오에서 코드를 재사용 할 때 값 범위가 잘린 경우 정상적으로 실패했을 수 있습니다.
Steve Barnes

84

이전에 처리되지 않았기 때문에 사용자의 노력 범위를 벗어납니다. 귀하 또는 귀하의 동료는이 사건을 다루는 데 가치가 있는지 관리자에게 문의 할 수 있습니다.


19
추가 사례를 다루는 것이 실제로 유용하고 유효한 개선이지만 다른 이유로 기존 PR에 뿌려 질 필요는 없습니다.
DeadMG

6
이전에 처리 되었든 아니든 관계없는 IMO는 단순히 작업 설명에 없었습니다.
Jasper N. Brouwer

6
이 의견을 반영하기 위해 검토 의견을 풀기위한 좋은 대답은 "좋은 점을 다루기 위해 티켓을 마련 할 것"입니다. 그것은 '일'이 완료되어야한다는 것을 인정하며, 또한 수행해야하는 다른 모든 작업과 함께 우선 순위를 갖도록 허용합니다.
Edd

17
더 강하게 동의하지 않았습니다. 기능을 처음 구현하는 동안이 문제가 발생하지 않았을 수 있다는 사실은 우리가 구체적으로 알지 못하기 때문에 불필요 할 수 있기 때문에 지금까지 믿을 수 없을만큼 운이 좋았다는 것을 나타내는 것일 수 있습니다. 가능성이 가장자리 사건의 가능성을 증가 - -이 알고리즘의 작동 방식을 변경하는 수정의 코드 리뷰는 정확히 잠재적 인 문제를 제기 할 수있는 시간입니다. 범위를 벗어 났는지 여부는 정확히 평가 한 후에 결정해야하며 문맥이 거의없는 경우에는 결정하지 않습니다.
Matthew 읽기

6
이것은 끔찍한 조언입니다! 스펙이 적절하지 않은 경우, 에지 케이스를 고려하지 않은 것으로 시작하기에 충분하지 않다고 가정하면 Since it wasn't handled before, it's out of the scope for your effort모든 단일 버그 보고서를로 표시 wontfix하기에 충분합니다.
Filip Haglund

53

복잡한 알고리즘을 사용하면 실제 환경에서 발생할 수있는 모든 테스트 사례를 생각했다는 것을 증명하기가 매우 어렵습니다. 실제로는 테스트 케이스가 제공되지 않기 때문에 의도적으로 테스트 케이스를 중단 한 경우 아직 생각조차하지 않은 다른 테스트 케이스가 파손 된 상태로 남아 있을 수 있습니다.

종종 발생하는 다른 효과는 추가 테스트 사례를 처리 할 때 알고리즘이 더 일반적이되며,이를 단순화하고 모든 테스트 사례에 대해보다 강력하게 만들 수있는 방법을 찾는 것 입니다. 따라서 유지 보수 및 문제 해결 시간을 절약 할 수 있습니다.

또한 야생에서 발생하는 "이것은 절대로 발생해서는 안됩니다"라는 버그가 있습니다. 알고리즘이 변경되지 않을 수도 있지만 처리되지 않은 유스 케이스에 대해 아무도 기억하지 않으면 입력이 수년 동안 변경 될 수 있기 때문입니다. 그렇기 때문에 숙련 된 개발자는 마음이 신선 할 때 이러한 종류의 일을 처리합니다. 당신이하지 않으면 나중에 물린 다시 돌아온다.


7
두 번째 단락에서 아주 좋은 지적을합니다. 나는 전에 그것을 경험했지만 그것을 분명히 표현하면 매우 도움이됩니다.
Klik

7
세 번째 경우 = 빙고. 나는 대부분 레거시 코드에서 일하고 있으며, 작업의 80 %가 가정 한 장소를 고치는 프로젝트가 있습니다. 나는이 대답을 그대로 좋아하지만, 때로는 시간 위기에 처할 때 정확하고 자세한 오류 메시지와 함께 우아한 실패를 설정하여 불가능한 에지 사례를 다루는 것이 좋습니다.
Jeutnarg

"[오류 설명] [로그온 한 사람이 서명 한 사양 [버전]에 따르면 이런 일이 발생할 수 없습니다."라는 예외를 기록하고 싶습니다.
Peter Wone 2012

그러나 이전에 테스트 사례가 없었기 때문에 코드가 사양을 이전으로 대체한다고 가정하면 해당 반복에서 새로운 테스트 사례를 맞출 필요는 없습니다. 그리고 그 코너 케이스에 대한 테스트가 없다면 코드 검토 피드백 imo가 아니라 새로운 티켓 / 작업이어야합니다.
kb.

38

이것은 기술적 질문이 아니라 비즈니스 전략 결정입니다. 제안 된 수정은 거의 발생하지 않는 매우 모호한 경우에 대한 것입니다. 장난감을 프로그래밍하거나 의료 장비 또는 무장 드론을 프로그래밍하는 경우 큰 차이가 있습니다. 드문 오작동의 결과는 매우 다릅니다.

코드 검토를 수행 할 때 드문 경우 처리에 투자 할 금액을 결정할 때 비즈니스 우선 순위에 대한 기본 이해를 적용해야합니다. 비즈니스 우선 순위를 해석 할 때 동료와 의견이 맞지 않으면 비즈니스 측면에서 누군가와 토론하고 싶을 수 있습니다.


5
정확히 다른 사람에게 보상 할만한 가치가 있는지 물어보십시오. 나는 적어도 테스트 케이스를 작성하고 다른 사람이 구현할 가치가 없다는 결정을 내렸다는 의견과 함께 "건너 뛴"것으로 표시했다. CYA
Sean McSomething

2
나중에, 코드 범위에서 규모가 크지 않지만 긴급하지 않은 것이 코드 검토에 나올 때마다 추적기에서 문제를 만든 다음 수행해야 할 다른 작업과 함께 우선 순위를 지정하는 경향이 있습니다. 때때로 이것은 작업이 우선 순위 목록의 맨 끝까지 추방된다는 것을 의미하지만, 그 경우에는 실제로 중요하지 않습니다.
Tacroy

1
"확률이 아니라 스테이크입니다!"
user1068

2
이것이 가장 좋은 대답입니다. 문제는 실제로 우선 순위를 설정하고 위험을 관리하는 것입니다.
wrschneider

나는 이것이 사업 결정에 동의합니다. 티켓을 수정하는 데 필요한 예상 시간으로 티켓을 생성하고, 상사에게 배정하고 (명령 체인에서 시간 할당을 담당하는 사람) 티켓에 할당 된 우선 순위를 갖도록 요청하십시오 (또는 경우에 따라 거부 됨). 수 있음)
마티 Nalis

21

코드 검토는 순전히 코드 정확성에 관한 것이 아닙니다. 실제로, 이는 지식 공유와 팀 스타일 / 디자인 컨센서스를 만들기위한 느리지 만 꾸준한 프로세스라는 이점 아래에 있습니다.

당신이 경험하는 것처럼, "올바른"것으로 간주되는 것은 종종 논쟁의 여지가 있으며, 모든 사람들은 그것이 무엇인지에 대한 자신의 각도를 가지고 있습니다. 내 경험상 제한된 시간과주의로 인해 코드 검토가 일관되지 않을 수 있습니다. 동일한 개발자가 다른 개발자와 다른 시간에 따라 동일한 문제가 발생하거나 그렇지 않을 수 있습니다. "이 코드를 어떻게 개선 할 것인가?" 종종 자연스럽게 자신의 노력에 추가하지 않을 변화를 제안합니다.

경험이 풍부한 코더 (개발자로서 15 년 이상)로서 저보다 경험이 적은 코더들에 의해 종종 리뷰를받습니다. 때때로 그들은 저에게 약간 동의하지 않거나 중요하지 않다고 생각되는 변화를 요구합니다. 그러나 나는 여전히 그 변경을합니다. 나는 최종 결과가 제품에 약점을 초래할 수 있다고 생각 될 때, 시간 비용이 매우 높거나 "정확한"관점이 객관적으로 될 수 있다고 생각할 때만 변화에 맞서 싸운다. 사용중인 언어로 작동하지 않거나 벤치 마크에 따르면 성능이 개선 된 것은 아닙니다.

따라서 전투를 신중하게 선택하십시오. 필요하지 않다고 생각되는 테스트 케이스를 코딩하는 이틀은 싸울 시간 / 노력의 가치가 없을 것입니다. GitHub 풀 요청과 같은 검토 도구를 사용하는 경우 반대 의견을 지적하기 위해인지하는 비용 / 혜택에 대해 의견을 말하지만 여전히 작업을 수행하는 데 동의합니다. 이것은 완만 한 푸시 백으로 간주되므로 검토자가 경계를 치고 있음을 알고 더 중요한 근거를 포함하여 교착 상태에 빠질 때 이와 같은 사례를 확대 할 수 있습니다. 서면 의견 불일치가 커지는 것을 피하고 싶습니다. 업무 차이에 대한 인터넷 포럼 스타일의 논쟁을 원하지 않기 때문에 먼저 문제를 논의하고 토론 결과에 대한 공정한 요약을 기록하는 것이 도움이 될 수 있습니다.친절한 토론은 당신을 위해 결정합니다).

이벤트 후 스프린트 검토 또는 개발 팀 계획 회의 등에 유용한 주제입니다. 예를 들어 "코드 검토에서 개발자 A가이 추가 테스트 케이스를 식별했습니다. 작성하는 데 2 ​​일이 더 걸렸습니다. 팀은 추가 비용이이 비용으로 정당화되었다고 생각합니까? " -이 접근 방식은 실제로 작업을 수행하는 경우 훨씬 더 효과적입니다. 작업을 완료했으며 위험 회피 및 기능 개발을 위해 팀을 폴링하려고합니다.


2
"가능한 한 중립적으로 제시하십시오".. 아주. 나는 NeilS보다 더 나아가서 "화를위한 분노"를 바꿔야한다고 제안합니다. (예를 들어, 현재의 특정 예에서) 즉각적이고 공개적으로 말하십시오. "스티브, 코너 케이스는 현재의 기계 설계에 비 물리적이라고 생각하지 않습니까? 친구가 아닌가? "2 일 동안 쓸만한 가치가 있더라도 말입니다."
Fattie

1
"검토 도구를 사용하는 경우" 가 핵심 관찰 사항입니다. IME, 이러한 도구는 검토 기록을 유지하는 데 적합하지만 실제 작업은 토론과 직접 대면합니다. 양방향 정보 흐름을위한 가장 효율적인 방법입니다. 검토에 동의하지 않는 경우, 그 의견에 대해 건설적으로 직접 동의 한 다음 동의 한 결과 만 도구에 입력하십시오.
Toby Speight

@ TobySpeight : 동의하고 답변에 통합하려고했습니다.
Neil Slater

1
2 시간은 내가 싸우지 않을 것입니다. 이틀 동안 나는 일주일 동안 내가 저지른 다른 모든 일을 끝내지 못할 것이다.
Matthew 읽기

15

적어도 모호한 사건에 대해 주장하는 것이 좋습니다. 그렇게하면 미래의 개발자들에게 당신이이 사건에 대해 적극적으로 결정한 것을 볼 수있을뿐만 아니라 이미 실패한 핸들링이 잘되어 있다는 사실도 놀라워 질 것입니다.

그런 다음 실패를 일으키는 테스트 사례를 만듭니다. 이런 식으로 동작이 더 잘 문서화되고 단위 테스트에 표시됩니다.

이 답변은 "가능한 한 극도로 가능하지 않다"는 당신의 판단도 정확하고 우리는 그것을 판단 할 수 없다고 가정합니다. 그러나 그것이 가능하고 동료가 동의한다면, 사건에 대한 명백한 주장은 두 사람 모두에게 만족스러운 해결책이 될 것입니다.


전적으로 동의합니다. 이 경우 어떤 코드를 처리 할 수없는 경우, 가능한 한 빨리 입력을 확인하고이 실패합니다. "X를하면 프로그램이 충돌한다"는 "X를하면 우리의 로봇이 사람을 죽인다"보다 낫다
Josef

1
좋은 제안. 좋은 코드는 절대로 실패하지 않는 것으로 입증 된 코드이지만, 설명 할 수없이 실패하더라도 복구 할 수있는 잘 정의 된 방식으로 실패합니다. 잘못 될 수는 있지만 잘못 될 경우 수리 또는 수리가 불가능한 것으로 판명 된 코드는 그리 크지 않습니다 ...
leftaroundabout

이것, 나는 똑같은 것을 게시하려고했습니다. 검토자가 가능한 실패를 지적하고 있는데이를 처리하는 방법은 다른 질문입니다.
SH-

2
아뇨, 당신의 코드에서 주장을하지 마십시오. 주장이 컴파일되지 않으면 아무도 그것을 보지 못할 것입니다. 어설트가 컴파일되면 로봇이 충돌합니다. 프로덕션 코드에서 '일어날 수없는 일'에 대한 주장이 발동되어 그 시스템뿐만 아니라 그 시스템에 의존하는 모든 것이 무너지는 사례를 여러 번 보았습니다.
Tom Tanner

@TomTanner "실패 처리가 잘되어 있어야합니다." 코드에서 이미 실패한 어설 션을 처리 할 수 ​​있다고 가정합니다. 안전한 실패 전략은 물리적 시스템의 일부 여야하므로 크게 확장되지는 않을 것입니다.
WorldSEnder

13

당신이 거기에 새로운 것처럼 보이기 때문에 당신이 할 수있는 단 한 가지가 있습니다-팀 리더 (또는 프로젝트 리더)와 확인하십시오. 13 시간은 사업 결정입니다. 일부 회사 / 팀의 경우 많이; 일부는 아무것도 아닙니다. 아직 당신의 결정이 아닙니다.

리드가 "그 사건을 커버하라"고 말하면 괜찮습니다. 그가 "나아, 망쳐"라고 말하면, 그의 결정과 책임.

일반적으로 코드 검토는 긴장을 푸십시오. 한두 번 당신에게 작업을 반환하는 것은 완벽하게 정상입니다.


7

@SteveBarnes 답변에서 제기되었지만 일종의 문제가 있다고 생각하지 않습니다.

실패의 영향은 무엇입니까?

일부 필드에서 실패는 웹 페이지의 오류입니다. PC 블루 스크린과 재부팅.

다른 분야에서는 삶이나 죽음입니다-자가 운전 자동차가 잠 깁니다. 의료용 페이스 메이커가 작동을 멈 춥니 다. 또는 스티브의 대답 : 물건이 터져 수백만 달러의 손실이 발생합니다.

세상 그 극단의 차이는.

"실패"를 다루는 13 시간의 가치가 궁극적으로 당신에게 달려 있지 않아야합니다. 관리 및 소유자에게 달려 있습니다. 그들은 더 큰 그림에 대한 느낌을 가져야합니다.

가치가있을만한 것을 추측 할 수 있어야합니다. 로봇이 단순히 속도를 줄이거 나 멈추게됩니까? 성능 저하? 아니면 로봇이 고장 나면 금전적 손상이 발생합니까? 삶의 상실?

그 질문에 대한 대답은 "회사 시간의 13 시간 가치가 있는가"에 대한 답을 이끌어야합니다. 통지 : 나는 회사 시간을 말했다. 그들은 청구서를 지불하고 궁극적으로 가치가있는 것을 결정합니다. 경영진은 최종 결정을해야합니다.


1
또한, 모호한 경우에도 수정되지 않은 알려진 결함의 책임 영향은 무엇입니까?
chux

5

작업의 우선 순위를 담당하는 사람과 대화 할 수 있습니까? 시작시 CTO 또는 제품 소유자 일 수 있습니다. 그는이 추가 작업이 필요한지, 그 이유를 찾는 데 도움을 줄 수 있습니다. 또한 매일 일 어설 때도 걱정할 수 있습니다 (만약 있다면).

작업 계획에 대한 명확한 책임이없는 경우 (예 : 제품 소유자) 주위 사람들과 대화하십시오. 나중에 모두가 제품을 반대 방향으로 밀고있는 문제가 될 수 있습니다.


5

주니어 개발자, 수석 개발자 또는 심지어 CEO인지 여부에 관계없이 의견 불일치를 처리하는 가장 좋은 방법은 동일합니다.

콜 럼보처럼 행동하십시오 .

Columbo를 본 적이 없다면 아주 환상적인 쇼였습니다. 콜럼 보는 매우 가정적인 성격이었습니다. 대부분의 사람들은 그가 조금 미쳤으며 걱정할 가치가 없다고 생각했습니다. 그러나에 의해 나타나는 겸손하고, 단지 그가 자신의 사람을 얻을 수 있었다 설명 할 사람들을 요청.

나는 그것이 또한 Socratic 방법 과 관련이 있다고 생각합니다 .


일반적으로 자신과 타인에게 질문을하여 올바른 선택을하도록하십시오. "맞습니다. 당신이 틀 렸습니다."라는 입장이 아니라 정직한 발견의 입장에서 왔습니다. 아니면 최소한 최선을 다하십시오.

귀하의 경우 여기에 두 가지 아이디어가 있지만 기본적으로 동일한 목표를 가지고 있습니다. 코드를 개선하는 것입니다.

다른 기능의 개발을 선호하는 잠재적으로 불가능한 (불가능한?) 사례에 대한 코드 적용 범위가 급증하는 것이 가장 좋은 방법이라는 인상을 받고 있습니다.

동료는 코너 케이스에 대해 더주의를 기울이는 것이 더 가치가 있다는 인상을 받고 있습니다.

그들은 당신이 보지 못하는 것을 무엇을보고 있습니까? 그들이 보지 못하는 것을 어떻게 보십니까? 주니어 개발자는 자연스럽게 질문을해야 하기 때문에 실제로 훌륭한 위치에 있습니다. 또 다른 대답에서 누군가는 모퉁이 사건이 얼마나 놀라운 지 언급합니다. "X, Y, Z라는 인상을 받았다는 사실을 이해하도록 도와주십시오. 왜 내가 빠졌는가? 왜 위젯 framboozle을합니까? 나는 끔찍한 상황에서 말이 될 것 같은 인상을 받았습니다." "스위 즐 스틱은 실제로 ANZA 브러쉬를 확대합니까?"

당신의 가정과 발견에 의문을 가질 때, 당신은 파헤쳐 서 편견을 발견하고 결국 올바른 행동 과정이 무엇인지 알아낼 것입니다.

팀의 모든 사람이 완벽하게 합리적이며 팀과 제품을 가장 염두에두고 있다고 가정합니다. 그들이 이해가되지 않는 일을하고 있다면, 자신이하는 일이나 모르는 일을 알아 내야합니다.


3

13 시간은 그다지 중요하지 않습니다. 돈을 받는다는 것을 기억하십시오. 그냥 "직업 보안"이라고 말하면됩니다. 또한 팀간에 좋은 업을 유지하는 것이 가장 좋습니다. 이제 일주일 이상 걸리는 것이 있다면 관리자를 참여시켜 가장 시간이 잘 활용되는지, 특히 동의하지 않는 경우 그에게 물어볼 수 있습니다.

그러나 그룹 내에서 레버리지가 필요한 것 같습니다. 활용 방법은 다음과 같습니다. 용서를 구하지 말고 허가를 요청하지 마십시오. 당신이 적합하다고 생각하는대로 프로그램에 내용을 추가하고 (즉, 과정의 범위 내에서, 즉 사장이 원하는 문제를 완전히 해결하도록하십시오.) 사실 후에 관리자 나 동료에게 말하십시오. 그들에게 묻지 말아라 : "기능 X를 추가해도 괜찮다". 오히려 프로그램에서 개인적으로 원하는 기능을 추가하십시오. 그들이 새로운 기능에 화를 내거나 동의하지 않으면 제거하십시오. 그들이 좋아한다면 그것을 유지하십시오.

또한 그들이 당신에게 무언가를 요구할 때마다, "추가 마일"로 가서 그들이 언급했던 것보다 더 많은 것들이나 그들이 말한 것보다 더 잘 작동하는 것들을 추가하십시오. 그러나 여분의 마일을 갈 수 있는지 물어보십시오. 그냥하고 그것을 마치고 나면 부담없이 말하십시오. 당신이하고있는 것은 그들을 훈련시키는 것입니다.

당신의 매니저는 당신을 "가자"라고 말하고 당신을 신뢰하기 시작하고, 동료들은 당신을 당신이 프로그램을 소유하기 시작하는 주자로보고 시작하게 될 것입니다. 그리고 당신이 언급 한 것과 같은 일이 미래에 일어날 때, 당신은 본질적으로 팀의 스타이기 때문에 당신이 그들에 동의하지 않으면 팀원들은 물러 설 것이므로 더 많은 것을 말할 것입니다.


8
프로그래머가 사전 예방 적이며 단순히 "높은 주문을받는 것"이 ​​아니라면,이를 제시하는 방식은 전문적으로 무책임하고 비 윤리적입니다. 기본적으로 OP는 요청 된 기능에 대한 작업이 아니라 "개인적으로 원하는"기능에 대한 작업에 고용주의 시간과 돈을 소비 한 다음 해당 기능을 제거하기 위해 고용주의 시간과 돈을 소비해야한다고 말합니다. 이로 인해 잠재적 결함이 추가되거나 다른 개발자가 코드 검토 / 유지 보수 시간을 고려하지도 않습니다. 나는 당신이 묘사하는 태도, 특히 후배의 태도로 개발자를 해고 할 것입니다.
데릭 엘 킨스

1
당신은 어떤 식 으로든 옳습니다. 특히 엔지니어가 고객의 비전이 무엇인지에 대한 감각없이 스스로 출발하는 경우. 그러나 내가 말한 것을 완전히 방해하지 마십시오. 나는 단지 "추가 마일"로 가겠다 고 말했습니다. 즉, 당신은 당신의 상사가 말한 것을 취하고 그것을 확장한다는 것을 의미합니다. 그리고 소프트웨어에서 그것은 사소한 똥처럼 보이는 소프트웨어와 전문가가 만든 것처럼 보이는 소프트웨어의 차이점입니다. 나는 그들이 말하는 내용이 완전한 쓰레기라고해도 "정확하게 말하는 내용"을하는 많은 개발자들을 알고 있습니다. 그 개발자들은 결코 아무 것도 중요하지 않습니다.

2
당신이 묘사 한 것을 수행하는 책임있는 방법이 있습니다. 여러 번 요구 사항이 많은 공간을 남겨두고 더 세련된 결과를 얻기 위해 판단력을 사용하는 것이 좋습니다 (유지 보수 노력을 포함하여 노력과 균형을 맞추기 위해 노력). 능동적으로 버그를 지적하고 수정하는 것이 좋습니다. 지출 자신의 시간을 당신이 생각하는 기능 프로토 타입을 회사의 관심과 가능한 포함에 대한 팀에 제시하는 것도 좋은입니다. 귀하의 "개인적 요구"는 관련이 없으며, 지불되는 동안의 초점은 사업의 이익에 초점을 두어야합니다.
데릭 엘 킨스

두 번째 의견을 참고하십시오. 어떻게하려고 생각하는지는 어떻게 생각합니까? 내가 말했듯이, 내 문제는 당신이 그것을 제시 한 방식에 더 있습니다. 개발자는 의미있는 결정을 내릴 수 있다는 자부심이 필요하지만 비즈니스 목표 나 우선 순위에 대한 일반적인 그림이 없다는 사실을 알고 겸손해야합니다. 수석 개발자가 많을수록 잘못된 결정을 내릴 가능성이 적고 비즈니스 목표가 무엇인지, 목표를 향한 방법을 알 가능성이 높습니다.
Derek Elkins 2012

또한 제 의견은 리드 또는 컨설턴트 수준으로 전환하려는 사람들을위한 것입니다. 회사는 특히 내 의견을 위해 나를 고용합니다.

3

코드 검토는 여러 가지 목적으로 사용됩니다. 당신이 분명히 알고있는 것은 " 이 코드는 목적에 맞습니까? "입니다. 즉, 기능적으로 정확 합니까? 적절하게 테스트 되었습니까? 명확하지 않은 부분이 적절하게 언급되어 있는가; 프로젝트 컨벤션을 준수합니까?

코드 검토의 또 다른 부분은 시스템에 대한 지식을 공유하는 것입니다. 작성자와 검토 자 모두가 변경된 코드와 코드가 나머지 시스템과 상호 작용하는 방법에 대해 배울 수있는 기회입니다.

세 번째 측면은 변경하기 전에 존재했던 문제를 검토 할 수 있다는 것입니다. 종종 다른 사람의 변경 사항을 검토 할 때 이전 반복에서 내가 놓친 것을 발견 할 것입니다 (종종 내 자신의 것). "여기보다 더 강력하게 만들 수있는 기회가 있습니다"와 같은 진술은 비판이 아니며 하나의 것으로 간주하지 마십시오!

저의 현재 팀은 코드 검토를 코드가 커밋하기 전에 코드를 통과하지 않아야하는 게이트웨이 나 장애물로 간주하는 것이 아니라 주로 특정 기능 영역에 대해 다소 체계적으로 논의 할 수있는 기회로 간주 합니다. 정보 공유를위한 가장 생산적인 기회 중 하나입니다. (따라서 항상 동일한 검토자가 아닌 팀 주위에서 검토를 공유해야하는 좋은 이유입니다).

코드 검토가 대립 활동으로 인식되면 이는 자체 이행 예언입니다. 대신 작업가장 협력적인 부분 으로 간주하면 제품 및 작업 방식에 대한 지속적인 개선이 촉진됩니다. 예를 들어 제안의 상대적 우선 순위에 대한 검토가 명확 할 수 있다면 도움이됩니다 x. 예를 들어 " 여기에 유용한 의견을 말하고 싶습니다"와 "이것이 부정적 이면 중단됩니다"와는 약간의 차이가 있습니다.

위의 많은 일반적인 진술을 한 후에는 특정 상황에 어떻게 적용됩니까? 나는 내 조언이 공개적인 질문으로 리뷰에 응답하고 어떤 접근법이 가장 가치가 있는지 를 협상 하는 것이 분명하다는 것을 분명히 알기를 바랍니다 . 추가 테스트가 제안되는 사례의 경우 "예, 테스트 할 수 있습니다 . 구현하는 데 <시간> 이 걸릴 것으로 예상됩니다 . 이점이 가치가 있다고 생각하십니까? 테스트가 필요하지 않다고 보장 할 수 있습니까? "


귀하의 질문을 읽을 때 충격을주는 한 가지 : 새로운 테스트 사례를 작성하는 데 이틀의 노력이 필요한 경우 새 테스트는 기존 테스트와 매우 다른 시나리오입니다 (이 경우 아마도 value) 또는 테스트 스위트에서 개선 된 코드 재사용의 필요성을 확인했습니다.


마지막으로 코드 검토의 가치에 대한 일반적인 의견 (그리고 위에서 말한 것에 대한 열렬한 요약) 으로 Daniel Vetter의 Maintainers Do n't Scale 에서이 진술을 좋아합니다 .

적어도 저에게는 리뷰는 좋은 코드 품질을 보장하는 것뿐만 아니라 지식 확산과 이해력 향상에 관한 것입니다. 처음에는 코드를 이해하는 사람이있을 수 있습니다. 검토를 잘 마친 후에는 코너 케이스를 포함하여 적어도 두 사람이 완전히 이해해야합니다.


3

코드는 항상 더 나을 수 있습니다.

코드 검토 중이고 버그를 발견 할 수있는 더 나은 단위 테스트 나 단위 테스트가 표시되지 않으면 코드가 완벽하지 않고 검토자가 작업을 수행하지 않는 것입니다. 개선을 언급하기로 선택했는지 여부는 개인적인 선택입니다. 그러나 팀에서 코드 검토를 할 때마다 누군가가 더 좋을 수도 있고 모든 사람들이 시간을 낭비했을 가능성이 있음을 알 수 있습니다.

즉, 당신이 의견에 따라 행동하든 아니든 팀에 달려 있습니다. 변경 사항으로 문제가 해결되거나 팀이 승인 한 변경없이 충분한 가치를 추가 한 경우 해당 팀이 해당 사항을 병합 한 후 나중에 해결하기 위해 백 로그에 의견을 기록합니다. 는 IF 팀은 변경 사항이 값보다 더 위험 또는 복잡성을 발견 한 후 그에 따라 문제를 해결해야합니다.

모든 코드에는 테스트가 가능하고 적어도 하나 이상의 리팩토링을 사용할 수있는 하나 이상의 엣지 케이스가 있음을 기억하십시오 . 그렇기 때문에 모든 사람들이 동시에 동일한 코드를보고있는 그룹으로 코드 검토를 수행하는 것이 가장 좋습니다. 결국 모든 사람들은 검토중인 코드가 (있는 그대로) 수용 가능한지 아닌지에 대해 합의에 도달 할 수 있고 커뮤니티 기반으로 병합하기에 충분한 가치를 추가하거나 병합하기에 충분한 가치가 있기 전에 특정 일을 수행해야하는 경우에 합의 할 수 있습니다 .

이 질문을하기 때문에 실제로 "코드 검토"를 수행하지 않고 다른 사람들이 비 결정적 방식으로 주석을 달기 위해 풀 요청 또는 다른 제출 메커니즘을 작성한다고 가정합니다. 이제 관리 문제에 대한 정의가 완료되었습니다. 귀하의 관리가 결정적이지 않고 실제로 코드 검토의 프로세스와 목적을 이해하지 못하고 "정의 완료"(DOD)가 없을 것 같습니다. 그들이 DOD를했다면이 질문에 명시 적으로 대답 할 것이기 때문에 여기에 와서 물어볼 필요는 없습니다.

어떻게 고치나요? 글쎄, 관리자에게 DOD를 제공하고 항상 모든 의견을 이행해야하는지 알려달라고 요청하십시오. 문제의 사람이 관리자 인 경우 답변은 자명합니다.


3

이 질문은 방어 프로그래밍의 미덕, 코너 사례의 위험 또는 실제 제품의 버그로 인한 치명적인 위험에 관한 것이 아닙니다. 실제로 그것은 실제로 소프트웨어 엔지니어링에 관한 것도 아닙니다 .

그것이 중요한 것은 중학교 개업의가 하급 의사가 동의하거나 감사 할 수 없을 때 상급 개업의 지시를 처리하는 방법입니다.

주니어 개발자가되는 것에 대해 감사해야 할 두 가지가 있습니다. 첫째, 그것은 그것의 동안을 의미 할 수 가능성이없는 - 확률의 균형 - 잘못된에서 오른쪽으로 걸, 그, 그것은이다. 동료가 자신의 가치를 볼 수 없다는 제안을하고 있다면, 그것을 이해하기에 충분한 경험이 없을 가능성을 진지하게 받아 들여야합니다. 나는이 포스트에서 그런 의미를 얻지 못한다.

두 번째로 감사해야 할 것은 수석 파트너가 더 많은 책임이 있기 때문에 소위 말하는 것입니다. 후배가 중요한 것을 깨뜨려도 지시를 따랐더라도 문제가되지 않습니다. 예를 들어, 코드 검토에서 문제를 제기하지 않음으로써 선임이 문제를 해결 하도록 허용 했다면 상당히 귀찮게 될 것입니다.

궁극적으로 비즈니스를 신뢰하는 사람들의 지시에 따라 프로젝트를 진행하는 것은 직무의 암시 적 요구 사항입니다. 경험을 소중히 여기는 이유가있을 때 일반적으로 연장자를 연기 할 수 없습니까? 이해할 수없는 지시를 따르지 않겠습니까? 당신이 확신 할 때까지 세상이 멈춰야한다고 생각하십니까? 이 값은 팀 작업과 호환되지 않습니다.

마지막 요점. 6 개월 전에 작성한 프로젝트를 생각해보십시오. 대학에서 작성한 프로젝트를 생각해보십시오. 모든 버그와 거꾸로 된 디자인, 사각 지대 및 잘못 안내 된 추상화가 어떻게 보이는지보십시오. 6 개월 후에 현재하고있는 일과 똑같은 결함을 세어 보겠다고 말하면 어떻게됩니까? 현재 접근 방식에 사각 지대가 몇 개나 있는지 설명하는 데 도움이됩니까? 그것이 경험의 차이이기 때문입니다.


2

필요한 것보다 더 많은 작업을 수행하도록 제안하는 코드에 지속적으로 의견을 제시합니다.

권장 사항을 줄 수는 있지만 궁극적으로 필요한 것을 결정하는 것은 귀하의 역할이 아닙니다. 관리 또는이 경우 검토자가 결정한 사항을 구현하는 것이 귀하의 임무입니다. 너무 많거나 너무 필요한 것에 동의하지 않으면 직장에서 벗어날 수 있습니다. 결과적으로 이와 관련하여 평화를 지키는 것은 전문성의 일부입니다.

그는 내가 일어날 가능성이 거의없는 모호한 사건을 처리 할 것을 제안했다

방법도 비 버그 (라도 유용 실패 할 수 없습니다 즉. 뭔가 보여 여기에 다른 훌륭한 답변이 없습니다 지금 ) 여전히 때때로 다시 작동되어야한다. (예를 들어, 제품의 미래 안전을 구축하고 표준 등을 준수하는 경우) 훌륭한 개발자의 역할 중 하나는 가능한 한 모든 상황에서 코드가 강력 할 것이라는 확신을 갖는 것입니다. 대부분의 경우 현재 상황에서 테스트 된 상황에서 작업하는 것뿐만 아니라


2

코드 검토의 비즈니스 유용성을 높이기 위해 코드 검토 자에게 제안 (OP는 이러한 변경을 제안해야합니다) :

  • 의견을 유형별로 표시하십시오. "중요"/ "Must-Do"/ "선택적"/ "제안 개선"/ "좋아요"/ "무섭다".

    이것이 너무 CDO / 항문 / 복잡해 보인다면, 최소한 2 단계를 사용하십시오 : "검토를 통과하고 변경 사항을 병합하도록 수정해야합니다"/ "다른 모든 것".

덜 중요한 코드 검토 제안을 처리하기위한 제안 :

  • 선택한 발권 시스템에서 티켓을 개설하고 (팀에서 사용 하시겠습니까?) 제안을 추적하십시오.

  • 프로세스가 Fisheye 또는 이메일 검토와 같은 주석에 대한 응답을 허용하는 경우 티켓 번호를 코드 검토 항목에 대한 응답 주석으로 입력하십시오.

  • 검토 자에게 연락하여 해당 항목이 "수정해야하거나 병합 / 해제되지 않는"유형인지 명시 적으로 묻습니다.

    • 답변이 "예"이지만 동의하지 않는 경우 프로젝트 관리 담당자 (PM, 관리자 등)가 결정을 내릴 수 있도록하십시오. 불일치를 완전히 정직하게 제시하십시오. 이것은 어느 쪽이 "옳은가"가 아니라 프로젝트에 더 좋은 점에 관한 것이므로 PM / 관리자의 직무입니다.

이제 해당 티켓을 다른 개발 요청으로 취급하십시오.

  1. 에스컬레이션 후 긴급하게 결정된 경우 긴급 개발 요청으로 처리하십시오. 다른 작업을 우선 순위 해제하고 이에 대해 작업하십시오.

  2. 그렇지 않으면 할당 된 우선 순위와 ROI (다른 답변에서 설명한대로 비즈니스 라인에 따라 다를 수 있음)에 따라 작업하십시오.


2

이를 경영진에게 이관 해서는 안됩니다 .

대부분의 회사에서 경영진 은 코드 품질을 약간 향상시키는 데 시간을 소비하지 않고 리팩토링 시간을 잃지 않도록 항상 추가 테스트를 작성하지 않기로 결정했습니다 .

대부분의 경우 코드 품질은 개발 팀의 작성되지 않은 규칙과 프로그래머가 추가로 기울인 노력에 달려 있습니다.

당신은 하급 개발자이고 이것이 첫 번째 코드 검토 입니다. 조언을 받아들이고 일을해야합니다. 팀의 워크 플로 및 규칙을 처음 알고 이해 한 경우에만 해당 규칙이있는 이유 를 이해할 수 있도록 개선 할 수 있습니다 . 그렇지 않으면 당신은 규칙을 존중하지 않고 팀의 고독한 늑대가되는 새로운 사람이 될 것입니다.

당신은 팀에 새로운, 당신이 한 동안 조언을 따르십시오, 왜 거기에 있는지 알아, 스크럼 회의에서 질문에 첫 번째 조언을 가지고하지 마십시오. 실제 비즈니스 우선 순위는 묻지 않고 잠시 후에 분명해질 것입니다 (그리고 경영진이 직접 대면하지 않을 수도 있습니다).


불행히도 당신이 잘 시작하는 동안 당신의 추천은 꽤 나빠집니다.
Joshua

1

리드 / 관리 요청을 충족시키는 코드를 작성하는 것이 매우 중요합니다. 다른 세부 사항은 "좋은"것입니다. 해당 분야의 전문가 인 경우 ( "주니어 개발자가 아닌 경우"라고 함) 매번 리더와상의하지 않고 길에서 발견 한 사소한 문제를 해결할 수있는 자격이 있습니다.

당신이 뭔가 잘못 생각하고 당신이 당신의 분야에서 상대적으로 전문가라면 기회가 높습니다 당신이 맞습니다 .

다음은 유용한 정보입니다.

  • 나는 X를 할 것을 요청 받았다. 코드 리뷰어는 Y도 할 것을 제안한다. 그렇게해야하거나 더 중요한 것들로 넘어 가야 하는가?
  • 당신은 나에게 Y를 제안하고 있습니다, 그래서 당신은 내가 그것을 테스트 할 수 있도록 그 행동을 잡을 적어도 하나의 테스트 사례를 알아낼 수 있습니까? 코드가 호출되지 않는다고 생각합니다.
  • 발견되지 않은 사례에 대한 안전한 대체를 먼저 개발해서는 안 될까요? 그래서 우리는 그것들을 일찍 잡아서 이동 중에 고쳐서 더 중요한 것들에 집중할 수 있습니다.
  • 나는 Y를 구현하고있는 동안 OK, 당신은 몇 가지 테스트 케이스 그래서 우리는 그 일을 끝낼 쓸 너무 친절 될 수 한번에 모두를 ?
  • 나는 X를하도록 요청 받았으며 다른 우선 순위가 없다면 Y를 할 수 있다고 생각합니다. 다음에 기능 요청을 내 코드에 대한 검토 의견으로 제출하지 않고 제출하지 않는 이유는 무엇입니까? 적어도 우리가 그것을 구현하기 전에 그 기능에 대한 다른 팀 구성원의 추가 의견을들을 수있다 (일반적으로 중요한 재료가 기능해야 하나 이상의 사람에 의해 처리되어야한다 일반적으로 코드 리뷰 코드 및 솔루션을 검토 대해해야하는 것은 접근, 나머지 버그 수정 및 기능입니다).

리뷰어의 태도가 프로젝트를 손상시키고 있다고 생각하거나 그가 가장 옳다고 생각합니까 (때로는 평가에서 사소한 오류를 범하고 그것을 과장하는 경우는 제외)

나에게 그것은 코드 검토에 속하지 않는 것을 작성하는 것처럼 들립니다. 모든 사람이 물건을 추적하기가 어렵 기 때문에 나쁜 습관입니다. 그러나 다른 검토 의견이 무엇인지 알 수 없으므로 다른 사례에 대해서는 말할 수 없습니다.

일반적으로 다음 두 가지를 피하십시오.

  • 요청한 사항을 수행하고 있지 않습니다
  • 리뷰어가 바보처럼 느껴지도록

그가 실제로 코드를 검토하고 있다면 경영진이 당신보다 더 많은 것을 신뢰하기 때문입니다.


-1

범위에 대한 코드 검토 중 의견이 일치하지 않는 경우 :

  1. 실제로 코드에서 다루는 범위를 문서화하십시오. 누구도 불쾌한 놀라움을 좋아하지 않습니다.
  2. 범위가 비즈니스 결정임을 인식하십시오. 기능에 대한 작업을 시작할 때 이미 범위를 알고 있어야하지만 그렇지 않은 경우 나중에 설명을 요청할 수 있습니다.

코드 검토자가 비즈니스 의사 결정을 내리는 사람이라면 코드 검토 중에도 언제든지 범위를 변경할 수 있지만 코드 검토 자 역할을 수행하지는 않습니다.


이것은 이전의 20 가지 답변에서 제시되고 설명 된 포인트를 넘어서는 실질적인 것을 제공하지 않는 것 같습니다
gnat

-1

엣지 케이스가 불가능하다는 것을 증명할 수 없다면, 가능하다고 가정해야합니다. 가능하다면 결국에는 더 빨리 일어날 것이 불가피하다. 테스트에서 엣지 케이스가 발생하지 않았다면 테스트 범위가 불완전하다는 힌트 일 수 있습니다.

  1. 피드백을 수락하십시오.
  2. 코드를 변경하기 전에 가장 좋은 경우에 대한 테스트를 작성하고 테스트 실패가 발생할 수 있는지 확인하십시오 (문제가 있는지 확인). 그러한 테스트 케이스를 작성하고 테스트 실패를 얻는 것이 불가능한 경우, 에지 케이스가 실제로 불가능하다는 결론을 내릴 있습니다 (그러나 그러한 결론을 내리는 것이 주저하지만).
  3. 테스트에 실패하면 테스트에 통과하기 위해 적절한 코드 변경을 적용하십시오.

제품의 장점을 위해, 엣지 케이스를 생성하고 실패를 유도하여 수정 사항을 적용하고 잠재적 인 문제를 피할 수 있다는 확신을 가질 수 있습니다.

코드 검토의 요점은 코드를 추가로 주시하는 것입니다. 우리 중 누구도 실수 나 감독으로부터 면역되지 않습니다. 코드 조각을 여러 번보고 너무 눈에 띄는 것은 눈에 띄는 오류가 눈에 띄지 않습니다.

당신이 말했듯이, 당신은 새로운 알고리즘을 구현했습니다. 이전 알고리즘의 동작 또는 관찰에 기반하여 새 알고리즘의 동작에 대한 결론을 도출하는 것은 현명하지 않습니다.


이것은 이전의 답변 21 개에서 설명하고 설명한 내용에 비해 실질적인 내용을 제공하지 않는 것 같습니다
gnat

-2

자신이하는 일을 알고있는 코드 검토자가 있으며, 무언가를 변경해야한다고 변경하면 변경해야하며, 무언가를 테스트해야한다고 테스트해야합니다.

다른 사람들을 위해 쓸모없는 작업을 만들어 자신의 존재를 정당화해야하는 코드 검토자가 있습니다.

어느 것이 당신이 결정할 것인지, 그리고 두 번째 종류를 다루는 방법은 직장에 대한 질문입니다.

스크럼을 사용하는 경우 문제는 작업이 수행해야 할 일을 수행하는지 (분명히 수행하는지) 여부이며, 백 로그에 매우 드물고 불가능한 경우를 처리 할 수 ​​있으며 우선 순위가 매겨 질 수 있습니다. 스프린트에 들어가면 검토자가 자유롭게 그것을 선택하고 13 시간 일할 수 있습니다. 작업 X를 수행하고 작업 X를 수행하기 때문에 작업 Y도 수행해야한다는 것을 인식하면 작업 Y는 작업 X의 일부가되지 않으며, 이는 독립적 인 작업입니다.


6
유용한 조언이 되기에는 너무 모호하고 감정적입니다.
Robert Harvey

스크럼에 대한 언급은 전적으로 옳습니다. 답의 무례한 시작을 제거하면 긍정적 인 점수를 받게됩니다.
xmedeko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.