[TDD/C++] C++로 실습하는 Test-Driven Development - TDD란?

2022. 8. 28. 20:0003. Resources/C, C++

728x90
반응형

TDD를 찾아본 이유

최근에 회사에서 C++ 프로젝트 하나를 마무리지었다.

개발하면서 많은 테스트가 필요했는데, 매번 기능을 바꾸고난 다음 main 함수나 변경 사항이 연결된 부분에 디버그 메시지를 심어서 확인하면서 테스트를 진행했다.

그런데, 이게 정말 불편하기도 했고, 어떻게 하면 테스트를 조금 더 정량적이고 규격화된 방법으로 할 수 있을까 고민하다가 찾아보게 됐다.

 

왜 링크드인 온라인 클래스를 들었는가?

TDD(Test-Driven Development)에 대해서 공부를 하고 싶고, 내가 최근에 사용하는 언어가 C++이어서 이 두 가지를 동시에 다루는 강의를 열심히 찾아봤는데, 생각보다 잘 보이지 않았다.

그런데 링크드인에 있는 온라인 클래스에서 하나 발견할 수 있어서 바로 수강하게 됐다.

수업 링크: Test-Driven Development in C++

 

Test-Driven Development in C++ | LinkedIn 온라인클래스(이전 이름: Lynda.com)

Discover how to develop strong, tested C++ code with unit testing and test-driven development.

www.linkedin.com

 

 

링크드인도 다른 교육 플랫폼들처럼 온라인 클래스를 엄청나게 많이 가지고 있었고, 링크드인 프리미엄 회원으로 등록하면 이 강의들을 다 들을 수 있는 것 같다.

물론 나는 일단 한 달 무료 체험으로 강의를 듣게 됐다.

강의를 들으면서 TDD란 무엇이고, C++프로젝트에서는 어떻게 적용되는지 간단하게 살펴볼 수 있는 짧은 클래스였다.

 

프로그래밍에서 Test의 단계

소프트웨어를 개발하는 과정에서는 아래와 같이 크게 4가지의 테스팅이 존재한다.

  • Unit testing
    • 기능 단계에서의 테스팅
    • 테스팅에서 가장 낮은 레벨의 테스팅
  • Component testing
    • 컴포넌트들의 외부 인터페이스 테스팅
    • 라이브러리와 컴파일 된 바이너리 레벨에서의 테스팅
  • System testing
    • 시스템의 외부 인터페이스 테스팅
  • Performance testing
    • 시스템 레벨에서의 시간, 자원 사용과 관련한 테스팅

이 중에서 Unit testing는 아래와 같은 조건을 만족해야한다.

  • 모든 테스트는 각각 한 가지의 기능을 테스트해야한다.
    • 그래서 모든 positive case 와 negative case에 대한 테스트가 필요하다.
  • 테스트들을 묶어서 test suites로 관리하면 조직화에 좋다.
  • 양산 환경보단 개발 환경에서 진행해야한다.
  • 자동화해서 테스트를 진행시켜야한다.

TDD(Test-Driven Development)란 무엇인가

  • 개발자가 그들의 코드의 퀄리티에 대한 책임을 가져가는 프로세스이다..
  • 유닛 테스트는 양산 코드를 작성하기 전에 만들어야한다.
  • 모든 테스트와 양산 코드를 한 번에 작성하지 말아야한다.
  • 테스트와 양산 코드는 같이 조금씩의 기능을 더하면서 작성해야한다.

그래서 TDD를 적용하면 뭐가 좋은가?

  • 코드를 바꿀 때 기능에 대한 자신감을 줄 수 있다.
  • 코드를 바꿀 때 기능의 변동에 대한 즉각적인 피드백을 받을 수 있다.
  • 테스트 기반이기 때문에 기능 명세에 대한 문서로 사용할 수 있다.
  • 좋은 객체 지향 디자인을 만들 수 있다.

그럼 TDD의 workflow는 어떻게 되는가

  • 세 종류의 phase를 통해 test case를 해결하는 방법
    • Red phase
      • 달성하고자 하는 테스트의 failure unit test를 만들어낸다.
    • Green phase
      • 테스트를 통과할만큼의 아주 작은 양산 코드를 작성한다.
    • Blue phase
      • unit test와 양산 코드의 개선 여부를 확인하여 필요하다면 refactoring을 하여 코드를 정리한다.
    • 위 3개의 phase를 계속 반복한다.

Uncle Bob’s 의 TDD 3법칙

  • Failing unit test를 작성할 때까지 어떠한 양산 코드도 작성하지 말아라
  • 과한 failing unit test를 작성하지 말아라. 그리고 컴파일이 안되는 것도 failing이다.
  • 현재 failing unit test를 통과하는 이상의 양산 코드를 작성하지 말아라

추천 도서

  • Kent Beck - Test Drivne Development: By Example
  • Robert Martin - Clean Code: A Handbook of Agile Software Craftsmanship

 

반응형