공동 프로그래머가 수행 할 아직 구현되지 않은 방법을 처리하는 방법은 무엇입니까?


45

이것은 팀에서 일하는 방법에 관한 질문입니다.

최근에 저는 6 명으로 구성된 팀과 함께 첫 번째 큰 (~ 80 개의 클래스, Java) 프로그래밍 프로젝트를 진행했지만 우리 중 4 명만이 코드 작업을 계속하고있었습니다. 우리는 초기에 수행해야 할 작업을 배포했으며 어느 시점에서 내 프로그래머 중 한 명이 아직 구현하지 않은 메소드를 호출해야했습니다. 이 문제를 해결하기 위해 권장되는 방법은 무엇입니까?

내가 본 옵션은 있지만 실제로는 마음에 들지 않습니다.

  1. 나 자신을 작성하고 //TODO나중에이 코드 줄을 다시 방문하여 그 방법이 구현되었는지 확인하십시오.

  2. 해당 팀원 에게 지금 구현하도록 요청하십시오 .

  3. 아직 구현되지 않은 것에 대한 명확한 설명과 함께 사용자 정의 runtimeException이 발생합니다. (적어도 누락 된 항목을 찾기 위해 오랫동안 검색 할 필요는 없습니다)

  4. 에 필요한 방법을 추가 자신의 클래스와 그를 작성하는 //TODO메시지 본문에, 가능성 또한 변화를 그들에게 빠르게 메시지를 보낼 수 있습니다. (이제 더 이상 내 문제가 아니지만, 그 동안이 방법으로 작업하는 경우 성가신 병합 충돌이 발생할 수 있습니다)

  5. 실제로 작업을 수행하는 코드를 작성하기 전에 모든 것에 대한 추상 클래스 또는 인터페이스를 정의하십시오. (이 인터페이스는 종종 변경되었으므로 제대로 작동하지 않았습니다)


51
다른 사람이 작성한 방법이 필요한 워크 플로우는 옳지 않다고 생각합니다. 기능을 작업 중입니다. 해당 기능에 메소드가 필요한 경우이를 구현합니다. 두 사람이 단일 기능을 구현해야하는 경우에는 쌍을 이루거나 너무 자주 통합하여 통신하여 거의 쌍을 이루는 것처럼 보입니다.
Euphoric

8
@Euphoric 비교적 짧은 시간 내에 상당히 큰 새로운 기능이 개발되어야하는 상황을 겪어 왔으며, 따라서 사용자 인터페이스, 비즈니스 로직 및 API 계층을 서로 다른 작업으로 분할하여 동시에 작업해야했습니다. 그렇지 않으면 마감일을 결코 충족시킬 수 없었습니다. 바로 UI에서 작업하는 사람이 인터페이스로 BL에 데이터 액세스 방법 및 명령 만 선언하고 다른 사람은 UI에서만 작업하면서 구현 작업을 수행 할 수 있어야합니다.
Andy

15
@DavidPacker 설명하는 것이 그 문제를 해결할 수있는 유일한 방법은 아닙니다. 수직 슬라이스, 빈번한 통합, 작은 기능은 모두 개별 파트에서 작업하는 수평 슬라이스보다 나은 솔루션입니다.
Euphoric

3
@Euphoric 더 이상 당신과 동의 할 수 없습니다. 가능하면 중요하지 않은 부분의 복잡한 새로운 기능을 제거하는 방법을 사용합니다 (즉, UX 만 개선하지만 즉시 필요하지 않은 기능). 슬프게도 때로는 언급 한 옵션이나 기능 제거가 불가능합니다. 비즈니스는 개발자들에게 말합니다. 따라서 요점은 확실하지만, 누군가는 비즈니스 요구를 충족시키기 위해 일종의 기능 작업 분할을 수행해야하는 상황이 발생할 가능성이 있습니다.
Andy

2
어떻게 처리하고 싶은지 그 와 이야기 하는 것은 어떻습니까?
Aganju

답변:


5

흥미로운 질문이며 대답은 생각보다 쉽습니다.

간단히 말해 가정을 검증하는 테스트를 작성하십시오. 구현 또는 동료 프로그래머를 수행하는 것은 중요하지 않습니다.

긴 대답입니다.

를 나열하는 옵션 중 하나는 다소 수동적하고 필요 하면 (어떤이있는 경우) 조만간 다시 와서 코드를 다시 방문 할 수 있습니다.

  • 구현을 담당하는 상대방이 의견 을 읽고 처리해야합니다. 그 동안 코드를 컴파일 할 수 없습니다. 코드 저장소에서 이러한 상태를 확인하면 지속적인 통합 파이프 라인이 작동하지 않으며 어쨌든 나쁜 습관입니다 ... 깨진 코드를 체크인하지 마십시오
  • 런타임 예외 는 더 좋아 보이지만 동료 프로그래머는 구현이 검사하지 않고 이미 완료되었다고 가정하여 시스템을 불안정한 상태로 유지할 수 있기 때문에 여전히 유독합니다. 메소드가 그렇게 자주 트리거되지 않으면 프로덕션 코드가 손상 될 수 있습니다 ... 나쁜 습관뿐만 아니라 ... "구현되지 않은"예외는 확인하지 마십시오.
  • 동료 프로그래머 가 메소드 또는 스텁을 구현 하기를 기다리는 것도 어렵습니다. 동료 프로그래머의 워크 플로와 워크 플로가 중단됩니다. 그들이 아프거나, 회의 시간에, 커피 브레이크에서, 당신이 기다리는 시간을 보내고 싶습니까? ... 필요하지 않은 사람을 기다리지 마십시오
  • 누락 된 메소드를 구현하는 가장 좋은 방법입니다. 그러나 구현이 전체 사용 사례를 만족시키지 않고 동료 프로그래머가이를 수정하거나 변경해야하는 경우 어떻게됩니까? 귀하와 귀하의 의도와 여전히 호환되는지 어떻게 확인합니까? 대답은 다시 쉽습니다. 의도를 확인, 설명 및 문서화하는 테스트를 작성하십시오. 테스트가 중단되면 쉽게 알 수 있습니다. 해당 방법을 변경하여 기능을 중단해야하는 경우 즉시 표시됩니다. 둘 다 의사 소통해야 할 이유가 있으며 무엇을해야할지 결정해야합니다. 기능을 나누시겠습니까? 구현 변경 등 ... 테스트로 충분히 문서화되지 않은 코드를 체크인하지 마십시오.

