TDD 및 코드 검토 건너 뛰기의 엄청난 비용

돈의 색 — 크리스 포터 (CC BY 2.0)

2019 년 1 월 26 일 업데이트 : "제작 버그를 수정하면 디자인 타임에 버그를 수정하는 것보다 100 배 더 많은 비용이들 수 있습니다"라는 주장이 무의미하다는 점에 주목했습니다. 나는 여전히 긍정적 인 ROI와 시간을 절약 할 수있는 TDD의 강점을지지하지만, 이것을 과학적 사실보다는 주관적인 의견으로 읽어야합니다. 우리 업계는 TDD 및 기타 품질 관리 조치의 영향에 대한 더 나은 데이터 수집이 절실히 필요합니다. 이것은 대학과 대규모 소프트웨어 조직 간의 연구 협력에있어 훌륭한 주제가 될 것입니다.

최근 몇 년간 점점 더 많은 회사에서 TDD (Test Driven Development)의 이점에 대해 이야기하고보다 생산적인 품질 프로세스를 구현하는 방법에 대한 조언을 나누도록 요청했습니다.

TDD는 구현을 작성하기 전에 코드가 작동하도록 자동화 된 테스트를 작성하는 프로세스입니다. 테스트 작성, 실패 (빨간색), 구현 작성, 테스트 통과 (녹색) 및 필요한 경우 리팩터링을 봅니다. 시스템을 구축 할 때 사이클을 반복하십시오.

이 프로세스는 심층적으로 연구되었으며 소프트웨어 품질을 높이는 데 매우 유용한 것으로 입증되었습니다. 그러나 이것이 조직에 많은 시간과 비용을 절약한다는 것을 알고 있습니까?

관리자가 TDD를 구현하기 위해 오랫동안 기다려야하는 주요 이유 중 하나는 비용입니다. TDD를 사용하면 초기 프로젝트 구축 시간이 최대 30 % 더 오래 걸리는 것이 일반적입니다.

이러한 관리자가 알아야 할 것은 TDD가 생산 버그 밀도를 40 %-80 % 줄이고 모든 차이를 만든다는 것입니다. 생산 버그가 많을수록 유지 보수 비용이 크게 증가합니다.

재 작업, 메타 워크 (작업에 대한 작업), 책임 전달, 중단 및 결국 고객 지원, 버그 심사 및 유지 관리 비용이 기하 급수적으로 증가하기 때문에 생산 버그를 수정하는 데 디자인 타임에 버그를 수정하는 것보다 100 배 더 비용이들 수 있습니다. 구현시 버그를 수정하는 것보다 15 배 이상 높습니다.

참고 :이 주장에 도전했지만 소프트웨어 품질이 개발자의 생산성을 향상 시킨다는 데는 의문의 여지가 없습니다. 소프트웨어 품질에 대한 사용 가능한 데이터 및 소프트웨어 품질이 조직에 미칠 수있는 영향에 대한 자세한 내용은“소프트웨어 품질의 경제성”을 참조하십시오. 소프트웨어 품질 측정에 대한 더 많은 연구가 필요하므로 개발 팀을 운영하는 방법에 대한보다 현명한 결정을 내릴 수 있습니다.

버그 수정의 상대적 비용

이 수치를 사용하여 TDD가 있거나없는 가상 프로젝트의 상대적 비용을 살펴 보겠습니다. 이 프로젝트는 유지 보수를 제외하고 TDD없이 1,000 시간의 초기 구현을 수행합니다.

허구의 예에서, 우리는 개발 시간을 약 623 시간으로, 또는 4 팀으로 약 한 달을 절약했습니다. 각 개발자에게 미국 평균 ($ 95k)을 지불하고 급여를 충당하기 위해 평균 30 %의 급여를 고려하면 거의 37,000 달러의 비용을 절약 할 수 있습니다.

물론 이것은 많은 가정을하는 가상의 예입니다. 마일리지는 팀의 TDD 경험, 기타 품질 측정 (예 : 코드 검토)의 유무 등을 포함한 많은 요소에 따라 다릅니다.

가정은 다음과 같습니다.

  • TDD가없는 생산 버그 : 100
  • TDD의 생산 버그 : 40 (60 % 감소, 40 % – 80 % 사이의 중간지면)
  • 구현시 버그 수정 (TDD) 단계의 평균 시간 : 1 시간 (이 숫자는 프로덕션 버그 수정 비용을 도출하는 데만 사용됨)
  • 생산 버그 수정에 소요되는 평균 시간 : ~ 15 시간

이러한 변수를 사용하면 결과가 분명히 변경됩니다. 확실히 확실한 것은 TDD가 유지 보수 비용을 고려하여 많은 시간과 비용을 절약함으로써 시간과 비용을 절약한다는 것입니다.

