Spring MVC - TDD

랑아·2023년 4월 11일
0

Spring MVC

목록 보기
23/27
post-thumbnail

테스팅(Testing)

TDD(Test Driven Development)

TDD란?

TDD(테스트 주도 개발)의 개념을 요약하면 '테스트를 먼저 하고 구현을 그 다음에 한다'라고 할 수 있다.


TDD가 아닌 전통적인 개발 방식

어떤 서비스 애플리케이션을 개발할 때 개발 절차는 일반적으로 다음과 같다.
(고객의 요청으로 고객이 원하는 시스템을 구축하는 것이 아닌, 서비스 제공 기업에서 불특정 다수의 회원에게 제공하는 서비스 애플리케이션을 의미)

  1. 서비스 제작에 관여하는 이해 당사자(기획자, 프톤트엔드 개발자, 백엔드 개발자, 웹 디자이너 등)가 모여 서비스에 대한 컨셉과 해당 컨셉에 따른 요구 사항을 지속적으로 수집한다.

  2. 수집된 요구 사항에 맞춰 서비스를 화면으로 제공하기 위한 UI(User Interface)를 설계하면서 구체적인 기능 요구 사항들을 정의한다.

  3. 프론트엔드 개발자는 기능 요구 사항와 UI를 통해 개발을 진행하고, 웹 디자이너는 화면을 디자인하며, 백엔드 개발자는 기능 요구 사항에 맞춰 백엔드 애플리케이션을 개발한다.

    • 백엔드 개발자의 일반적인 개발 흐름
      1. 이해 당사자들 간에 수집된 요구 사항과 설계된 화면(UI 설계서 등) 등을 기반으로 도메인 모델을 도출한다.
      2. 도출된 도메인 모델을 통해 클라이언트의 요청을 받아들이는 엔드포인트와 비즈니스 로직, 데이터 액세스를 위한 클래스와 인터페이스 등을 설계해서 큰 그림을 그린다.
      3. 클래스와 인터페이스의 큰 틀을 작성한다.
      4. 클래스와 인터페이스 내에 메서드를 정의하면서 세부 동작을 고민하고, 코드로 구현한다.
      5. 구현된 기능이 잘 동작하는지 테스트 한다.
      6. 테스트에 문제가 발생한다면, 구현한 코드를 디버깅하며 문제의 원인을 찾는다.

TDD 방식의 특성

  • TDD는 모든 조건에 만족하는 테스트를 먼저 진행한 뒤에, 조건에 만족하지 않는 테스트를 단계적으로 진행하면서 실패하는 테스트를 점진적으로 성공시켜 간다.
  • TDD는 테스트 실행 결과가 "failed"인 테스트 케이스를 지속, 단계적으로 수정하면서 테스트 케이스 실행 결과가 "passed"가 되도록 만든다.
  • TDD는 테스트가 "passed"될 만큼의 코드만 우선 작성한다.
  • TDD 개발 방식은 '실패하는 테스트 -> 실패하는 테스트를 성공할 만큼의 기능 구현 -> 성공하는 테스트 -> 리팩토링 -> 실패하는 테스트와 성공하는 테스트 확인' 이라는 흐름을 반복한다.

TDD의 장점과 단점

TDD의 장점

  • 테스트를 통과할 만큼의 기능을 구현하므로 한 번에 너무 많은 기능을 구현할 필요가 없다.
  • 테스트 코드가 추가되면서 검증하는 범위가 넓어질수록 기능 구현도 점진적으로 완성되어 간다.
    • 단순한 기능에서 복잡한 기능으로 확장되면서 검증을 빼먹지 않고 할 수 있다.
  • 리팩토링할 부분이 눈에 보이면 그때 그때 리팩토링을 바르게 진행하기 때문에 리팩토링의 비용이 상대적으로 적어진다.
  • 항상 테스트 케이스가 존재하기 때문에 기존 코드를 수정할 상황이 발생하더라도 상대적으로 심리적 불안감이 줄어들 수 있다.
  • 리팩토링을 통해 꾸준히 코드를 개선하므로 코드의 품질을 일정 부분 유지할 수 있다.
  • 코드 수정 이후, 바로 테스트를 진행할 수 있으므로 코드 수정 결과를 빠르게 피드백 받을 수 있다

TDD의 단점

  • TDD의 개발 방식이 익숙하지 않다.
  • 테스트 코드의 작성에 익숙하지 않은 사람에게는 부정적인 방식일 수 있다.
  • 팀 단위로 개발을 진행해야 하므로 팀원들 간 사전에 협의가 되어야 한다.

0개의 댓글