인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

정예은님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

TDD: Test Driven Development

테스트 통과하면 천하무적?

작성

·

139

0

@Test
void calculateTotalPrice() {

위에 이미지 처럼 테스트에서 검증 후 ,

 

아래처럼

  public int calculateTotalPrice() {
       return beverages.stream().mapToInt(Beverage::getPrice).sum();
    }


로 리팩토링 진행하셨는데

테스트코드에서 검증 통과받으면, 프로젝트 코드에서 리팩토링 된 부분은 천하무적이라고 생각하면 되나요 ?
이때 발생하게 되는 변수는 없을련지,,,,

궁금합니다!

답변 3

1

장태근님의 프로필 이미지

안녕하세요 정예은 님!

'천하무적'이라고 할 수는 없습니다.

테스트 코드 통과는 소프트웨어의 '완벽함'을 보장하지 않고, 실제 환경에서 예상치 못한 변수로 문제가 발생할 수 있습니다. 하지만 우빈님의 강의를 통해 '좋은 테스트 코드 작성법'을 꾸준히 학습하시다 보면, 리팩터링 시 '더 나은 안정감'을 얻으실 수 있을 것 같아요.

도움이 되셨기를 바랍니다.

감사합니다. 🙂

박우빈님의 프로필 이미지
박우빈
지식공유자

역시 태근님 👍 답변 감사드려요!

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 정예은 님!

아래 태근님도 잘 답변해 주셨듯이, 아무리 테스트 코드를 잘 작성하더라도 프로덕션 코드를 리팩토링하는 과정에서 생각지 못한 변수가 발생할 수 있습니다.
리팩토링 단계에서 테스트 해야 할 케이스가 추가된다던지, 기존 테스트 코드가 검증하지 못한 케이스가 발견된다던지 하는 일이 있을 수 있어요. (물론 들어주신 예시는 비교적 간단한 예시긴 하지만요.)

테스트 코드는 최소한의 동작을 보장하는, 자동화된 도구라고 이해해주시면 좋을 것 같아요.

도움이 되셨기를 바랍니다.
감사합니다 🙂

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 정예은님.

테스트 코드를 활용한 리팩토링 과정에 대해 굉장히 중요한 질문을 주셨네요!

리팩토링과 테스트 통과의 관계

  1. 리팩토링 안정성:

    • 리팩토링은 코드의 구조 개선을 목적으로 하며, 외부 동작(기능)에는 영향을 주지 않아야 합니다. 테스트가 통과한다는 것은, 코드의 기능적 요구사항이 여전히 충족되고 있다는 것을 의미합니다. 즉, 테스트가 성공하면 리팩토링된 코드가 이전 코드와 동일한 기능을 한다고 믿을 수 있습니다.
  2. 테스트 부족 문제:

    • 하지만 테스트가 통과한다고 해서 모든 것이 ‘천하무적’이라고 확신할 수는 없습니다. 이는 테스트가 얼마나 철저하느냐에 따라 달라질 수 있습니다. 중요한 포인트는 “테스트 커버리지”입니다. 테스트 커버리지가 충분하지 않으면 개별적이고 예외적인 시나리오가 놓칠 수 있습니다. 이를 통해 기능의 한계나 버그가 숨겨질 수 있습니다.
  3. 변수 고려:

    • 리팩토링 과정에서 외부 API와의 변화, 시스템 환경의 변화 등이 예상치 못한 문제를 초래할 수 있어, 철저한 테스트 및 코드 검토가 필요합니다.
    • 여러 가지 예외 상황과 가장자리를 다루기 위한 추가 테스트 케이스 작성이 필요할 수 있습니다.

결론

테스트가 통과함으로써 직접 검증한 기능에 대한 신뢰도는 높지만, 모든 상황을 커버하진 못할 수 있습니다. 따라서 리팩토링 후에도 다양한 시나리오 테스트를 통해 안정성을 더욱 확보할 수 있습니다.

더불어 추가적인 검증을 원하신다면 이 게시물에서 Mock을 이용한 테스트 효과와 관련된 논의가 도움이 될 수 있습니다. 여기서는 테스트가 특히 외부 지향적인 로직에 미치는 영향에 대해 설명합니다. 이를 통해 다양한 테스트 전략을 고려해 보실 수 있습니다.

저는 질문자님의 이해를 돕고자 유사한 문의와 관련된 정보를 제공하였습니다. 궁금한 점이 있으시면 추가적으로 질문해 주세요. 곧 지식공유자께서도 답변을 제공해 주실 것입니다. 🙏