테스트 주도 개발 방법론

현실 세상의 TDD : 안정감을 주는 코드 작성 방법 by 이규원

새로 입사하신 분들을 대상으로 TDD를 가르쳐주다가
시중에 어떤 TDD 관련 교육 자료가 있는 지 찾아봤어요.
그런데 실무에 충분히 적용할 수 있는 책도 강의도 없더라구요.

그래서 이론에만 그치지 않는
현실 세상의 TDD 강의
를 만들기로 했습니다.

엔지니어에게 큰 힘이 되는 TDD를 제대로 이해하고
적재적소에 활용할 수 있도록 차근차근 알려 드릴게요!


by 프로그래머 이규원

Brand-new Sight
TDD가 실패하는 이유 강연 모습
환경에 따라 빠를수도 느릴수도 있습니다.

당신의 TDD가 느리다면, 준비가 덜 된 단계에서 TDD를 도입했거나 협력, 목표와 같은 중요한 가치보다도 TDD를 무리하게 우선시하기 때문입니다.

버그를 모조리 잡아 없애는 도구는 없습니다.

TDD는 이른 피드백을 통해 사용자보다 먼저 버그를 발견하는 도구입니다. 버그를 빨리 발견하면 빨리 해결할 수 있고, 추후의 큰 장애를 방지할 수 있습니다.

지속적인 피드백이 불필요한 작업도 있습니다.

오류 피해가 적고 일시적인 코드를 만드는 경우나 단기 외주 개발 팀처럼 코드를 오래 소유하지 않는 경우라면 TDD 비용을 지출하는 건 실용적이지 않습니다.

이제 잘못된 인식은 버리세요!

TDD 활용의 대가인 저 이규원이
현실 세상의 TDD를 정확히 알려드립니다!

개발 현장에서 제가 활용하는 TDD는,

잘 동작하며 매우 유용합니다. TDD가 어떻게 현장의 소프트웨어 개발에 기여하는 지 직접 보여주고 싶어서 'TDD 참관 행사'를 진행했습니다. 5개월간 매주 프로그래머 두세분을 회사로 초대해서 저와 저의 팀이 TDD로 업무를 진행하는 모습을 보여드렸습니다.

테스트 케이스는 약 3000개 정도에 95% 정도는 단위 테스트 케이스, 나머지는 기능 테스트 케이스였어요. 지속 배치 환경이 만들어져 있었고, 많은 경우 하루 30회 정도 새로운 코드가 배치되었습니다. 즉, 빌드 서버는 하루 최대 9만 번 테스트 케이스를 실행한 것이죠.

팀은 안정감을 얻었고 개발 속도를 꾸준히 유지했습니다. 다양한 회사 출신의 참관자 분들이 놀라워 하셨던 모습이 아직 생생하네요.

TDD 참관 행사 페이스북 후기


TDD가 주는 짜릿한 희열의 순간은,

예상치 못한 테스트가 실패했을 때 입니다. 나는 잘 될거라 믿고 작업했는데 TDD가 알려줍니다. "여기 문제있어!" 마치 함께 위험에 대비하는 동료 같아요.

실제로, 계정 시스템이 사용하는 프레임워크 버전을 올렸는데 코드 파이프라인에서 테스트가 깨진 적이 있습니다. 함께 변경해야 할 설정값 하나가 빠진 거였어요. 이 버그는 교묘하게도 개발자 장비에서는 발생하지 않으면서 운영 환경에서는 시스템 로딩을 막는 심각한 것이었습니다. 테스트가 없었다면 문제가 포함된 코드는 운영 환경에 배치되어 계정과 관련된 모든 기능에 장애가 발생했겠죠.

저 이규원에게 TDD를 배우면
네 가지가 바뀝니다.

코드가 내 손에서 벗어나기 전에 TDD를 통해 먼저 피드백을 받게 됩니다.

새 코드를 검증 받으면 안정감을 느끼고 자신감이 생겨 더 생산적으로 일하게 됩니다.

필수 작업 검증 코드가 만족되면 불필요한 개선 욕구는 자제하고 다음 작업으로 전진시킵니다.

개발 과정이 테스트 코드로 남아 과거의 내 결정과 의도를 쉽게 상기시킵니다.

강의 미리보기
Top of Top

TDD 활용의 대가이자
개발자들의 연예인, 이규원.

TDD를 알기 전부터 피드백 기반 개발을 한 선구자

2000년대 초반, 첫 회사 입사 후 통계 계산 FORTRAN 코드를 C++, C# 으로 변역하던 중 알려진 테스트 데이터 집합을 기준으로 코드를 늘리거나 수정하는 경험을 했는데 이것이 TDD와 유사했습니다. 코드를 쓰기 전에 쓰여질 코드가 준수해야 할 입출력을 미리 준비하고 이것들의 검증 결과, 피드백을 받아 전진하는 과정이 바로 그랬어요.

불가능하다 했던 것을 TDD로 가능케 한 CTO

TDD를 기반으로 코드 파이프라인을 자동화했습니다. 코드가 안전한지 충분한 피드백이 없다면 매우 위험한 일이죠. 오마이랩에서는 시스템 전체를 비동기로 구성했는데, 비동기 시스템은 단위 테스트만으로 문제를 잡아내기 힘듭니다. 그래서 인수 테스트 주도 개발과 수동 테스트 관리도구에 투자했고 결과는 대성공이었습니다.

