개발/프로젝트

[테스트코드(TDD)] (1) 구현하기 전 공부, 고민한 부분들

prpn97 2023. 7. 18. 22:13

면접준비를 하면서 TDD에 대해서 공부하게 되었다. 

테스트코드, 이름만 들었을 때 만든 코드를 테스트하는 것인가? 라는 생각이 들었다. 

누군가는 테스트코드를 무조건 필수라고 말하기도 하고, 누군가는 굳이? 라는 말을 하기도 한다.

역시 직접 공부하며 구현해보기 전에는 왜 쓰는지 그 이유를 정확하게 알기가 어려운 것 같다.

어떤 것인지 공부하며 뜯어보자.

 

TDD 란 ?

일반적으로 테스트코드라고 불리우는 이것은 Test-Driven Development(TDD)라고 하며,

매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다.

우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고

해당 테스트를 통과하는 가장 간단한 코드를 작성한다.

일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다.

말 그대로 테스트가 코드 작성을 주도하는 개발방식인 것이다.

 

 

구현하기 전 의문점

간단히 요약하면 기획한 것을 샘플로 간단하게 작동하도록 구현한 다음,

정상적으로 작동되는지 확인한 후, 점점 덧대면서 계속해서 테스트하는 것이다.

그런데 이렇게 샘플을 만들고 테스트하는 것이라고 생각하면... 

당연히 중간중간 테스트하고, 확인하는건 굳이 테스트코드를 만들지 않아도 하는 것인데,

왜 굳이 테스트를 코드를 더 만들어서까지 해야 하는 것인지 직접 만들며 알아보자.

 

 

구현 전 고민했던 점.. 어떤 데이터를 사용해야 하는가?

테스트를 통과하는 가장 간단한 코드로 작성해야 한다고 테스트코드를 정의하고 있는데,

그 가장 간단한 코드마저 작성하기가 어려웠다. 

여러 테스트코드 레퍼런스를 보면 sum으로 a+b를 해보며 통과여부를 확인하였다.

새로 구현할 것을 테스트코드로 만들어보기엔 아직 테스트코드를 어떻게 만들지 모르기 때문에

이미 만들어진 프로젝트를 가지고 테스트코드를 만들어 보는 것을 목적으로 하였다.

 

 

호출이 되는지, 값을 불러오는지 여부를 중심으로 만들 생각으로 구글링했다.

그런데 만들기 전에 고민이 들었던 것이 한 가지 있는데, 이후에도 테스트코드를 작성할 때

먼저 결정해야 하는 부분인 것 같았다. 

 

*실제 코드를 구현하기 전에 만드는 것이므로 더미데이터를 사용해야 할텐데,

이미 코드가 구현되어 있는데 굳이 더미데이터를 써야 할까?

 

*테스트코드를 바탕으로 실제로 구현한 이후 테스트코드를 업데이트할텐데,

그렇다면 그 때에도 더미데이터를 써야 할까?

 

사실 같은 질문인데 전자는 나의 경우고, 후자는 이후 내가 겪게 될 상황일 것이다. 

정답이 있기 보다는 목적에 따라 어떤 데이터를 사용할지 결정하면 될 듯하다. 

호출이 되는지, 값을 불러오는지 여부를 중심으로 만들 목적이였는데,

이 둘이 목적이 다르다.

 

호출 여부만 확인한다면 실제 데이터를 쓸 필요가 없다. 

그런데 값을 불러오는지 확인한다면 실제 데이터를 쓰는 것이 좋겠지만,

그럴거면 테스트코드랑 실제 코드랑 무엇이 다른가? 라는 질문이 생겼다.

 

더미 데이터 사용의 장점:

- 격리된 테스트: 더미데이터를 사용하면 테스트 시에 외부 시스템과의 의존성을 줄일 수 있으며,

테스트를 격리된 환경에서 실행할 수 있다. 이는 테스트의 신뢰성과 안정성을 높여준다.

- 일관성 유지: 테스트 시마다 동일한 상태에서 테스트를 수행할 수 있다.

이는 테스트 결과를 일관성 있게 유지할 수 있도록 도와준다.
- 자유로운 조작: 테스트 시에 필요한 데이터를 자유롭게 조작하고 생성할 수 있다.

이는 다양한 테스트 케이스를 만들기 쉽게 해준다.


실제 데이터 사용의 장점:

- 실제 동작 검증: 실제 데이터를 사용하면 테스트가 실제 환경에서 동작하는지 확인할 수 있다.

이는 테스트의 현실적인 시나리오에서의 동작을 보장한다.
- 시스템 통합 테스트: 여러 시스템이 상호 작용해야 하는 경우, 실제 데이터를 사용하여

통합 테스트를 수행할 수 있다. 이는 다양한 시스템 간의 상호 작용을 검증하는 데 유용하다.
성능 테스트: 대규모 데이터를 사용하여 성능 테스트를 수행하는 경우, 

실제 데이터를 사용하는 것이 더 정확한 결과를 얻을 수 있다.

 


따라서 테스트의 목적과 환경에 따라 더미 데이터 또는 실제 데이터를 사용하는 것이 적절하다.

격리된 테스트와 일관성이 중요한 단위 테스트에서는 더미 데이터를 사용하는 것이 좋고,

실제 시스템과의 상호 작용을 검증하거나 통합 테스트, 성능 테스트를 수행할 때는

실제 데이터를 사용하는 것이 유용하다고 볼 수 있다.

 

 

이제 실제로 구현해보며 다음 포스팅에서 이어가보겠다.

728x90