본문 바로가기

TDD

TDD를 잘하는 방법 최근 개발 관련 이야기를 하다가 "TDD를 잘하려면 어떻게 하는 게 좋을까?"라는 질문이 나왔다. 당시에 만족스러운 답변을 못 했고 며칠을 고민해 봤다. 사람마다 의견이 다르겠지만, TDD 사이클로 설명하는 게 제일 쉽겠다는 생각이 들었다. TDD 사이클은 빨강(테스트 작성) → 초록(테스트 통과) → 리팩토링(중복제거) 순으로, 반복적으로 진행한다. 2000년대 TDD가 소개된 이후로 TDD 사이클은 변경된 게 없다. 어느 정도 안정화된 작업 순서 같다. 그런데, TDD 사이클은 왜 이런 순서로 구성되었을까? TDD 사이클의 단계별 목표는 무엇이고, 작업자는 어떤 이득을 얻을 수 있을까? 아래에서는 TDD 사이클의 단계별 목표를 설명한다. 1. 먼저 테스트를 작성한다이 단계는 '인터페이스'를 설계하는 .. 더보기
TDD로 학습 테스트 (라이브러리 사용법부터 오픈소스 기여까지) 많은 프로젝트에서 외부 라이브러리를 사용한다. 라이브러리는 작업 시간을 아껴주기 때문에 팀원들의 동의가 있고, 해결하려는 문제에 도움이 된다면 사용하는 편이다. [테스트 주도 개발] 책에서는 학습 테스트에 대한 설명이 있다. 학습 테스트는 외부에서 만든 소프트웨어를 처음 사용할 때, 해당 소프트웨어의 기능을 테스트 코드에서 사용해 보는 것을 말한다. 학습 테스트를 작성하면 아래와 같은 효과를 볼 수 있다.라이브러리 사용법을 학습한다문자 그대로 학습 테스트는 라이브러리의 사용법을 '학습'하기 위해서 작성한다. 나머지는 추가로 얻는 보너스 효과이다. 라이브러리는 많은 기능을 제공한다. 이 중에 프로젝트에서 사용하는 기능에 대해서만 학습 테스트를 작성한다. 라이브러리의 모든 기능을 학습 테스트로 작성하는 것은.. 더보기
TDD로 추상화 로직 설계하기 "TDD로 추상화 로직을 어떻게 설계해야 할까?" 2010년에 [테스트 주도 개발]을 읽고 TDD를 처음 알게 됐지만, 이 질문에 대한 답은 최근에서야 정리할 수 있었다. (그동안 꾸준히 TDD를 사용하지는 않았다. TDD에 대한 믿음과 의심을 반복하며 시간을 보냈다) 용어 정리해당 포스트에서는 아래와 같은 용어를 사용한다. 구현 전 설계: 일반적인 '사전 설계'를 의미한다. 코드를 구현하기 전에 코드 구조를 설계하는 것을 의미한다구현 후 설계: 테스트 코드와 구현 코드를 작성한 후, '리팩토링'으로 코드 구조를 설계하는 것을 의미한다 예시 문제A 시스템과 B 시스템의 데이터를 조회해서 비즈니스 로직을 처리해야 하는 이슈가 있다고 하자. A 시스템은 웹 소켓으로 데이터를 조회하고, B 시스템은 주기적으로.. 더보기
TDD 예제(점진적으로 설계하기) TDD의 아이러니 중 하나는 TDD가 테스트 기술이 아니라는 점이다(워드 커닝엄의 선문답이다). TDD는 분석 기술이며, 설계 기술이기도 하다. 사실은 개발의 모든 활동을 구조화하는 기술이다.- 《테스트 주도 개발》by 켄트 벡 나는 TDD가 현업에서도 쓸만한 방법이란 걸 확인하고 싶었다. 그래서 업무와 비슷한 예제를 찾고, TDD로 구현하면 좋겠다는 생각을 했다. 문제는 쓸만한 예제를 찾는 일이었다. 현업과 비슷한 예제를 찾기 위해 두 가지 가정을 했다.  첫째, 대부분의 개발자는 신규 프로젝트를 하지 않고, 기존 코드에 기능을 추가하거나 버그를 수정하는 일을 한다. 나는 기존 코드에 새 기능을 추가하는 예제를 원했다.  둘째, 너무 쉬운 예제는 안된다. 피보나치수열은 TDD 단골 예제이다. 피보나치수.. 더보기