테스트 주도 개발

snooby·2022년 11월 24일
2

🔫 자잘부리 cs 팁

목록 보기
36/42
post-thumbnail

TDD란

Test Driven Development의 약자로 테스트가 개발을 이끌어 나간다는 뜻입니다.
테스트를 먼저 만들고 테스트를 통과하기 위한 것을 짜는 것 즉, 만드는 과정에서 우선 테스트를 작성하고 그걸 통과하는 코드를 만들고를 반복하면서 제대로 동작하는지에 대한 피드백을 적극적으로 받는 것이다.

예시

생년월일(input)을 입력받으면 현재 나이(output)를 출력하는 프로그램
1. 처음에는 간단한 것으로 목표를 정한다. (태어난 해와 올해의 연도를 입력)
2015, 2018 -> (만)3살 우선 이것을 만들겠다는 생각을 한다.
2. 만들기도 전에 만든 후에 무엇을 테스트할지를 설계한다.
2015, 2018를 입력하면 2가 나오는 테스트 프로그램(장차 만들 프로그램을 테스트할 코드)를 만든다.
3. 그 다음에 그 테스트를 통과할 프로그램(1.을 목표로 작성한 코드)를 만든다.
올해의 연도 - 태어난 해
2018 - 2015
4. 테스트 프로그램으로 이 프로그램(3.에 해당하는 코드)을 실행한다.
5. 통과했으면 새로운 테스트를 추가한다.
이번에는 생월을 추가했을 때 계산하는 프로그램
6. 위와 같은 작업을 계속 왔다갔다 수행한다.

TDD의 효과

TDD를 왜 해야할까

애자일이란에서 설명한 것과 같이 불확실성이 높을 때 ‘피드백’과 ‘협력’이 중요하다.

피드백과 협력이 중요한 이유

불확실성이 높을 때 ‘피드백’과 ‘협력’을 이용하면 더 좋은 결과가 나올 확률이 높아진다.
TDD도 마찬가지로 ‘피드백’과 ‘협력’을 증진시키는 것이기 때문에 불확실성이 높을 때 도움이 되는 것이다.

TDD는 어떤 상황에서 해야할까

만약 어떤 부분에 대한 코딩을 여러번 해봤고 결과가 어떻게 나올지 뻔하다면 TDD를 하지 않아도 된다. 또한 TDD를 했을 때 얻는 것이 적다면 TDD를 하지 않아도 된다.
그렇다면 TDD는 어떤 상황에서 해야할까?

  • 처음해보는 프로그램 주제
    나에 대한 불확실성이 높은 경우
  • 고객의 요구조건이 바뀔 수 있는 프로젝트
    외부적인 불확실성이 높은 경우
  • 개발하는 중에 코드를 많이 바꿔야 된다고 생각하는 경우
  • 내가 개발하고 나서 이 코드를 누가 유지보수할지 모르는 경우

    즉, 불확실성이 높을 때 TDD를 하면 된다.

TDD의 효과

모든 애자일의 실천법은 피드백과 협력을 동시에 증진시킨다.

TDD의 장단점

피드백과 협력을 증진시키기 때문에 불확실성에 대해 대비를 하게 해준다.

개발속도가 느려진다고 생각하는 사람이 많기 때문에 사람들은 TDD에 대해 반신반의 한다.

  • 처음부터 2개의 코드를 짜야한다.
  • 중간중간 테스트를 하면서 고쳐나가야한다.
  1. TDD를 하면 개발 시간이 늘어난다.
    개발 시간의 정의?
    본인이 ‘다했다고’생각할 때까지, 기능 구현이 끝났을 때까지
    개발 시간이 TDD를 하지않을 때에 비해 대략 10~30%가 늘어난다.
  2. TDD를 하면 결함이 줄어든다.
    결함이 1/2~1/10 까지 줄어든다.
    SW를 개발하면서 예상하지 못했던 시간을 많이 소요하는 것은 대부분이 버그 때문이다.
    TDD를 하면 이런 버그를 줄일 수 있다.
  3. TDD를 하면 코드 복잡도가 떨어진다.
    엔트로피(Entropie)가 낮아진다.
    깨끗한 코드 가 나온다.
    유지보수 비용이 낮아진다.
profile
DevOps 🐥

0개의 댓글