직접 바라본 Test Driven Development

this-is-spear·2023년 2월 16일
0

Intro

These kinds of benefits are often talked about with respect to TestDrivenDevelopment (TDD), but it's useful to separate the concepts of TDD and self-testing code. - Martin Flowler

번역 : Test Driven DevelopmentSelf Testing Code의 개념을 분리하는 것이 유용합니다.

Test Driven Development를 깊게 이해하기 위해서는Self Testing Code를 알아야 했고, 그 차이를 이해할 필요가 있었습니다.

글을 읽을 때, Test Driven DevelopmentSelf Testing Code를 만드는 방법이라고 생각하면 쉽게 이해할 수 있습니다.

목차

Test Driven Development가 무엇인지, 왜 사용하는지를 확인한 다음,Self Testing Code 에 대해 간략하게 다뤘습니다.

  • Test Driven Development
  • Refactoring
  • Self Testing Code

TDD

TDD 란?

테스트를 활용해 소프트웨어 개발 가이드를 구축하는 방법을 말합니다.

TDD 왜 사용하지?

  • 명확한 추상화
    • 기능 사용 방법에 초점을 맞춰 테스트를 구현하기 때문에 추상화를 명확하게 할 수 있습니다.
  • Self Testing Code 획득
    • Self Testing Code을 획득할 수 있습니다. 자세한 내용은 아래에서 다뤘습니다.

TDD 단점

개발 과정에서 생산성 저하된다는 단점이 있습니다. 이런 단점으로 Test Driven Development를 생략하고 단위 테스트를 작성한다면, 구현된 테스트 들은 Self Testing Code 라고 신뢰하기 어렵습니다.

TDD 진행 방식

세 단계를 계속 순환하면서 시스템의 기능을 구현하게 됩니다.

  1. 테스트를 작성
  2. 테스트를 통과하는 만큼 코드를 작성
  3. 리팩토링

TDD에서 테스트를 작성하고 코드를 작성하는 이유

  • 단위 테스트로 인한 코드 중복 발생 해결
    • 테스트를 작성하고 코드를 작성하게 되면 일부분씩 구현되어 코드 중복 많이 발생하는데, 리팩터링을 통해 코드 중복을 줄일 수 있습니다.
  • 오류 범위를 줄여 간단하게 리팩토링 가능
    • 작은 단계로 리팩토링하면 리팩토링으로 인한 오류 발생과 오류 범위를 줄여 리팩토링이 쉬워진다.

TDD에서는 리팩토링이 중요해

테스트를 작성하고 코드를 작성하게 되면 일부분씩 구현되어 코드 중복 많이 발생합니다. TDD로 개발할 때, 리팩터링으로 코드 중복을 줄여 유지 보수 비용을 줄이는 게 핵심입니다.

Refactoring

Refactoring 이란?

리팩토링은 기존 코드 베이스의 디자인을 개선하기 위한 통제 기술입니다. 리팩토링의 본질은 행동을 보존한 체로 변환을 적용하는 것입니다.

Refactoring 을 사용하는 이유

처음에는 리팩토링을 수행해야할 가치가 적어서 수행하기 어렵지만, 리팩토링을 수행하지 않으면서 기술 부채는 기하 급수적으로 늘어납니다.

Refactoring 을 효율적으로 하는 방법

작은 단계로 리팩토링하면 리팩토링으로 인한 오류 발생과 오류 범위를 줄여 리팩토링이 쉬워집니다.

Self Testing Code

Self Testing Code

하나의 명령어에 하나의 테스트를 작성하면서 코드에 숨어 있는 모든 버그를 찾는 방법입니다. Self Testing Code 덕분에 코드에 심각한 결함이 없다고 확신할 수 있습니다.

Self Testing Code 의 장점

  • 버그 박멸
    • 보이지 않는 버그를 없애며, 버그의 수를 줄일 수 있습니다.
  • 디버깅 수월
    • 빠르게 오류를 탐지할 수 있습니다.
  • 자신감
    • 디버깅이 수월해 시스템을 변경에 자신감이 생깁니다.
  • 문서화
    • 테스트가 소프트웨어 문서를 대체할 수 있습니다.

Self Testing Code 활용 방법

Self Testing Code를 통해 Continuous Integration를 달성할 수 있습니다.

Outro

정리하자면

  • Test Driven DevelopmentSelf Testing Code를 만드는 방법입니다.
  • Test Driven DevelopmentSelf Testing Code, 그리고 추상화가 잘된 기능 들을 얻을 수 있습니다.
  • Test Driven Development에서 리팩토링으로 코드 중복을 줄여 유지 보수 비용을 줄이는 데 신경써야 합니다.

참고자료

Martin Fowler

profile
익숙함을 경계하자

0개의 댓글