충분한 수준의 테스트를 달성하려면 두 가지 원칙을 살펴 보는 것이 좋습니다.

  1. TDD-테스트 중심 개발-이를 통해 의도를 설명하고 충분히 테스트 할 수 있습니다. 또한 아직 구현되지 않은 메소드와 클래스 (인터페이스를 사용하여)를 조롱하거나 위조 할 수도 있습니다. 코드와 테스트는 여전히 컴파일되어 동료 프로그래머의 코드와 별도로 자신의 코드를 테스트 할 수 있습니다. ( https://en.wikipedia.org/wiki/Test-driven_development 참조 )

  2. ATDD-승인 테스트 중심 개발-기능 전체를 테스트하는 데 도움이되는 외부 루프 (TDD 루프 주변)를 만듭니다. 이 테스트는 전체 기능이 구현 된 경우에만 녹색으로 바뀌므로 동료가 작업을 완료하면 자동으로 표시됩니다. 당신이 나에게 묻는다면 아주 깔끔합니다.

주의 사항 : 귀하의 경우, 간단한 수락 테스트 만 작성하고 너무 많은 비즈니스 측면을 도입하려고 시도하지는 않습니다. 기능에 필요한 시스템의 모든 부분을 통합하는 간단한 통합 테스트를 작성하십시오. 그게 다야

이를 통해 코드를 Continous Integration 파이프 라인에 넣고 매우 안정적인 구현을 생성 할 수 있습니다.

해당 주제를 더 자세히 보려면 ​​다음 링크를 확인하십시오.


103

스텁을 요청하십시오.

또는 직접 작성하십시오. 어느 쪽이든, 당신과 당신의 동료들은 인터페이스와 그것들의 사용 방법에 동의해야합니다. 그 계약은 그래서 상대적으로 응고 될 필요가 있습니다 스텁에 대해 개발 -하지 언급에, 당신은 당신의 단위 테스트에 대한 자신의 모의 객체를 생성 할 수 있도록 ...


25
^^ 이것. 인터페이스를 올바르게 사용하고 있다면 다른 사람이 인터페이스 작성을 완료 할 때까지 구현이 필요하지 않습니다.
Robert Harvey

13
로버트의 의견에 따르면, 여러 사람으로 분할되도록 특별히 설계된 프로젝트에서 인터페이스를 제대로 사용하지 않으면 시간이 나빠질 것입니다.
corsiKa

1
Java에 헤더 파일이 없다는 것은 부끄러운 일입니다. C / C ++ 세계에서는 API를 처리하고 모든 헤더를 먼저 작성할 수 있으며 구현이 부족하면 링커에 문제가됩니다. (약간 단순화하면 ABI는 링커 문제가되기 위해 일정하게 유지되어야합니다).
Wes Toleman

16
@WesToleman 흥미롭게도, Java에 대해 내가 가장 좋아하는 것 중 하나는 헤더 파일이 없다는 것입니다. Robert와 corsiKa가 언급 한 "인터페이스"는 그 역할을 완벽하게 채 웁니다. 먼저 API를 해결하고 인터페이스를 작성하며 구체적인 구현 부족이 컴파일러에게는 문제가되지 않습니다.
GrandOpener

1
@WesToleman 잘 작동합니까? 내 귀에는 폭포 스타일과 비슷한 소리가 들리고 내 생각에이 "중요한 매개 변수"를 놓쳤다는 것을 알게되면 인터페이스를 추가로 업데이트해야한다고 생각합니다.
netigger

6

귀하의 상황에서, 나는 그 기능에 대한 책임을 팀원과 이야기 할 것입니다. 해당 기능의 개발 우선 순위를 정할 수 있으므로 더 빨리 사용할 수 있습니다.

네 번째 옵션을 피하려고합니다. 모든 코드를 작성했으며 더 이상 문제로 간주하지 않습니다. 그러면 동료가 함수의 구현을 작성하고 더 이상 문제로 간주하지 않습니다. 실제로 작성한 코드가 올바르게 작동하는지 누가 테스트합니까?


하나 이상의 인터페이스를 생성해야하는 해당 기능 에 대한 API 를 요청 해야합니다. 입력을 기반으로 초기 테스트 사례를 디자인 할 수 있도록이 인터페이스를 사용해야하므로이 작업을 함께 수행하는 것이 좋습니다. 실제 구현은 나중에 나올 수 있습니다 (가능한 API 변경 포함)
Thorbjørn Ravn Andersen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.