테스트 코드 개념

API를 개발하면서 swagger나 postman을 통해 개발 사항에 대한 테스트를 진행해 볼 수 있다. 하지만 이렇게 수동적인 테스트는 관리해야할 api가 늘어나고, 요구사항이 변경되게 될수록  커버하지 못하는 영역이 늘어나게 된다. 이를 위해 필요한게 테스트 코드이다. 

테스트 코드를 통해 개발자는 빠른 피드백을 얻을 수 있으며, 테스트 케이스 수행을 자동화할 수 있다. 이에 따라 코드의 안정성이 높아져 소프트웨어 품질 유지에 도움이 되는 것이다.

 


테스트 코드 규칙

이러한 테스트 코드는 다음과 같은 규칙들을 지키며 작성할수록 좋은 테스트 코드라 불려진다

  • FIRST 원칙
    • Fast :  빠르게 실행
    • Isolated : 테스트 코드 성공 유무가 다른 테스트에 영향을 끼치지 않음
    • Repeatable : 동일한 환경에서 여러번 돌려도 같은 결과
    • Self-Validating : 성공 또는 실패를 명확히 해야함
    • Timely : 테스트하려는 코드를 구현하기 이전에 작성
  • 단일 검증
    • 각 테스트는 하나의 개념만을 테스트 해야 함
  • 단일 모듈을 독립적으로 검증하고 의존성을 격리한다.
  • 테스트의 이름과 설명을 명확하게 작성한다.

 

위에서 작성했듯이 테스트 코드는 보통 테스트하고자 하는 코드를 작성하기 전에 작성하는 것이 좋다.  이러한 방식을 TDD라고 하는데 이 때 사용되는 핵심 개발 프로세스는 RED-GREEN-REFACTOR 방식이다.

  1. RED - 요구 사항에 대한 테스트 작성 (현재 실질코드가 없기 때문에 테스트는 당연히 실패)
  2. GREEN - 테스트를 성공시키기 위한 코드 작성
  3. REFACTOR - 작성한 테스트 코드를 통과하는 것을 확인해가며 코드 개선

해당 사이클을 반복하면서 테스트 주도적인 개발을 해나가는 것이 이상적인 개발 방식이다. 

 

테스트 케이스를 작성할 땐 다음과 같이 구분해서 작성할 수 있다.

  • 해피 케이스 : 시스템의 정상적인 시나리오에서의 동작 검증
  • 예외 케이스 :  시스템의 예외 상황에서의 동작 검증
  • 경계값 분석 : 데이터 범위의 경계값을 중심으로 케이스를 나눈 뒤, 모든 경계에서의 동작 검증

이러한 테스트 코드를 작성할 땐 given(무언가가 주어짐) → when(어떤 상황이 발생함) → then(이런 로직을 실행함) 순서로 짜는게 best이자 FM이라고 한다.

 


테스트 종류

  • 단위 테스트 (Unit Test)
    • 작은 코드 단위(모듈, 함수, 클래스 등)를 독립적으로 검증하는 테스트
    • 주로 프로그래머가 작성하며, 코드의 동작을 검증한다.
    • 일반적인 테스트 케이스 작성이 의미하는것이 단위 테스트이다.
  • 통합 테스트 (Integration Test)
    • 모듈 간의 연계된 동작을 확인하는 테스트
    • 각각의 모듈이 제대로 상호작용하는지, 시스템의 구성 요소들이 올바르게 통합되어 동작하는지를 검증한다.
  • 부하 테스트 (Stress Test)
    • 소프트웨어가 예상되는 최대 부하를 감당할 수 있는지 검증하는 테스트
    • 과도한 부하를 가한 뒤 응답시간, 처리량, 자원 사용량 등을 측정하고 성능 문제를 파악 및 최적화한다.