일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ws
- stack&que
- Git
- SQL
- greedy
- Query
- utils
- Unit Testing
- Gunicorn
- Stack
- Django
- was
- stateless
- algorithm
- permutations
- codecov
- Programmers
- Python
- combinations
- Q objects
- stateful
- dictionary
- TDD
- ORM
- AWS
- pytest
- postreSQL
- 백준
- HTTP 완벽 가이드
- Bruteforce
- Today
- Total
해피 코딩!
클린 코드를 위한 테스트 주도 개발 4장 본문
기존에 본인이 개발을 하면서 지켜왔던 TDD라는 개념이 한 기업과의 기술면접에서 틀리다는 것을 알게 되었고 다시 한번 TDD의 개념을 재정립 하기 위하여 본 내용을 작성합니다.
파이썬을 이용한 클린 코드를 위한 테스트 주도 개발
본 책의 내용을 정리하며 TDD가 무엇인지 다시 한번 고민해봅니다.
프로그래밍은 정말 어려운 작업이다. 종종 똑똑한 사람들이 성공하는 경우가 있다.
TDD는 똑똑하지 못한 우리들을 도와주기 위해 존재한다. 켄트 벡(TDD를 고안한 사람)은 우물가에 있는 물 뜨는 두레박을 비유로 들어 설명한다. 우물이 깊지 않으면 두레박도 꽉 차지 않아서 퍼 올리는 것이 쉽다. 가득 차 있다고 해도 처음 몇 번은 쉽게 할 수 있다. 하지만 시간이 지나면서 곧 지치기 시작한다. 하지만 이 때 도르래를 이용하면 직접 퍼 올리는 것 보다 효율적이다.
TDD는 이런 도르래와 같아서 여러분의 작업 효율을 올려주고 쉴 시간도 준다.
아마 대부분은 TDD가 좋은 방법이라는 것을 인정할 준비가 되어 있겠지만 여전히 '이 정도까지 할 필요가 있나?' 하는 의문을 품은 사람도 있을 것이다. 작은 것도 테스트 해야 하고, 터무니 없이 많은 작은 단계들을 거쳐야 하는 것 일까?
TDD는 훈련이다. 즉 자연스럽게 익힐 수 있는 것이 아니다. 대부분의 성과가 즉시 보여지는 것이 아니라, 오랜 기간을 거쳐야 보기이 때문에 여러분 자신이 TDD에 적응할 수 있도록 노력을 해야 한다.
시시한 함수에 대한 시시한 테스트의 이점
단기적 관점에선 간단한 함수나 상수를 위한 테스트 작성이 하찮게 여겨질 수 있다. 물론 보다 수월한 규칙(일부만 단위 테스트를 하는)을 따라서 TDD를 적당하게 할 수 있다. 하지만 이 책을 통해 필자가 보여주고자 하는 것은 완벽하면서도 철저한 TDD이다.
이것은 무술의 카타와 같다 (즉 정확한 동작을 배워서 기술 자체가 여러분의 뇌 근육이 되도록 하는 것이다. 문제는 애플리케이션이 복잡해지면서 발생하게 되는데, 이 때는 정말 테스트가 필요해진다. 하지만 복잡성이라는 것은 여러분들이 모르는 사이에 조금씩 다가와서 복잡하다는 것 자체를 인지하지 못하고 얼마 되지 않아 끓는 물 속에 개구리 꼴이 되는 것이다.)
간단한 함수를 위한 간단한 테스트에 대해 언급하고 싶은 두 가지가 있다.
첫 번째는 테스트가 정말 시시한 테스트라면 테스트 작성 자체에 시간이 많이 걸리지 않는다는 것 이다. 그러니 불평말고 작성하도록 하자
두 번째는 틀을 사용하는 것이 도움이 된다는 것이다. 쉬운 함수를 위한 테스트 틀이 있다면 함수가 복잡해지더라도 심리적 부담을 줄일 수 있다. (단기간에 if 제어나 for 루프 처리가 늘어날 수 있다.) 여러분이 인지하기도 전에 프로그램이 다형성 트리 파서 구조가 되더니 어느새 재귀 처리로까지 번질 수 있다. 하지만 초반부터 틀을 갖추어 테스트를 했기 떄문에 새로운 테스트를 추가하는 것이 자연스럽고 테스트도 수월하다. 테스트를 해야 할 정도로 복잡하다고 판단한 후 테스트를 작성하기 시작한다면 틀이 없기 때문에 훨씬 많은 수고를 들여서 테스트를 만들고 수정해야 한다.
TDD가 훌륭한 이유 중 하나가 다음에 무엇을 해야 할지 잊어버릴 걱정이 없다는 것이다. 테스트를 다시 실행하기만 하면 다음 작업이 무엇인지 가르쳐준다.
리팩토링에 관해
리팩토링 시에는 앱 코드와 테스트 코드를 한 번에 수정하는 것이 아니라 하나씩 수정해야 한다.
리팩토링 시에는 몇 가지 처리를 수정하기 위해 단계를 건너뛰는 경향이 있다. 하지만 반 이상의 파일을 수정하기 시작하면서 자신이 무엇을 수정했는지 모르게 되고 결국 아무것도 동작하지 않게 된다. 리팩토링 캣 처럼 되고 싶지 않다면 작은 단계로 나누어 착실히 작업하도록 하자.
'TDD' 카테고리의 다른 글
pycon - 우아하게 준비하는 테스트와 리팩토링 - 한성민님의 발표를 듣고 (0) | 2020.12.02 |
---|---|
단위 테스트 활용 방법: JUnit 참조 가이드 를 읽고 (0) | 2020.12.02 |
단위 테스트의 활용 (0) | 2020.12.01 |
TDD란 (0) | 2020.12.01 |