跳到正文
cccskills
免费在 GitHub 公开

tdd

TDD 오케스트레이터 — 대상 클래스(FQCN)의 템플릿 문서·테스트 클래스를 생성하고 tdd-plan→tdd-rgb 워크플로우를 안내. "TDD 시작", "TDD로 새 클래스 만들자", "테스트 주도로 시작", "/tdd" 요청 시 사용. 단, 템플릿이 이미 있는 상태에서 사이클만 돌리는 것은 /tdd-rgb, 요구사항 정리부터는 /tdd-plan-input이 적합. /tdd <general|web-app> <FQCN>으로 호출.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md8.3 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

TDD 오케스트레이터

TDD 프로젝트 생성 및 진행 상황을 관리하는 진입점입니다.

GOAL

  • 성공 = TDD 유형에 맞는 템플릿 문서가 생성되거나, 기존 프로젝트의 진행 상황이 분석되어 다음 단계가 안내됨
  • 프로젝트 생성: 템플릿 문서 + 빈 테스트 클래스 생성 후 "/tdd-plan 실행하세요" 안내
  • 진행 상황 분석: 체크박스 기반 현재 단계 파악 후 적절한 다음 명령어 안내

CONSTRAINTS

Hard Rules

Ground Rule

  • 모르는 정보면 모른다고 확실히 대답
  • 요청에 답변하기 위해 필요한 정보가 있으면 먼저 질문
  • 코드는 최신 Java, Spring Boot 기준으로 작성
  • 요청하지 않는 한 리팩터링하지 않고, 절차적/명령형 스타일로 하나의 메소드로 직관적이게 작성
  • 메소드 추출(extract method)이나 변수 추출(extract variable/field) 최소화
  • 금액, 거리, 무게 등은 대한민국 기준
  • getter/setter는 lombok 활용, 최대한 record 활용
  • 마크다운 문서는 한글로 작성
  • Class 파일에서 중요한 public method가 먼저, private 메소드가 나중에

피드백 규칙

  • 한 단계에서 관련된 코드를 생성한 후에는 반드시 사용자에게 피드백을 요청
  • 사용자가 명시적으로 다음 단계로 진행하는 것을 결정해야만 다음 단계로 진행
  • 피드백이 필요할 때마다 다음 형식으로 질문:
[피드백 요청]

- 대상: [테스트/구현/설계/리팩토링]
- 초점: [특정 관심 영역]
- 맥락: [현재까지의 작업 요약]
- 구체적 질문: [구체적인 피드백 요청 사항]

OUTPUT FORMAT

호출 형식

/tdd $1 $2
  • $1 = general | web-app (TDD 유형)
  • $2 = FQCN (예: com.example.bowling.BowlingGame)

FQCN에서 패키지명과 클래스명을 자동 파싱합니다. 패키지명 없이 입력 시 예시를 보여주며 재입력 요청합니다.

예: /tdd general com.example.bowling.BowlingGame
예: /tdd web-app com.example.basket.CreateShoppingBasket

프로젝트 탐색 로직

1. 빌드 시스템 탐색

  • 현재 디렉토리에서 Gradle(build.gradle, build.gradle.kts) 또는 Maven(pom.xml) 프로젝트 루트 탐색
  • 프로젝트 루트를 기준으로 경로 결정

2. FQCN 기반 경로 결정

FQCN을 기반으로 다음 경로를 결정합니다:

  • 템플릿 문서: src/test/java/{package_path}/{ClassName}.md
  • 테스트 클래스: src/test/java/{package_path}/{ClassName}Test.java

예: com.example.bowling.BowlingGame →

  • 문서: src/test/java/com/example/bowling/BowlingGame.md
  • 테스트: src/test/java/com/example/bowling/BowlingGameTest.java

상태 판단

Case A: 템플릿 없음 → 프로젝트 생성

  1. TDD 유형에 따라 템플릿 문서 생성
  2. 빈 테스트 클래스 생성 — 주석 언어와 빌드 파일 UTF-8 인코딩 명시는 ../../references/code-comment-style.md를 따른다
  3. 산출물 커밋 1회 — 템플릿 문서 + 빈 테스트 클래스(+ 새로 만든 빌드 골격이 있으면 함께). 메시지 형식·한글 안전 방식은 ../../references/commit-style.md를 따른다
  4. "/tdd-plan 실행하세요" 안내

