TDD(Test Driven Development)

2023. 3. 8. 07:26Spring

◎ TDD 

-> 테스트 주도 개발이라는 의미로 테스트를 먼저 구현하고 구현을 하는 방식

-> 모든 조건에 만족하는 테스트를 먼저 진행하고, 조건에 만족하지 않는 테스트를 단계적으로 진행하여 실패하는 테스트를 점차 줄여나가는 방식이다.

-> 예시 상황으로 패스워드 검증 테스트를 한다고 가정한다. 

패스워드의 조건으로 8~20 사이의 길이, 알파벳 대/소문자 + 숫자 + 특수문자의 조합, 알파벳 대/소문자와 숫자 제외 나머지 문자는 특수문자라고 가정한다.

-> 최초 테스트 메서드만 선언을 하면 실행 결과는 passed다.

-> 이후에 테스트 코드를 작성하면 아직 PasswordValidator 클래스가 존재하지 않아 테스트에 실패한다.

-> PasswordValidator 클래스를 작성하고, 해당 클래스에 validate(String password)메서드를 선언한다.

-> 다시 테스트 코드를 보면 빨간색 표시가 사라지고, 해당 테스트 케이스를 실행하면 passed가 나온다.

-> 이처럼 TDD는 결과가 failed인 테스트 케이스를 지속적으로 수정해가면서 테스트 케이스의 결과가 passed가 되게 하는 방식이다.

 

※ TDD 흐름

실패하는 테스트 -> 실패하는 테스트를 통과할 만큼의 기능 구현 -> 성공하는 테스트 -> 리펙토링 -> 실패하는 테스트와 성공하는 테스트 확인

 

◎ TDD 장점

-> 테스트 통과할 만큼의 기능을 구현하기 때문에 한 번에 너무 많은 기능을 구현할 필요가 없다.

-> 테스트 코드가 추가되면서 검증하는 범위를 넓혀가면서 기능 구현도 완성되어 간다.

-> 작은 기능에서 복잡한 기능을 구현하는 과정 속에서 단계적으로 테스트를 진행하여 기능 구현 과정 속에서 검증을 꾸준히 할 수 있다. 

-> 리페토링 할 부분이 보이면 보일 때마다 리펙토링을 빠르게 진행하여 리펙토링 비용이 상대적으로 줄어든다.

-> 꾸준한 리펙토링으로 코드가 개선되어 코드의 품질을 유지할 수 있다.

-> 코드 수정하고 바로 테스트를 진행하여 빠르게 피드백을 받을 수 있다.

 

◎ TDD 단점

-> 익숙하지 않아서 공부를 많이 해야한다.

-> 팀 단위로 개발을 진행하기 때문에 TDD 사용전 팀원들간 협의가 되어야 한다. 

'Spring' 카테고리의 다른 글

Spring Security  (0) 2023.03.16
애플리케이션 빌드/실행/배포  (0) 2023.03.10
Mockito  (0) 2023.03.08
단위 테스트(Unit Test)  (0) 2023.03.06
Spring Data JDBC 기반의 도메인 엔티티 및 테이블 설계  (0) 2023.02.23