개념 정리

TDD란 무엇인가?

조요피 2023. 4. 13. 09:57

TDD (Test-Driven Development)

TDD는 "테스트 주도 개발(Test-Driven Development)"의 약어입니다. 이는 소프트웨어를 개발할 때 테스트 케이스를 먼저 작성하고, 그 다음에 해당 테스트 케이스를 통과할 수 있는 최소한의 코드를 작성하는 개발 방법론입니다.

TDD는 지속적인 통합과 배포를 지원하는 애자일 개발 방법론과 함께 사용되는 경우가 많습니다. 이를 통해 개발자들은 빠르게 변화하는 요구사항에 대응할 수 있으며, 고객 요구사항을 더욱 정확하게 파악하고 충족시킬 수 있습니다.

TDD 순서

1. 의존성 추가

스프링 부트 프로젝트를 생성합니다.
JUnit과 AssertJ 같은 테스트 라이브러리를 추가합니다.

2. 테스트 작성 단계

구현하려는 기능에 대한 테스트 케이스를 작성합니다.
예를 들어, 사용자 정보를 저장하는 서비스를 구현하려고 한다면, 다음과 같은 테스트 케이스를 작성할 수 있습니다.

@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void saveUserTest() {
        // given
        User user = new User();
        user.setUsername("testUser");
        user.setEmail("test@example.com");

        // when
        User savedUser = userService.saveUser(user);

        // then
        assertThat(savedUser.getId()).isNotNull();
        assertThat(savedUser.getUsername()).isEqualTo("testUser");
        assertThat(savedUser.getEmail()).isEqualTo("test@example.com");
    }
}

3. 테스트 실패 단계

작성한 테스트 케이스를 실행합니다.
실행 결과, 테스트 케이스가 실패함을 확인합니다.

4. 코드 작성 단계

작성한 테스트 케이스를 통과할 수 있는 코드를 작성합니다.
예를 들어, UserService 클래스에 다음과 같이 saveUser() 메소드를 구현할 수 있습니다.

@Service
public class UserService {

    private UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }
}

5. 리팩토링 단계

작성한 코드를 리팩토링하여, 코드의 가독성, 유지 보수성, 성능 등을 개선합니다.
예를 들어, UserRepository 클래스를 다음과 같이 구현할 수 있습니다.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}

6. 반복

위의 과정을 반복하여, 다음 기능에 대한 테스트 케이스를 작성하고, 해당 기능을 구현합니다.
위와 같이 TDD 방법을 스프링 프레임워크에 적용하여, 효율적이고 품질 높은 코드를 작성할 수 있습니다.

TDD vs Not TDD

TDD

TDD 방법론은 테스트 케이스를 먼저 작성하고 코드를 작성하는 것으로, 코드의 품질을 개선하고 유지 보수성을 높일 수 있습니다. 또한, 테스트를 자동화하여 변경에 따른 유지 보수 비용을 낮출 수 있습니다. 그러나, 초기 개발 비용이 증가할 수 있습니다.

Not TDD

Not TDD 방법은 초기 개발 비용이 적고, 빠르게 프로토타이핑을 수행할 수 있습니다. 그러나, 테스트를 개발 과정의 뒷부분에 배치하여 버그를 발견하고 수정하는 과정에서 시간과 비용이 증가할 수 있습니다.

따라서, 프로젝트의 특성과 개발 환경에 따라 선택해야 합니다. 초기 개발 비용이 중요한 경우에는 Not TDD 방법을 사용할 수 있으며, 코드의 품질과 유지 보수성이 중요한 경우에는 TDD 방법론을 사용할 수 있습니다.

웹 서비스 개발(스프링 프레임워크)에서 TDD를 적용하는 방법

스프링 프레임워크 TDD 강의 - 인프런

Next..

TDD + API 문서 자동화 (REST Docs)