본문 바로가기

Spring/Test

TDD (Test-Driven Development) 테스트 주도 개발

1. TDD (Test-Driven Development) 테스트 주도 개발의 의미

테스트가 개발을 주도해 나가는 것

 

 

2. TDD의 흐름 

1) 기존 개발의 흐름(AS-IS)

설계 → 개발 → 테스트 (→ 설계 수정)

 

2) TDD의 흐름(TO-BE)

설계 → 테스트 (→설계 수정) → 개발

 

- 기능을 검증하는 테스트를 먼저 작성

- 작성한 테스트를 통과하지 못하면 테스트를 통과할 만큼만 코드 작성

- 테스트 통과 후 개선할 코드가 있으면 리팩토링

- 리팩토링 후 다시 테스트를 실행하여 기존 기능이 잘 되고 있는지 확인 필수

-> 위 과정을 반복하여 점진적으로 기능을 완성해 나가는 것이 TDD의 흐름

 

3) 레드(Red)-그린(Green)-리팩터(Refactor)

 

- TDD 사이클을 레드-그린-리팩터로 부르기도 함

- 레드: 실패하는 테스트, 테스트 코드가 실패하면 빨간색을 이용해서 실패한 테스트를 보여주는 데서 비롯됨

- 그린: 성공한 테스트, 코드를 구현해서 실패하는 테스트를 통과시키는 것

- 리팩터: 리팩토링 과정

 

 

3. TDD의 장점

1) 유지보수 비용을 낮춤

개발 과정에서 지속적으로 코드를 정리 하므로 코드 품질이 급격히 나빠지지 않게 막아줌 -> 향후 유지보수 비용을 낮추는데 기여

 

2) 코드 수정에 대한 피드백이 빠름

새로운 코드를 추가하거나 기존 코드를 수정하면 테스트를 돌려서 해당 코드가 올바른지 바로 확인하여 잘못된 코드가 배포되는 것을 방지

 

 

👩🏻‍💻 기억할 것

1) 테스트 코드 작성이 가장 먼저

2) 테스트 코드가 통과 될 만큼만 코드를 작성(테스트 코드에 없는 코드를 미리 작성하지 않음 = 미리 구현하지 않기)

3) 리팩토링 전/후 꼭 테스트 실행 해볼 것

4) 테스트 코드 자체도 리팩토링 대상임을 잊지 말 것

 

 

참고: 최범균의 테스트 주도 개발 시작하기(TDD)

 

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing

 

Core Features

Spring Boot lets you externalize your configuration so that you can work with the same application code in different environments. You can use a variety of external configuration sources, include Java properties files, YAML files, environment variables, an

docs.spring.io

 

https://docs.spring.io/spring-framework/docs/5.3.23/reference/html/testing.html#testing

 

Testing

The classes in this example show the use of named hierarchy levels in order to merge the configuration for specific levels in a context hierarchy. BaseTests defines two levels in the hierarchy, parent and child. ExtendedTests extends BaseTests and instruct

docs.spring.io