TDD에 관한 공론의 장을 이끄는 커뮤니티 리더

OKKYCON과 같은 외부 강연, Github 및 소셜미디어 활동, TDD 참관 행사 주최 등 다양한 기회를 통해, 현실 세상의 TDD에 관해 함께 공부하고 토론하고 업무로 적용해보는 일을 꾸준히 해오고 있습니다. 개발자 커뮤니티의 일원이자, 전 마이크로소프트 MVP 수상자로서 앞으로도 많은 사람들이 TDD를 제대로 활용할 수 있도록 아낌없이 나누고 싶어요.

온라인 커뮤니티에서 TDD에 대해 활발히 토론한 기록

OKKYCON: 2018 - The Real TDD 강연 중인 모습


• 2021.03 ~ 현재
강남언니 / CTO

• 2018 ~ 2021.01
트립스토어 / CTO
- 트립스토어 서비스 운영

• 2016 ~ 2017
오마이호텔 / CTO
- 비즈니스 클라우드 서비스 개발
- 채널 관리자 멀티테넌트 서비스 개발

• 2014 ~ 2015
엔비케이스 / CTO
- 소셜 미디어 서비스 운영
• 2013
이베이 코리아 / 시니어 프로그래머 (프리랜서)
- ESM+ 운영
- 옥션과 지마켓의 판매자가 상품 관리하는 시스템 운영

• 2012
필링크 / 시니어 프로그래머 (프리랜서)
- 교보문고 전자 책 Windows 클라이언트 개발 기술 책임
- 크로스 플랫폼 ePUB 뷰어 컴포넌트 아키텍팅

• 2005 ~ 2011
에스링크 / 연구원
- 데이터시각화 엔진, 통계계산 라이브러리, 통계 패키지, SI 프로젝트
- 여러 통계 분석 도구 제작 및 비즈니스 현장에 적용

Heritage Story

개념부터 기본 활용까지 체계적으로!
TDD의 나무와 숲을 같이 본다.

TDD에 대한 깊고 올바른 이해

TDD, 즉 테스트 주도 개발이 프로그래머에게 주는 피드백의 특성, 다른 피드백과의 차이, 그리고 한계를 알아봅니다. TDD를 통해 명세를 준수하고 일정 수준의 품질을 유지하며 코드를 만들어가는 과정을 경험합니다. Red-Green-Refactor 과정을 반복하며 코드를 늘려봅니다.

TDD와 설계의 관계 학습

테스트 주도 개발만으로 좋은 설계를 얻을 수는 없지만 테스트와 설계는 서로 밀접하게 관련되며 이것을 이해하지 못하면 테스트 주도 개발에 실패할 가능성이 높아집니다. 인터페이스 설계가 테스트에 주는 영향과 테스트 주도 개발을 통해 얻은 테스트가 구현 설계 개선에 미치는 효과에 대해 배웁니다.

다양한 테스트 기법과 사용 전략

테스트 주도 개발에 사용되는 단위 테스트의 목적과 방법에 대해 배운 후, 기존 코드의 동작을 검증하는 단위 테스트와 아직 구현되지 않은 동작이 대상인 단위 테스트를 작성해 봅니다. 수동 테스트, 테스트 자동화, 기능 테스트 등 다양한 기법에 대해 학습하고, 상황과 인터페이스에 따른 적절한 도구 선택 전략을 익힙니다.

전체 개발 사이클에서 TDD의 역할

TDD는 프로그래머가 소프트웨어 개발 과정 전반에 대해 이해하고 팀으로서 하나의 목적에 집중하게 합니다. 운영 코드보다 테스트 코드를 먼저 작성하는 개발 절차는 코딩의 수단보다 목적에 집중하도록 도와줍니다. 테스트 주도 개발을 사용한 실습을 통해 이런 효과를 맛봅니다.

코스 프로모션 배너 전용입니다.
0 0시간 0 0 코스 프로모션 배너 전용입니다.
(자동)
정가 (자동)
현재 판매가 (자동)
12개월 무이자 할부 시 (자동)

상세 커리큘럼

* 본 강의는 Visual Studio Code를 사용하여 진행됩니다.

프롤로그. 엔지니어링

TDD 강의 커리큘럼 이미지 1

1부. 테스트 주도 개발 기초

TDD 강의 커리큘럼 이미지 2

2부. 테스트 주도 개발의 깊은 곳

그리고 한 걸음 더

강의에 대해 궁금하셨나요?
한 걸음 더 들어가봅니다.

수강료.

국내 8개 카드사 12개월 무이자 할부 지원! (간편 결제 제외)

  • 삼성카드
  • 신한카드
  • 롯데카드
  • 현대카드
  • 하나카드
  • BC카드
  • KB국민은행
  • NH농협카드

※ BC카드의 경우, 비씨(페이북)을 선택하여 결제시에만 12개월 무이자 할부가 가능합니다.
(BC계열 – 우리/제일/기업/대구/경남/부산/광주/수협/전북/제주/신협)