Case B: 템플릿 있음 → 진행 상황 분석

  1. 체크박스 분석으로 현재 단계 파악
  2. 진행 기록의 기어 상태 확인 — 있으면 현재 기어와 전환 이력을 함께 안내, 없으면 low로 간주
  3. 완료된 단계와 다음 단계 안내
  4. 적절한 다음 명령어 안내:
    • 앵커(규칙·예제·미확정) 미완성 → "/tdd-plan 실행하세요" (high-stakes·대형 작업이면 /tdd-plan --full로 3 에이전트 + critic 풀 플로우를 안내)
    • 테스트 구현 단계 → 아래 "구현 스킬 라우팅" 표로 기어에 맞는 호출을 안내
    • 대상이 테스트 없는 기존 코드(레거시)라면 이 템플릿 흐름 대신 → "/tdd-legacy로 안전망부터 구축하세요"

구현 스킬 라우팅 — 기어로 고른다

기어(검토 밀도)는 이론에 대한 확신이 정한다. 확신이 낮으면 low, 상용구 수준으로 명확하면 high다(상세는 tdd-rgb의 "기어(Gears)" 섹션).

상황기어호출
낯선 도메인·기술, 학습 목적, 설계 미확정low/tdd-rgb --gear=low (매 R/G/B 검토)
유사 문제 경험 있음, 설계가 안정되어 감mid/tdd-rgb --gear=mid (테스트 1개 사이클마다 검토)
이론이 명확, 테스트 목록 전체를 자율로high/tdd-rgb --gear=high (완료 + 적대적 리뷰 후 최종 검토)
이론이 명확, feature 하나를 plan 합의 후 자율로high/tdd-feature (Phase B = feature 범위 high)

폭발 반경(blast radius)이 큰 영역(인증·인가, 결제·금액 계산, 데이터 삭제·변경, 외부 API, 동시성)은 기어와 무관하게 완료 시 적대적 리뷰를 1회 실행한다 (../tdd-rgb/references/gears.md의 "폭발 반경(blast radius)" 참조).

  • 진행 기록에 기어가 남아 있으면 --gear 없이 /tdd-rgb만 호출해도 그 기어로 복원된다
  • /tdd-feature는 --gear를 받지 않는다 — Phase B 자율 진행이 곧 high다
  • 폭발 반경(blast radius)이 큰 영역(인증·결제·데이터 삭제·외부 API·동시성)은 확신이 높아도 한 단 낮은 기어를 권장한다 — 두 스킬 모두 시작 시 이 점검을 수행한다

General TDD 템플릿 (2단계)

# {ClassName} TDD 구현

## 절차
- [ ] 1. 앵커 작성 (규칙 + 예제 검산표 + 미확정)
- [ ] 2. 테스트 구현 (RGB 사이클)

## 규칙

## 예제 (검산표)

## 미확정

## 진행 기록

기어: low

## 배움 로그

Web App TDD 템플릿 (8단계)

# AI와 Pair로 {ClassName}을 TDD로 구현하기 (Web App)

## 전체적인 절차
- [ ] 1. 앵커 작성 (규칙 + 예제 검산표 + 미확정)
- [ ] 2. 인수 테스트 셋업 (.feature + Runner, 미구현은 @pending — .feature가 시나리오의 실행되는 정본)
- [ ] 3. Walking Skeleton 구현
- [ ] 4. 테스트 구현 (RGB 사이클 — 각 Green이 자기 시나리오 @pending 해제)
- [ ] 5. JPA Repository 완성 (계약 테스트로 InMemory와 동등성 검증)
- [ ] 6. DSL 개선 (Steps·Protocol Driver·Test Data Builder)
- [ ] 7. 적대적 리뷰 (high 기어 또는 폭발 반경(blast radius) high-stakes 시 — 5·6을 마친 뒤 실행, diff가 전체 구현을 포함해야 함)
- [ ] 8. 하드닝 게이트 (① CRAP·DRY 분석 → ② /system-wide-refactoring → ③ mutation 대표 파일 1개 — 제안만, 실행은 사용자 결정)

## 규칙

## 예제 (검산표)

## 미확정

## 진행 기록

기어: low

## 배움 로그

Web App은 /cucumber-acceptance가 필수다 — 1단계 앵커 작성에서 승인된 Gherkin이 2단계에서 .feature로 실행되어 인수 계층을 담당한다. 별도 High Level Test(JUnit)를 두지 않는다(같은 검증이 두 계층에 중복되면 안 됨). 프로젝트 제약으로 Cucumber를 도입할 수 없는 경우에만 대표 시나리오 1개를 JUnit 인수 테스트로 작성해 대체한다.

