비트멍뭉이
28
2019-07-22 18:16:37
5
667

아래 토론글을 보고 적는 TDD에 관한 제 생각


안녕하세요.

최근 눈팅만 하던 유저인데 테스트 관련 토론을 보고 제 생각을 남겨봅니다.

먼저, 테스트라는 단어 안에는 몇가지 의미가 있습니다.

. TDD

. 단위 테스트

. 통합/회귀 테스트

. 자동화된 테스트 또는 수동 테스트

크게 이 정도 되지 않나 생각되네요. 보통 토론시 오해나 쟁점이 발생하는 많은 경우가 사용하는 단어의 정의나 범위가 서로 달라서입니다. 따라서, 토론할 땐 단어를 확실히 선택하고 정의하는게 좋습니다.

이번에 논점이 된 개념은 TDD로 보이는데요. 이를 중심으로 제 생각을 말씀드리겠습니다.

gyuwon님 글의 제목에 '테스팅을 모르면서 테스팅을 미워하는 사람들'이라고 하셨는데, 이런 분들이 계신 이유는 누군가 TDD 또는 테스팅을 교조적으로 강요하는 사람들이 있기 때문이라 생각합니다. fender님의 댓글에도 언급된 교조적 주장이나 분위기가 있기 때문에 이에 반감을 가진 사람도 있는 것이겠죠. gyuwon님이 그렇다는 뜻은 아니니 오해가 없으면 좋겠습니다. 실제로 gyuwon님 글들 읽으면서 그런 뉘앙스를 느끼진 못했습니다.

그럼, TDD가 지향하는 것은 무엇인가? 여러가지가 있겠지만 메인은 좋은 디자인(설계)일 것입니다. 여기엔 gyuwon님의 글에서 언급된 CQRS, 데이터베이스 의존 코드, DI, 레이어드 아키텍처 등이 포함됩니다.

여기서 생각해볼 수 있는 질문을 하나 던져봅니다. TDD를 해야만 이런 설계에 도달할 수 있을까요? 저는 도움은 된다고 생각하나, 반드시 필요하다고 생각하진 않습니다. 좋은 설계, 사실 좋은 설계에 대한 판단도 주관적이라 논쟁의 여지가 있지만 그건 제쳐 두고, 에 도달하려면 문제에 대해 깊게 생각하는 것이 핵심이라 봅니다.

단적으로, TDD를 하면, 좋은 설계가 나온다는 명제에서 TDD를 한다는 것은 필요 조건도 충분 조건도 아니다라는 것이 제 의견입니다. 여기엔 여러 이견이 있겠지만, 일단 범위를 확실히 해놓고 토론을 한다면 불필요한 오해는 없지 않을까 생각되네요.

TDD에서 쟁점이 되는 건 중간의 D(=Driven)라고 생각합니다. 개인적으로 중간의 D에 매일 필요는 없다고 생각합니다. Test-Driven으로 개발하더라도 좋은 디자인이 나오지 않을 수 있고, Test-Driven으로 개발하지 않더라도 좋은 디자인이 나올 수 있습니다. 물론, 그 반대의 경우도 마찬가지구요. 그래서, 필요 조건도 충분 조건도 아니라고 주장하는 것입니다.

개인적으로 주변 분들에게 반드시 TDD를 할 필요는 없다고 이야기합니다. TDD가 도움이 안된다는 뜻이 아니라 확실히 교조적인 분위기가 있어 죄책감(?)을 느끼는 분들이 계셔서 그런 걸 느낄 필요까진 없다는 의미로 이야기합니다. 특정 개발 분야엔 TDD를 추천하기도 합니다. 그리고, 통합 테스트는 시간을 들여서 꼭 만드는게 좋다고 말하는데 저도 잘 못지키는 거라 부끄럽네요^^;

이외 테스트의 다른 의미들, 예를 들면 효용성 같은 건 범위가 넓어지기 때문에 여기서 언급하진 않겠습니다. 다만, 이번에 주로 논쟁이 된 포인트는 여기뿐만 아니라 인터넷에서도 종종 나왔던 것이라 이에 대한 제 의견을 말씀드렸습니다.

다른 의견이나 궁금한 점 있으면 댓글 부탁드립니다. 아는 건 별로 없지만 한도 내에서 제 생각을 말씀드리겠습니다.

읽어주셔서 감사합니다.


3
1
  • 댓글 5

  • 박가사탕
    784
    2019-07-22 23:05:02

    tdd는 유닛테스트를 말하죠.

    거창하게 뜻을 부풀리면 끝이 없어요~

    구글 프로젝트들 소스 받아보면

    a.cpp에 a_unittest.cpp 하나씩 있는게

    보일 겁니다. 최근에 본건 웹rtc.

    유닛테스트를 위한 구글 오픈소스도 따로 있구요.


    제가 만들면 그렇게 무식하게 인건비로

    때려잡는 시스템은 안하겠지만..

    여튼 외국 애들은 그걸 tdd라고 부르고 있어요~


    0
  • 비트멍뭉이
    28
    2019-07-22 23:59:52

    @박가사탕

    맞습니다. TDD는 보통 유닛테스트 범위죠. 문제는 얼마나 잘 하느냐인데 단순하게 이걸 하느냐 안하느냐로 평가하는건 문제가 있다고 봅니다.

    0
  • 박가사탕
    784
    2019-07-23 01:10:56

    보여주기식이

    필요한가 보죠.. ㅎ

    0
  • 박가사탕
    784
    2019-07-23 08:50:31

    100프로 동감!

    코딩과정이 설계임..

    0
  • 비트멍뭉이
    28
    2019-07-23 10:52:37

    @스프링브레이크

    그런 면에서 자바 프로젝트의 경우 TDD가 특별한 의미를 가진다고 봅니다. 코드를 가장 빨리 실행시킬 수 있는 수단이 되니까요. 또한, 이를 위해 Lisp에는 REPL이 있구요.


    @박가사탕

    저도 동의합니다.^^


    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.