# [[Approval Testing (승인 테스트)]]

## 📌 Brief Summary
승인 테스트(Approval Testing)는 코드의 올바름을 검증하기보다, 현재 코드의 실제 동작을 있는 그대로 기록(snapshot)하여 향후 변경 시 동작이 달라지지 않음을 보장하는 테스트 기법입니다 [1, 2]. 특성화 테스트(Characterization Test), 스냅샷 테스트(Snapshot Testing), 골든 마스터(Golden Master)라고도 불리며, 주로 이해하기 어려운 레거시 코드를 안전하게 리팩토링하기 위한 빠른 안전망을 구축할 때 사용됩니다 [1, 3].

## 📖 Core Content
* **동작의 캡처 및 보호:** 포괄적인 단위 테스트(comprehensive unit tests)를 하나하나 작성하는 대신, 현재 코드가 수행하는 실제 결과물의 스냅샷을 찍어 코드의 동작을 특성화(characterize)합니다 [1, 3]. 이 테스트는 향후 코드를 수정할 때 기존 동작이 의도치 않게 변경되는 것을 막아주는 역할을 합니다 [1].
* **레거시 시스템에서의 실용성:** 대부분의 레거시 시스템에서는 코드가 '어떻게 동작해야 하는가(what it should do)'보다 '실제로 어떻게 동작하고 있는가(what it actually does)'가 훨씬 더 중요합니다 [3]. 승인 테스트는 명세서가 부족한 레거시 코드의 실제 동작 자체를 기준점으로 삼아 보호합니다.
* **빠른 안전망 구축과 리팩토링 지원:** 코드를 분석하고 이해하기 어렵거나 시간이 촉박한 상황에서, 승인 테스트는 레거시 코드를 빠르게 테스트로 덮을 수 있는 방법을 제공합니다 [3]. 이렇게 구축된 안전망을 통해 개발자는 기존 동작을 망가뜨릴 걱정 없이 코드를 안심하고 리팩토링할 수 있는 기반을 마련하게 됩니다 [2, 3].

## ⚖️ Trade-offs & Caveats
* **정합성(Correctness) 검증의 부재:** 승인 테스트의 주된 목적은 시스템의 '올바름'을 검증하는 것이 아니라 '현재 어떻게 도는지'를 기록하는 것에 불과합니다 [2]. 따라서 기존 코드에 버그나 잘못된 동작이 포함되어 있더라도, 이를 정상적인 현재의 상태(snapshot)로 간주하여 예상 동작으로 고착화시킬 수 있는 한계와 위험성이 있습니다.
* **포괄적 단위 테스트의 완전한 대체 불가:** 이 기법은 단기간 내에 리팩토링을 위한 안전망을 제공하는 데는 매우 효과적이지만, 코드가 어떻게 설계되었고 각 구성 요소가 어떤 논리로 작동하는지에 대한 포괄적 단위 테스트(comprehensive unit tests)를 완전히 대체하지는 못합니다 [1].


---
*Last updated: 2026-05-03*