이 가상의 예의 상대적 결과는 TDD 유무에 관계없이 실제 생산 프로젝트에 대한 나의 경험을 바탕으로 나에게 맞습니다.

코드 리뷰는 비슷한 효과가 있습니다

코드 검토는 비슷한 효과를 갖습니다. 실제로 일부 연구에 따르면 코드 검토가 TDD보다 효과적이라는 것이 밝혀졌습니다. 1988 년 연구에 따르면 코드 검토에 소요되는 시간당 유지 보수 시간이 33 시간 절약됩니다.

그것은 매우 특별하지만 코드 리뷰의 버그 잡기 이점은 내 개인적인 경험으로 기뻐하지 않습니다. 버그를 잡는 데 자동화 된 테스트가 훨씬 더 유용하다는 것을 알았습니다. 따라서 코드 검토의 탁월한 효과를 어떻게 설명 할 수 있습니까?

지식 공유. 코드 검토를 사용하면 개발자가 안티 패턴 및 기타 부실한 관행을 사용할 때 팀이 자체 수정합니다. 동시에 효과적인 패턴을 공유하고 서로에게 더 나은 방법을 가르쳐주고 더 읽기 쉬운 코드를 작성하는 방법을 가르치고 있습니다.

결과적으로 주니어 개발자는 팀에서 가장 똑똑한 개발자 수준으로 빠르게 올라가고 전체 팀 속도가 향상됩니다. 팀에서 멘토링 문화의 가치를 과장하기는 어렵습니다.

중단 비용

생산 버그를 수정하는 데 왜 그렇게 많은 비용이 듭니까? 일단 버그가 생산에 도달하면 비용은 버그를 수정하는 단순한 비용보다 훨씬 높습니다.

프로덕션 환경에서 버그를 수정하는 것은 개발 중 버그를 수정하는 것보다 훨씬 비쌉니다. 차이의 크기를 이해하려면 먼저 개발자를 방해하는 비용을 이해해야합니다.

프로덕션 버그 수정은 종종 기능 개발의 맥락과 케이던스에서 중단을 의미합니다. 다시 말해, 개발자는 현재 작업중인 컨텍스트에서 빠져 나와 관련 컨텍스트 및 덤프를 흡수하고 근본 원인을 진단하고 버그를 수정 한 다음 시간을내어 버그 컨텍스트에 덤프합니다. 이전에 작업했던 내용을 다시 흡수하십시오.

각 상황 전환은 최대 20 분의 개발자 생산성 비용이 들지만 출혈이 멈추지 않습니다. 개발자가 버그를 수정하도록 방해하면 코드가 중단되기 전에 더 많은 버그가 발생할 수 있습니다. Microsoft Research에 따르면 중단 된 작업을 완료하는 데 약 2 배가 걸리며 중단되지 않은 작업보다 2 배 많은 오류가 포함되어 있습니다.

즉, 프로덕션에서 릴리스되는 버그를 수정하는 비용은 프로덕션 버그를 수정하는 비용이 아닙니다. 중단으로 인해 현재 개발 작업 비용이 증가하고 결국 수정해야 할 버그가 더 많이 발생합니다.

관련 메모에서 멀티 태스킹은 정말 나쁜 생각입니다. 생산성을 높이려면 개발자는 한 번에 한 가지에만 집중해야합니다.

결론

다음에 누군가가 TDD 나 코드 검토를위한 시간이나 예산이 없다고 말할 때,“그러면 실제로 TDD를 건너 뛸 시간이나 예산이 없다”고 자신있게 말하십시오.

다음 단계

소프트웨어 개발 프로세스에서 TDD와 그 역할을보다 잘 처리하십시오.

  • “TDD 및 단위 테스트에 대한 5 가지 오해”
  • “단위 대 기능 대 통합 테스트”
  • “모든 유닛 테스트에 5 가지 질문이 있어야합니다”
  • “ES6의 TDD 및 React 웹 캐스트”
  • 멘토링으로 팀 수준 향상 : 테스트 가능한 코드, TDD, CI / CD 프로세스 등을 작성하는 방법

라이브 1 : 1 멘토링으로 기술 수준을 높이십시오

DevAnywhere는 고급 JavaScript 기술 수준을 향상시키는 가장 빠른 방법입니다.

  • 라이브 레슨
  • 유연한 시간
  • 1 : 1 멘토링
  • 실제 프로덕션 앱 구축
https://devanywhere.io/

Eric Elliott는“JavaScript 응용 프로그램 프로그래밍”(O'Reilly)의 저자이며 DevAnywhere.io의 공동 설립자입니다. 그는 Adobe Systems, Zumba Fitness, The Wall Street Journal, ESPN, BBC 및 Usher, Frank Ocean, Metallica 등을 포함한 최고의 레코딩 아티스트를위한 소프트웨어 경험에 기여했습니다.

그는 세계에서 가장 아름다운 여성과 함께 원하는 곳 어디에서나 일합니다.