[항해플러스 5기 백엔드 1주차] TDD

Why TDD?

소프트웨어 규모가 커지면서 소프트웨어의 품질을 지속적으로 유지시키고 향상시키기 위해선 테스트 자동화의 중요성은 강조되고 있다.

TDD는 유지보수 및 장애 발생시 대처를 유연하게 할 수 있는 방법론으로도 볼 수 있다.

즉, 빠른 변화에도 유연하게 새로운 기능을 적용하고 변경할 수 있는 기반을 TDD를 통해서 다질 수 있다.

테스트 코드 작성은 대부분 동의 하겠지만, TDD에 대한 반대 의견도 많다. TDD가 100% 좋다고는 할 순 없지만 좋은 방법론 중에 하나임은 틀림 없다.

테스트 시나리오 및 케이스

처음에 정한 테스트 시나리오를 바꾸지 않는 것이 Best지만, 처음부터 완벽한 시나리오를 짜는 것은 힘들다. TDD의 목표 중 하나는 좋은 소프트웨어를 설계하는 것이기 때문에 테스트 시나리오는 언제든지 추가하거나 수정해도 문제가 없다.

 

테스트 커버리지

모든 함수에 대해 테스트 코드가 필요한 것은 아니다. 단순 생성의 경우는 테스트를 할 필요가 없다.

100% 테스트 커버리지를 가지는 것이 과연 좋은 설계 인지는 고민해봐야 한다.

 

테스트 피라미드

https://circleci.com/blog/testing-pyramid/

End-to-end testing

  • 대상 : 전체 애플리케이션의 흐름
  • 애플리케이션이 제공하는 기능을 사용자 시나리오 기반으로 점검

Integration testing

  • 대상 : 서로 다른 module / system의 상호 작용
  • 맞물려 돌아가는 기능이 모여 정상적으로 원하는 기능을 제공하는지 점검

Unit testing

  • 대상 : 단일 기능 혹은 작은 단위의 함수 / 객체 등
  • 가벼운 비용으로 새로운 기능 혹은 개선이 기존의 rule을 위배하지 않는지 점검

Test Double

테스트 더블은 실제 컴포넌트를 대체할 수 있도록 하는 대역이다.

실제 컴포넌트에 대한 행동을 모방하고, 이를 통해 기존의 강한 결합도를 낮추고 테스트 중 제어 가능하도록 한다.

 

Mock

  • 테스트를 위해 특정 기능에 대해 정해진 응답을 제공하는 객체
  • 입력과 상관없이 어떤 행동을 할 지에 초점을 맞춘 객체
  • Mock Library를 통해 특정 행동에 대한 출력을 정의

Stub

  • 테스트에 필요한 호출에 대해 미리 준비된 응답을 제공하는 객체
  • 입력에 대해 어떤 상태를 반영하는지에 초점을 맞춘 객체

테스트 더블을 잘 활용하면 Integration testing도 유닛 테스트로 작성할 수 있다.

 

실제 현업에서 TDD를 진행한다면?

TDD에 앞서 테스트는 중요하다 라는 사전 인지를 해야만 한다.

 

TDD가 어려운 이유는 다음과 같다.

  • [경험] 테스트 코드를 작성해본 적이 없다.
  • [분석] 요구사항을 분석하고 기능을 작성할 때, 어떤 테스트가 필요한지 모른다.
  • [시간] 기능 개발하기도 바빠서, 테스트 코드 작성할 시간이 없다.
  • [구조] 내가 작성한 코드를 어떻게 테스트 해야 할지 모르겠다.

 

단위 테스트 코드 작성 규칙

1. 요구 사항을 분석하여 어떤 기능을 제공해야 하는지 파악한다.
2. 성공 TC 하나를 정리한다.
3. 실패 TC를 정리 한다.
4. 2번과 3번의 기능을 구현한다.
5. 기능의 책임을 분석한다.
  - 너무 다양한 TC가 필요하지 않았는지
  - 너무 많은 책임이 주어져 있지는 않은지 (응집도)
6. 리팩토링
  - 적절한 위상의 책임을 가지고 있도록
  - 충분히 원자적으로 테스트가 가능하도록
  • 1번에서 요구사항 분석시 비즈니스 요구사항뿐만 아니라 fallBack, failover, 모니터링 지표, 트래픽 등을고려한다.
  • 3번에서 경계값 테스트도 중요하다
    • String이면 empty string, blank string
    • 숫자면 0, 음수
    • 리스트면 empty list

 

테스트 코드는 본인만의 철학을 가지고 있어야 한다.

  • 구현체 변경이 있을 때 마다 테스트 코드가 실패해야 좋은가?
  • 아니면 구현체 변경을 해도 테스트 코드는 성공해야 좋은가?

 

===

 

현재 항해 플러스 백엔드 코스 6기 모집중입니다.

항해플러스 관련해서 문의 주실 내용 있으시면 이메일 혹은 댓글로 편하게 문의주세요!!

지원시 추천 코드 입력 한번 부탁드립니다!!

 

추천코드

HHPGS0858

 

https://hanghae99.spartacodingclub.kr/plus/be