diff --git a/book/300_architecture/315_테스트_작성_원칙.md b/book/300_architecture/315_테스트_작성_원칙.md index 580a540..04ce2ed 100644 --- a/book/300_architecture/315_테스트_작성_원칙.md +++ b/book/300_architecture/315_테스트_작성_원칙.md @@ -11,10 +11,10 @@ **목표**: 테스트 코드를 매번 재작성하지 않고 재사용 가능하게 관리 -**원칙**: -- **재사용성 우선**: 공통 테스트 로직은 fixtures/유틸리티로 추출 -- **자동화 필수**: pytest 기반 자동 테스트만 유지, 수동 스크립트는 작업 완료 즉시 삭제 -- **중복 제거**: 동일 기능 테스트는 하나로 통합 +**원칙** (상세: 섹션 2-5 참조): +- **재사용성 우선**: 공통 테스트 로직은 fixtures/유틸리티로 추출 (섹션 3) +- **자동화 필수**: pytest 기반 자동 테스트만 유지 (섹션 6) +- **중복 제거**: 동일 기능 테스트는 하나로 통합 (섹션 4) --- @@ -29,11 +29,11 @@ ### 금지 사항 -| 금지 | 이유 | -|------|------| -| `tests/`에 실험 스크립트 저장 | 자동 테스트와 혼재, 정리 어려움 | -| 수동 실행 스크립트 장기 보관 | 재작성 비효율 유발 | -| 중복 테스트 파일 유지 | 유지보수 비용 증가 | +| 금지 | 이유 | 참조 | +|------|------|------| +| `tests/`에 실험 스크립트 저장 | 자동 테스트와 혼재, 정리 어려움 | 섹션 5, 6 | +| 수동 실행 스크립트 장기 보관 | 재작성 비효율 유발 | 섹션 5 | +| 중복 테스트 파일 유지 | 유지보수 비용 증가 | 섹션 4 | --- @@ -78,10 +78,10 @@ def test_intent_classification(mock_llm_service): | TDD 단계별 테스트 파일 | 최종 버전만 유지 | | `test_*_vs_*.py` 비교 테스트 | troubleshooting 기록 후 삭제 | -### 유지 기준 +### 유지 기준 (상세: 섹션 6 참조) - **유지**: pytest로 재현 가능한 자동 테스트 -- **삭제**: 임시 실험, 비교 테스트, refactoring 테스트 +- **삭제**: 임시 실험, 비교 테스트, refactoring 테스트 (섹션 5) --- @@ -89,10 +89,13 @@ def test_intent_classification(mock_llm_service): ### 즉시 삭제 대상 -1. **리팩토링 테스트**: `test_*_refactoring.py` (작업 완료 후) -2. **비교 실험**: `test_*_vs_*.py` (결과 troubleshooting에 기록 후) -3. **관찰용 스크립트**: "서비스 코드 수정 없이 관찰" 목적의 스크립트 -4. **실험 결과 파일**: `.md`, `.json` 결과 파일 (troubleshooting 문서화 후) +| 대상 | 패턴 | 처리 시점 | +|------|------|----------| +| **리팩토링 테스트** | `test_*_refactoring.py` | 작업 완료 후 | +| **비교 실험** | `test_*_vs_*.py` | troubleshooting 기록 후 | +| **관찰용 스크립트** | "서비스 코드 수정 없이 관찰" 주석 | 작업 완료 즉시 | +| **수동 실행 스크립트** | `python3` 직접 실행, pytest 미적용 | 작업 완료 즉시 (섹션 6) | +| **실험 결과 파일** | `.md`, `.json` 결과 파일 | troubleshooting 문서화 후 | ### 정리 프로세스 @@ -152,24 +155,21 @@ grep -l "import pytest\|@pytest" tests/test_*.py ### 테스트 작성 전 -- [ ] 동일한 테스트 로직이 이미 존재하는가? (재사용 가능한지 확인) -- [ ] 공통 모킹/데이터가 있다면 `conftest.py`에 추가할 수 있는가? -- [ ] pytest 자동 테스트인가? (수동 스크립트면 `scripts/` 사용) -- [ ] `import pytest` 또는 `@pytest` 데코레이터 포함? (섹션 6 기준) +- [ ] 동일한 테스트 로직이 이미 존재하는가? (섹션 3 재사용성 확인) +- [ ] 공통 모킹/데이터가 있다면 `conftest.py`에 추가할 수 있는가? (섹션 3) +- [ ] pytest 자동 테스트인가? (섹션 6 기준 확인) ### 테스트 파일 추가 전 -- [ ] 중복 테스트 파일이 있는가? (통합 가능한지 확인) -- [ ] 임시 실험 파일인가? (작업 완료 시 삭제 계획 수립) -- [ ] 네이밍 규칙 준수 (`test_{기능}.py`) -- [ ] `pytest tests/test_*.py` 명령으로 실행 가능한가? +- [ ] 중복 테스트 파일이 있는가? (섹션 4 통합 가능한지 확인) +- [ ] 임시 실험 파일인가? (섹션 5 삭제 계획 수립) +- [ ] 네이밍 규칙 준수 (섹션 7) -### 정리 시점 +### 정리 시점 (섹션 5, 9 참조) - [ ] 리팩토링/비교 테스트 → troubleshooting 기록 후 삭제 -- [ ] 실험 스크립트 → 작업 완료 즉시 삭제 +- [ ] 실험/수동 스크립트 → 작업 완료 즉시 삭제 - [ ] 중복 테스트 → 통합 또는 삭제 -- [ ] pytest 없이 직접 실행하는 파일 → 삭제 또는 pytest로 변환 ---