Common/Testing

FIRST 원칙

Seyun(Marco) 2022. 10. 3. 12:29
728x90

FIRST 원칙

FIRST 원칙이란?

  • 클린코드 책의 저자인 Bob Martin이 처음으로 제시한 규칙
  • 이 규칙의 목적은 효율적이고 좋은 단위 테스트를 하기 위함
  • 아래와 같이 5가지의 요소로 이루어져 있음.
    • 빠르고(Fast)
    • 독립적이고(Independent)
    • 반복가능하며(Repeatable)
    • 자체 검증가능하며(Self-validating)
    • 철저하고 적시에(Thorugh & Timely)

Fast

  • 유닛테스트는 빠르게 실행되고 빠르게 결과를 알아야 한다는 의미.
  • 빠르게 하기 위해선, 테스트 케이스의 단위가 최대한 작게 작성.
  • 또한, 빠르게 단위테스트를 진행하기 위해 실제 서버나, DB와 통신하지 않고 Mock(가짜 데이터)를 이용.
  • 즉, 실제 테스트를 하고 싶은 부분만 잘라서 테스트를 하는것이 중요함.

Independent

  • 단위 테스트는 그 자체만으로도 충분히 실행되어야 함.
  • 즉, 독립적이고 테스트들 끼리 의존하고나 영향을 주면 안됨
  • 대표적인 독립적이지 않은 케이스는 아래와 같음
    • A라는 테스트에서 객체의 상태를 변경함.
    • B라는 테스트에서 A라는 테스트의 객체 상태를 변경을 모르고, 테스트 케이스를 작성함으로 테스트가 깨짐.

Repeatable

  • 반복 가능해야 한다는 것은, 몇백번을 테스트가 실행되어도, 똑같은 결과가 나와야 한다는 의미.
  • 예를들어, 덧셈을 하는 테스트에서 1 + 1는 2다. 라는 테스트가 있을때 몇백번 몇천번을 해도 동일한 결과가 나와야 한다는 의미.
  • 이 부분은 Independent와 연결되어 있는데, 테스트가 독립적이지 않고 다른 테스트와 서로 의존을 해 서로 테스트에 영향을 준다면 몇백번, 몇천번을 실행했을때, 간헐적으로 깨지는 케이스가 생길 수 있음.

Self-validating

  • 단위 테스트는 자체적인 검증이 가능해야 함.
  • 테스트를 실행 시, 실패했는지 성공 했는지에 대해 자동적으로 이뤄져야 함.
  • 대표적인 잘못된 예시로는 Logger와 같은 출력 라이브러리를 이용해 출력값을 직접 사람이 검증해야 하는 테스트는 잘못된 테스트.

Thorough & Timely

  • 철저하고 적절한 때에 작성이 되어야 함.
  • 모든 데이터를 검사해야 함으로 최소에서 최대까지 범위를 포함해야 하며, 데이터가 변경되는 부분까지 신경써 테스트가 가능해야 함.
  • 또한, 예외나 오류가 발생하는지도 테스트를 해야함.
728x90
728x90