여러 개발작업을 진행하는 과정에서 우리는 반드시 한번 이상은 오류를 맞닥뜨린다.
실무에서 그러한 오류가 발생한다면 사용자들은 본인이 개발한 앱이나 작업물에 대해 신뢰할 수 없게되고 매출이 떨어질 수도 있는 심각한 상황이 초래된다. 따라서 우리는 작성한 코드가 오류없이 작동하는지 검증을 하는 과정이 필요하다.
이 검증과정을 거치기 위해 테스트 코드를 작성한다. 테스크 코드를 작성하면 우리가 작성한 코드들에 대해 수시로 빠르게 검증을 할 수 있고, 유지보수 및 리팩토링을 할때에도 안전성, 신뢰성을 확보할 수 있다.
하지만 그것보다 개발 및 테스팅에 대한 시간과 비용을 절약할 수 있다는 것을 알아야한다. 그러나 개발을 완료하고 테스트 코드를 작성하게 된다면 어디서 현재 오류가 발생하게 되었는지 확인하기 어렵다. 따라서 일반적으론 이 테스트 코드는 개발을 하며 테스트 코드를 먼저 작성하고 동작하는 것을 확인한 후에, 실제코드에 적용하는 것을 제안하는 방법론이 주가 되며 개발이 된다.
위와 같은 개발 방법론을 TDD(테스트 주도 개발)이라고 한다.
TTD란 뭘까?
TDD란 Test-Driven Development)의 약자로 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하며 구현하는 방식이다.
TDD를 적용하여 개발한 코드에 대한 장점이 몇가지 소개한다.
1. 깔끔한 코드 작성이 가능하다.
TDD는 코드의 재사용을 보장함으로 TDD를 통해 개발을 하면 기능 별로 철저한 모듈화가 이루어진다. 이는 종속성과 의존성이 낮은 객체 지향적인 소프트웨어 개발을 가능하게 하고 필요에 따라 모듈을 추가하거나 제거해도 소프트웨어 전체 구조에 문제가 생기지 않는다는 것이다. TDD 개발 작성 법이 처음에는 테스트 코드도 작성해서 개발작업이 느리다는 느낌을 받을 수 있지만, 장기적으로는 개발에 대한 시간 비용을 아껴줄 것이다. 또한 TDD 과정에 리팩토링이 포함되기 때문에 이후 리팩토링 과정을 진행할 때도 이 과정 중에 중복성을 줄이고, 복잡한 코드들을 풀어낼 수 있다.
2. 개발 완료 후 테스트 코드 작성은 귀찮고 어렵다.
보통 개발이 완료된 프로젝트의 코드 줄 수는 몇천, 몇만단위 일 것이다. 테스트 코드를 먼저 작성해뒀다면 괜찮겠지만 이 코드들의 단위 테스트는 성공 케이스와 실패 케이스를 모두 작성한다는 것은 귀찮고 다시 테스트를 상황에 따라 다시 생각해야 하기 때문에 복잡한 상황이 발생할 수 있다. 그렇기 때문에 특별한 경우가 아니라면 테스트 코드부터 작성하는 것이 좋다.
TTD 방법 개발 순서
1. 실패하는 단위 테스트 코드 작성
2. 싪패 케이스를 확인하기 위한 실제 코드를 작성
3. 성공하는 단위 테스트 코드 작성
4, 테스트 과정 후 리팩토링 과정을 수행
5. 예외 처리 확인을 위한 테스트 코드 작성
6. 5번의 상황에 대한 기능 코드 구현
7. 성공하는 단위 테스트 코드 작성
8. 1~7단계를 반복하며 실패/성공의 모든 테스트 케이스를 작성하며 리팩토링 과정을 수행
물론 실제 코드 개발전에 테스트 코드 작성이 잘 이해가 되지 않을 것이다. 하지만 복잡한 프로그램을 유지보수할 때 생산성을 높히고 싶다면 이 방법론을 적용하여 개발하는 것이 좋을 것이다.
Spring 에서의 TDD 개발 순서
Repository -> Service -> Controller 순으로 개발을 진행
Mock 객체로 더미 객체를 생성하여 테스트를 진행
스프링의 TDD 개발 순서는 여러가지가 있고 대부분 Controller->Service->Repository 순으로 진행되는 경우도 있다. 하지만 Repository 부터 테스트를 작성해야 TDD 진행이 매끄럽게 진행된다고 한다. 왜냐하면 Repository 계층은 다른 계층에 대한 의존성이 거의 없기 때문에 작성이 편리하기 때문이고 Service 계층은 Repository에 접근하는 의존성이 있기 떄문에 먼저 Repository의 테스트를 작성하는 것이 흐름이 끊기지 않을 것이다.
위와 같은 내용을 숙지했다고 하더라도 실제로 TDD를 적용해 보는 것은 쉽지 않을 것이다. 필자 또한 그렇다. 하지만 적용된다면 매우 실용적인 개발을 진행할 수 있으므로 TDD 기반으로 개발해보도록 하자.
[참고]
2019년 스프링캠프에서 무엇을 테스트 할 것인가에 대해 발표를 아주 감사하게도 해주신 분이 있다.
무엇을 테스트하고, 어떻게 테스트 할 것인지 설명해주신다. 스프링으로 TDD를 하고자 하신 분이 있다면 한번 봐보시길 권해드린다.
https://www.youtube.com/watch?v=YdtknE_yPk4&ab_channel=springcamp.io
'나의 공부' 카테고리의 다른 글
프로세스, 스레드, 멀티 스레드? (0) | 2023.04.06 |
---|---|
정규화는 뭘까? 정규화의 예시 (0) | 2023.03.30 |
디자인패턴-싱글톤패턴(SingleTon) (0) | 2023.03.23 |
디자인패턴-빌더 패턴(Builder) (0) | 2023.03.23 |
JSON 파일 쓰기/저장 (json-simple) (0) | 2023.03.02 |
댓글