해당 포스팅을 하는 이유
그동안 배운 내용들을 정리하면서 복기하여 완전히 내것으로 만들기 위함입니다.
8개의 미션이 있으므로 한개씩 내용을 정리 할 예정입니다.
학습목표
* TDD 기반으로 프로그래밍하는 경험
* 메소드 분리 + 클래스를 분리하는 리팩토링 경험
* 점진적으로 리팩토링하는 경험
과정을 통해 배운 것
TDD란 무엇인가?
TDD는 Test Driven Development 이라고 하며 한글로는 테스트 주도 개발이라고 불립니다.
테스트코드를 먼저 짜고 그다음 프로덕션 코드를 짜는 개발 방법론입니다.
실패하는 테스트 코드를 작성하고 -> 테스트가 통과하게만 하는 프로덕션 코드를 작성한다 -> 통과되었다면 프로덕션코드를 리팩토링한다.
해당 싸이클을 반복하여 점진적으로 요구사항 기능을 개발한다.
TDD를 왜 해야 하는가
끊임없이 발생할 버그에 대해 걱정하지 않고, 일이 언제 마무리 될지 알 수 있다.
디버깅 시간을 줄여준다.
동작하는 문서 역할을 한다. 테스트 코드를 보면서 어떤 요구사항을 만족하는 기능인지 알 수 있다.
TDD를 잘 하려면?
테스트 주도 개발을 잘 하려면 훈련과 경험이 필요합니다.
* 간단하고 쉬운 문제들을 TDD로 시도 합니다. 가능하면 전에 접하고 프로그래밍해본 문제가 좋습니다.
* 알고리즘 문제가 제일 좋습니다. 입력과 출력이 명확하면 TDD시도하기 편합니다.
- 켄트벡, Test Driven Development by Example 중
TDD를 잘 하려면 구현목록을 잘 작성합니다. (하나하나 테스트코드 먼저 작성 할 수 있도록)
테스트하기 쉬운것과 어려운것을 분리합니다. 예를 들어 view는 테스트하기 어렵고 util은 테스트하기 비교적 쉽습니다.
또한 random은 테스트 하기 어렵습니다.
java 진영의 테스트 코드 라이브러리
대표적으로 junit을 이용할 수 있습니다.
또한 assertj 라이브러리도 이용하면 좋습니다.(더 직관적으로 사용가능합니다.)
객체지향 생활 체조 원칙 + 클린코드
객체 지향 프로그래밍을 잘하기 위한 9가지 원칙.
- 한 메서드에 오직 한 단계의 들여 쓰기만 한다.
- else 예약어를 쓰지 않는다.
- 모든 원시 값과 문자열을 포장한다.
- 한 줄에 점을 하나만 찍는다.
- 줄여 쓰지 않는다(축약 금지).
- 모든 엔티티를 작게 유지한다.
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 일급 컬렉션을 쓴다.
- 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
'우아한테크캠프Pro3기' 카테고리의 다른 글
2주차 JPA (0) | 2022.07.17 |
---|
댓글