FAILURE CONDITIONS

  • Case A 산출물(템플릿 문서·테스트 클래스·빌드 골격)을 커밋하지 않은 채 다음 단계를 안내하지 않았는가?

에러 대처

  1. 요구사항 이해 실패 → "요구사항에 대해 제가 이해한 것이 맞는지 확인해주세요."
  2. 컨텍스트 혼란 → "지금까지의 작업을 요약해주세요."
  3. 구현 방향성 혼란 → "더 단순한 방법으로 목표를 달성할 수 있을까요?"
  4. 테스트 실패 원인 파악 어려움 → "가능한 원인을 모두 나열해주세요."
  5. 테스트 품질 저하 → Programmer Test 규칙 기준으로 품질 평가

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

동일한 결과를 내는 여러 조건문(OR 나열·중첩 AND)을 하나로 통합하고 의미 있는 boolean 메서드로 추출. "조건문 합쳐", "같은 결과 반환하는 if 정리", "중첩 if 평탄화", "/consolidate-conditional" 요청 시 사용. 단, 여러 메서드에 흩어진 동일 조건을 호출자 쪽으로 올리는 것은 /lift-up-conditional, 복잡한 조건식·분기를 메서드로 쪼개는 것은 /decompose-conditional이 적합. /consolidate-conditional [commit-ref]로 호출.

中文简介正在准备中。当前显示原文说明。

msbaek/msbaek-claude-plugins82026年10月16日 更新

기능의 external behavior를 Cucumber 인수 테스트(주 검증층)로 구축 — .feature 실행으로 문서↔코드 드리프트를 구조적으로 차단, Four Layer(Steps→Protocol Driver→SUT), 태그 기반 가역 제외, 기존 JUnit 인수 테스트 이관. "인수 테스트 도입", "Gherkin을 실행 가능하게", "cucumber 셋업" 요청 시 사용. /cucumber-acceptance로 호출.

中文简介正在准备中。当前显示原文说明。

msbaek/msbaek-claude-plugins82026年10月16日 更新

복잡한 if/then/else의 조건식과 각 분기를 의미 있는 메서드로 추출하여 가독성 향상. "조건문 분해", "if 가독성", "복잡한 조건식에 이름 붙여", "/decompose-conditional" 요청 시 사용. 단, 같은 결과를 내는 조건문들을 하나로 합치는 것은 /consolidate-conditional, 타입별 분기를 클래스로 바꾸는 것은 /replace-conditional-with-poly가 적합. /decompose-conditional [commit-ref]로 호출.

中文简介正在准备中。当前显示原文说明。

msbaek/msbaek-claude-plugins82026年10月16日 更新

Primitive Obsession 제거 — 검증·연산이 따라다니는 primitive 필드(금액+통화, 이메일 문자열 등)를 도메인 개념을 담은 Value Object로 치환. "값 객체 도입", "primitive obsession", "Money 클래스로", "/discover-value-object" 요청 시 사용. 단, 함께 전달되는 파라미터 묶음을 객체로 바꾸는 것은 /introduce-parameter-object, 컬렉션을 감싸는 것은 /first-class-collection이 적합. /discover-value-object [commit-ref]로 호출.

中文简介正在准备中。当前显示原文说明。

msbaek/msbaek-claude-plugins82026年10月16日 更新

컬렉션 getter가 내부 List/Set을 직접 노출하는 것을 방지 — unmodifiable 반환 + add/remove 메서드 제공. "컬렉션 캡슐화", "getter가 List 그대로 노출", "unmodifiable로", "/encapsulate-collection" 요청 시 사용. 단, 컬렉션과 관련 로직을 전용 클래스로 뽑는 것은 /first-class-collection이 적합. /encapsulate-collection [commit-ref]로 호출.

中文简介正在准备中。当前显示原文说明。

msbaek/msbaek-claude-plugins82026年10月16日 更新

암묵적 의존성(전역 변수·클래스 필드·싱글턴 접근)을 명시적 파라미터로 전환하여 메서드 투명성 향상. "숨은 의존성 드러내", "필드 대신 파라미터로", "전역 참조 제거", "/explicit-parameters" 요청 시 사용. 단, 파라미터가 많아져 묶어야 하면 /introduce-parameter-object, I/O와 계산 분리는 /segregate-functional-core가 적합. /explicit-parameters [commit-ref]로 호출.

中文简介正在准备中。当前显示原文说明。

msbaek/msbaek-claude-plugins82026年10月16日 更新

查看 msbaek 的全部技能

报告此技能的问题