Tdd 와 각종 테스트

동현·2021년 9월 9일
0
post-thumbnail

테스트를 하는 이유?

  • 가시적, 구체적 목표 설정 가능
  • 스스로 실행되며 자가 검증 가능
  • 간단하고 반복으로 실행 가능
  • 테스트 코드가 운영코드의 클라이언트라 볼수 있음
  • 배포하기전에 테스트 가능

테스트의 기법

  • 수동 (실제 기능 검증, Q/A)
    • 인수테스트
    • 실행 비용이 높고 입력에따른 결과 차이가 명확
  • 자동 (기능 검증 테스트)
    • 테스트 코드 작성 비용이 높고 실행 비용이 낮으며 신뢰도가 높다
    • 작성 및 관리가 개발자의 역량에 따라 갈린다
    • 단위 테스트

➕ 테스트는 개발자에게 심리적 안정감을 주게 되며 혼자서 피드백을 받을수 있게 해주는 효과가 있다.

TDD란?

흔히 테스트 주도 개발이라 하며 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 구현하여 반복을해 개발자 스스로 검증을 할수있다.

  • 테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가해나가는 방법이다.

    1. 실패 하는 테스트 작성

    2. 통과 하는 테스트 작성

    3. 리펙토링

      을 반복하며 책임과 협력의 관점에서 객체를 바라볼수있게 도와준다.

      → 좀더 객체지향적인 코드 생성이 가능.

  • 객체가 존재하는 이유는 행위를 수행하여 협력에 참여 하기위함인데 → 각 객체의 책임이 중요해진다.

  • 객체는 그저 데이터를 저장하기 위한 존재가 아니다. → 객체를 설계시 객체의 책임, 행동, 결정 후 데이터를 설계한다.

장점

  • 보다 튼튼한 객체 지향적인 코드 생산이 가능해진다.
    • 계층별로 철저한 모듈화를 이루며 코드를 작성하기에 필요에 따라 모듈을 추가하거나 제거 해도 전체 구조에 영향을 미치지 않는다.
  • 재설계 시간의 단축
    • 테스트 코드를 먼저 작성하기 때문에 기능 구현에 집중할수 있고 전반적인 설계가 변경되는 일을 방지 할수 있다.
  • 디버깅 시간의 단축
  • 테스트 문서의 대체 가능
  • 추가 구현이 용이함

그렇다면 테스트의 단위는?

테스트의 단위는 크게 각 목적과 방법에 따라 단위테스트, 통합테스트, 인수테스트로 나눌수 있다. 지금부터 이에 대해 알아보도록 해보자

단위 테스트(Unit Test)

응용 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 기대값과 일치하는 지 확인하는 테스트

  • 일반적으로 클래스, 메소드 수준으로 테스트를 진행한다.
  • 단위가 작을수록 복잡성이 낮아진다. → 동작을 표현하기 쉬워짐 → 테스트를 최대한 간결하게 작성하라

ex>

좋은 단위 테스트의 특징

  • 요구사항은 계속 변한다. 우리는 그에 맞춰 우리의 코드로 변화를 주어야 한다. 코드를 수정ㅈ하게 되면 side effect를 유발할수 있지만 좋은 테스트 코드가 있다면 이를 예방 할수 있다.

    • 1개의 테스트 함수에 assert 최소화

    • 1개의 테스트는 하나의 역할만 수행 ( 한가지 행동 )

      FIRST

    • FAST

    • INDEPENDENT

    • REPEATABLE

    • SELF-VALIDATING

    • TIMELY


통합 테스트 (Integration Test)

통합 테스트는 이름 에서도 나타나 있듯이 테스트를 통합해서 진행 한다는 뜻이다. 즉 의도대로 협력을 하는 지 확인하는 테스트이다.

  • 통합테스트는 단위 테스트와는 다르게 외부 라이브러리까지 함께 묶어 검증이 가능하다. DB에 접근하거나 다양한 환경에서 작동하는지 모두 테스트가 가능하다.
  • 단위 테스트에서 발견하기 어려운 버그를 찾을수 있다.
  • 단위테스트 보다 더 많은 테스트를 작성하기 때문에 신뢰성이 떨어진다 ( 단위 테스트를 잘 작성했다면 이를 극복 할수 있다 생각한다.)

ex>


인수 테스트 (Acceptance Test)

사용자의 시나리오에 맞춰 수행하는 테스트

  • 두 테스트와는 다르게 비즈니스 쪽에 초점을 둔다. 시나리오를 만들어 이에 의거해 테스트를 한다.
  • 간단하게 시나리오를 인수 받아 개발 한다는 의미를 갖고 있다.

Reference

https://wooaoe.tistory.com/33

https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/

profile
여긴 어디 나는 누구?

0개의 댓글