Files
2nd/10_Wiki/Topics/Architecture/Automated Testing Frameworks.md
T

4.1 KiB

Automated Testing Frameworks

📌 Brief Summary

자동화된 테스트 프레임워크는 소프트웨어의 기능이 의도한 대로 작동하는지 수동 개입 없이 검증하고 평가하기 위해 사용되는 도구 및 환경이다 [1, 2]. 이러한 프레임워크는 리팩토링 과정에서 기존 기능이 변경되지 않았음을 보장하는 필수적인 안전망 역할을 수행하여 개발자가 코드의 내부 구조를 자신감 있게 변경할 수 있도록 돕는다 [3, 4]. 소프트웨어 개발 조직은 단위 테스트부터 UI 테스트까지 다양한 계층에 특화된 테스트 프레임워크를 결합하여 빠르고 안정적인 지속적 배포(CI/CD) 파이프라인을 구축한다 [5, 6].

📖 Core Content

  • 단위 테스트(Unit Tests) 프레임워크: 자바 환경의 사실상 표준인 JUnit은 TestCaseTestSuite 패턴을 기반으로 테스트를 구조화하고 실행하여 오류를 빠르게 감지하는 단위 테스트 프레임워크이다 [2, 7, 8]. 단위 테스트 프레임워크를 활용하면 전체 테스트 스위트의 기반을 형성하는 작고 빠른 테스트를 대량으로 구축할 수 있다 [9].
  • 모킹(Mocking) 및 스터빙(Stubbing) 프레임워크: 복잡한 의존성을 가진 코드를 격리하여 테스트하기 위해 Mockito와 같은 프레임워크가 활용된다 [8, 10]. 외부 REST API와의 연동을 테스트할 때는 실제 서버 대신 가짜 서버를 띄워 응답을 모방하는 Wiremock 등의 프레임워크가 유용하게 쓰인다 [10, 11].
  • 계약 테스트(Contract Tests) 프레임워크: 마이크로서비스 아키텍처 환경에서는 서비스 간의 인터페이스 사양을 검증하기 위해 Pact와 같은 소비자 주도 계약(CDC, Consumer-Driven Contract) 테스트 프레임워크가 사용된다 [10, 12]. 이는 소비자가 기대하는 API 스펙을 정의하면 제공자가 이를 지속해서 검증할 수 있도록 돕는다 [13, 14].
  • 엔드투엔드(End-to-End) 및 UI 테스트 프레임워크: 전체 시스템의 스택을 통합적으로 검증하기 위해 브라우저를 자동화하는 Selenium 기반의 도구들이나 REST API 검증을 위한 REST-assured 프레임워크가 사용된다 [10, 15, 16].
  • 테스트 피라미드 전략: 프레임워크들을 효과적으로 사용하려면, 빠르고 실행 비용이 저렴한 단위 테스트(JUnit 등)를 하단에 넓게 배치하고, 중간에 통합 테스트를, 상단에는 가장 적은 수의 E2E 테스트(Selenium 등)를 배치하는 '테스트 피라미드' 전략을 준수해야 한다 [17-19].

⚖️ Trade-offs & Caveats

  • 역방향 테스트 피라미드(Inverted Test Pyramid) 안티 패턴: GUI 및 E2E 자동화 프레임워크에 과도하게 의존하여 하향식으로 접근할 경우, 테스트 스위트가 비대해지고 유지 관리가 매우 어려워진다 [20]. 이러한 도구들은 실행 속도가 느리고 깨지기 쉽기 때문에(Brittle) 잦은 오탐(False positive)을 발생시키며, 결국 자동화 자체에 대한 팀의 신뢰도를 떨어뜨리게 된다 [20-22].
  • 유지보수 부채 증가: 자동화된 테스트 코드도 운영(Production) 코드와 동일한 1급 시민으로 취급하여 주기적으로 리팩토링하고 리뷰하지 않으면 큰 짐이 될 수 있다 [23, 24]. 불필요하거나 중복된 고수준 테스트를 프레임워크 상에 방치하면 실행 시간만 길어지고 가치가 없으므로, 과감히 삭제하거나 하위 수준의 테스트로 대체해야 하는 제약이 따른다 [25, 26].
  • AI 기반 테스트 생성의 가치 정렬 실패(Value Misalignment): LLM(대형 언어 모델) 등 AI 프레임워크를 사용하여 단위 테스트를 자동 생성할 경우, 모델이 단순히 커버리지 비율만 높이고 실제 결함을 잡는 데는 무의미한(Ineffective) 테스트를 대량 양산할 위험이 있다 [27]. 따라서 돌연변이 테스트(Mutation testing)와 같은 기법으로 테스트의 유효성을 통제하는 안전장치가 동반되어야 한다 [27].

Last updated: 2026-05-03