본문 바로가기

TDD (Test Driven Development) 본문

개발/알쓸코잡

TDD (Test Driven Development)

자전하는명왕성 2023. 2. 22. 00:30

TDD

TDD (Test Driven Development)는 '테스트 주도 개발'의 약어다.

 

기본적인 정의로는, 

경영학에서의 'Plan - Do - See' 의 방식과 같은 피드백 과정을 프로그래밍 과정에서도 사용하는 것을 의미한다.

프로그래밍에서는 '실패 코드 작성 - 성공 코드 작성 - 리팩토링 코드 적용' 의 과정을 거치며 TDD가 이루어지게 되는데,

TDD 가 여러 번 이루어질수록 해당 코드에서 오류가 일어날 가능성이 적어지며 더욱 안정성을 가질 수 있게 된다.

 

TDD의 장단점

위와 같은 방식의 장점으로는

  • 사소한 실패 코드를 작성하고 이를 피해 프로그래밍함으로써 프로그래밍 중 나타나는 오류들을 최소화시킬 수 있으며,
  • 등장하는 오류들의 원인이 무엇인지 파악하기 쉬운 편이고, 이로 인해 리팩토링 시간을 단축시킬 수 있다.
  • 추가적으로 문제가 무엇인지 알기 때문에 안정성이 높으며, 추가적인 아이디어를 구현하기 용이하다.

 

허나 단점 또한 존재하는데,

  • 실패 코드를 작성하는 과정을 거치기 때문에 개발 속도가 더디며(실패 & 성공 두가지의 코드 작성을 해야 함),
  • TDD는 코드를 작성하는 방법 중 하나에 불과한대도 실제 코드 작성보다 TDD 를 우선하는 경우가 생길 수 있다.

 

TDD에 대한 개인적인 의견으로는, TDD는 이상적인 하나의 프로그래밍 방법론이지 현실적이지는 못하다는 생각이다.

'프로그래머스'에서 알고리즘 문제를 풀던 경험에서 미루어보자면, 

단순하게 보더라도 성공 케이스보다는 실패 케이스가 훨씬 많기 때문에

위와 같이 실패에 대한 코드를 모두 작성할 수 없을 뿐더러

만약 그렇다 하더라도 리팩토링되어 완성된 코드가 무결점하다는 보장또한 없다는 생각이 들었다.

우리는 사람의 시선과 입장에서 예측 가능한 오류를 컨트롤 할 수 있을 뿐이며

프로그램 입장에서는 사람이 생각하지 못한 어떤 오류든 던질 수 있다는 의미기도 하다.

실패란 우리가 걸어나가며 감내해야 할 과정에 불과하지,

시작도 전에 성공을 위한 모든 실패 가능성을 생각한다는 것은 어불성설에 불과하다.

'개발 > 알쓸코잡' 카테고리의 다른 글

Jest  (0) 2023.02.23
DNS / Load Balancer  (0) 2023.02.22
마이크로서비스 아키텍쳐 (MSA)  (0) 2023.02.19
logout process 과정  (0) 2023.02.19
이미지 업로드 프로세스  (0) 2023.02.15
Comments