TDD, 리팩토링 시작하기

Sangwoo Park·2022년 10월 10일
0
post-custom-banner

이 글은 박재성님이 2018년 OKKYCON 에서 발표하신 내용을 정리하여 작성한 글입니다.

레거시의 청산을 위해, 나은 설계를 위해, 나은 유지보수를 위해, 삶의 질 향상을 위해 테스트 코드 작성법, TDD 개발 방법론 등에 대한 자료를 찾아보기 시작한 지도 시간이 꽤 지났다. 하지만 아직도 제대로 된 테스트 코드를 만들지는 못하고 있다. 어디서부터 시작해야 할 지, 어떻게 해야 할 지, 만들고 나면 내가 맞게 하고 있는건지 등 막막하고 망설이게 하는 부분이 너무 많다.

천 리 길도 한 걸음 부터라고 했다. 작은 것 부터 단계별로 실천하고 연습하다면 TDD에 조금 더 가까워 질 수 있을 것이다. 지금부터 그 단계를 살펴보자

1. 단위 테스트 연습

내가 사용하는 API 사용법을 익히기 위한 학습 테스트에서부터 시작하자.

  • 자바 String 클래스의 다양한 메소드 사용법
  • 자바 ArrayList에 데이터를 추가, 수정 삭제하는 방법

이러한 간단한 단위테스트를 만드는 과정부터 시작하자. 이는 학습테스트 라고도 한다. 기존에 있는 모듈들에 대하여 테스트하며 사용해봄으로써 사용법을 익히는 것이다. 이를 통해서 자연스럽게 단위테스트 방법을 학습할 수 있고, 테스트하는 모듈의 사용법도 학습할 수 있다.

알고리즘 문제를 통한 단위테스트 연습도 좋은 방법이다. 알고리즘 문제는 대부분 input과 output이 명확해 테스트 코드를 작성하기 쉽기 때문이다.

2. TDD 연습

단위테스트에 익숙해졌다면 이제 TDD를 연습하자. 이 때 현장의 프로젝트에 바로 TDD를 도입하려는 시도를 한다면 어려움에 직면해 포기하게 될 가능성이 높아진다. 현장 프로젝트는 거대하고 복잡하기 때문이다. 따라서 처음에는 정말 정말 간단한 토이프로젝트에 도입을 하는 것이 좋다.

이 시점에서의 목적은 어려운 문제를 해결하는 것이 아니라 TDD 연습이 목적이다. 난이도가 낮거나 자신에게 익숙한 문제로 시작하는 것을 추천한다.

3. 리팩토링 연습

리팩토링에 접근하는 방법은 너무 방대하고 다양하므로 여기서 구체적으로 다루지는 않겠다. 나는 개인적으로 "clean code"라는 도서를 읽으며 많은 지식을 접할 수 있었다.

  • indent 개수를 줄인다.
  • 조건문에서 else를 사용하지 않는다.
  • 메소드 파라미터 개수를 줄이거나 제한한다.
  • 메소드가 한가지 일만 하도록 구현한다.
  • 메소드가 너무 길어지지 않도록 라인 수를 줄이거나 제한한다.

등의 방법으로 리팩토링을 연습하도록 하자. 리팩토링에 관해서는 백명석님의 유튜브 영상들을 참고하면서 도움이 많이 되었다

4. 토이프로젝트 난이도 높이기

이제 현장 프로젝트와 비슷한 난이도의 토이프로젝트에 지금까지의 단계를 연습하면 된다.

5. 의존관계 추가를 통한 난이도 높이기

이 때 필요한 역량은

  • 테스트하기 쉬운 코드와 테스트하기 어려운 코드를 보는 눈
  • 테스트하기 어려운 코드를 테스트하기 쉬운 코드로 설계하는 감

+ 한단계 더 나아간 연습을 하고싶다면

  • 컴파일 에러를 최소화하면서 리팩토링하기
  • ATDD 기반으로 응용 애플리케이션 개발하기
  • 레거시 애플리케이션에 테스트 코드 추가해 리팩토링하기

TDD, 리팩토링 연습을 위해 필요한 것은?

  • 조급함 대신 마음의 여유
  • 나만의 장난감 프로젝트
  • 같은 과제를 반복적으로 구현할 수 있는 인내력
profile
going up
post-custom-banner

0개의 댓글