테스트주도개발 01

Updated:

테스트 주도개발 1장

정의

프로그램을 작성하기 전에 테스트를 먼저 하라

by 켄트 백 (TDD, XP(익스트림 프로그래밍) 창시자)

  • TDD란 테스트 주도 개발. 즉, 프로그램 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 것을 말한다.

목표

작 동작하는 깔끔한 코드

by 론 제프리 (켄트 백 친구. XP 같이 만듬)

  • TDD의 목표는 잘 동작하는 깔끔한 코드이다.

기원

  • TDD는 XP에 등장하는 여러 실천 방법 중 하나.
  • XP는 2000년대 초반 급부상한 애자일 SW 개발론 중 하나
  • XP의 목표 고객에게 최고의 가치를 최대한 빨리 전달하는 것을 목표
  • XP는 TDD, 짝 프로그래밍, 일일빌드, 지속적인 통합 등 다양한 실천 방법을 제시
  • XP는 근래 다른 애자일 방법론(ex: 스크럼)과 혼용해서 적용

TDD 진행 방식

  1. 질문 : 테스트 작성을 통해 시스템에 질문 (테스트 수행 결과는 실패)
  2. 응답 : 테스트를 통과하는 코드를 작성해서 질문에 대답(테스트 수행 결과는 성공)
  3. 정제 : 리펙토링
  4. 반복 : 다음 질문을 통해 대화를 계속 진행 (1번부터 다시 시작)

TDD 진행 예제

두 가지 방식으로 접근 가능
  1. 구현 대상 클래스의 외형에 해당하는 메소드를 먼저 만들고 테스트 케이스를 일괄적으로 만드는 방식
  2. 테스트 케이스를 하나씩 추가해나가면서 구현 클래스를 점진적으로 만드는 방식
  • 책에서 말하길 무엇이 좋다고 어려우나 이왕이면 초보자에게는 2번이 좋다고함. 1번의 경우 모든 케이스가 통과하기 까지 시간이 걸림. 초보자가 좋은 습관을 가지기 위해 2번이 좋음.

  • 실패를 빨리 경험하라 : 보통은 실패를 하지 않기 위해 노력을 한다. 하지만 실패를 빨리 할 수록 그 경험을 삼아 빨리 극복하기 위해 노력한다. 결과적으로 시간을 더 아낄 수 있다.

  • 클래스 설계시 동작을 먼저 고민하라 : 보통은 클래스에 속성을 먼저 고려한다. 하지만 동작을 먼저 정하고 그 동작에 필요한 속성을 고려하면 클래스내에 불필요한 속성이 들어가는 것을 줄여준다.

  • 오류와 실패 : 실패는 테스트 코드를 끝까지 수행했으나 결과 값이 만족하지 못했다는 것이다. 그러나 오류는 테트스 코드를 수행하지 않고 예상치 못한 실패를 뜻한다. 이는 테스테 케이스 자체가 문제가 있다는 뜻이다. 테스트 케이스의 가치는 끝까지 실행 되어야 한다. 따라사 빨리 실패가 되도록 바꾸어야 한다.

  • 기능이 있는 생성자에 대해선 테스트 케이스를 작성하는 것이 좋다.

  • 실패하는 테스트 케이스는 여러개 만들지 말자 : 옳은 말이나 때로는 상황에 따라 가능할 수 있다. 그러나 최대한 지키려고 노력하자.

  • 현재 필요한 기능이 아니면 절대 만들지 말자.

TDD 장점

  • 개발의 방향을 잃지 않게 유지해준다.

  • 품질 높은 소프트웨어 모듈 보유
  • 자동화된 단위 테스트 케이스를 갖게 된다.
  • 사용설명서 & 의사소통의 수단 : API 참조메뉴얼보단 상황에 맞는 잘 만들어진 예제가 더 좋다.
  • 설계 개선 : TDD를 진행해 나가면서 더 나은 설계 구조를 가질 수 있다.
  • 보다 더 자주 성공한다 : TDD는 매 주기를 짧게 설정하도록 권장. 목표의 성취감을 자주 맛 볼 수 있다.

엉클밥의 TDD 원칙

  1. 실패하는 테스트를 작성하기 전에 절대로 제품 코드를 작성하지 않는다.
  2. 실패하는 테스트 코드를 한 번에 하나 이상 작성하지 않는다.
  3. 현재 실패하고 있는 테스트를 통과하기 충분한 정도를 넘어서는 제품 코드를 작성하지 않는다.

Tags:

Categories:

Updated: