TDD에 대한 변론
나의 인프런 django 강좌 수강생이 TDD같이 쓸데없는걸 해서 사람들 시간을 다 빼앗고 있냐고 악플을 계속 달고 있다.

by saintdragon2


Posted on April 10, 2019, 12:34 a.m.



안녕하세요 OOO님. TDD 방법론에 대해서 큰 반감을 갖고 계신 것 같습니다. 다른 영상에도 "TDD가 아닌 순수 장고 개발에 대한 내용으로 꽉 차 있어서 가장 만족스러운 편입니다."라는 댓글을 달으셨고요. 어제도 "한번에 하면 될일을 굳이 에러를 발생시켜서 수강생의 시간을 뺐느냐"는 내용의 장문의 글을 쓰셨다가 지운걸 봤습니다.

맞습니다. TDD가 만병통치약도 아니고, 꼭 필요한 것도 아닙니다. 눈으로 그때그때 보면서 프로그래밍을 할 수도 있습니다. OOO님께서 생각하시는 것처럼 세계적으로 유명한 프로그래머 중에서도 TDD 개발방법이 꼭 좋은 방법이 아니라고 생각하는 사람들이 꽤 있습니다. 특히나 코드의 품질이나 향후 변경, 재사용성에 대해 크게 신경쓸 필요가 없고, 마감에 쫓기는 경우 TDD를 한다는게 거추장스럽게 느껴질 수도 있습니다.

그럼에도 불구하고 TDD는 django 에서 기본적으로 제공하고, 또 장려하는 개발방법입니다. django에서 python manage.py startapp blog라고 입력하는 순간, blog폴더에 tests.py가 저절로 생성되도록 django 가 설계되어 있다는 것만 생각해봐도 그렇습니다. 그래서 저는 "test는 순수 django 내용이 아니다"라는 말에 동의하지 않습니다.

수십줄 짜리 파이썬 코드나, 쥬피터 노트북 한장짜리 코드를 만들 때는 당연히 TDD방법이 불필요한 경우가 많을 겁니다. 하지만 클래스와 함수들이 서로 상호연결되어 작동하는 복잡한 프로그램이 될 수록 나중에 유지보수 할 때 Test 코드가 없으면 힘든 상황이 많이 발생합니다. 예를 들어 변수명 하나만 바꾸고 싶은데, 그거 하나 바꾸었다가 수만줄짜리 프로그램에 어떤 파급효과를 줄지 예측할 수 없어서 그대로 놔둬야 하는 상황도 발생합니다. 그럴 때 test 코드가 있다면 큰 도움이 됩니다.

Test 코드가 없는 프로그램은 계기판 경고등이 없는 자동차와 마찬가지라고 생각합니다. 어느날 갑자기 자동차 시동을 걸고 출발하려고 했을때, 자동차가 뭔가 이상할 때, 제일 먼저 보는 것이 계기판입니다. 사이드브레이크가 올라가 있는 것은 아닌지, 휘발유를 다 쓴 것은 아닌지, 배터리가 나가서 시동이 안 걸린 것인지 알 수 있는거죠. 계기판 경고등을 만들지 않고도 잘 달리는 자동차를 만들 수 있습니다. 물론 TDD를 하더라도, 테스트 코드를 작성해놓고, 한번도 에러가 나는 것을 보여주지 않으면서 개발하는 방식으로 수업을 진행할 수도 있습니다.

그러나, 저는 프로그래밍 실력 향상을 위해 가장 효과적인 방법이 에러와 버그를 수정하는 것이라고 생각합니다. 에러와 버그 수정하는 모습을 보여주지 않으면 혼자서 자신이 만들고 싶은 프로그램을 작성하다가 에러메세지를 만났을 때 혼자 해결할 수 있는 능력을 키우지 못하게 됩니다.

스키를 배울 때 가장 먼저 배우는 것은 넘어졌을 때 일어나는 방법입니다. 한번도 넘어지지 않고 타는 것은 영원히 불가능한 일입니다. 왜냐하면 잘타게 될 수록 더 어려운 코스를 도전하게 되니까요. 프로그래밍도 마찬가지입니다. 믿지 않으실 수도 있지만, 저는 이 강좌를 찍으면서 일부 영상에 대해서는 제가 영상 찍기 전에 일부러 하려고 했던 실수를 깜빡 잊고 빠뜨리고 한번에 넘어가버려서 편집하다가 재촬영한 것들도 있습니다. 물론, 의도치 않은 실수들도 있습니다. 하지만 무의미한 실수라고 생각하거나 제가 지나치게 오래 수정을 못하고 있다고 생각하는 경우에는 편집을 하거나 재촬영 했습니다.

부디 무언가를 전달하고 싶은 저의 의도도 담겨있었다는 점을 이해해주셨으면 합니다. TDD 방법론에 대해 회의를 갖게 되셨지만 '이런 방법론이 있구나' 정도로 알고 한번쯤 경험해보시는 것도 좋지 않을까 싶습니다.


아직 댓글이 없습니다. 첫번째로 댓글을 남겨보세요.


Blog Search

Side Widget Well

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore, perspiciatis adipisci accusamus laudantium odit aliquam repellat tempore quos aspernatur vero.