강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

우동님의 프로필 이미지
우동

작성한 질문수

tdd에 대한 질문 있습니다

작성

·

171

0

안녕하세요. tdd에 대해 배운지 얼마 안된 학생입니다.

실패하는 코드를 짠다 -> 돌아가는 코드를 만든다 -> 리펙터링을 한다

까지는 이해가 되고 이렇게 코드를 작성함으로써 프로그램이 더 견고해지는 느낌은 마음에 듭니다.

 

하지만 나중에 요구사항이 바뀔 시 테스트코드도 싹 다 엎어버려야하는 것 아닌가요?

꼼꼼하게 테스트 코드를 작성했는데 요구사항이 바뀌면 수정하는데 시간이 두 배 더 드는게 아닐까 싶어서요.

메서드 명이나 필드명을 바꾸고 싶을 땐 테스트코드에 있는것들도 다 바꿔야 하는거잖아요.


이런건 어쩔 수 없는 부분인가요?

소위 말하는 테스트 코드가 "깨진다"에 대한 노하우가 있는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

우동님, TDD(Test-Driven Development)를 학습하면서 겪게 되는 테스트 코드와 요구사항 변경에 대한 고민은 많은 개발자분들이 경험하시는 부분입니다. 요구사항 변화에 적응하면서 테스트 코드를 효율적으로 관리하는 것은 TDD의 중요한 지점 중 하나인데요.

우선, 테스트 코드는 소프트웨어의 요구사항을 코드로 표현한다고 볼 수 있습니다. 따라서 요구사항이 변하면 테스트 코드 역시 변할 수밖에 없습니다. 그렇지만 이는 테스트 코드가 과도하게 변경되어야 한다는 것을 의미하지 않습니다. 테스트를 작성할 때 가능한 기능의 측면에 집중하여 구현 세부사항에 덜 의존하는 방식으로 코드를 작성하면, 코드 수정 시 테스트 코드를 대대적으로 바꿔야 하는 일을 최소화할 수 있어요.

또한, TDD를 사용할 때 리팩터링 단계는 중요한 과정으로, 디자인과 코드 구조를 개선하여 변화에 대응하기 용이하도록 합니다. 메서드 명이나 필드명의 변경이 필요할 때는 리팩터링 도구를 활용해 테스트 코드 및 관련 코드를 일관되게 변경할 수 있으며, 이는 큰 어려움 없이 처리할 수 있습니다.

마지막으로 “테스트 코드가 깨지는” 상황을 관리하는 노하우에 대해서는, 테스트 커버리지를 적절히 유지하면서도 유지보수가 용이한 테스트를 작성하는 것이 중요합니다. 예를 들어, 너무 세세한 구현 내용보다는 기능의 목적에 집중하여 테스트를 작성하면, 추후 코드 수정 시 테스트를 광범위하게 변경하지 않고도 관리할 수 있어요.

실제로 Spring Boot에서도 테스트에 대한 지원과 유틸리티를 제공하여 단위 테스트와 통합 테스트를 용이하게 진행할 수 있도록 하고 있습니다. 관련된 문서를 참고하시면 도움이 될 것 같습니다.

Spring Boot의 테스트 지원에 대한 정보는 아래 문서를 참고해 주세요:
- Spring Boot 테스트 유틸리티 및 지원 문서
- Spring Boot 테스트 관련 문서

TDD는 실제 코드와 테스트 코드간의 균형을 맞추는 것이 중요합니다. 기본 원칙들을 따르되, 개별 애플리케이션의 상황에 맞게 적절히 조정하는 것이죠. 계속해서 TDD를 실습하시면서 이러한 경험들을 축적하여 본인만의 노하우를 만들어 가시길 바랍니다.

우동님의 프로필 이미지
우동

작성한 질문수

질문하기