TDD(Test-Driven Development)
- TDD는 소프트웨어 개발 방법론 중 하나로써 테스트 주도 개발 방법이다.
- 테스트 코드가 개발을 주도한다 하여 테스트코드를 먼저 작성하고 나서 해당 테스트 코드가 무사 통과할 수 있는 구현코드를 작성하여 진행하는 방식이다.
TDD의 라이프사이클
TDD는 테스트 코드 작성 - 구현 코드 작성 - 리펙토링의 매우 짧은 라이프 사이클을 반복하며 점진적으로 개발을 진행하게 된다.
1. 의도적으로 실패하는 테스트 코드를 작성한다.(red 코드)
2. 해당 테스트 코드가 통과할 수 있는 최소한의 구현 코드를 작성한다.(green 코드)
3. 테스트가 통과하면 리펙토링의 작업을 통해 중복이나 불필요한 코드를 수정한다.
테스트 코드 작성의 원칙
가장 단조로운 것부터 시작해라
먼저 중요하고 복잡한 것부터 시작하게 되면 오히려 쉬운것을 놓치기 쉽다.
ex) 계산기를 구현한다면 가장 간단한 덧셈부터 구현한다.
점진적으로 진행하라
가장 단조로운것부터 시작하여 복잡한 순으로 점진적으로 진행하여라.
리펙토링을 미루지 마라
리펙토링을 귀찮다고 나중으로 미루게 되면 안하게 될 수 있으니 당장 수행하는 것을 명심하자.
TDD를 사용하면 무엇이 좋은가?
서비스의 안정성이 높아진다
버그의 발생 가능성이 줄어들고 코드 품질이 높아져 변화에 빠르게 대응할 수 있다.
디버깅 시간이 단축된다.
개발을 진행함에 있어 디버깅에 많은 시간이 소모된다. 테스트 환경에서 에러를 빠르게 확인하고 수정함으로써 디버깅 시간을 획기적으로 단축시킬 수 있다.
변화에 자신감이 생긴다.
개발을 진행하다 보면 이미 잘 동작하는 코드를 수정해야하는 경우가 발생할 수 있다. 이 때 어떠한 코드를 수정함으로 인해 연관된 다른 곳에서 에러가 발생하지 않을까 하는 걱정이 생겨 변화를 두려워하게 된다.
테스트코드는 코드를 변경한 후에 테스트를 수행하여 그로 인한 다른 에러가 발생하지 않는 지 빠르게 파악할 수 있게 도와주기에 변화에 자신감이 생긴다.
심리적 안정감
개발자에게 심리적인 안정감을 주게된다. 어떠한 기능을 구현하면서 내가 작성한 코드가 문제없이 잘 수행될 지 걱정하면서 진행한적이 있을 것이다. 기능을 구현하고나서 테스트를 진행하며 이상이 없길 바래보지만 에러가 발생하게 되고 디버깅을 진행하게 된다.
TDD는 테스트 코드를 기반으로 점진적인 개발을 진행함으로써 개발자로 하여금 구현하고자 하는 기능이 잘 수행된다는 안정감을 줄 수 있다.
테스트 코드의 단점
개발시간이 길어진다.
일정이 빡빡한 경우 구현 코드를 작성하기에도 부족한 시간에 테스트 코드부터 차근히 작성하려면 개발시간이 증가하여 일정히 촉박해질 수 있다.
테스트 코드 작성에 대한 지식이 필요하다
기존에 수행하던 방식과 달라 익숙하지 않으며 테스트 코드를 구현하는데 추가적인 지식이 요구된다.
개발을 진행하고 나서 테스트 코드를 작성해도 되지 않을까?
테스트의 구멍이 생길 수 있다.
이미 잘 구현된 코드에 대한 테스트 코드를 작성하려다 보면 세세한 실패 사례에 대한 테스트가 누락될 가능성이 크다.
또한 실패사례에 대한 테스트 코드보다 잘되는 코드만 작성하게 될 수도 있다.
지루하게 느껴질 수 있다.
이미 잘 수행되는 것으로 판단되는 코드에 대한 테스트 코드를 작성하려고 하다보면 지루하게 느껴질 수 있다.
어차피 잘 돌아가는 데 테스트 코드를 또 작성해야하나 하며 낭비적인 시간이라고 느낄 수 있다.
참고자료
www.youtube.com/watch?v=wmHV6L0e1sU&ab_channel=%EB%B0%B1%EB%AA%85%EC%84%9D
'기타' 카테고리의 다른 글
[리눅스] 검색을 통한 파일 찾기(grep), 텍스트 편집(vim) (0) | 2021.01.07 |
---|---|
Intellij 자주쓰는 단축키 정리 (0) | 2020.12.15 |
댓글