20 lines
4.1 KiB
Markdown
20 lines
4.1 KiB
Markdown
# [[Automated Testing Frameworks]]
|
|
|
|
## 📌 Brief Summary
|
|
자동화된 테스트 프레임워크는 소프트웨어의 기능이 의도한 대로 작동하는지 수동 개입 없이 검증하고 평가하기 위해 사용되는 도구 및 환경이다 [1, 2]. 이러한 프레임워크는 리팩토링 과정에서 기존 기능이 변경되지 않았음을 보장하는 필수적인 안전망 역할을 수행하여 개발자가 코드의 내부 구조를 자신감 있게 변경할 수 있도록 돕는다 [3, 4]. 소프트웨어 개발 조직은 단위 테스트부터 UI 테스트까지 다양한 계층에 특화된 테스트 프레임워크를 결합하여 빠르고 안정적인 지속적 배포(CI/CD) 파이프라인을 구축한다 [5, 6].
|
|
|
|
## 📖 Core Content
|
|
* **단위 테스트(Unit Tests) 프레임워크**: 자바 환경의 사실상 표준인 JUnit은 `TestCase`와 `TestSuite` 패턴을 기반으로 테스트를 구조화하고 실행하여 오류를 빠르게 감지하는 단위 테스트 프레임워크이다 [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* |