테스트 설계 및 tdd-spec.md 생성. Top-Down 방식으로 테스트를 설계하고 Mock을 통해 인터페이스를 발견합니다. CLAUDE.md Exports가 있으면 구조적 불변식(STRUCT-XXX)을 추출합니다. "테스트 설계", "테스트 케이스 도출", "tdd-spec 작성", "Exports에서 불변식 추출", "구조적 불변식 테스트", "STRUCT 테스트 설계" 요청 시 사용됩니다.
From tdd-devnpx claudepluginhub 0pg/cc-marketplace --plugin tdd-devThis skill uses the workspace's default tool permissions.
references/spec-format.mdImplements Clean Architecture, Hexagonal Architecture (ports/adapters), and Domain-Driven Design for backend services. For microservice design, monolith refactoring to bounded contexts, and dependency debugging.
Implements CQRS patterns with Python templates for command/query separation, event-sourcing, and scalable read/write models. Use for optimizing queries or independent scaling.
Provides REST and GraphQL API design principles including resource hierarchies, HTTP methods, versioning strategies, pagination, and filtering patterns for new APIs, reviews, or standards.
Top-Down 방식으로 테스트를 설계하고, Mock을 통해 인터페이스를 발견합니다.
이 스킬은 요구사항을 분석하여 테스트 케이스를 설계하고, .claude/tdd-spec.md 파일을 생성합니다.
생성된 spec 파일은 /tdd-impl 스킬이나 직접 구현 시 참조됩니다.
핵심 원칙: 테스트가 인터페이스를 정의한다
요구사항 입력
|
v
+--------------------+
| 1. 요구사항 분석 |
| - 충분성 확인 |
| - 모호성 식별 |
+--------+-----------+
|
v
+--------------------+
| 2. 테스트 레벨별 |
| 케이스 설계 |
| - Acceptance |
| - Integration |
| - Unit |
+--------+-----------+
|
v
+--------------------+
| 3. 인터페이스 발견 |
| - Mock 시그니처 |
| - 의존성 식별 |
+--------+-----------+
|
v
+--------------------+
| 4. tdd-spec.md |
| 생성/업데이트 |
+--------------------+
제공된 요구사항을 분석하여 충분성을 검증합니다.
검증 항목:
불충분시:
CLAUDE.md가 존재하면, Exports에서 **구조적 불변식(STRUCT-XXX)**을 추출합니다.
CLAUDE.md Exports = 테스트 코드의 구조적 불변식
| 불변식 유형 | Exports 정보 | 테스트 검증 |
|---|---|---|
| 존재(Existence) | 함수/클래스/타입 이름 | export된 심볼이 접근 가능한가? |
| 시그니처(Signature) | 파라미터 타입, 반환 타입 | 타입 시스템이 시그니처를 수용하는가? |
| 계약(Contract) | Contract 섹션 사전/사후조건 | 위반 시 에러, 보장 조건 유지되는가? |
프로세스:
CLAUDE.md가 없는 경우: 이 단계를 건너뛰고 Outside-In TDD의 Mock 기반 인터페이스 발견으로 진행.
목적: 전체 기능의 동작 정의
설계 포인트:
목적: 컴포넌트 간 통신 인터페이스 정의
설계 포인트:
목적: 개별 객체/함수의 인터페이스 정의
설계 포인트:
+------------------------------------------------------------+
| Step 1: 요구사항에서 최상위 테스트 케이스 도출 |
| |
| 요구사항: "사용자가 로그인하면 대시보드를 보여준다" |
| | |
| v |
| 테스트: "유효한 자격증명으로 로그인하면 대시보드 반환" |
+------------------------------------------------------------+
|
v
+------------------------------------------------------------+
| Step 2: 테스트 작성 시 필요한 협력 객체 식별 |
| |
| LoginController 테스트 작성 |
| -> AuthService 필요 (Mock) |
| -> UserRepository 필요 (Mock) |
+------------------------------------------------------------+
|
v
+------------------------------------------------------------+
| Step 3: Mock 메서드 시그니처 = 인터페이스 계약 |
| |
| mockAuthService.authenticate(credentials) -> AuthResult |
| mockUserRepository.findById(userId) -> User |
| |
| 이 시그니처가 실제 인터페이스가 됨 |
+------------------------------------------------------------+
|
v
+------------------------------------------------------------+
| Step 4: 하위 레벨 테스트에서 Mock을 구체화 |
| |
| AuthService 테스트 작성 |
| -> TokenGenerator 필요 (Mock) |
| -> PasswordHasher 필요 (Mock) |
| |
| 같은 과정 반복 (재귀적) |
+------------------------------------------------------------+
분석된 요구사항과 설계된 테스트 케이스를 .claude/tdd-spec.md 파일로 영속화합니다.
형식: spec-format.md 참조
파일 위치: {project-root}/.claude/tdd-spec.md
내용:
입력 도메인을 동등한 클래스로 분할하여 대표값 테스트
예: 나이 입력
- 유효: 0-150 -> 대표값: 25
- 무효(음수): < 0 -> 대표값: -1
- 무효(초과): > 150 -> 대표값: 200
경계 지점과 그 주변값 테스트
예: 0-100 범위
- 경계값: -1, 0, 1, 99, 100, 101
상태 변화에 따른 동작 테스트
예: 주문 상태
- Created -> Paid -> Shipped -> Delivered
- Created -> Cancelled
- Paid -> Refunded
조건 조합에 따른 결과 테스트
예: 할인 적용
| VIP | 쿠폰 | 첫구매 | 할인율 |
|-----|------|--------|--------|
| Y | Y | - | 30% |
| Y | N | - | 20% |
| N | Y | Y | 15% |
| N | Y | N | 10% |
| N | N | Y | 5% |
| N | N | N | 0% |
## 테스트 케이스: [케이스 ID]
### 대상
- 컴포넌트: [테스트 대상]
- 메서드/기능: [테스트할 기능]
### 시나리오
- Given: [사전 조건]
- When: [실행 동작]
- Then: [기대 결과]
### Mock 의존성
- [Mock 객체]: [인터페이스 시그니처]
### 경계 조건
- [경계 케이스 목록]
### 에러 케이스
- [에러 상황]: [기대 동작]
.claude/tdd-spec.md: 구조화된 요구사항 명세spec 생성 완료 후:
/tdd-impl 스킬로 Red-Green-Refactor 구현 진행