Post

[Keyword] TDD


Keyword

하루에 하나씩 키워드를 정해 공부해보려고 한다.

일단은 왜 이 키워드를 공부하려고 하는가(why), 그래서 이 키워드가 무엇인가(what), 어떻게 적용해나갈 것인가(how)로 나눠 정리하려고 한다!


Why?

테스트라는 개념은 김영한님의 인프런 강의에서 처음 접했다. 이후 원티드의 프리온보딩 사전 과제의 요구사항에도 테스트가 요구되었는데, 이 부분을 생략하니 기능을 구현할 때마다 서버를 실행시켜 확인해야 하는 번거로움이 있었다. 간단하고 가벼운 프로젝트여서 가능한 일이었지만, 앞으로 더 큰 프로젝트를 수행하기 위해서는 테스트에 대해 공부하는 게 필수적이다.

What?

테스트 주도 개발(Test-driven Development)는 테스트를 먼저 한 후 구현하는 소프트웨어 방법론이다. 테스트를 먼저 한다는 것은 기능이 오랍르게 동작하는지 검증하는 테스트 코드를 작성한다는 것을 의미하며, 기능을 검증하는 테스트 코드를 먼저 작성하고 테스트를 통과시키기 위해 개발을 진행한다.

TDD 이전의 개발 방식은 보통 설계 후 구현에 대해 고민한 후 기능을 테스트하는 방식으로 진행되었다. 그러나 작성한 코드가 많은 경우에는 디버깅 시간이 많이 소요되며, 코드를 작성하는 개발자와 코드를 테스트하는 개발자가 다른 경우도 충분히 있을 수 있다/. 또, 웹 애플리케이션의 경우 기능을 테스트하기 위해서는 톰캣 서버를 구동하는데 시간을 소모해야 한다.

반면 테스트 코드를 먼저 작성하면 테스트가 개발을 주도하게 된다. 테스트를 작성하는 과정에서는 구현을 전혀 생각하지 않고 해당 기능이 올바르게 동작하는지 검증할 수 있는 테스트 코드를 만들 뿐이다. 테스트를 추가한 뒤에는 테스트를 통과시킬 만큼만 구현을 진행한다. 테스트 코드를 만들면 다음 개발 범위가 정해지며, 테스트 코드가 추가될 수록 구현이 완성되어 간다.

TDD는 코드 수정에 대한 피드백이 빠르다는 장점이 있다. 새로 코드를 추가하거나 기존 코드를 수정하면 테스트를 통해 잘못된 코드가 배포되는 것을 방지할 수 있다. 또한, 개발 과정에서 지속적으로 리팩토링을 수행해 코드 품질이 저하되는 것을 방지하고 향후 유지보수 비용을 낮춘다.

테스트 코드 작성 순서는 일반적으로 수윈 경우에서 어려운 경우로, 예외적인 경우에서 정상인 경우로 진행한다.

테스트를 위해서는 JUNIT, Mockito, AssertJ 등의 도구를 사용한다.

How?

지금까지의 내용은 모두 최범균의 테스트 주도 개발 시작하기에 나와있는 내용이다. 책을 읽어보고 예제를 따라해보며 TDD 방법론을 익히고, 원티드 프리온보딩 과제와 프리코스 과제에 테스트를 적용해보며 체득해볼 예정이다!

This post is licensed under CC BY 4.0 by the author.