ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CS 100문 100답 Q.013(Test-Driven Development)
    카테고리 없음 2022. 10. 9. 21:18

    키워드 풀이

    013. TDD(테스트 주도 개발)?

    • 테스트로부터 시작하는 개발 방식
      1. (실패하는) 테스트 코드 작성
      2. 테스트를 통과시킬 만큼 구현
      3. 코드 정리(리팩토링)

    • 테스트 코드작성 순서
      • 쉬움 / 예외 → 어려움 / 정상
      • ex
        • null 입력, 빈 값 입력 → 예외적인 것(정상이 아닌 것)
        • 모두 충족하는 경우 → 쉬움
        • 셋 중 둘을 충족하는 경우 → 그 다음 쉬움
        • 모두 충족하지 않는 경우
    • 완급 조절
      • TDD로 통과시키는 과정
        • 정해진 값을 리턴
        • 값 비교를 이용해서 정해진 값을 리턴
        • (다양한 테스트를 추가하면서) 구현을 일반화
      • 구현이 생각나면 빠르게 구현
        • 단 테스트를 통과시킬 만큼만!
        • 앞서 가지 말 것!
      • 구현이 막히면 다시 뒤로 돌아와서 천천히 진행
    • 기능 설계
      • 기능의 구성 : 입력, 결과
        • ex : 로그인 기능
          • 입력 : 아이디, 암호
          • 결과 : (리턴) 일치하면 true, 일치하지 않으면 false
        • ex : 회원 가입
          • 입력 : 아이디, 암호, 이름
          • 결과 : (리턴) 회원 일련 번호, 회원 정보 DB에 저장
      • 기능 명세 → 설계로 연결
        • 이름, 파라미터, 리턴 타입 등 결정
      • TDD는 설계를 지원

     

    F.I.R.S.T 원?

    단위 테스트 코드를 작성할 때 주의해야 하는 원칙은 5가지 이다.

    • F : Fast -> 테스트 코드는 빨리 진행이 되어야 한다.
    • I : Independent -> 독립적으로 실행이 가능해야 한다.
    • R : Repeatable -> 반복이 가능해야 한다.
    • S : Self Validating -> 테스트 코드만 실행해도 성공여부를 확인할 수 있어야 한다.
    • T : Timely -> 바로 사용이 가능해야 한다.

    테스트 구조?

    • 특정 상황에서 테스트 대상을 실행하면 예상된 결과가 나와야 한다.
      • 특정 상황 : Given / Arrange
      • 테스트 대상을 실행 : When / Act
      • 예상된 결과 : Then / Assert

    의존과 대역?

    • 대역(double) - 실제 구현을 대신
    • 테스트 대상이 실제 의존 대신에 대역을 사용하게 함
    • 대역 종류
      • 스텁(stub) : 구현을 최대한 다순한 것으로 대체
      • 스파이(spy) : 호출된 내역을 기록
      • 모의(mock) 객체 : 기대한대로 상호작용하는지 행위를 검증
        • 보통 모의 객체는 스텁과 스파이 가능
      • 가짜(fake) : 기능을 구현해서 진짜와 유사하게 동작(경량 버전)
    • 대역 이점
      • 의존 대상의 실제 구현 없이 테스트 가능
        • 현재 구현 대상에 집중, 병해 개발 가능
        • 의존 대상에 대한 상황 지정 가능
        • 개발 속도 향상

     

    참고자료

    스스로 생각해보기!

    스터디를 위해 직접 TDD방식으로 간단한 프로그램을 처음 개발할때는 뭔가 불편한 느낌을 지울수가 없었는데 테스트 코드를 작성하기 위해 본래의 코드를 작성한다는 느낌이 들었다. 주객이 전도된 느낌? 

    현재는 팀프로젝트를 진행하면서 TDD를 최대한 적용하려고 하는 중이며 계속하다 보니 조금씩 적응해 나가는것 같다. 그런데 여러 case의 테스트를 하는건 좀....

    댓글

Designed by Tistory.