22/05/23 TDD방식

김석진·2022년 5월 23일
0

다시 초심으로

목록 보기
12/19

TDD(Test Driven Development)

테스트 주도 개발 기법

  • 프로그램의 설계와 구현, 사고의 흐름을 테스트 중심으로 생각하는 개발방법
  • 개발 순서의 변화
    - as-is: 구현한다 -> 테스트 한다 (기존의 방식)
    • to-be: 테스트를 만든다-> 테스트를 통과하는 기능을 구현한다 (TDD의 방식은 기존의 방식과 반대)
  • 주요 키워드: 익스트림 프로그래밍(XP), 애자일, 폭포수 모델, Test-First Programming

RED-GREEEN- REFACTOR (TDD 개발 사이클)

  1. RED:(실패하는)테스트를 짬(요구사항의 명세)
  2. GREEN: 테스트를 성공시킨다(구현)
  3. REFACTOR: 구현 코드를 고도화(리팩토링)한다

이순서를 계속 반복된다고 생각하면된다.

Given-When-Then

테스트의 구조를 표현하는 방법(aka AAA(3A) , Arrange- Act- Assert)

  • Given(Arrange): 상태(State)의 정의- 테스트를 수행할 때 전제 조건
  • When(Act): 동작- 테스트 실행
  • Then(Assert): 검증-동작의 결과(actual) vs. 예상값(expected)

WHY TDD? WHY TEST (강사님의 생각)

왜 이걸 해야할까?

  • 내가 지금 뭘 하려는지 명확히 안다는 사실을, 스스로 지속적으로 확인한다.
    * 개발이 지연되는 이유는 막막해서 멍을 때리기 때문에
  • 내가 지금 뭘 하려고 하는지 안다는 사실을 동료와 소스 코드로 공유하고 소통(코드 리뷰)함
    * as-is 1: 개발 계획을 별도의 문서로 공유(TDD가 아닌 기존의 개발방식)
    • as-is 2: 개발 계획을 구현 코드로 공유함 (TDD가 아닌 기존의 개발방식)
      • 구현 코드를 까서 봤는데 구현된 코드와 개발자의 의도가 일치 하지 않을(논리 오류일 경우) 경우가 있기때문에 강사님의 생각에서는 TDD와 Test가 나왔다고 생각하셨다.
    • to-be: 개발 계획을 테스트 코드로 공유함 (TDD)
      • 테스트코드로 공유한 경우 명세의 포커스에 맞췄기때문에 구현에 포커스를 맞춘 구현코드와 다르다
        - 구현코드의 제 1 목표는 동작(구현)이다
        • 테스트코드는 테스트코드를 읽는 사람에게 이 기능의 의도를 전달하는데 목적을 가진다

최고의 효율로 테스트 개발을 하려면

테스트 설게 흐름에 익숙해 져야한다

  • 사람의 요구항을 프로그램이 할 수 있는 기능으로 변환해야함
  • 기능을 단위 기능으로 세분화
  • 기능의 관계와 상호작용을 설계하기
  • 테스트 작성 기술에 익숙해져야한다.
profile
주니어 개발자 되고싶어요

1개의 댓글

comment-user-thumbnail
2022년 5월 23일

좋은 내용이네요~퍼가요~^^

답글 달기