티스토리 뷰
테스트 주도 개발이란?
테스트 주도 개발(Test-Driven Development, TDD)은 코드를 설계하고 구조화하는 기법으로, 단순성을 장려하고 코드의 신뢰성을 높이는 데 중점을 둡니다.
이 정의의 다양한 부분을 살펴봅시다.
기법
테스트 주도 개발은 다음 세 가지 믿음을 바탕으로 하는 기법입니다.
- 단순성: 불필요한 일을 최대한 줄이고, 단순성을 유지합니다.
- 명확성과 명료성: 코드를 읽기 쉽게 만드는 것이 중요합니다.
- 깔끔한 코드 작성: 유지보수가 쉽고 재사용할 수 있는 깔끔한 코드를 작성해야 합니다.
'기법'이라는 것은 타고나는 능력이 아니라 훈련을 통해 습득해야 하는 기술입니다. 따라서, 배움에 대한 동기를 스스로 만들어 배움을 이어나가는 것이 바람직할 것입니다.
코드 설계 및 구조화
테스트 주도 개발의 핵심은 코드를 테스트하는 것에 있는 것이 아닙니다. 코드의 설계와 구조를 개선하는 데 있습니다. 단순히 테스트가 통과되는 것을 목표로 한다면, 비즈니스 코드를 먼저 작성하고 나중에 테스트를 작성하는 것과 비교해 특별한 이점이 없습니다. 테스트 주도 개발은 더 나은 소프트웨어 설계를 위한 기법이며, 그 과정에서 설계의 단순성과 명료성을 이끌어낼 수 있습니다.
단순성에 대한 편견
단순성은 소수만 이해할 수 있는 개념이 아닙니다. 단순성을 측정하는 메트릭은 다음과 같은 것들이 있습니다:
- 코드 라인의 수
- 순환 복잡도
- 사이드 이펙트의 수
- 실행 시간
- 메모리 사용량
- etc...
테스트 주도 개발은 '동작하는 가장 간단한 것'을 정교하게 만들어가며, 끊임없이 단순성의 메트릭으로 유도합니다. 구체적으로는 다음과 같습니다:
- 처음에 테스트를 작성합니다.
- 테스트를 통과할 수 있는 가장 간단한 코드를 작성합니다.
- 리팩토링을 통해 코드를 개선합니다.
이 과정을 반복하면 코드는 항상 가장 단순한 형태로 유지됩니다. 임의로 복잡성을 증가시키고자 한다면, 반드시 먼저 테스트를 작성해야 합니다. 따라서 막연하게 미래에 필요할 것 같다는 등의 이유로 복잡성을 추가하는 것을 쉽게 저지할 수 있으며, 코드를 단순하게 유지할 수 있습니다.
신뢰 향상
테스트 주도 개발은 코드에 대한 신뢰를 높입니다. 신뢰는 예측 가능성에 대한 기대를 말하며, 예상치 못한 결과를 예방하고, 코드 변경에 대한 두려움을 줄여줍니다.
현실적으로 테스트 주도 개발의 실천이 꺼려지는 이유
- 어디서부터 시작해야 할지 모르겠다.
- 테스트 주도 스타일을 익히는 것은 별도의 학습이 필요합니다. 하지만 이를 배울 동기가 부족한 경우가 많습니다.
- 참고할 만한 실무 예제가 부족하다.
- 주로 토이 프로젝트나 블로그 글에서 예제를 찾을 수 있지만, 이러한 자료들은 실무에서 다루는 전문적인 도메인을 포함하지 않습니다. 간단한 예제를 사용하기 때문에 실제 업무와는 거리가 있습니다.
- 코드부터 작성하고 테스트는 나중에 작성해도 된다고 생각할 수 있다.
- 프로덕션 환경에 들어가기 전에 테스트를 작성해도 충분히 신뢰할 수 있는 코드를 작성할 수 있다고 생각할 수 있습니다.
그럼에도 테스트 주도 개발이 필요한 이유
그럼에도 불구하고 테스트 주도 개발을 실천하는 것은 장기적인 관점에서 코드의 품질을 높이고, 유지보수를 용이하게 하며, 변경에 대한 자신감을 제공하는 등 여러 가지 이유로 소프트웨어 개발에서 중요한 역할을 합니다. 자세한 내용은 차차 교재의 챕터를 따라가면서 살펴보도록 하겠습니다.
0장 - 소개 및 설정
go
와 node.js
모두 설치된 환경을 가정하여 별도의 설정 과정을 생략하겠습니다.
go
1.17 버전을 사용하는 것을 보니, 작성된 지 오래된 책인 것 같습니다. 실습을 진행하면서 버전에 따른 변경 사항이 있을 수 있으니 주의가 필요해 보입니다.
정리
- 테스트 주도 개발(TDD)은 코드를 설계하고 구조화하는 기법으로, 학습을 통해서 익혀야 한다.
- TDD는 먼저 테스트를 작성하게 함으로써 복잡성의 증가를 억제하고 코드를 단순하게 유지하도록 한다.
- TDD는 여러 사유로 실천되기 어렵지만, 그럼에도 장기적인 관점에서 더 나은 코드를 개발하고 더 나은 개발자가 되려면 TDD를 배우는 것이 좋다. 지금 당장!
참고
'Go > TDD' 카테고리의 다른 글
테스트 주도 개발 입문 - 시작하기 (0) | 2024.07.17 |
---|