Aegis AI 프로젝트의 모든 코드는 Test-Driven Development (TDD) 방법론을 따라 개발됩니다.
실패하는 테스트를 먼저 작성합니다
- 구현하려는 기능의 동작을 테스트로 정의
- 테스트 실행 → 실패 확인
- 실패 이유가 명확해야 함
npm test
# Expected: FAIL - Cannot find module테스트를 통과시키는 최소한의 코드를 작성합니다
- 테스트를 통과시키는 가장 간단한 코드 작성
- 과도한 엔지니어링 금지
- 모든 테스트 통과 확인
npm test
# Expected: PASS - All tests passed코드를 개선하고 최적화합니다
- 중복 제거
- 명확성 개선
- 성능 최적화
- 모든 테스트가 여전히 통과하는지 확인
npm test
# Expected: PASS - All tests still passing| Category | Minimum Coverage | Target |
|---|---|---|
| src/core/ | 80% | 95%+ |
| src/services/ | 70% | 90%+ |
| src/handlers/ | 60% | 80%+ |
| Overall | 70% | 90%+ |
npm run test:coverage규칙: 새로운 기능이나 버그 수정은 반드시 테스트와 함께 제출
예외: 문서 변경, 설정 파일 수정
규칙: 테스트 커버리지가 임계값 미달 시 머지 불가
검증: GitHub Actions가 자동으로 확인
규칙: 버그 발견 시
- 버그를 재현하는 테스트 작성 (실패)
- 버그 수정 (테스트 통과)
- 테스트와 함께 커밋
규칙: 모든 테스트가 통과하는 상태에서 리팩토링 시작
검증: 리팩토링 후에도 모든 테스트 통과 확인
# Use for: 요구사항 → BDD 시나리오# Use for: BDD 명세 → Jest 테스트# Use for: 코드 개선 및 최적화npm run generate-test <name> <category> # 테스트 자동 생성
npm run dashboard # 커버리지 대시보드- ✅ 모든 테스트 통과
- ✅ 커버리지 임계값 충족
- ✅ TDD 체크리스트 완료
- ✅ 코드 리뷰 승인 (1명 이상)
GitHub Actions가 자동으로 검증:
- Test Suite 실행
- Coverage Report 생성
- 커버리지 임계값 확인
- PR에 자동 코멘트
- Fast: 빠르게 실행 (전체 < 5분)
- Independent: 다른 테스트와 독립적
- Repeatable: 매번 동일한 결과
- Self-validating: 명확한 pass/fail
- Timely: 기능 구현 전에 작성
// 좋은 예
test('should return user when valid ID is provided', () => {});
// 나쁜 예
test('test1', () => {});test('should calculate total with tax', () => {
// Given: 초기 조건
const price = 100;
const taxRate = 0.1;
// When: 동작 실행
const total = calculateTotal(price, taxRate);
// Then: 결과 검증
expect(total).toBe(110);
});- ❌ 테스트 없이 코드 작성
- ❌ 테스트를 나중에 작성
- ❌ 실패하지 않는 테스트 작성
- ❌ 테스트를 통과시키기 위해 테스트 수정
- ❌ 커버리지만을 위한 의미 없는 테스트
- ✅ 커버리지: 99.33% (목표: 70%)
- ✅ 테스트 수: 105개 (목표: 100+)
- ✅ TDD 채택률: 100%
- 🎯 전체 커버리지 유지: 95%+
- 🎯 새로운 기능 TDD: 100%
- 🎯 버그 발견율: 90%+
- 🎯 프로덕션 버그: 90% 감소
- 🎯 개발 속도: 30% 향상
- 🎯 코드 리뷰 시간: 50% 감소
- TDD 정책 관리
- 교육 및 멘토링
- 품질 지표 모니터링
- TDD 사이클 준수
- 테스트 작성
- 코드 리뷰 참여
- 테스트 품질 검토
- TDD 체크리스트 확인
- 피드백 제공
마지막 업데이트: 2025-11-22 상태: Active 레벨: LEGENDARY 👑