[Project] TDD 개념잡기

Fortice·2021년 5월 11일
0

Project

목록 보기
1/8

TDD

개념

Test Driven Development의 약자로 테스트 주도 개발을 의미한다. 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스이다.

기본적인 개발 방식

  1. 성능 향상을 위한 또는 새로운 함수를 정의하는 자동화된 테스트 케이스를 작성한다.
    • 해당 코드는 결함을 점검하는 코드가 포함되어 있다.
  2. 테스트 케이스를 통과하기 위한 최소한의 코드를 작성한다.
  3. 해당 코드를 표준에 맞게 리팩토링 한다.

기존 방식과의 차이

기존에는 설계-개발-테스트 순서로 개발을 했다면 설계-테스트-개발순서로 테스트가 주가 되어 개발을 진행하는 방식이다.

장점

1. 객체 지향적 코드 작성

각 함수들을 정의해 기본적인 코드를 작성하면서 구조적인 설계를 할 수 있고, 이를 테스트 후 재사용해 실제 코드를 작성하면서 재사용성 또한 보장된다.

2. 설계 수정 시간 단축

설계 후 테스트 코드를 작성하는데, 테스트 코드는 최초 설계를 만족(최소한의 코드로 개발)하면서 입출력 구조와 기능의 정의를 명확히 하므로 테스트를 진행하며 설계의 구조적 문제를 찾을 수 있습니다. 또한 실제 코드 개발 전 여러가지 예외 상황들을 미리 조사하고, 확인해볼 수 있어, 예외에 대해 미리 처리가 가능합니다.

3. 디버깅 시간 단축

단위 테스트 코드를 작성하기 떄문에 추후 문제가 발생했을 때, 각 모듈별로 테스트를 하며 어떤 부분이 문제가 있는지 비교적 쉽게 찾을 수 있습니다.

4. 유지 보수 용이

일반적으로 기능의 구현을 위해 개발을 하면서 구조적으로 복잡해지고, 테스트하기에 어려움이 있습니다. TDD로 개발을 하면서 사용자 측면에 맞는, 구조적인 코드가 되어 입출력 흐름 파악, 모듈적인 기능 분리로 빠른 코드 수정이 가능합니다.

5. 테스트 문서 대체 가능

일반적인 테스트는 통합 테스트로 세부적인 기능 테스트에 대한 문서, 근거를 제출하기 어렵습니다. 하지만 TDD를 통해 테스트를 자동화와 동시에 이를 보다 정확한 테스트 근거로 제출할 수 있습니다.

Given-When-Then

개념

Given-When-Then 방식은 테스트 코드를 작성하는 표현방식 입니다. Given-When-Then을 조금 이해하기 쉽게 나타내면 준비-실행-검증이다.

  • Given : describes the state of the world before you begin the behavior you're specifying in this scenario. You can think of it as the pre-conditions to the test.
  • When : behavior that you're specifying
  • Then : describes the changes you expect due to the specified behavior

예시

  • 기능 : 쇼핑몰 포인트 거래

  • 시나리오 : 남은 개수가 1인 5000원 상품을 포인트로 거래

    • Given
      • 나는 포인트 10000원을 가지고 있다.
      • 그리고 나는 자동 결제 계좌가 등록되어있다.
      • 계좌에 40000원을 가지고 있다.
      • 상품의 금액은 8000원이다.
      • 그리고 상품의 남은 개수는 1이다.
    • When
      • 나는 상품을 사도록 요청했다.
    • Then
      • 나는 포인트 2000원을 가지고 있어야 한다.
      • 그리고 나는 자동 결제 계좌가 등록되어있다.
      • 그리고 계좌에 40000원을 가지고 있다.
      • 그리고 상품의 남은 개수는 0이어야 한다.
      • 그리고 상품이 거래 불가 상태(품절)로 변경되어야 한다.
profile
서버 공부합니다.

0개의 댓글