TDD(Test Driven Development)

제이슨·2022년 11월 3일
2

TDD란?

테스트 주도 개발은 ‘개발 → 테스트’ 사이클에서 벗어나 ‘테스트 → 개발’ 사이클을 지향하는 소프트웨어 개발 방법론입니다.

테스트 주도 개발은 ‘더 깔끔한, 더 완성도 높은 코드’를 작성할 수 있게 해주며 동시에 ‘개발 시간 단축, 소프트웨어 결함 최소화’를 가능하게 합니다.

극단적으로 테스트를 하지 않고 대기업 시스템을 개발하고 배포했을 때 문제가 생긴다면 얼마나 많은 시간과 비용이 소모될까요?

TDD의 규칙

테스트 주도 개발의 목표는 ‘작동하는 깔끔한 코드’입니다. 그리고 이 목표를 위해 두 가지 원칙을 지켜야 합니다.

  1. 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
    • 빨강: 실패하는 작은 테스트를 작성한다. 처음에는 컴파일조차 되지 않을 수 있다.
    • 초록: 빨리 테스트가 통과되게끔 만든다. 어떤 수단과 방법(복붙, 하드 코딩 등)을 동원해서든.
  2. 중복을 제거한다.
    • 테스트를 통과하는 과정에서 생긴 모든 중복을 제거한다.

TDD의 장점과 단점

장점

  1. 실시간으로 오류 파악이 가능
    (테스트 -> 개발 방식의 도입으로 시스템 결함의 빈도를 효과적으로 줄일 수 있음)

  2. 짧은 개발 주기를 통해 고객의 요구사항을 빠르게 수용하고 피드백을 받는 것이 가능하고 진행 상황 파악이 쉬움

  3. 자동화 도구를 이용한 TDD 테스트케이스를 단위 테스트로 사용이 가능함
    (자바는 JUnit, C와 C++은 CppUnit 등)

  4. 개발자가 기대하는 앱의 동작에 관한 문서를 테스트가 제공해줌

단점

  1. 기존 개발 프로세스에 테스트 케이스가 추가되므로 테스트 케이스 작성에 시간 투입이 많아짐

  2. 테스트의 방향성, 프로젝트 성격에 따른 테스트 프레임워크 선택 등 추가로 고려할 부분의 증가

예제를 통해 TDD 익히기

간단한 알고리즘 문제를 통해 TDD를 익혀봅시다.

문제 설명

출처: 타겟 넘버(dfs)

n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
  • 각 숫자는 1 이상 50 이하인 자연수입니다.
  • 타겟 넘버는 1 이상 1000 이하인 자연수입니다.

입력 예제

numberstargetreturn
[1, 1, 1, 1, 1]35
[4, 1, 2, 1]42
profile
계속 읽고 싶은 글을 쓰고 싶어요 ☺

0개의 댓글