[TDD] TDD의 장단점에 대해 생각해보기..

Clint Jang
5 min readMay 14, 2020

--

요즘TDD(Test Driven Development), TFD(Test-first Development), BDD(Behavior Driven Development) 에 대해 …알아보며.. 개발된 프로젝트에 적용하는 것을 검토하고 있네요.

기본적인 지식을 쌓으면서, 적용하기 위한 구현 방법에 대해서도 계속 고민하며 실제 구현해보며 공부하는 중입니다.

그 과정 중 계속

왜?

테스트 주도의 개발(Test Driven Development)을 해야되는 것인가?

왜? 테스트로 개발을 시작(Test First Development)/진행하면 좋은 것일까?

.. 왜? 하는 것일까?

좋은 것인가? 좋지 않은 것인가?? 를 이런 고민도 해보고 있습니다.

이제 입문자 입니다. 그래서 내용이 정확하지 않을 것 입니다....

초심자 입장에서 가볍게 저의 생각을 적어보았습니다. 😀

테스트로 개발을 시작하면 ..

좋은 점

자신의 코드 품질 증명

내가 구현한 코드가 잘 작동하는 코드인 지 증명하는 수단이 될 수 있을 것 같습니다.

품질 향샹

이제 입문이지만.. 스팩(Specification)을 명확히 하기 위해 문제점이 찾게 되는 상황이 계속 생깁니다.

거기에 따른 코드 구현이나 필요한 부분에 대해서 기획/디자인 팀에도 먼저 문의 하게 되는 상황이 생기게 되는 것 같아요.

테스트로 개발을 하게 되면.. SI의 통합 테스트 😭를 하는 느낌이 들게 됩니다.

개발을 좋아하게 되는 요소

테스트가 된 코드 이기 때문에 심리적 안정감을 얻을 수 있게 될 것 같아요. 구현하고 문제점이 많은 코드를 만들어 내게 된다면.. 개발이 재미없어지는 요소가 되지 않을까 하는 생각을 해봤네요.

트랜드 변화에 유연함

기존의 구현된 코드를 새로운 개발 트랜드에 맞추어 변화시킬 때 많은 두려움이 있을 것 같습니다.

설계를 변경하면 .. 여러 Side-Effect가 생기지 않을 까 하는 두려움.. 변경한 것에 누락은 없을까? 잘 동작할까???

기존 TEST Case를 통과하며 변화해야되기 때문에 설계의 변경은 더욱 어려울 수 있겠지만, 부담은 낮아질 것 같습니다.

개발 트랜드를 따라가기에 용이한 점이 될 수 있을 것 같습니다.

의존성 주입이 되도록 유도

의존성에 신경을 쓰게 됩니다.

테스트를 하기 위해 처음 느끼게 된 부분이 안에서 생성된 클래스 객체를 외부에서 주입하도록 수정하게 되더군요. 아마 해보시면 느낄 거에요.

테스트 를 하기 위해 의존성을 부여가 필요하게 만드는 것 같습니다.

의존성 주입을 하게 구현을 한다는 것은 결합도는 낮추고 응집도는 높이는 좋은 코드가 될 것 입니다.

※테스트 까지 의존하면 안됩니다.

미리 앞으로의 고통을 가져옴

테스트 코드를 먼저 작성하게 되면 문제점을 일찍 찾게 될 테니…

미래의 고통을 현재로 가져오겠죠… 장점? 이자나요…?? 😀😀

좋은 설계를 유도

테스트 코드를 하기위한 설계 (클린코드) 방향을 찾게 되도록 유도될 것 같습니다.

좋은 아키텍쳐는 낮은 결합도, 높은 응집도, 도메인을 보호하도록 유도해 줄 것 입니다.

리펙토링 용이

리펙토링을 과감하게 할 수 있게 되는 건 .. 아시죠? TDD의 장점이죠.

아직 저는 경험이 좀 더 해봐야 느낌이 올 것 같긴해요.

자동화 프로세스 도입에 도움이 됨

CI / CD 를 가능하게? 하는 데 필요한 요소가 될 것 입니다.

개발 팀 관리, 문서화

낮은 경력자? 주니어 개발자? 분들과 함께 하더라도 테스트로 시작하는 개발을 하게 된다면.. 많은 테스트를 적어도? 진행했기 때문에 개발 프로젝트 안정적으로 운용되고 진행되지 않을까 싶습니다.

수행할 행위에 대한 명세를 먼저 작성해야되고, 테스트 코드를 나중에 변경할 상황이 생길 때 빠르게 찾기위해 잘 정리도 해야 될 것이니 문서화도 좀 더 진행? 되게 되지 않을까요?

아쉬운 점

러닝 커브

처음부터 제대로 된 테스트 코드 작성이 쉽지 않습니다.

왜? 해야되는 지도 고민이 들고, 구현하는 것도 정말 뭐랄까?

구현 하는 것도 처음에 너무 어렵고 알아야될 것 이 많더군요.

용어도 익숙치가 않아요.

같은 개념 같은 데 다른 개념인 것 같기도 하고,

검색해 보는 글도 의견과 내용이 다른 부분들도 많고.. 어려우니 그렇겠죠?

저도 공부하면서 매일 깨달음을 얻고, 어제의 저는 다른 생각을 가진 사람이 되더군요. 쉽지 않네요.

현재 느끼는 심정은 .. 무척.. 어렵습니다. 😭😭

비용 증가(개발 시간 상승), 느리다

하나의 피쳐를 만드는 데 시간이 많이 걸리네요. 생각할 요소도 많고..

처음해서 그런 것은 아닌 것 같아요. 처음하는 입장에서는 개발보다 엄청난 시간이 더 걸리고 있어요. 익숙해져도 분명 비용이 증가 할 것 입니다.

진입장벽이 높다

꼭 해야되나? 기존 틀을 깨기 쉽지 않을 것 같아요.

개발은 혼자 하는 게 아니라 팀원이 같이 해야되는 데.. 모두의 의견을 일치시키기 쉽지 않을 것 같습니다.

비효율?

TDD를 잘 하시는 분이 많은 것 같지 않습니다.

저같이 잘 못하는 사람이 많은 테스트 코드를 구현해 놓는 다면..

테스트 코드끼리 의존관계를 부여해 놓았다면..

기타 등등의 테스트 를 제대로 작성한 것이 아니라면..

이 후..

주요 피쳐가 변경되면? 어떠한 수정상황에 업무 폭탄이 예상될 수 있습니다.

많은 연습이 필요

연습이 많이 필요하고 테스트 코드를 잘 작성하는 것이 단기간에 쉽지 않은 것 같습니다.

단순하게 방법만 익히는 것으로 잘 한다 이야기는 아닌 것 같습니다.

저는 모바일 개발자이며..

테스트로 개발하기에 입문한지 얼마 되지 않았습니다.

(잘 못 작성된 부분은 너그럽게 생각해주세요~)

공부하면서 틀린 부분이 확인되면 바로바로 수정해 두겠습니다.~

읽어주셔서 감사합니다.

즐거운 하루 되세요 🙇‍

--

--