본문 바로가기
우아한테크캠프Pro3기

1주차 - TDD

by 방구석개발자 2022. 1. 5.
반응형

해당 포스팅을 하는 이유

그동안 배운 내용들을 정리하면서 복기하여 완전히 내것으로 만들기 위함입니다.

8개의 미션이 있으므로 한개씩 내용을 정리 할 예정입니다.

포비님께서도 습관을 더 유지하여 지속하기 원함.

학습목표

* TDD 기반으로 프로그래밍하는 경험
* 메소드 분리 + 클래스를 분리하는 리팩토링 경험
* 점진적으로 리팩토링하는 경험

과정을 통해 배운 것

TDD란 무엇인가?

TDD는 Test Driven Development 이라고 하며 한글로는 테스트 주도 개발이라고 불립니다.

테스트코드를 먼저 짜고 그다음 프로덕션 코드를 짜는 개발 방법론입니다.

 실패하는 테스트 코드를 작성하고 -> 테스트가 통과하게만 하는 프로덕션 코드를 작성한다 -> 통과되었다면 프로덕션코드를 리팩토링한다.

해당 싸이클을 반복하여 점진적으로 요구사항 기능을 개발한다.

TDD를 왜 해야 하는가

끊임없이 발생할 버그에 대해 걱정하지 않고, 일이 언제 마무리 될지 알 수 있다.

디버깅 시간을 줄여준다.

동작하는 문서 역할을 한다. 테스트 코드를 보면서 어떤 요구사항을 만족하는 기능인지 알 수 있다.

TDD를 잘 하려면?

테스트 주도 개발을 잘 하려면 훈련과 경험이 필요합니다.

* 간단하고 쉬운 문제들을 TDD로 시도 합니다. 가능하면 전에 접하고 프로그래밍해본 문제가 좋습니다.

* 알고리즘 문제가 제일 좋습니다. 입력과 출력이 명확하면 TDD시도하기 편합니다.

- 켄트벡, Test Driven Development by Example 중

TDD를 잘 하려면 구현목록을 잘 작성합니다. (하나하나 테스트코드 먼저 작성 할 수 있도록)

테스트하기 쉬운것과 어려운것을 분리합니다. 예를 들어 view는 테스트하기 어렵고 util은 테스트하기 비교적 쉽습니다.

또한 random은 테스트 하기 어렵습니다.

java 진영의 테스트 코드 라이브러리

대표적으로 junit을 이용할 수 있습니다.

또한 assertj 라이브러리도 이용하면 좋습니다.(더 직관적으로 사용가능합니다.)

객체지향 생활 체조 원칙 + 클린코드

객체 지향 프로그래밍을 잘하기 위한 9가지 원칙.

  1. 한 메서드에 오직 한 단계의 들여 쓰기만 한다.
  2. else 예약어를 쓰지 않는다.
  3. 모든 원시 값과 문자열을 포장한다.
  4. 한 줄에 점을 하나만 찍는다.
  5. 줄여 쓰지 않는다(축약 금지).
  6. 모든 엔티티를 작게 유지한다.
  7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  8. 일급 컬렉션을 쓴다.
  9. getter/setter/프로퍼티를 쓰지 않는다.

추가 - 9. 자바의 프로퍼티 개념에 대해서 https://dev-coco.tistory.com/87 , https://jsdev.kr/t/topic/5274 를 참고하시면 좋을 거 같습니다.

클린코드 관련된 책은 많지만 실무에서 사용하기 어렵습니다. 그 이유는 클린코드를 대부분 정성적으로 표현하고 정량적으로 계산하기 어려워서 그렇습니다. 객체지향 생활 체조원칙은 정략적이므로 잘 지켜나간다면 클린 코드로 작성 할 수 있습니다.

더 공부 할 내용

BDD, ATDD, TDD도 단점이 있을까?

Mock, Stub Test

참고 자료

켄트벡, Test Driven Development by Example

소트웍스 앤솔러지

TDD란 무엇인가?

[OKKYCON: 2018] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기

공부한 깃허브 소스

https://velog.io/@funnystyle/TIL-Java-privatepublic-static-final-%EB%93%B1%EC%9D%98-%EC%88%9C%EC%84%9C

https://yhmane.tistory.com/147

반응형

'우아한테크캠프Pro3기' 카테고리의 다른 글

2주차 JPA  (0) 2022.07.17

댓글