Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

테스트 주도 개발로 배우는 객체 지향 설계와 실천 서평

이 책은 점진적인 개발을 진행하기 위해서 테스트 주도 개발을 활용하는 방법에 관한 책이다. 또한 개발을 할 때 지속적인 리팩터링을 어떻게 하는가?에 대한 예제이기도 하다.

점진적으로 개발을 진행하는 방법테스트에 귀를 기울이는 방법을 배우고 나면 테스트 주도 개발이 효과적인 설계 지원 도구가 될 수 있다는 사실을 발견할 수 있다.

왜 점진적으로 개발을 진행하는 방법을 배워야 하는가?

거의 모든 소프트웨어 프로젝트에서는 전에 아무도 해보지 못했거나 적어도 조직 내에서 전에 아무도 하지 않았던 무언가를 시도한다. 또한 개발자들은 자신이 사용 중인 기술을 완전히 이해하지 못할 때가 많다. 따라서 소프트웨어 프로젝트에 관련된 모든 이들은 프로젝트가 진행되면서 배워야 한다.

팀에서 취할 수 있는 가장 좋은 접근법은 경험에 의한 피드백을 이용하는 것이다. 피드백을 이용해 시스템과 그 용도에 관해 배운 다음, 그렇게 배운 바를 다시 시스템에 적용하는 것이다. 이러한 활동을 위해서는 팀에 반복적인 활동 주기가 필요하다. 각 주기마다 새로운 기능을 추가하고 이미 완료한 작업의 양과 질에 관한 피드백을 받는다.

시스템 규모를 믿을 수 있는 방식으로 키우고, 늘 일어나는 예상치 못한 변화에 대처하고 싶다면 두 가지 기술적인 토대가 필요하다.

  1. 회귀 오류를 잡아줄 테스트: 기존 기능을 망가뜨리지 않고도 새 기능을 추가할 수 있다.
  2. 단순한 코드: 설계를 개선하고, 중복을 제거하며, 코드가 명확하게 자신의 역할을 표현하게끔 코드를 사용할 때마다 꾸준히 코드를 리팩터링 해야 한다.

왜 테스트에 귀를 기울여야 하는가?

설계에 관한 신속한 피드백을 위해 테스트를 활용할 수 있다. 테스트하기 어려운 기능을 발견하면 우리는 단순히 해당 기능을 어떻게 테스트해야 할지 자문하는 게 아니라 왜 테스트하기 어려운지묻는다. 테스트를 좀 더 복잡하게 만들거나 좀 더 정교한 도구를 사용해 설계를 만지기 전에 그것이 코드를 개선할 기회인지 먼저 확인한다.

왜 테스트 주도 개발은 왜 해야 할까?

테스트 주도 개발은 코드를 작성하기 전에 테스트를 작성하여, 작업 결과를 검증하려고 테스트를 사용하는 것이 아니라 테스트를 설계 활동으로 바꾼다. 테스트를 사용해 코드에서 하고 싶은 바에 관한 생각을 명확하게 한다. 개발 과정 내내 테스트를 작성한다면 변경에 대한 자신감을 주는 자동화된 회귀 테스트라는 안전망을 구축할 수 있다.

질문들

이 책을 읽고 다음과 같은 질문에 대한 답을 얻을 수 있다.

  • 어떻게 하면 소프트웨어 프로젝트에 테스트 주도 개발을 잘 적용할 수 있을까?
  • 어디에서 시작해야 할까?
  • 왜 단위 테스트와 E2E 테스트를 모두 작성해야 할까?
  • 테스트가 개발을 주도한다는 것은 무슨 뜻일까?
  • 복잡한 기능은 어떻게 테스트할 수 있을까?

Sources