개발 문화 · 협업 · 심화
TDD/BDD가 시스템 아키텍처 설계에 미치는 심층적인 영향은 무엇이며, 특히 모듈성, 응집도, 결합도 측면에서 어떤 변화를 가져온다고 생각하십니까? 실제 프로젝트에서 이러한 영향을 어떻게 경험하셨습니까?
힌트 · 테스트 용이성을 위한 설계, 낮은 결합도, 높은 응집도, 리팩토링 용이성 측면에서 TDD/BDD의 영향을 설명해야 합니다.
테스트 주도 개발행위 주도 개발모듈성 향상낮은 결합도높은 응집도
모범답안
TDD/BDD는 시스템 아키텍처 설계에 깊숙이 관여하여 모듈성, 응집도, 결합도에 긍정적인 영향을 미칩니다.
테스트를 먼저 작성하기 때문에, 자연스럽게 각 모듈이 독립적으로 테스트 가능하도록 설계하게 됩니다. 이는 곧 모듈성 향상으로 이어집니다. 또한, 각 모듈이 하나의 책임만 갖도록 집중하게 되므로 높은 응집도를 유지하게 됩니다.
테스트를 통과하기 위해 인터페이스를 명확하게 정의하고, 불필요한 의존성을 줄이려고 노력하게 되므로 결합도는 낮아집니다. 결과적으로 코드를 변경하거나 리팩토링할 때 다른 부분에 미치는 영향이 적어 유지보수성이 향상됩니다.
실제 프로젝트에서 TDD를 적용했을 때, 처음에는 시간이 더 걸리는 듯했지만, 결국에는 더 안정적이고 유지보수하기 쉬운 시스템을 구축할 수 있었습니다. 특히 복잡한 로직을 구현할 때 TDD의 효과를 크게 체감했습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 테스트 (TDD / BDD) 면접 질문
- 단위 테스트(Unit Test) 작성 시 Mock이나 Stub 객체를 사용하는 이유와, 실제 객체를 사용하는 경우와 비교하여 설명해주세요.
- TDD/BDD 관점에서 단위 테스트, 통합 테스트, E2E 테스트의 적절한 비중과 각각의 역할에 대해 설명해주세요.
- 테스트 더블(Test Double)의 개념과 종류(Dummy, Fake, Stub, Spy, Mock)에 대해 간략히 설명하고, 각각의 사용 사례를 예시로 들어주세요.
- 마이크로서비스 아키텍처와 같은 분산 시스템 환경에서 TDD/BDD를 적용할 때 직면하는 주요 도전 과제는 무엇이며, 서비스 간의 상호작용 및 통합 테스트 전략을 TDD/BDD 원칙에 따라 어떻게 수립하고 구현할 수 있을까요?
- TDD/BDD는 주로 기능 요구사항(Functional Requirements)에 초점을 맞추는 경향이 있습니다. 성능, 보안, 확장성 등 비기능 요구사항(Non-functional Requirements)을 TDD/BDD 프로세스 내에서 효과적으로 테스트하고 검증하기 위한 구체적인 전략이나 접근 방식은 무엇입니까?
- 복잡한 시스템에서 TDD를 수행할 때, 과도한 Mocking/Stubbing은 테스트의 실제 가치를 떨어뜨리거나 유지보수를 어렵게 만들 수 있습니다. Mocking/Stubbing의 적절한 사용 시점과 범위는 무엇이며, Mocking 프레임워크를 효과적으로 활용하면서도 Mocking Anti-patterns(예: Excessive Mocking, Mocking Private Methods)를 피하기 위한 전략은 무엇입니까?