TDD 란?
- Test Driven Development
- 매우 짧은 개발 사이클의 반복에 의존하는 SW 개발 프로세스
- 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성
- 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거침
- 말 그대로 코드 작성을 주도하는 개발방식
Add a test
- 테스트 주도형 개발에선 새로운 기능을 추가하기 전 테스트를 먼저 작성
- 테스트를 작성하기 위해서, 개발자는 해당 기능의 요구사항과 명세를 분명히 이해해야함
- 사용자 케이스와 사용자 스토리 등으로 이해할 수 있으며,
이는 개발자가 코드를 작성하기 전에 보다 요구사항에 집중할 수 있도록 도와줌
- 테스트 주도 개발이 주는 이점
Run all test and see if new one fails
- 어떤 새로운 기능을 추가하면 잘 작동하던 기능이 제대로 작동하지 않는 경우가 발생할 수 있음
더 위험한 경우, 개발자가 이를 미처 인지하지 못하는 경우도 있음
- 이러한 경우를 방지하기 위해 테스트 코드를 작성
- 새로운 기능을 추가할 때 테스트 코드를 작성함으로써, 새로운 기능이 제대로 작동함과 동시에 기존의 기능들이 잘 작동하는지 테스트를 통해 확인할 수 있는 것
Refactor code
- 좋은 코드를 작성하기란 어려움
고려사항이 많음
- 가독성 좋게 coding convention을 맞춰야함
- 네이밍 규칙을 적용하여 메소드명, 변수명, 클래스명에 일관성을 줘야함
- 앞으로의 확장성을 고려해야 함
- 비즈니스 로직에 대한 고려도 필요
- 예외처리를 챙겨야 함
- 코드가 방대해지면 리팩토링이 필수
- 개발이 테스트 주도 개발을 이용했다면, 테스트 코드가 중심을 잡아줄 수 있음
- 뚱뚱해진 함수를 나누는 과정에서 해당 기능이 오작동을 일으킬 수 있지만 간단히 테스트를 돌려봄으로써 이에 대한 안심을 하고 계해서 리팩토링을 진행할 수 있음
- 결과적으로 리팩토링 속도도 빨라지고 코드의 퀄리티도 그만큼 향상됨
- 코드 퀄리티 부분을 조금 상세히 들어가보면, 보다 객체지향적이고 확장 가능이 용이한 코드, 재설계의 시간을 단축시킬 수 있는 코드, 디버깅 시간이 단축되는 코드가 TDD와 함께 탄생