TDD란 무엇일까

귤쳥·2022년 9월 14일
0
post-thumbnail

“test the program before you write it!” - Kent Beck

TDD(Test-Driven Development)

테스트코드를 먼저 만들고, 실제 프로덕션 코드를 나중에 만드는 개발방법

개발프로세스

설계 → 테스트(코드작성) → 설계수정(반복) → 개발(코드작성)

.cf 기존 설계 → 개발(코드작성) → 테스트(코드작성) → 설계수정

  • 설계수정이 느려짐 (실제 구현된 코드를 재수정하게 됨)

red, green refactor (tdd개발 사이클)

red : 테스트를 실패하고(일단 테스트 코드를 작성하면 구현부가 없기 때문에 당연히 실패)

green : 테스트를 성공할 수 있게 프로덕션 코드를 구현

Refactor : 리팩토링 수행(중복코드 제거, 일반화)

장점

변화에 대한 두려움을 줄여준다(리팩토링이 편하다)

디버깅 시간을 줄여준다(유닛테스트)

동작하는 문서의 역할을 한다(SI프로젝트에서의 테스트정의서 작성을 줄여줌)

테스트를 안하는 것을 막아줌

오버엔지니어링 방지 → 정말필요한 만큼만코딩을 할 수 있다.

설계에 대한 피드백이 빠르다

주의

코드의 기능을 어떻게 구현했는지를 테스트 하는 것이 아니다.

구현체를 테스트하는 것이 아니다. → 테스트가 구현체와 결합도가 높아지게 한다. (리팩토링시 테스트 케이스가 깨지게 된다)

항상 써야하는 것은 아니고 불확실성이 높을 때 쓰면 좋다.

예시

// input : 생년월일, 현재년도 , output : 나이
// 1. 목표설정 : 태어난 해와 올해년도를 입력받는다(2015, 2018 ->3살)
// 2. 테스트 설계 : 2015, 2018을 입력하면 3이 나오는 프로그램
static void testAge(){
        int now = 2018;
        int birth = 2015;

        if (getAge(now, birth)==3) {
            System.out.println("테스트 통과");
        } else {
            System.out.println("테스트실패");
        }

    }
// 3. 테스트를 통과할 프로그램을 생성
static int getAge(int now, int birth) {
        return now - birth;
    }
// 4. 테스트 실행 후 반복

테스트

넓음

  • 인수테스트 : 고객 또는 대리인이 정의된 모든 목적에 부합하는지 테스트
  • 부하테스트 : 주어진 단위시간동안 얼마나 많은 요청을 처리할 수 있는지 테스트
  • 기능테스트 : 공개된 API의 가장 바깥쪽에 해당하는 코드 검사(Controller호출, Secuity, http)
  • 통합테스트 : 여러 작업단위가 연계된 워크플로우를 테스트(객체간, 서비스간, 시스템간)
  • 단위테스트 :

좁음

단위테스트

  • 가장 작은단위의 테스트 (일반적으로 메서드 레벨)
  • 검증이 필요한 코드에 대해 테스트케이스를 작성
  • 목적 : 문제점발견, 변경이 쉬움, 품질향상(테스트케이스가 너무 복잠한 것은 하나의 프로덕션코드가 너무 많은일을 수행하는것), 코드의 문서화(샘플코드)→예외상황, 용도, 의존관계를 한눈에 파악가능

FIRST 법칙

  • Fast : 테스트가 느리면 자주 돌릴수 없음
  • Independent : 테스트가 서로 의존하면 하나의 결과가 다른 테스트에 영향을 미쳐 원인진단 어려움
  • Repeatable : 실제환경, QA환경 등 모든환경에서 반복이 가능해야함
  • Self-Validating : test는 사람이 판단하는 결과가 아닌 성공 또는 실패를 반환해야 한다.
  • Timely : 적시에 작성해야 한다. (단위테스트는 실제코드 구현 직전에) 테스트코드를 후에 작성하면 오류가 있는경우 프로덕션 코드를 다시 짜야함

JUnit

Java 단위 테스트 프레임워크

https://www.youtube.com/watch?v=EZ05e7EMOLM

https://www.youtube.com/watch?v=3LMmPXoGI9Q

https://wooaoe.tistory.com/33

https://gmlwjd9405.github.io/2018/06/03/agile-tdd.html

profile
혼긱 CE의 이제 막 시작하는 코딩

0개의 댓글