@ai-dev-methodologies/rlp-desk 0.15.3 → 0.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +98 -0
- package/README.md +34 -4
- package/docs/rlp-desk/failure-modes.md +191 -0
- package/package.json +10 -3
- package/src/node/MANIFEST.txt +3 -0
- package/src/node/prompts/prompt-assembler.mjs +2 -2
- package/src/node/run.mjs +70 -3
- package/src/node/runner/campaign-main-loop.mjs +97 -13
- package/src/node/util/debug-log.mjs +10 -6
- package/src/node/util/lifecycle-metrics.mjs +102 -0
- package/src/scripts/lib_ralph_desk.zsh +66 -0
- package/src/scripts/run_ralph_desk.zsh +23 -3
- package/docs/plans/bug-report-overhaul-backlog.md +0 -49
- package/docs/plans/bug-report-overhaul-v0.md +0 -238
- package/docs/plans/bug-report-overhaul-v1.md +0 -319
- package/docs/plans/native-agent-revert.md +0 -184
- package/docs/plans/polished-gliding-toucan.md +0 -234
- package/docs/plans/pr-e-phase-c1-blocked-recovery-hygiene-v0.md +0 -233
- package/docs/plans/spicy-booping-galaxy.md +0 -717
- package/docs/plans/strategic-review/rlp-desk-strategic-review.md +0 -125
- package/docs/plans/v0.15-stabilization-phase-a-prep.md +0 -130
- package/docs/plans/v0.15-stabilization-plan.md +0 -178
- package/docs/plans/v0.16-real-llm-sv-gate-spec.md +0 -177
- package/docs/rlp-desk/internal/verification-policy-gap-analysis.md +0 -523
- package/docs/rlp-desk/internal/verification-strategy-research.md +0 -2097
- package/docs/rlp-desk/plans/cozy-gliding-trinket.md +0 -53
- package/docs/rlp-desk/plans/frolicking-churning-honey.md +0 -253
- package/docs/rlp-desk/plans/keen-sauteeing-snowflake.md +0 -245
- package/docs/rlp-desk/plans/mutable-booping-corbato.md +0 -163
- package/docs/rlp-desk/plans/rlp-desk-0.11-handoff-7fixes.md +0 -352
- package/docs/rlp-desk/plans/rlp-desk-0.11.1-tmux-pane-disappearance.md +0 -260
- package/docs/rlp-desk/plans/rlp-desk-elegant-papert-agent-a8cd695ffca2a3ad8.md +0 -84
- package/docs/rlp-desk/plans/rlp-desk-elegant-papert.md +0 -270
- package/docs/rlp-desk/plans/rlp-desk-tmux-flywheel-routing.md +0 -730
- package/docs/rlp-desk/plans/toasty-whistling-diffie-agent-a6814625642e956da.md +0 -201
- package/docs/rlp-desk/plans/toasty-whistling-diffie.md +0 -117
- package/docs/rlp-desk/plans/validated-snacking-crayon.md +0 -204
- package/examples/calculator/.claude/ralph-desk/logs/loop-test/iter-001.worker-output.log +0 -0
- package/examples/calculator/.claude/ralph-desk/logs/loop-test/iter-001.worker-prompt.md +0 -38
- package/examples/calculator/.claude/ralph-desk/logs/loop-test/iter-001.worker-trigger.sh +0 -28
- package/examples/calculator/.claude/ralph-desk/logs/loop-test/session-config.json +0 -25
- package/examples/calculator/.claude/ralph-desk/logs/loop-test/status.json +0 -10
- package/examples/calculator/.claude/ralph-desk/logs/loop-test/worker-heartbeat.json +0 -1
|
@@ -1,2097 +0,0 @@
|
|
|
1
|
-
# RLP Desk Verification Strategy Research
|
|
2
|
-
|
|
3
|
-
> Internal document — gitignored, not published.
|
|
4
|
-
> Last updated: 2026-03-24 (v3 — 학술논문, 정형 방법론, 기업 QE, 추가 스킬)
|
|
5
|
-
|
|
6
|
-
## 1. 핵심 문제
|
|
7
|
-
|
|
8
|
-
### 실전 사례
|
|
9
|
-
- Trading 시스템: mock 73개 ALL PASS → Redis 무한루프, 매도 실패, 유령 포지션, 시그널 이중 경로
|
|
10
|
-
- 근본 원인: L1(unit test)만 요구, L2/L3/L4 강제 없음
|
|
11
|
-
- "code inspection"을 검증으로 인정 → Verifier가 대충 PASS
|
|
12
|
-
|
|
13
|
-
### 역사적 사례
|
|
14
|
-
| 사건 | 손실 | 근본 원인 | 잡았어야 할 계층 |
|
|
15
|
-
|------|------|----------|----------------|
|
|
16
|
-
| Knight Capital | $440M / 45분 | 7년 미테스트 dead code + 수동 배포 | L4 (deploy verify) |
|
|
17
|
-
| Boeing 737 MAX | 346명 사망 | 단일 센서 의존 시스템 테스트 누락 | L3 (E2E simulation) |
|
|
18
|
-
| Mars Climate Orbiter | $327M | 단위 불일치 (파운드 vs 뉴턴) | L2 (contract test) |
|
|
19
|
-
| Therac-25 | 3명 사망 | race condition, timing 미테스트 | L2 (concurrency test) |
|
|
20
|
-
| AI 생성 테스트 | 구현 복사 tautological test | L1은 pass하지만 버그 못 잡음 | mutation testing gate |
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 2. 검증 계층 모델 (L1-L4)
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
L1: Unit Test — 함수 단위 (mock 허용), 항상 필수
|
|
28
|
-
L2: Integration — 외부 서비스 실제 연결, 해당 시 필수
|
|
29
|
-
L3: E2E Simulation — 알려진 입력 → 전 구간 재현, 항상 필수
|
|
30
|
-
L4: Deploy Verify — 실제 환경 동작 확인, 배포 시 필수
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
규칙:
|
|
34
|
-
- 빈칸/TODO → Verifier 무조건 FAIL
|
|
35
|
-
- "N/A — 사유" 명시 시에만 skip
|
|
36
|
-
- "inspection"은 automated 검증으로 불인정
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 3. 속일 수 없는 AC 6가지 속성
|
|
41
|
-
|
|
42
|
-
1. **Observable outcome** — 관찰 가능한 결과
|
|
43
|
-
2. **Quantitative threshold** — 숫자 pass/fail 기준
|
|
44
|
-
3. **Negative test** — "일어나면 안 되는 것"
|
|
45
|
-
4. **Edge case** — boundary value 명시
|
|
46
|
-
5. **Implementation-independent** — HOW가 아닌 WHAT
|
|
47
|
-
6. **Third-party verifiable** — 코드 모르는 사람도 검증 가능
|
|
48
|
-
|
|
49
|
-
출처: Specification by Example (Gojko Adzic), Example Mapping (Cucumber)
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## 4. 비코드 검증 패턴
|
|
54
|
-
|
|
55
|
-
| 유형 | 검증 방법 | 정량 기준 |
|
|
56
|
-
|------|----------|----------|
|
|
57
|
-
| 디자인 | pixel diff, WCAG | diff < 5%, contrast 4.5:1 |
|
|
58
|
-
| 콘텐츠 | 텍스트 존재, 링크, 맞춤법 | broken links 0, EPT < 2 |
|
|
59
|
-
| API | contract test, 스키마 | Pact pass, OpenAPI 0 errors |
|
|
60
|
-
| 배포 | health check, canary | /health 200, error < 0.5% |
|
|
61
|
-
| 인프라 | validate, policy scan | Checkov HIGH 0건 |
|
|
62
|
-
| 문서 | 링크, 코드블록 실행 | broken 0, 예제 실행 가능 |
|
|
63
|
-
| 데이터 마이그레이션 | row count, checksum | source == target, SHA 10% |
|
|
64
|
-
| 보안 | OWASP ASVS, SAST | CVSS ≥ 7.0 취약점 0건 |
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 5. 테스트 품질 게이트
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
Gate 1: 테스트 존재 (coverage ≥ 80%)
|
|
72
|
-
Gate 2: 테스트가 버그 잡음 (mutation score ≥ 60%)
|
|
73
|
-
Gate 3: 행동 검증 (anti-pattern checklist pass)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Anti-patterns:
|
|
77
|
-
- Liar: assertion 없이 실행만
|
|
78
|
-
- Inspector: private 메서드/내부 상태 검증
|
|
79
|
-
- Mockery: mock만 테스트
|
|
80
|
-
- Tautological: 구현 로직 복사한 expected value
|
|
81
|
-
- Snapshot abuse: 300줄 HTML diff 무검토 승인
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## 6. 언어/프레임워크 중립성
|
|
86
|
-
|
|
87
|
-
### 추상 검증 카테고리 (도구가 아닌 카테고리로 지정)
|
|
88
|
-
|
|
89
|
-
| 카테고리 | Python | JS/TS | Go | Rust | Shell | Java |
|
|
90
|
-
|----------|--------|-------|----|------|-------|------|
|
|
91
|
-
| unit-test | pytest | vitest/jest | go test | cargo test | bats | junit |
|
|
92
|
-
| lint | ruff | eslint/biome | golangci-lint | clippy | shellcheck | checkstyle |
|
|
93
|
-
| type-check | mypy | tsc --noEmit | (built-in) | (built-in) | n/a | (built-in) |
|
|
94
|
-
| format | ruff format | prettier | gofmt | cargo fmt | shfmt | google-java-format |
|
|
95
|
-
| security | bandit | npm audit | govulncheck | cargo audit | n/a | spotbugs |
|
|
96
|
-
| mutation | mutmut | stryker | — | cargo-mutants | — | pitest |
|
|
97
|
-
| concurrency | — | — | go test -race | loom | — | jcstress |
|
|
98
|
-
| backward-compat | griffe | api-extractor | apidiff | cargo-semver-checks | — | japicmp |
|
|
99
|
-
|
|
100
|
-
### Polyglot 프로젝트 처리
|
|
101
|
-
test-spec에 per-component 블록 지원:
|
|
102
|
-
```
|
|
103
|
-
## Component: backend (python)
|
|
104
|
-
| AC | Category | Command |
|
|
105
|
-
|
|
106
|
-
## Component: frontend (typescript)
|
|
107
|
-
| AC | Category | Command |
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## 7. 추가 검증 차원 (현재 전략에서 누락)
|
|
113
|
-
|
|
114
|
-
| 차원 | 설명 | 도구 | 우선순위 |
|
|
115
|
-
|------|------|------|---------|
|
|
116
|
-
| perf-regression | "이전보다 느려졌는가" | k6, hyperfine, benchstat | Medium |
|
|
117
|
-
| accessibility | WCAG AA 준수 | axe-core, Playwright | Medium |
|
|
118
|
-
| backward-compat | API/라이브러리 호환성 | semver-checks, Pact | High |
|
|
119
|
-
| concurrency | race condition | go -race, loom, jcstress | High |
|
|
120
|
-
| db-consistency | 마이그레이션 후 정합성 | pgTAP, alembic round-trip | Medium |
|
|
121
|
-
| observability | 로그/메트릭/트레이스 존재 | OTel weaver, grep | Low |
|
|
122
|
-
| error-recovery | 장애 복구 | toxiproxy, chaos-mesh | Medium |
|
|
123
|
-
| anti-gaming | AI가 테스트 속이는 것 방지 | hidden test, assertion 체크 | High |
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## 8. AI 검증 특수 문제
|
|
128
|
-
|
|
129
|
-
### AI-generated test의 한계 (Mark Seemann)
|
|
130
|
-
- "Tests work best when you have seen them fail" — AI가 만든 테스트는 한 번도 실패한 적 없음
|
|
131
|
-
- 구현을 읽고 expected value를 복사 → tautological test
|
|
132
|
-
- mock이 버그와 같은 가정을 인코딩
|
|
133
|
-
|
|
134
|
-
### NIST: AI Agent 평가 속임 방지 (2026)
|
|
135
|
-
1. **Solution contamination**: AI가 답을 인터넷에서 검색
|
|
136
|
-
2. **Grader gaming**: assertion 비활성화, 테스트 전용 로직 삽입
|
|
137
|
-
|
|
138
|
-
방지 방법:
|
|
139
|
-
- Worker가 볼 수 없는 hidden test
|
|
140
|
-
- assertion 무결성 체크 (assert 문 삭제 감지)
|
|
141
|
-
- Worker와 Verifier에 다른 모델 사용
|
|
142
|
-
- 테스트 코드에 `if __name__ == '__test__'` 패턴 탐지
|
|
143
|
-
|
|
144
|
-
### AI 코드의 실제 위험도 (Harness 2025, CodeRabbit)
|
|
145
|
-
- AI 생성 PR: 1.7x 더 많은 이슈, 1.4x 더 많은 critical 버그
|
|
146
|
-
- 72% 조직이 AI 코드로 인한 프로덕션 사고 경험
|
|
147
|
-
- XSS 취약점 2.74x 더 높음
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## 9. 외부 스킬 (skills.sh)
|
|
152
|
-
|
|
153
|
-
### 설치 가능한 관련 스킬
|
|
154
|
-
|
|
155
|
-
| 스킬 | 설치수 | 용도 |
|
|
156
|
-
|------|--------|------|
|
|
157
|
-
| `aj-geddes/useful-ai-prompts@mutation-testing` | 135 | mutation testing 가이드 |
|
|
158
|
-
| `am-will/codex-skills@tdd-test-writer` | 857 | TDD 테스트 작성 |
|
|
159
|
-
| `jwilger/agent-skills@mutation-testing` | 76 | mutation testing 워크플로우 |
|
|
160
|
-
| `proffesor-for-testing/agentic-qe@mutation-testing` | 51 | QE 관점 mutation testing |
|
|
161
|
-
| `swingerman/atdd@atdd` | 7 | ATDD 2-stream (acceptance + unit) |
|
|
162
|
-
| `bacoco/bmad-skills@bmad-test-strategy` | 19 | 테스트 전략 수립 |
|
|
163
|
-
| `mikeyobrien/ralph-orchestrator@test-driven-development` | 30 | ralph loop TDD |
|
|
164
|
-
| `doubleslashse/claude-marketplace@requirements-clarification` | 20 | 요구사항 명확화 |
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## 10. 참고 레포
|
|
169
|
-
|
|
170
|
-
| 레포 | 핵심 아이디어 |
|
|
171
|
-
|------|-------------|
|
|
172
|
-
| [swingerman/atdd](https://github.com/swingerman/atdd) | ATDD 2-stream + mutation testing, Claude Code 플러그인 |
|
|
173
|
-
| [eyaltoledano/claude-task-master](https://github.com/eyaltoledano/claude-task-master) | PRD → task list, complexity scoring, TDD autopilot |
|
|
174
|
-
| [dodona-edu/universal-judge](https://github.com/dodona-edu/universal-judge) | 언어 중립 테스트 러너 (TESTed) |
|
|
175
|
-
| [darrenhinde/OpenAgentsControl](https://github.com/darrenhinde/OpenAgentsControl) | 6단계 검증 파이프라인 AI agent |
|
|
176
|
-
| [qodo-ai/pr-agent](https://github.com/qodo-ai/pr-agent) | 15+ 전문 agent PR 리뷰 |
|
|
177
|
-
| [automazeio/ccpm](https://github.com/automazeio/ccpm) | PRD → Epic → Issue 트래킹 |
|
|
178
|
-
| [ruvnet/sparc](https://github.com/ruvnet/sparc) | SPARC (Spec→Pseudo→Arch→Refine→Complete) |
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## 11. 방법론 출처
|
|
183
|
-
|
|
184
|
-
| 방법론 | 출처 | 핵심 |
|
|
185
|
-
|--------|------|------|
|
|
186
|
-
| Specification by Example | Gojko Adzic (10년 회고) | 구체적 예시가 AC, 2.75x 품질 향상 |
|
|
187
|
-
| Example Mapping | Matt Wynne (Cucumber) | Yellow/Blue/Green/Red 카드, 25분 세션 |
|
|
188
|
-
| ATDD 2-stream | swingerman/atdd | acceptance test = 불변, Worker 수정 불가 |
|
|
189
|
-
| Shape Up | Basecamp | appetite 기반 scoping, circuit breaker |
|
|
190
|
-
| INVEST | Agile | Independent, Negotiable, Valuable, Estimable, Small, Testable |
|
|
191
|
-
| IEEE 829 | IEEE | 16 clause 테스트 계획 표준 |
|
|
192
|
-
| ISTQB | ISTQB Foundation | EP, BVA, decision table, state transition |
|
|
193
|
-
| ISO 25010:2023 | ISO | 9가지 품질 특성 (safety, flexibility 추가) |
|
|
194
|
-
| DO-178C | FAA | 리스크 기반 검증 수준 (DAL A-E), 독립 검증 의무 |
|
|
195
|
-
| Three Amigos | John Ferguson Smart | Intent + Correctness + Adversarial 3관점 |
|
|
196
|
-
| Testing Trophy | Kent C. Dodds | integration 중심 (unit < integration < e2e) |
|
|
197
|
-
| Google Mutation Testing | IEEE TSE 2021 | 24,000+ 개발자, 82% productive mutants |
|
|
198
|
-
| NIST CAISI | NIST 2026 | AI agent 평가 속임 방지 가이드 |
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## 12. 구현 우선순위
|
|
203
|
-
|
|
204
|
-
| 순위 | 항목 | 근거 |
|
|
205
|
-
|------|------|------|
|
|
206
|
-
| **P0** | test-spec L1/L2/L3/L4 필수 섹션 | 실전 장애 직접 방지 |
|
|
207
|
-
| **P0** | Verifier Layer Enforcement | TODO → FAIL, inspection ≠ verification |
|
|
208
|
-
| **P0** | Criteria Mapping에 Layer 컬럼 | AC별 검증 계층 추적 |
|
|
209
|
-
| **P1** | 추상 검증 카테고리 (언어 중립) | 다중 언어 프로젝트 지원 |
|
|
210
|
-
| **P1** | brainstorm Given/When/Then + Task Type | PRD 품질 강제 |
|
|
211
|
-
| **P1** | Worker TDD + L3 E2E 의무 | unit test만 돌리고 끝내기 방지 |
|
|
212
|
-
| **P1** | anti-gaming 대책 | hidden test, assertion 무결성 |
|
|
213
|
-
| **P2** | Anti-pattern 체크리스트 | L1 품질 개선 |
|
|
214
|
-
| **P2** | perf-regression, accessibility, concurrency | 추가 검증 차원 |
|
|
215
|
-
| **P2** | Sweep 검증 (도메인 특화) | trading 등 특수 도메인 |
|
|
216
|
-
| **P3** | per-component polyglot 지원 | 복합 스택 프로젝트 |
|
|
217
|
-
| **P3** | formal verification 연동 | 장기 비전 (Lean4, Isabelle) |
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## 13. 외부 스킬 흡수 분석
|
|
222
|
-
|
|
223
|
-
### 13-1. swingerman/atdd — 2-Stream ATDD
|
|
224
|
-
|
|
225
|
-
**핵심 방법론:**
|
|
226
|
-
- Acceptance test(WHAT)와 Unit test(HOW)를 완전 분리
|
|
227
|
-
- Acceptance test는 Worker가 수정 불가 (read-only contract)
|
|
228
|
-
- Spec은 Given/When/Then + **도메인 언어만** 사용 (기술 용어 금지)
|
|
229
|
-
- Spec-Guardian agent가 implementation leakage 감지
|
|
230
|
-
|
|
231
|
-
**7단계 워크플로우:**
|
|
232
|
-
1. Given/When/Then spec 작성 (도메인 언어만)
|
|
233
|
-
2. 프로젝트별 test pipeline 생성 (parser → IR → generator)
|
|
234
|
-
3. Acceptance test 실행 → 반드시 FAIL (RED)
|
|
235
|
-
4. TDD로 구현 (unit test + code → 양쪽 pass)
|
|
236
|
-
5. Spec leakage 감사
|
|
237
|
-
6. Mutation testing 실행
|
|
238
|
-
7. 다음 feature로 반복
|
|
239
|
-
|
|
240
|
-
**Implementation leakage 예시:**
|
|
241
|
-
```
|
|
242
|
-
BAD: "GIVEN the UserService has an empty userRepository"
|
|
243
|
-
GOOD: "GIVEN there are no registered users"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
금지 패턴: class/function 이름, DB 테이블, API 엔드포인트, 프레임워크 용어, 파일 경로
|
|
247
|
-
|
|
248
|
-
**rlp-desk 흡수 지점:**
|
|
249
|
-
| ATDD 구성요소 | rlp-desk 적용 위치 |
|
|
250
|
-
|-------------|-------------------|
|
|
251
|
-
| Acceptance test (불변) | test-spec 내 별도 섹션, Verifier가 소유 |
|
|
252
|
-
| Spec-Guardian | Verifier prompt에 leakage 체크 규칙 추가 |
|
|
253
|
-
| 도메인 언어 강제 | brainstorm에서 AC 작성 시 기술 용어 금지 가이드 |
|
|
254
|
-
| Mutation testing | Verifier 검증 게이트 Gate 2 |
|
|
255
|
-
|
|
256
|
-
출처: https://github.com/swingerman/atdd
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
### 13-2. Mutation Testing 스킬 (3개 통합)
|
|
261
|
-
|
|
262
|
-
**비교:**
|
|
263
|
-
| 차원 | aj-geddes (135) | jwilger (76) | agentic-qe (51) |
|
|
264
|
-
|------|-----------------|-------------|-----------------|
|
|
265
|
-
| Kill rate 기준 | 80%+ | **100% 강제** | 95%+ excellent |
|
|
266
|
-
| 시나리오 검증 | 없음 | **GWT 시나리오 필수** | 학습 기반 |
|
|
267
|
-
| 병렬 실행 | 없음 | 순차 | **8 workers** |
|
|
268
|
-
| 증분 테스트 | 파일 단위 | changed files | **changed lines** |
|
|
269
|
-
| 증거 출력 | HTML | **JSON packet** | JSON+MD+HTML |
|
|
270
|
-
|
|
271
|
-
**흡수할 핵심:**
|
|
272
|
-
|
|
273
|
-
1. **시나리오 커버리지 검증 (jwilger)**
|
|
274
|
-
- surviving mutant에 대응하는 GWT 시나리오가 없으면 → 코드 삭제 or 시나리오 추가 (사람 판단)
|
|
275
|
-
- 시나리오 없이 테스트만 추가하는 건 metric gaming
|
|
276
|
-
|
|
277
|
-
2. **Mutation type → 테스트 추천 (공통)**
|
|
278
|
-
- `>=` → `>` 생존: boundary test 추가
|
|
279
|
-
- `&&` → `||` 생존: 한쪽만 true인 케이스 추가
|
|
280
|
-
- statement 삭제 생존: return value 미검증
|
|
281
|
-
- arithmetic 생존: 계산 결과 미검증
|
|
282
|
-
|
|
283
|
-
3. **증거 패킷 형식 (jwilger)**
|
|
284
|
-
```json
|
|
285
|
-
{
|
|
286
|
-
"tool": "cargo-mutants",
|
|
287
|
-
"scope": ["src/money.rs"],
|
|
288
|
-
"total_mutants": 42,
|
|
289
|
-
"killed": 40,
|
|
290
|
-
"survived": 2,
|
|
291
|
-
"score": 95.2,
|
|
292
|
-
"survivors": [{"file":"...","line":45,"mutation_type":"arithmetic"}],
|
|
293
|
-
"verdict": "FAIL"
|
|
294
|
-
}
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
4. **언어별 도구 매핑 (공통)**
|
|
298
|
-
- Rust: cargo-mutants
|
|
299
|
-
- JS/TS: Stryker
|
|
300
|
-
- Python: mutmut
|
|
301
|
-
- Java: PITest
|
|
302
|
-
- Elixir: Muzak
|
|
303
|
-
|
|
304
|
-
출처: aj-geddes/useful-ai-prompts, jwilger/agent-skills, proffesor-for-testing/agentic-qe
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
### 13-3. TDD 스킬 (4개 통합)
|
|
309
|
-
|
|
310
|
-
**핵심 발견: Context Isolation이 TDD 강제의 열쇠**
|
|
311
|
-
|
|
312
|
-
단일 컨텍스트 LLM은 자연스럽게 "구현을 먼저 설계하고 테스트를 맞추는" 치팅을 함.
|
|
313
|
-
해결책: RED/GREEN/REFACTOR 각 단계를 **별도 Agent**로 분리.
|
|
314
|
-
|
|
315
|
-
```
|
|
316
|
-
RED: test-writer agent (구현 계획 못 봄)
|
|
317
|
-
GREEN: implementer agent (테스트 파일만 봄)
|
|
318
|
-
REFACTOR: refactorer agent (통과한 코드만 봄)
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
**backpressure gate (ralph-orchestrator):**
|
|
322
|
-
- 테스트 미통과 → 다음 단계 진입 거부
|
|
323
|
-
- lint 실패 → 다음 단계 진입 거부
|
|
324
|
-
- typecheck 실패 → 다음 단계 진입 거부
|
|
325
|
-
|
|
326
|
-
**TEA (bmad) — Risk-Based 테스트 전략:**
|
|
327
|
-
- P0-P3 리스크 분류 (probability × impact)
|
|
328
|
-
- P0/P1 시나리오 먼저 테스트
|
|
329
|
-
- 40개 재사용 가능 test fixture/helper Knowledge Base
|
|
330
|
-
- Requirements → Tests 추적 (Traceability Matrix)
|
|
331
|
-
- go/no-go gate: 릴리스 결정은 추적 가능한 증거 기반
|
|
332
|
-
|
|
333
|
-
**TDD Anti-patterns (공통):**
|
|
334
|
-
- "Implement X with tests" → 구현 우선으로 전락
|
|
335
|
-
- "Test existing code" → 함수가 이미 존재한다고 가정
|
|
336
|
-
- 단계 결합 → RED와 GREEN을 한 번에 하면 TDD 아님
|
|
337
|
-
|
|
338
|
-
**rlp-desk 흡수 지점:**
|
|
339
|
-
| TDD 구성요소 | rlp-desk 적용 위치 |
|
|
340
|
-
|-------------|-------------------|
|
|
341
|
-
| Context isolation | Worker 내부에서 RED/GREEN/REFACTOR 단계 분리 지시 |
|
|
342
|
-
| Backpressure gate | Verifier가 테스트/lint/typecheck 통과 확인 후 PASS |
|
|
343
|
-
| Risk-based prioritization | brainstorm에서 US별 리스크 분류 |
|
|
344
|
-
| Traceability matrix | test-spec의 Criteria Mapping 확장 |
|
|
345
|
-
| Requirements clarification | brainstorm에서 2-3개 targeted 질문 (10개+ 금지) |
|
|
346
|
-
|
|
347
|
-
출처: modu-ai/moai-adk, bacoco/bmad-skills, mikeyobrien/ralph-orchestrator, am-will/codex-skills
|
|
348
|
-
|
|
349
|
-
---
|
|
350
|
-
|
|
351
|
-
## 14. 통합 흡수 전략 — rlp-desk 적용 맵
|
|
352
|
-
|
|
353
|
-
### brainstorm 단계
|
|
354
|
-
- Given/When/Then AC + 도메인 언어 강제 (ATDD)
|
|
355
|
-
- Task Type 식별 + US별 리스크 분류 P0-P3 (TEA)
|
|
356
|
-
- 2-3개 targeted 명확화 질문 (requirements-clarification)
|
|
357
|
-
- 검증 계층(L1-L4) 지정 (실전 피드백)
|
|
358
|
-
|
|
359
|
-
### PRD 템플릿
|
|
360
|
-
- AC를 Given/When/Then + 도메인 언어 (기술 용어 금지)
|
|
361
|
-
- Boundary Cases 필수
|
|
362
|
-
- Task Type + Risk Level 필드
|
|
363
|
-
- 검증 계층 매핑 (AC별 L1/L2/L3/L4)
|
|
364
|
-
|
|
365
|
-
### test-spec 템플릿
|
|
366
|
-
- L1/L2/L3/L4 필수 섹션 (실전 피드백)
|
|
367
|
-
- Acceptance test 섹션 (Worker 수정 불가, ATDD)
|
|
368
|
-
- Anti-pattern 체크리스트
|
|
369
|
-
- Mutation testing gate
|
|
370
|
-
- Deploy Checklist
|
|
371
|
-
- Traceability Matrix (Requirements → Tests → Evidence)
|
|
372
|
-
|
|
373
|
-
### Worker prompt
|
|
374
|
-
- TDD 강제: RED→GREEN→REFACTOR (context isolation 권장)
|
|
375
|
-
- L3 E2E 실행 의무
|
|
376
|
-
- Acceptance test 수정 금지
|
|
377
|
-
- Backpressure gate: 테스트/lint/typecheck 통과 전 complete 금지
|
|
378
|
-
|
|
379
|
-
### Verifier prompt
|
|
380
|
-
- Layer Enforcement: L1~L4 각 계층 실행 확인 (TODO → FAIL)
|
|
381
|
-
- Spec-Guardian: AC에 기술 용어 leakage 체크
|
|
382
|
-
- Mutation testing: score ≥ 60% (Phase 1), 시나리오 커버리지 검증
|
|
383
|
-
- Anti-gaming: assertion 무결성, hidden test, inspection ≠ verification
|
|
384
|
-
- Backpressure: 테스트 미통과 → FAIL
|
|
385
|
-
|
|
386
|
-
### governance.md
|
|
387
|
-
- 리스크 기반 검증 수준 정의 (low/medium/high/critical)
|
|
388
|
-
- 리스크 높을수록 검증 계층 + mutation + consensus 강제
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
|
-
## 15. 도메인별 AC 템플릿 라이브러리
|
|
393
|
-
|
|
394
|
-
### 15-1. Web API Endpoint
|
|
395
|
-
- CRUD 정확성: 200/201/204/400/401/403/404/409/422/500 각 상태코드
|
|
396
|
-
- 인증/인가: 미인증→401, 권한 없음→403, 다른 사용자 리소스 접근 차단
|
|
397
|
-
- 입력 검증: 필수 필드 누락→422, 잘못된 타입→400, SQL injection→400(not 500)
|
|
398
|
-
- 페이지네이션: 기본 size 제한, page=0/-1→400, 마지막 페이지 초과→빈 배열
|
|
399
|
-
- 에러: 일관된 JSON 구조, 내부정보 미노출, 5xx→서버 로그 + correlation ID
|
|
400
|
-
- 보안 헤더: X-Content-Type-Options, X-Frame-Options, CSP, CORS
|
|
401
|
-
- 출처: Shieldfy API Security Checklist, OWASP
|
|
402
|
-
|
|
403
|
-
### 15-2. Frontend UI Component
|
|
404
|
-
- 렌더링: 정상 데이터, 빈 데이터, 최대 길이, 특수문자, 로딩/에러/빈 상태
|
|
405
|
-
- 인터랙션: hover/focus/active, 키보드 내비게이션, 폼 유효성, 포커스 트랩 없음
|
|
406
|
-
- 반응형: 320px/768px/1024px/1920px, 터치 타겟 44x44px, 가로 스크롤 없음
|
|
407
|
-
- 접근성(WCAG 2.2 AA): 대비 4.5:1, alt 텍스트, label 연결, 스크린리더, 200% 줌
|
|
408
|
-
- 출처: GOV.UK, A11Y Project Checklist, Lost Pixel
|
|
409
|
-
|
|
410
|
-
### 15-3. Data Pipeline
|
|
411
|
-
- 수집: 소스 연결, 소스 불가 시 재시도, 스키마 drift 검증, 중복 처리
|
|
412
|
-
- 변환: 알려진 N건 입출력 검증, NULL 처리, 타입 캐스팅, 집계 수동 대조
|
|
413
|
-
- 유효성: 완전성(NULL%), 유일성(PK 중복), 참조 무결성, 범위, 포맷, freshness
|
|
414
|
-
- 출력: 스키마 일치, 멱등성, 파티셔닝, 메트릭 발행
|
|
415
|
-
- 장애 복구: 체크포인트, 부분 실패 → 비일관 상태 없음, DLQ, 알림
|
|
416
|
-
- 출처: lakeFS, Monte Carlo, Integrate.io
|
|
417
|
-
|
|
418
|
-
### 15-4. CLI Tool
|
|
419
|
-
- 인자 파싱: --help/-h, --version, 필수 인자 누락→에러+사용법, 미지 플래그→유사 제안
|
|
420
|
-
- 출력: stdout=정상, stderr=에러, --json, --quiet, --verbose, 비TTY시 색상 해제
|
|
421
|
-
- 종료 코드: 0=성공, 1=에러, 2=사용법, 부분 실패→0 아님
|
|
422
|
-
- 에러 메시지: 원인+해결법, 경로 포함, sudo 제안, 비디버그시 스택트레이스 없음
|
|
423
|
-
- 견고성: Ctrl+C 클린업, SIGTERM 정상종료, SIGPIPE 처리, stdout 리다이렉트 동작
|
|
424
|
-
- 출처: clig.dev (CLI Guidelines)
|
|
425
|
-
|
|
426
|
-
### 15-5. Infrastructure
|
|
427
|
-
- 프로비저닝: IaC 정의, plan 확인, apply 멱등, 태그 적용
|
|
428
|
-
- 네트워킹: 최소 권한 SG, 비공개 서브넷 DB, LB 헬스체크, TLS 자동갱신
|
|
429
|
-
- 보안: IAM 최소 권한, 하드코딩 크레덴셜 없음, 저장소 암호화, 감사 로깅
|
|
430
|
-
- 모니터링: 헬스체크, CPU/메모리/디스크 수집, 알림 설정, 로그 중앙화, 런북
|
|
431
|
-
- DR: 자동 백업+복원 테스트, 멀티AZ, 페일오버 테스트, RTO/RPO 문서화
|
|
432
|
-
- 출처: Mercari Production Readiness Checklist
|
|
433
|
-
|
|
434
|
-
### 15-6. Batch Job
|
|
435
|
-
- 스케줄링: cron 확인, 이전 실행 중 중복 방지(mutex), 수동 트리거, TZ 명시
|
|
436
|
-
- 멱등성: 재실행=동일 결과, 체크포인트 추적, 부분+재실행=전체 실행
|
|
437
|
-
- 에러 복구: transient→재시도(backoff), permanent→DLQ, 부분 실패 안전
|
|
438
|
-
- 로깅: 시작/종료 시간, 처리/실패/스킵 건수, 실행 ID, 대시보드
|
|
439
|
-
- 출처: AWS Batch, BullMQ
|
|
440
|
-
|
|
441
|
-
### 15-7. Real-Time System
|
|
442
|
-
- 지연: p50/p95/p99 SLA, 2x 부하시 20% 이내 증가, E2E 측정
|
|
443
|
-
- 처리량: 정상 N msg/s, 버스트 2N T분, 선형 확장, 손실 0
|
|
444
|
-
- 백프레셔: 프로듀서 throttle(crash 아님), 신호 전파 T초 내, 큐 80% 알림
|
|
445
|
-
- 페일오버: 컨슈머 장애→T초 내 대체, 브로커 장애→재라우팅, 데이터 손실 0
|
|
446
|
-
- 순서/전달: 파티션 내 순서 보장, at-least-once/exactly-once 문서화, DLT 구성
|
|
447
|
-
- 출처: Conduktor, Azure Reliability, New Relic
|
|
448
|
-
|
|
449
|
-
### 15-8. Mobile App
|
|
450
|
-
- 플랫폼: 최소 iOS/Android 버전, HIG/Material 가이드, safe area
|
|
451
|
-
- 오프라인: 핵심 기능 캐시, 오프라인 표시, 큐잉→온라인 동기화, 충돌 해결
|
|
452
|
-
- 권한: 필요 시점에 요청, 사전 설명, 거부 시 fallback, 미사용 권한 없음
|
|
453
|
-
- 알림: 가치 시연 후 요청, 탭→올바른 화면, 잠금화면 민감정보 없음, 채널 분류
|
|
454
|
-
|
|
455
|
-
---
|
|
456
|
-
|
|
457
|
-
## 16. 검증 계층별 상세 체크리스트 (L1-L4)
|
|
458
|
-
|
|
459
|
-
### L1 Unit Test (25항목)
|
|
460
|
-
**커버리지 게이트:**
|
|
461
|
-
- Happy path, 각 에러 경로, null/empty/zero, boundary(n-1,n,n+1), return value assertion, side effect 검증
|
|
462
|
-
**테스트 설계:**
|
|
463
|
-
- 1 테스트 = 1 행동, 이름=given/when/then, 독립성, mock=외부 의존성만
|
|
464
|
-
**입력 엣지케이스:**
|
|
465
|
-
- 특수문자(SQL injection, XSS), Unicode/emoji, 최대 길이, 잘못된 타입
|
|
466
|
-
**비즈니스 로직:**
|
|
467
|
-
- 상태 전이, 동시성, 타임아웃/재시도, 무효 상태 조합, 롤백
|
|
468
|
-
|
|
469
|
-
### L2 Integration Test (서비스별)
|
|
470
|
-
**DB:** 연결풀, CRUD, 트랜잭션, ACID, 제약조건, 마이그레이션 가역성, 연결 손실 복구
|
|
471
|
-
**Redis:** set/get/expire, pub/sub, 연결 손실 복구, 캐시 미스, 직렬화
|
|
472
|
-
**HTTP API:** auth, 헤더, 상태코드, 타임아웃, 재시도(429/503), rate limit, TLS
|
|
473
|
-
**Message Queue:** produce/consume/ack, DLQ, 순서, 우선순위, 재생, publisher confirm, durability
|
|
474
|
-
**File System:** read/write/delete, 권한, 디스크 풀, 인코딩, 동시 접근
|
|
475
|
-
**Email/SMS:** 전송 확인, 템플릿 변수 치환, rate limit, 바운스, 수신 거부
|
|
476
|
-
|
|
477
|
-
### L3 E2E Simulation
|
|
478
|
-
**사전조건:** 알려진 입력 정의, 기대 출력(정량) 정의, 환경 초기화, baseline 확보
|
|
479
|
-
**실행:** 전체 파이프라인, 모든 서브시스템, 실제 호출(mock 아님), 타이밍/순서 검증, async 완료 대기
|
|
480
|
-
**검증:** baseline ± 허용 오차, 출력 형식 스키마, DB 상태, 예상 외 부작용 없음
|
|
481
|
-
**에러 전파:** 각 단계 실패 전파, 부분 실패→비일관 없음, 재시도 멱등
|
|
482
|
-
**정리:** 테스트 데이터 삭제, 외부 계정 초기화, 잔여 큐 메시지 없음
|
|
483
|
-
|
|
484
|
-
### L4 Deploy Verification
|
|
485
|
-
**즉시 (5분):** /health 200, 버전 일치, 프로세스 실행 확인, ERROR 로그 0건, 의존성 연결
|
|
486
|
-
**설정:** 환경변수, 시크릿 로드, 피처 플래그, SSL 유효+30일 이상, DNS
|
|
487
|
-
**데이터:** 마이그레이션 완료, 미적용 없음, 롤백 스테이징 테스트 완료
|
|
488
|
-
**트래픽:** P95 SLA 이내, 에러율 < 0.1%, CPU/메모리 정상, 오토스케일링
|
|
489
|
-
**카나리 (Google SRE):** 컨트롤 그룹 대비, HTTP 코드+지연 primary signal, 대표 트래픽 사이클 이상, 자동 롤백
|
|
490
|
-
**모니터링:** 대시보드 golden signals, 알림 라우팅, synthetic probe, 로그 수집
|
|
491
|
-
**롤백:** 단일 명령, 이전 아티팩트 존재, DB 마이그레이션 롤백 테스트, 의사결정자 연락 가능
|
|
492
|
-
|
|
493
|
-
출처: Google SRE Launch Checklist, AWS Well-Architected, Cortex, bregman-arie/sre-checklist
|
|
494
|
-
|
|
495
|
-
---
|
|
496
|
-
|
|
497
|
-
## 17. 테스트 설계 템플릿
|
|
498
|
-
|
|
499
|
-
### Equivalence Partitioning 워크시트
|
|
500
|
-
| 파티션 ID | 타입 | 범위/값 | 대표값 | 테스트 ID |
|
|
501
|
-
규칙: 파티션당 최소 1 TC, invalid 파티션은 각각 독립 TC
|
|
502
|
-
|
|
503
|
-
### Boundary Value Analysis 워크시트
|
|
504
|
-
2-value BVA: min, min-1, max, max+1
|
|
505
|
-
3-value BVA: min-1, min, min+1, max-1, max, max+1
|
|
506
|
-
|
|
507
|
-
### Decision Table
|
|
508
|
-
조건 N개 → 2^N 규칙 → 규칙당 1 TC → 무관 조건 병합으로 축소
|
|
509
|
-
|
|
510
|
-
### State Transition → TC 매핑
|
|
511
|
-
| 현재 상태 | 이벤트 | 다음 상태(pass) | 다음 상태(fail) | TC ID |
|
|
512
|
-
+ 무효 전이 TC (발생하면 안 되는 전이)
|
|
513
|
-
|
|
514
|
-
### Error Guessing 카테고리별 체크리스트
|
|
515
|
-
**Null/Missing:** null, undefined, "", 필수 필드 누락, 빈 배열/객체
|
|
516
|
-
**Overflow:** MAX_INT±1, 최대 길이+1, 최대 depth, 스택 오버플로우
|
|
517
|
-
**Concurrent:** 동시 업데이트, 더블클릭, 1ms 내 동일 요청, read-during-write
|
|
518
|
-
**Encoding:** Unicode, SQL injection, XSS, path traversal, null byte, URL encoding
|
|
519
|
-
**Timezone:** 연말→연초, 윤년 2/29, DST 전환, UTC vs local, 2038 문제
|
|
520
|
-
|
|
521
|
-
---
|
|
522
|
-
|
|
523
|
-
## 18. Gaming 방지 Given/When/Then 패턴
|
|
524
|
-
|
|
525
|
-
### Negative (일어나면 안 되는 것)
|
|
526
|
-
```
|
|
527
|
-
Then NO user record is created
|
|
528
|
-
Then the response does NOT contain "password_hash"
|
|
529
|
-
Then order status is still "cancelled"
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
### Boundary (정확한 경계값)
|
|
533
|
-
```
|
|
534
|
-
Scenario Outline: username length 2→422, 3→201, 30→201, 31→422
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
### Concurrent (race condition)
|
|
538
|
-
```
|
|
539
|
-
When user A and user B simultaneously POST (last item)
|
|
540
|
-
Then exactly 1 order created, exactly 1 receives 409, inventory = 0 (not -1)
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
### Failure (X가 깨졌을 때)
|
|
544
|
-
```
|
|
545
|
-
Given the database connection is unavailable
|
|
546
|
-
Then response 503, NO stack trace, Retry-After header present
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
### Performance (N ms 이내)
|
|
550
|
-
```
|
|
551
|
-
Given 100 concurrent users
|
|
552
|
-
Then p95 < 200ms AND zero 5xx AND CPU < 90%
|
|
553
|
-
```
|
|
554
|
-
|
|
555
|
-
---
|
|
556
|
-
|
|
557
|
-
## 19. Mutation Testing 상세
|
|
558
|
-
|
|
559
|
-
### Surviving Mutant → 테스트 추천 매핑 (완전 테이블)
|
|
560
|
-
| 생존 mutant 유형 | 근본 원인 | 테스트 액션 |
|
|
561
|
-
|-----------------|----------|-----------|
|
|
562
|
-
| 산술 연산 교체 (+→-) | 계산 결과 미검증 | 알려진 입력의 정확한 숫자 출력 assert |
|
|
563
|
-
| 경계 이동 (<→<=) | boundary 미테스트 | n-1, n, n+1 테스트 추가 |
|
|
564
|
-
| null 반환 주입 | null 경로 미검증 | null/empty 결과 처리 테스트 |
|
|
565
|
-
| boolean 반환 뒤집기 | return값 미검증 | assertTrue/assertFalse |
|
|
566
|
-
| void 메서드 삭제 | 부작용 미검증 | 상태 변경/호출 횟수 검증 |
|
|
567
|
-
| 빈 컬렉션 반환 | 컬렉션 내용 미검증 | size > 0 또는 특정 요소 |
|
|
568
|
-
| 조건 부정 (==→!=) | 실패 경로 미테스트 | 거부/실패 케이스 추가 |
|
|
569
|
-
| increment 뒤집기 (++→--) | 카운터 미검증 | 루프 종료 상태 assert |
|
|
570
|
-
| 문자열 변경 | 문자열 정확히 미비교 | exact string assert |
|
|
571
|
-
| dead code | 도달 불가 | 코드 삭제 또는 도달성 테스트 |
|
|
572
|
-
|
|
573
|
-
### 동치 mutant 판단 결정 트리
|
|
574
|
-
```
|
|
575
|
-
생존 → 테스트가 해당 라인 실행? NO → 커버리지 갭 (동치 아님)
|
|
576
|
-
→ 관찰 가능한 출력 변경? NO → dead code/로깅 → 동치, 억제
|
|
577
|
-
→ 테스트가 해당 값 assert? YES → assertion 약함 → 강화
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
---
|
|
581
|
-
|
|
582
|
-
## 20. TDD 단계별 체크리스트
|
|
583
|
-
|
|
584
|
-
### RED (실패 테스트 작성)
|
|
585
|
-
- 즉시 실행 → 반드시 FAIL (pass하면 새 행동 아님)
|
|
586
|
-
- 1 테스트 = 1 행동
|
|
587
|
-
- 테스트 이름: MethodName_Scenario_Expected
|
|
588
|
-
- 프로덕션 코드 미작성 상태
|
|
589
|
-
- 구현 leakage 없는 assertion
|
|
590
|
-
|
|
591
|
-
### GREEN (최소 구현)
|
|
592
|
-
- 테스트만 보고 구현 (구현 계획 참조 금지)
|
|
593
|
-
- 딱 통과할 만큼만 (over-engineering 금지)
|
|
594
|
-
- 테스트 수정 금지
|
|
595
|
-
- 다른 테스트 우연히 통과시키지 않음
|
|
596
|
-
|
|
597
|
-
### REFACTOR (개선)
|
|
598
|
-
- 모든 테스트 통과 상태에서만 시작
|
|
599
|
-
- 새 기능 추가 금지 (새 RED 필요)
|
|
600
|
-
- 테스트 assertion 변경 금지
|
|
601
|
-
- 끝난 후에도 모든 테스트 통과
|
|
602
|
-
|
|
603
|
-
### Metric Gaming 감지 체크리스트
|
|
604
|
-
| 패턴 | 징후 | gaming 이유 |
|
|
605
|
-
|------|------|------------|
|
|
606
|
-
| No-assertion | assert 없이 호출만 | 커버리지만 올림 |
|
|
607
|
-
| Tautological | `!= null` (null 불가능한 곳) | 항상 통과 |
|
|
608
|
-
| Pre-passing | 코드 작성 후 테스트 | RED 안 봄 |
|
|
609
|
-
| Logic in test | if/for in test body | 테스트에 버그 유입 |
|
|
610
|
-
| Shared state | 순서 의존 | 비재현성 |
|
|
611
|
-
|
|
612
|
-
---
|
|
613
|
-
|
|
614
|
-
## 21. Test Quality Scoring Rubric (0-100)
|
|
615
|
-
|
|
616
|
-
10개 차원 × 0-10점:
|
|
617
|
-
1. 테스트 네이밍 명확성
|
|
618
|
-
2. AAA 구조 (Arrange/Act/Assert)
|
|
619
|
-
3. 단일 Act per test
|
|
620
|
-
4. Assertion 구체성
|
|
621
|
-
5. Assertion 밀도 (1-3개 적정)
|
|
622
|
-
6. 테스트 격리성
|
|
623
|
-
7. 순서 독립성
|
|
624
|
-
8. Mock 규율 (외부 의존만)
|
|
625
|
-
9. 테스트 내 로직 없음
|
|
626
|
-
10. Mutation score
|
|
627
|
-
|
|
628
|
-
해석: 0-49 비신뢰, 50-69 기본, 70-84 양호, 85-100 고신뢰
|
|
629
|
-
|
|
630
|
-
### Spec-Guardian Leakage 탐지 규칙
|
|
631
|
-
금지: class/type 이름, 메서드명, DB 테이블, API 경로, HTTP verb, 프레임워크 용어, 데이터 구조, 파일 경로, 에러 코드/예외 이름, 테스트 프레임워크 용어
|
|
632
|
-
이식성 테스트: "다른 언어/스택으로 구현해도 Given/When/Then 한 줄도 안 바꿔도 되는가?"
|
|
633
|
-
|
|
634
|
-
### AC Quality Scoring (0-12)
|
|
635
|
-
6개 차원 × 0-2점: 단일 행동, 도메인 언어, 이해관계자 명확성, 이식성, 구체적 예시, 독립성
|
|
636
|
-
0-5 거부, 6-9 수정, 10-12 승인
|
|
637
|
-
|
|
638
|
-
---
|
|
639
|
-
|
|
640
|
-
## 22. Property-Based Testing 흡수
|
|
641
|
-
|
|
642
|
-
### 핵심 원칙
|
|
643
|
-
```
|
|
644
|
-
GIVEN ANY <임의 입력, 제약 조건 충족>
|
|
645
|
-
WHEN <함수 호출 또는 액션>
|
|
646
|
-
THEN <조건이 항상 성립>
|
|
647
|
-
```
|
|
648
|
-
"ANY"와 "ALWAYS/NEVER"로 보편적 검증 — 특정 입출력 쌍이 아닌 불변 조건 검증
|
|
649
|
-
|
|
650
|
-
### Property 식별 체크리스트
|
|
651
|
-
- [ ] 핵심 불변 조건 식별 완료
|
|
652
|
-
- [ ] 추상적 표현 (특정 입출력 아님)
|
|
653
|
-
- [ ] 수학적으로 건전
|
|
654
|
-
- [ ] 완전성 검증 (버그를 잡을 만큼 충분한 property)
|
|
655
|
-
- [ ] 과잉 명세 없음
|
|
656
|
-
- [ ] 보편 양화사 사용 ("모든", "항상", "절대 ~아님")
|
|
657
|
-
|
|
658
|
-
### 언어별 도구
|
|
659
|
-
| 언어 | 프레임워크 | 핵심 기능 |
|
|
660
|
-
|------|-----------|----------|
|
|
661
|
-
| JS/TS | fast-check | composable arbitraries, 자동 shrinking, runner 무관 |
|
|
662
|
-
| Python | Hypothesis | @given 데코레이터, st.composite, pytest 통합 |
|
|
663
|
-
| Rust | proptest | ProptestConfig, 전략 조합 |
|
|
664
|
-
| Java | jqwik | @Property, @ForAll |
|
|
665
|
-
|
|
666
|
-
### Shrinking (최소 반례 탐색)
|
|
667
|
-
실패 시 자동으로 최소 재현 케이스 생성 — 디버깅 효율 극대화
|
|
668
|
-
fast-check: 통합 shrinking (별도 함수 불필요)
|
|
669
|
-
Hypothesis: 자동 최소화 + 실패 DB 저장
|
|
670
|
-
|
|
671
|
-
### rlp-desk 적용
|
|
672
|
-
- test-spec에 "Property Tests" 선택적 섹션 추가
|
|
673
|
-
- 순수 함수/알고리즘/데이터 변환에 property 정의 권장
|
|
674
|
-
- Verifier가 property test 존재 여부 + invariant 건전성 체크
|
|
675
|
-
|
|
676
|
-
출처: fast-check.dev, hypothesis.works, dubzzz/fast-check, laurigates/claude-plugins
|
|
677
|
-
|
|
678
|
-
---
|
|
679
|
-
|
|
680
|
-
## 23. Visual/Accessibility/E2E 스킬 흡수
|
|
681
|
-
|
|
682
|
-
### Visual Regression Testing
|
|
683
|
-
- Playwright + screenshot 비교 (336 installs — 가장 인기 스킬)
|
|
684
|
-
- pixel diff threshold 설정 (기본 5%, 엄격 1%)
|
|
685
|
-
- 실패 시 before/after 스크린샷 증거 캡처
|
|
686
|
-
- CI에서 자동 실행 가능
|
|
687
|
-
|
|
688
|
-
### E2E Testing 5-Dimension Scoring
|
|
689
|
-
| 차원 | 0 (나쁨) | 1 | 2 (좋음) |
|
|
690
|
-
|------|---------|---|---------|
|
|
691
|
-
| 셀렉터 | CSS class | data-testid | semantic role |
|
|
692
|
-
| 독립성 | 공유 상태 | 약한 의존 | 완전 격리 |
|
|
693
|
-
| 안정성 | 고정 timeout | 부분 intelligent wait | 완전 intelligent wait |
|
|
694
|
-
| 범위 | E2E에서 unit 로직 | 핵심 워크플로우 | 피라미드 정렬 |
|
|
695
|
-
| 데이터 | 하드코딩 | 부분 동적 | 자동 정리 |
|
|
696
|
-
|
|
697
|
-
### E2E 체크리스트
|
|
698
|
-
- [ ] Semantic 셀렉터 (role, label, testid)
|
|
699
|
-
- [ ] Page Object 패턴
|
|
700
|
-
- [ ] 외부 API mock
|
|
701
|
-
- [ ] 병렬 실행
|
|
702
|
-
- [ ] 실패 시 스크린샷/비디오 캡처
|
|
703
|
-
- [ ] 테스트 데이터 정리
|
|
704
|
-
- [ ] E2E에서 edge case 피하기 (unit에서 처리)
|
|
705
|
-
- [ ] 크로스 브라우저
|
|
706
|
-
- [ ] 접근성 검증
|
|
707
|
-
- [ ] CI/CD 통합
|
|
708
|
-
|
|
709
|
-
출처: manutej/luxor-claude-marketplace, proffesor-for-testing/agentic-qe, thapaliyabikendra/ai-artifacts
|
|
710
|
-
|
|
711
|
-
---
|
|
712
|
-
|
|
713
|
-
## 24. Traceability & Audit 스킬 흡수
|
|
714
|
-
|
|
715
|
-
### Traceability Matrix 패턴
|
|
716
|
-
**cumulative tagging (aidoc-flow-framework):**
|
|
717
|
-
```
|
|
718
|
-
@brd: BRD.01.01.30 → 비즈니스 요구사항
|
|
719
|
-
@prd: PRD.01.01.30 → 제품 요구사항
|
|
720
|
-
@code: CODE.01.01.30 → 구현
|
|
721
|
-
```
|
|
722
|
-
모든 아티팩트에 상위 레이어 태그 누적 → 끊김 없는 감사 체인
|
|
723
|
-
|
|
724
|
-
**spec-compliance-validator:**
|
|
725
|
-
frame concerns → acceptance criteria → tests 양방향 연결
|
|
726
|
-
Design by Contract 강제, 위반 테스트 필수
|
|
727
|
-
|
|
728
|
-
### Pre-Push 10-Phase Audit (codebase-audit-pre-push)
|
|
729
|
-
1. 정크 파일 제거
|
|
730
|
-
2. .gitignore 검증
|
|
731
|
-
3. 소스 코드 분석 (dead code, magic number, debug 문)
|
|
732
|
-
4. 보안 검사 **(ZERO-TOLERANCE: 하드코딩 시크릿, SQL injection)**
|
|
733
|
-
5. 확장성 평가 (N+1 쿼리, 미인덱스, 메모리 누수)
|
|
734
|
-
6. 아키텍처 리뷰
|
|
735
|
-
7. 성능 최적화
|
|
736
|
-
8. 문서 완전성
|
|
737
|
-
9. 테스트 커버리지
|
|
738
|
-
10. 최종 회귀 검증
|
|
739
|
-
|
|
740
|
-
CRITICAL blocker: 하드코딩 시크릿, SQL injection, 미보호 auth, 스택트레이스 노출
|
|
741
|
-
|
|
742
|
-
### 12-Attack-Surface Security (repo-sentinel)
|
|
743
|
-
0-12번 공격 표면 × 심각도(CRITICAL/HIGH/MEDIUM/LOW)
|
|
744
|
-
4-Stage DAG: 민감 자산 → 법적 준수 → 공개 표면 → 릴리스
|
|
745
|
-
|
|
746
|
-
### Drift Detection
|
|
747
|
-
SHA-256 해시 기반 상위 문서 변경 감지
|
|
748
|
-
.drift_cache.json에 파일 해시 + 수정 시간 + 리뷰 이력
|
|
749
|
-
|
|
750
|
-
### rlp-desk 적용
|
|
751
|
-
- test-spec에 Traceability Matrix 섹션 (US→AC→Test→Evidence)
|
|
752
|
-
- Verifier가 traceability 완전성 체크 (연결 안 된 AC → FAIL)
|
|
753
|
-
- 보안 체크리스트를 Verifier prompt에 포함 (시크릿, injection)
|
|
754
|
-
|
|
755
|
-
출처: vladm3105/aidoc-flow-framework, knowlet/skills, sickn33/antigravity-awesome-skills, mathews-tom/praxis-skills
|
|
756
|
-
|
|
757
|
-
---
|
|
758
|
-
|
|
759
|
-
## 25. 추가 외부 자료
|
|
760
|
-
|
|
761
|
-
### 기업 QE 패턴
|
|
762
|
-
| 기업 | 패턴 | 핵심 |
|
|
763
|
-
|------|------|------|
|
|
764
|
-
| Spotify | Testing Honeycomb | 마이크로서비스: integration 중심 (unit 아님), 서비스 경계에서 테스트 |
|
|
765
|
-
| Stripe | Testing 2.0 | 결정적 시뮬레이션, ML 테스트 생성, 지속적 장애 주입, property 기반, 100% 재현 |
|
|
766
|
-
| Shopify | 5-Flow Load Test | browsing, admin, flash sale, API, headless + Game Day chaos |
|
|
767
|
-
|
|
768
|
-
### Contract-First 도구
|
|
769
|
-
| 도구 | 입력 | 방식 |
|
|
770
|
-
|------|------|------|
|
|
771
|
-
| Schemathesis | OpenAPI/GraphQL 스키마 | property-based 자동 생성 — zero per-endpoint 유지보수 |
|
|
772
|
-
| Dredd | OpenAPI | example-based, hook 지원 |
|
|
773
|
-
| Microcks | AsyncAPI/OpenAPI/gRPC | mock + conformance test 동시 |
|
|
774
|
-
| Pact (Message) | 이벤트 계약 | consumer-driven, Kafka/SQS/RabbitMQ |
|
|
775
|
-
| Specmatic | AsyncAPI | 실행 가능 계약 |
|
|
776
|
-
|
|
777
|
-
### 비기능 테스트 템플릿
|
|
778
|
-
**Load (k6):** smoke(2VU 1m) → load(ramping 100VU) → stress(300 arrival/s) → soak(50/s 4h)
|
|
779
|
-
**Chaos Game Day:** 가설 → 폭발 반경 → 사전 체크리스트 → 실험 단계 → 사후 분석
|
|
780
|
-
**Security (OWASP):** 11 카테고리 89 테스트, ZAP CI 자동 스캔 + 분기별 수동 펜테스트
|
|
781
|
-
**Metamorphic Testing:** 입출력 관계 검증 (정확한 값이 아닌), AI 시스템 44편 연구 191 MR, 18% 실패율
|
|
782
|
-
|
|
783
|
-
### 추가 GitHub 레포
|
|
784
|
-
| 레포 | 용도 |
|
|
785
|
-
|------|------|
|
|
786
|
-
| schemathesis/schemathesis | OpenAPI property-based 테스트 |
|
|
787
|
-
| dastergon/awesome-chaos-engineering | chaos engineering 리소스 목록 |
|
|
788
|
-
| t3l3machus/OWASP-Testing-Guide-Checklist | OWASP 89 테스트 체크리스트 |
|
|
789
|
-
| bregman-arie/sre-checklist | SRE 체크리스트 |
|
|
790
|
-
|
|
791
|
-
### 추가 스킬 (skills.sh)
|
|
792
|
-
| 스킬 | 설치수 | 용도 |
|
|
793
|
-
|------|--------|------|
|
|
794
|
-
| playwright-visual-testing | 336 | 시각 회귀 테스트 |
|
|
795
|
-
| fast-check/javascript-testing-expert | 61 | property-based (공식 fast-check 레포!) |
|
|
796
|
-
| hypothesis-testing | 60 | Python property-based |
|
|
797
|
-
| trace-check | 47 | 요구사항 추적성 |
|
|
798
|
-
| codebase-audit-pre-push | 37 | 10-phase 코드 감사 |
|
|
799
|
-
| qe-visual-accessibility | 28 | 시각+접근성 테스트 |
|
|
800
|
-
| repo-sentinel | 22 | 12-표면 보안 감사 |
|
|
801
|
-
| spec-compliance-validator | 9 | 스펙 준수 검증 |
|
|
802
|
-
|
|
803
|
-
---
|
|
804
|
-
|
|
805
|
-
## 26. 학술 논문 — AI 코드 검증
|
|
806
|
-
|
|
807
|
-
### 핵심 논문
|
|
808
|
-
|
|
809
|
-
| 논문 | 저자 | 연도 | 핵심 기여 | 출처 |
|
|
810
|
-
|------|------|------|----------|------|
|
|
811
|
-
| TDAD: Test-Driven AI Agent Definition | Tzafrir Rehan | 2026 | 행동 명세→실행 가능 테스트 컴파일. anti-gaming 3중 장치: visible/hidden test, semantic mutation, spec evolution | arXiv 2603.08806 |
|
|
812
|
-
| TDAD: Reducing Code Regressions via Graph-Based Impact Analysis | Alonso, Yovine, Braberman | 2026 | 소스→테스트 의존성 그래프. regression 70% 감소(6.08%→1.82%). 일반 TDD 지시는 오히려 악화(9.94%) | arXiv 2603.17973 |
|
|
813
|
-
| TOGLL: Correct and Strong Test Oracle Generation with LLMs | Hossain, Dwyer | 2024 (ICSE 2025) | LLM 기반 oracle 생성. 3.8x 더 정확한 assertion, 1023 unique bugs 탐지 | arXiv 2405.03786 |
|
|
814
|
-
| Test Oracle Automation in the Era of LLMs | Molina et al. | 2024 (TOSEM 2025) | LLM oracle이 기존 SOTA 초과 — 종합 서베이 | arXiv 2405.12766 |
|
|
815
|
-
| AutoSpec: Automated Specification Synthesis | Wen et al. | 2024 | ACSL 어노테이션(loop invariant, pre/post condition) 자동 합성 | arXiv 2404.00762 |
|
|
816
|
-
| AgentGuard: Runtime Verification of AI Agents | Koohestani | 2025 (ASE) | 비침습 검사 레이어. Adaptive MDP + 확률적 모델 체킹 | arXiv 2509.23864 |
|
|
817
|
-
| CodeHalu: Code Hallucinations in LLMs | Tian et al. | 2024 (AAAI 2025) | 4가지 환각 유형(mapping, naming, resource, logic). 8883 샘플 벤치마크 | arXiv 2405.00253 |
|
|
818
|
-
| Detecting Hallucinations via Deterministic AST | — | 2026 (FORGE) | 비실행 AST 분석. F1=0.934, 77% 자동 교정 | arXiv 2601.19106 |
|
|
819
|
-
| Mutation-Guided Test Generation at Meta | Foster, Harman et al. | 2025 | 10,795 Kotlin 클래스, 9095 mutant, 73% 테스트 수용률. Messenger/WhatsApp 배포 | arXiv 2501.12862 |
|
|
820
|
-
| Comprehensive Study on LLMs for Mutation Testing | Wang et al. | 2024 | GPT-4o 93.4% fault detection. LLM mutant가 실제 버그에 111% 더 가까움 | arXiv 2406.09843 |
|
|
821
|
-
| Metamorphic Testing (foundational) | T.Y. Chen et al. | 1998 | oracle 문제 해결. metamorphic relations = 다중 입력 간 필요 속성 | HKUST-CS98-01 |
|
|
822
|
-
| Towards Verified AI | Seshia, Sadigh, Sastry | 2016/2022 | 5가지 도전+5가지 원칙. VerifAI, Scenic 도구 | arXiv 1606.08514 |
|
|
823
|
-
|
|
824
|
-
### TDAD anti-gaming 3중 장치 (rlp-desk 흡수 대상)
|
|
825
|
-
1. **Visible/Hidden test split** — Worker가 볼 수 있는 테스트 + 볼 수 없는 테스트 분리
|
|
826
|
-
2. **Semantic mutation testing (MutationSmith)** — 프롬프트 변이체 생성 → 테스트가 잘못된 행동을 잡는지 검증
|
|
827
|
-
3. **Spec evolution scenarios** — 명세 변경 시 기존 테스트가 regression 감지하는지 검증
|
|
828
|
-
|
|
829
|
-
결과: 92% v1 성공, 97% hidden pass rate, 86-100% mutation score
|
|
830
|
-
|
|
831
|
-
### 핵심 발견: 일반 TDD 지시는 오히려 해롭다
|
|
832
|
-
TDAD 두 번째 논문: 일반적 "TDD를 따르세요" 지시 → regression이 6.08%에서 **9.94%로 악화**.
|
|
833
|
-
의존성 그래프 기반 컨텍스트 정보 제공 시 → **1.82%로 감소**.
|
|
834
|
-
→ Worker에게 "TDD 해" 보다 "이 파일 변경 시 이 테스트들이 영향받음"이 효과적.
|
|
835
|
-
|
|
836
|
-
---
|
|
837
|
-
|
|
838
|
-
## 27. 정형 방법론
|
|
839
|
-
|
|
840
|
-
| 방법론 | 창시자 | 연도 | 핵심 | rlp-desk 적용 |
|
|
841
|
-
|--------|--------|------|------|--------------|
|
|
842
|
-
| V-Model | — | 1980s | 개발 단계↔테스트 단계 1:1 매핑. Verification(올바르게 만들었나) vs Validation(올바른 것을 만들었나) | test-spec에 V&V 구분 |
|
|
843
|
-
| STAMP/STPA | Nancy Leveson (MIT) | 2004 | 안전을 동적 제어 문제로 봄. unsafe control action 식별 | 고위험 US에 STPA 분석 |
|
|
844
|
-
| Cleanroom SE | Harlan Mills (IBM) | 1987 | 결함 예방 > 결함 제거. 수학적 함수로서의 소프트웨어. 사용 기반 통계 테스트 → MTTF 인증 | Verifier의 독립 검증 철학 |
|
|
845
|
-
| Design by Contract | Bertrand Meyer | 1986 | precondition, postcondition, class invariant. client-supplier 계약 | AC를 contract로 형식화 |
|
|
846
|
-
| N-Version Programming | Chen, Avizienis | 1977 | 동일 명세 → 독립 구현 N개 → 다수결. consensus 기반 결함 탐지 | consensus verification 이론적 기반 |
|
|
847
|
-
| Metamorphic Testing | T.Y. Chen | 1998 | oracle 없이 검증 — 다중 실행 간 관계(MR) 검증 | property-based testing과 결합 |
|
|
848
|
-
|
|
849
|
-
### Design by Contract → rlp-desk AC 강화
|
|
850
|
-
```
|
|
851
|
-
precondition: Given (입력 조건이 충족될 때)
|
|
852
|
-
postcondition: Then (결과가 이 조건을 만족해야 함)
|
|
853
|
-
invariant: 항상 성립하는 조건 (상태 불변식)
|
|
854
|
-
```
|
|
855
|
-
AC를 이 3요소로 분해하면 "속일 수 없는 AC"가 자연스럽게 도출됨.
|
|
856
|
-
|
|
857
|
-
---
|
|
858
|
-
|
|
859
|
-
## 28. 산업 표준 (추가)
|
|
860
|
-
|
|
861
|
-
| 표준 | 범위 | 핵심 | 출처 |
|
|
862
|
-
|------|------|------|------|
|
|
863
|
-
| IEC 61508 | 기능 안전 (전 산업) | SIL 1-4 리스크 등급, Part 1-4 규범+Part 5-7 가이드 | IEC |
|
|
864
|
-
| ISO/IEC/IEEE 29119 | 소프트웨어 테스트 | 5개 파트(개념, 프로세스, 문서, 기법, 키워드). 가장 포괄적 테스트 표준 | ISO |
|
|
865
|
-
| ISO/IEC 42001 | AI 관리 시스템 | 세계 최초 AI MS 표준 (2023). PDCA 방법론, 리스크 관리, 인증 가능 | ISO |
|
|
866
|
-
| NIST AI RMF 1.0 | AI 리스크 관리 | 자발적 프레임워크. Govern→Map→Measure→Manage. 240+ 기관 참여 | NIST |
|
|
867
|
-
| NIST SP 800-53 r5 | 보안 컨트롤 | 20개 패밀리 1000+ 컨트롤. 클라우드/IoT 포함. Update 1 (2024) | NIST CSRC |
|
|
868
|
-
|
|
869
|
-
---
|
|
870
|
-
|
|
871
|
-
## 29. 테스팅 철학 / 기초 저작
|
|
872
|
-
|
|
873
|
-
| 저작 | 저자 | 연도 | 핵심 원칙 |
|
|
874
|
-
|------|------|------|----------|
|
|
875
|
-
| The Art of Software Testing | Glenford Myers | 1979/2011 | 성공적 테스트 = 에러를 찾는 테스트. 완전 테스트는 불가능 |
|
|
876
|
-
| Lessons Learned in Software Testing | Kaner, Bach, Pettichord | 2002 | 293개 경험 기반 교훈. 맥락 중심 방법론. 위험 기반+탐색적 테스트 |
|
|
877
|
-
| Growing OO Software, Guided by Tests | Freeman, Pryce | 2009 | Double Loop TDD (외부 acceptance + 내부 unit). London-style mock |
|
|
878
|
-
| Rapid Software Testing | James Bach, Michael Bolton | 진행중 | 인간 중심. 경량 휴리스틱. "빠른"이 아니라 "낭비 제거" |
|
|
879
|
-
| Testing vs Checking | Michael Bolton | 2009/2013 | Checking=기존 믿음 확인(자동화 가능). Testing=탐구(인간 판단 필요) |
|
|
880
|
-
| Continuous Delivery | Humble, Farley | 2010 | 배포 파이프라인 = 자동화된 게이트. 체크인→릴리스 전 과정 |
|
|
881
|
-
| Release It! | Michael Nygard | 2007/2018 | 안정성 패턴: Circuit Breaker, Bulkhead, Timeout, Fail Fast, Back Pressure |
|
|
882
|
-
| Testing on the Toilet | Google | 2007~ | DAMP over DRY. 테스트는 읽기 쉬워야. 수백 편의 실전 조언 |
|
|
883
|
-
|
|
884
|
-
### Bolton의 "Testing vs Checking" → rlp-desk에 적용
|
|
885
|
-
- **Checking** (자동화 가능) = L1 unit test, L2 integration, lint, type check
|
|
886
|
-
- **Testing** (인간 판단 필요) = 탐색적 테스트, UX 검증, 비즈니스 로직 타당성
|
|
887
|
-
- Verifier가 하는 건 주로 checking. 진짜 testing은 사용자가 해야 함.
|
|
888
|
-
- → Verifier verdict에 "checked" vs "tested" 구분 필요할 수 있음
|
|
889
|
-
|
|
890
|
-
---
|
|
891
|
-
|
|
892
|
-
## 30. 현대 테스팅 원칙
|
|
893
|
-
|
|
894
|
-
### Modern Testing 7 Principles (Alan Page, Brent Jensen)
|
|
895
|
-
1. 비즈니스 개선이 최우선
|
|
896
|
-
2. Lean Thinking + Theory of Constraints로 팀 가속
|
|
897
|
-
3. 안전망이 아닌 지속적 개선의 힘
|
|
898
|
-
4. 팀의 품질 문화에 깊이 관심
|
|
899
|
-
5. 고객만이 품질을 판단할 수 있음
|
|
900
|
-
6. 데이터를 광범위하게 활용
|
|
901
|
-
7. 팀 전체에 테스트 능력 확산
|
|
902
|
-
|
|
903
|
-
### Shift Left + Shift Right
|
|
904
|
-
- **Shift Left**: 테스트를 개발 초기로 이동 → 비용 절감, 품질 향상
|
|
905
|
-
- **Shift Right**: 프로덕션에서 테스트 → 실제 사용자 행동, 카나리, A/B, 피처 플래그
|
|
906
|
-
- 양방향 결합: 프로덕션 텔레메트리가 개발 테스트 전략에 피드백
|
|
907
|
-
|
|
908
|
-
### Chaos Engineering 5원칙 (principlesofchaos.org)
|
|
909
|
-
1. 정상 상태 행동에 대한 가설 수립
|
|
910
|
-
2. 실세계 이벤트 변경 (하드웨어 장애, 트래픽 급증)
|
|
911
|
-
3. 프로덕션에서 실험 실행
|
|
912
|
-
4. 자동화된 지속 실험
|
|
913
|
-
5. 폭발 반경 최소화
|
|
914
|
-
|
|
915
|
-
### Observability-Driven Testing
|
|
916
|
-
- 시스템 텔레메트리(로그, 메트릭, 트레이스)로 테스트 시나리오 유도 및 검증
|
|
917
|
-
- OpenTelemetry 표준. 마이크로서비스/분산 시스템에 필수
|
|
918
|
-
|
|
919
|
-
---
|
|
920
|
-
|
|
921
|
-
## 31. 기업 QE 패턴 (추가)
|
|
922
|
-
|
|
923
|
-
| 기업 | 핵심 혁신 | 규모 | 출처 |
|
|
924
|
-
|------|----------|------|------|
|
|
925
|
-
| Netflix | FIT(장애 주입) + ChAP(chaos 자동화) + Kayenta(카나리 통계 분석) | 수억 구독자 | netflixtechblog.com |
|
|
926
|
-
| Google | Mutation testing, SRE Ch.17 테스트, TotT, 80/15/5 피라미드 | 수십억 테스트/일 | testing.googleblog.com |
|
|
927
|
-
| Meta | Sapienz(자동 테스트 설계) + SapFix(자동 패치) + Rich-State(ICSE 2024: +38% 커버리지, +115% 결함) | 수만 테스트/일 | engineering.fb.com |
|
|
928
|
-
| Uber | BITS(E2E 샌드박스, 사고 71% 감소) + Ballast(적응형 부하) + Testopedia(flaky 관리, 600K 테스트) | 600K Go 테스트 | uber.com/blog |
|
|
929
|
-
| Microsoft | 1ES CloudTest + Flaky 관리(49K flaky 탐지) + L0-L3 분류 | 100+ 제품팀 | devblogs.microsoft.com |
|
|
930
|
-
| Amazon | One-box 배포 + gamma 환경 + staggered rollout + 자동 롤백 | 글로벌 | aws.amazon.com/builders-library |
|
|
931
|
-
| Slack | Project Cornflake: 자동 flaky 탐지+억제. pass rate 20%→96%. 553시간 절약 | 1185 자동 PR | slack.engineering |
|
|
932
|
-
| Atlassian | Flakinator: 22K 빌드 복구, 7K unique flaky 탐지. 스택 무관 | 수백만 실행/일 | atlassian.com/blog |
|
|
933
|
-
| Antithesis | 결정적 시뮬레이션 테스트. 수년 프로덕션을 수시간에. Jane Street $105M 투자 | $105M Series A | antithesis.com |
|
|
934
|
-
|
|
935
|
-
### DORA 2024-2025 핵심 발견
|
|
936
|
-
- AI 역설: 개인 생산량 증가(21% 더 많은 task, 98% 더 많은 PR) → 조직 전달 속도 1.5% 감소, 안정성 7.2% 감소
|
|
937
|
-
- "AI는 이미 있는 것을 증폭시킨다" — 프로세스가 좋으면 좋아지고, 나쁘면 나빠짐
|
|
938
|
-
- 고품질 문서를 가진 팀이 목표 달성 2x 더 높음
|
|
939
|
-
- 이상적 CFR(Change Failure Rate): 0-2% (8.5%만 달성)
|
|
940
|
-
- 출처: dora.dev/research/2024, dora.dev/research/2025
|
|
941
|
-
|
|
942
|
-
---
|
|
943
|
-
|
|
944
|
-
## 32. 테스트 Anti-Pattern 전체 카탈로그 (23종)
|
|
945
|
-
|
|
946
|
-
| # | 패턴 | 설명 |
|
|
947
|
-
|---|------|------|
|
|
948
|
-
| 1 | Liar | assertion 없이 항상 통과 |
|
|
949
|
-
| 2 | Giant | 수천 줄, 수십 케이스 한 파일 |
|
|
950
|
-
| 3 | Mockery | mock만 테스트 |
|
|
951
|
-
| 4 | Inspector | 캡슐화 위반, 리팩터시 깨짐 |
|
|
952
|
-
| 5 | Excessive Setup | 설정 수백 줄 |
|
|
953
|
-
| 6 | Slow Poke | 극단적으로 느린 단위 테스트 |
|
|
954
|
-
| 7 | Happy Path | 성공만 테스트, boundary/exception 없음 |
|
|
955
|
-
| 8 | Generous Leftovers | 정적 메모리/DB에 상태 남김 → 연쇄 실패 |
|
|
956
|
-
| 9 | Local Hero | 특정 개발 환경에서만 통과 |
|
|
957
|
-
| 10 | Nitpicker | 관심 없는 부분까지 전체 출력 비교 |
|
|
958
|
-
| 11 | Secret Catcher | assertion 없이 예외 발생에 의존 |
|
|
959
|
-
| 12 | Greedy Catcher | 아무 예외나 통과 (의도된 예외 아닐 수 있음) |
|
|
960
|
-
| 13 | Sequencer | 비순서 데이터에 순서 의존 |
|
|
961
|
-
| 14 | Hidden Dependency | 미문서화된 외부 의존성 |
|
|
962
|
-
| 15 | Enumerator | Test1, Test2, Test3 — 의미 없는 이름 |
|
|
963
|
-
| 16 | Stranger | 프로덕션 코드와 무관한 것 테스트 |
|
|
964
|
-
| 17 | OS Evangelist | 특정 OS에서만 통과 |
|
|
965
|
-
| 18 | Success Against All Odds | 정확히 검증하려는 게 아니라 통과하도록 작성 |
|
|
966
|
-
| 19 | Free Ride | 기존 테스트에 assertion 추가 (새 테스트 안 만듦) |
|
|
967
|
-
| 20 | The One | 전체 클래스를 단일 테스트로 |
|
|
968
|
-
| 21 | Peeping Tom | 행동 아닌 구현 상세 테스트 |
|
|
969
|
-
| 22 | Flickering | 간헐적 pass/fail (flaky) |
|
|
970
|
-
| 23 | Dead Tree | 실행 안 되거나 주석 처리된 테스트 |
|
|
971
|
-
|
|
972
|
-
학술 연구: **480개 distinct test smell** 카탈로그 (2024 SBQS), 86% JUnit 테스트가 최소 1개 smell 보유
|
|
973
|
-
|
|
974
|
-
---
|
|
975
|
-
|
|
976
|
-
## 33. Flaky Test 관리
|
|
977
|
-
|
|
978
|
-
| 수치 | 출처 |
|
|
979
|
-
|------|------|
|
|
980
|
-
| flaky 경험 팀 비율: 10%(2022)→26%(2025) | testdino.com 벤치마크 |
|
|
981
|
-
| flaky 탐지 AI 시장: $512M (2024) | 산업 리포트 |
|
|
982
|
-
| 가장 흔한 원인: race condition > 네트워크 > 외부 의존성 | ACM 서베이 |
|
|
983
|
-
| Google: 1.5%의 테스트가 flaky, 전체 실패의 84%가 flaky 원인 | Google Testing Blog |
|
|
984
|
-
| FlakyGuard(ASE 2025): 47.6% 자동 수리, 51.8% 수용 | arXiv 2511.14002 |
|
|
985
|
-
|
|
986
|
-
---
|
|
987
|
-
|
|
988
|
-
## 34. Emerging 패러다임
|
|
989
|
-
|
|
990
|
-
### Antithesis — 결정적 시뮬레이션 테스트 (DST)
|
|
991
|
-
- 모든 비결정성(클럭, 스레드 인터리빙, 난수)을 결정적으로 만듦 → 완벽 재현
|
|
992
|
-
- property-based + fuzzing + 결정적 시뮬레이션 결합
|
|
993
|
-
- 수년 프로덕션을 수시간에 시뮬레이션
|
|
994
|
-
- Jane Street, Ethereum (The Merge 검증), MongoDB 사용
|
|
995
|
-
- $105M Series A (2025, Jane Street 리드)
|
|
996
|
-
|
|
997
|
-
### AI 코드 테스트 자동 생성 비교
|
|
998
|
-
| 도구 | 커버리지 | 컴파일 정확도 | 방식 |
|
|
999
|
-
|------|---------|------------|------|
|
|
1000
|
-
| Diffblue Cover | 50-69% | ~99% | 강화학습 기반 Java |
|
|
1001
|
-
| Copilot | 5-29% | ~65% | LLM 기반 |
|
|
1002
|
-
| Claude Code | 7-17% | — | LLM 기반 |
|
|
1003
|
-
| Qodo Cover | 프로젝트별 상이 | 높음 | agentic 기반 |
|
|
1004
|
-
|
|
1005
|
-
### Contract Testing 심화
|
|
1006
|
-
| 유형 | 설명 | 도구 |
|
|
1007
|
-
|------|------|------|
|
|
1008
|
-
| Consumer-Driven (CDCT) | 소비자 기대에서 시작, 실제 사용 행동만 테스트 | Pact, Spring Cloud Contract |
|
|
1009
|
-
| Provider-Driven | 제공자 스키마 기반, 피드백 루프 없음 | OpenAPI, Swagger |
|
|
1010
|
-
| Bidirectional (BDCT) | 양쪽 계약 게시 → 제3자 매칭 | PactFlow |
|
|
1011
|
-
| Message Pact | 비동기 이벤트 (Kafka, RabbitMQ) | Pact Message |
|
|
1012
|
-
| Schema Registry | Avro/Protobuf/JSON Schema 호환성 강제 | Confluent, AWS Glue |
|
|
1013
|
-
|
|
1014
|
-
### 추가 스킬 (skills.sh)
|
|
1015
|
-
| 스킬 | 설치수 | 용도 |
|
|
1016
|
-
|------|--------|------|
|
|
1017
|
-
| api-contract-testing | 283 | API 계약 테스트 |
|
|
1018
|
-
| static-code-analysis | 209 | 정적 분석 |
|
|
1019
|
-
| lint-and-validate | 148 | 린트+검증 |
|
|
1020
|
-
| chaos-engineer | 70 | chaos engineering |
|
|
1021
|
-
| qa-resilience | 63 | QA 복원력 |
|
|
1022
|
-
| chaos-engineering-resilience | 61 | chaos+복원력 |
|
|
1023
|
-
| code-review | 51 | 코드 리뷰 |
|
|
1024
|
-
| contract-tester | 49 | 계약 테스트 |
|
|
1025
|
-
|
|
1026
|
-
---
|
|
1027
|
-
|
|
1028
|
-
## 35. 테스트 전략 프레임워크 / 휴리스틱
|
|
1029
|
-
|
|
1030
|
-
| 프레임워크 | 저자 | 핵심 | 출처 |
|
|
1031
|
-
|-----------|------|------|------|
|
|
1032
|
-
| PRISMA | Erik van Veenendaal | 리스크 기반 우선순위. impact × likelihood 매트릭스 → 테스트 배분 | ctqb.org PDF |
|
|
1033
|
-
| HTSM v6.3 | James Bach | 4 카테고리 휴리스틱: 기법, 프로젝트 요소, 제품 요소, 품질 기준 | satisfice.com (2024.12) |
|
|
1034
|
-
| SBTM | Jon & James Bach | 시간 박스 탐색 세션(60-120분) + PROOF 디브리프 | satisfice.com |
|
|
1035
|
-
| ACC | James Whittaker/Google | Attribute(형용사) × Component(명사) × Capability(동사) 교차 매트릭스 | code.google.com |
|
|
1036
|
-
| TPA | TMAP | Function Point → Test Point. effort = size × strategy × productivity | tmap.net |
|
|
1037
|
-
| Test Heuristics Cheat Sheet | Hendrickson, Lyndsay, Emery | 2페이지 입력 유형별 공격 목록. Explore It! 부록 | ministryoftesting.com |
|
|
1038
|
-
| Little Black Book on Test Design | Rikard Edgren | 테스트 설계 기법 + 아이디어 무료 e-book | thetesteye.com PDF |
|
|
1039
|
-
|
|
1040
|
-
### HTSM → rlp-desk brainstorm 흡수
|
|
1041
|
-
US 작성 시 4 카테고리로 검증 관점 체크:
|
|
1042
|
-
1. **기법**: 어떤 테스트 기법이 적합한가? (EP, BVA, state transition, 탐색적)
|
|
1043
|
-
2. **프로젝트**: 제약 조건은? (시간, 도구, 환경, 인력)
|
|
1044
|
-
3. **제품**: 어떤 품질 속성이 중요한가? (기능, 성능, 보안, 사용성)
|
|
1045
|
-
4. **품질 기준**: pass/fail 기준은 정량적인가?
|
|
1046
|
-
|
|
1047
|
-
---
|
|
1048
|
-
|
|
1049
|
-
## 36. 추가 테스트 기법
|
|
1050
|
-
|
|
1051
|
-
### Combinatorial/Pairwise Testing (NIST ACTS)
|
|
1052
|
-
- NIST 연구: 대부분 결함은 1-6개 파라미터 상호작용에서 발생
|
|
1053
|
-
- ACTS 도구: t-way covering array 생성 (t=1~6), 제약 조건 지원
|
|
1054
|
-
- 출처: csrc.nist.gov/projects/automated-combinatorial-testing-for-software
|
|
1055
|
-
|
|
1056
|
-
### Model-Based Testing (GraphWalker)
|
|
1057
|
-
- 시스템을 directed graph로 모델링 → 경로 생성 알고리즘으로 테스트 시퀀스
|
|
1058
|
-
- 출처: graphwalker.github.io
|
|
1059
|
-
|
|
1060
|
-
### Fuzzing
|
|
1061
|
-
| 도구 | 대상 | 특징 |
|
|
1062
|
-
|------|------|------|
|
|
1063
|
-
| OSS-Fuzz (Google) | C/C++, Rust, Go, Python, Java, JS | 13,000+ 취약점, 50,000+ 버그 발견 |
|
|
1064
|
-
| AFL++ | C/C++ | 커버리지 기반, AFL 후속 |
|
|
1065
|
-
| cargo-fuzz | Rust | libFuzzer 래퍼 |
|
|
1066
|
-
| Bolero | Rust | property testing + fuzzing 통합 — 하나의 테스트로 양쪽 실행 |
|
|
1067
|
-
|
|
1068
|
-
### Symbolic Execution
|
|
1069
|
-
| 도구 | 대상 | 용도 |
|
|
1070
|
-
|------|------|------|
|
|
1071
|
-
| KLEE | LLVM | 모든 실행 경로 추론 → 높은 커버리지 입력 생성 |
|
|
1072
|
-
| angr | 다중 아키텍처 바이너리 | 바이너리 분석 + symbolic execution |
|
|
1073
|
-
| Mythril | Ethereum EVM | 스마트 컨트랙트 reentrancy, overflow 탐지 |
|
|
1074
|
-
|
|
1075
|
-
### Differential Testing
|
|
1076
|
-
- 동일 명세의 복수 구현 비교 → 불일치 = 버그
|
|
1077
|
-
- oracle 없이 검증 가능
|
|
1078
|
-
- DLLens(2024-2025): LLM으로 딥러닝 라이브러리 차분 테스트 강화
|
|
1079
|
-
|
|
1080
|
-
### Approval/Snapshot Testing
|
|
1081
|
-
- ApprovalTests: 15+ 언어 지원. 복잡한 출력(PDF, XML, 이미지)의 golden master 비교
|
|
1082
|
-
- pdf-visual-diff: PDF → PNG 변환 후 pixel 비교
|
|
1083
|
-
- 출처: approvaltests.com
|
|
1084
|
-
|
|
1085
|
-
---
|
|
1086
|
-
|
|
1087
|
-
## 37. API 테스트 도구
|
|
1088
|
-
|
|
1089
|
-
| 도구 | 방식 | 강점 |
|
|
1090
|
-
|------|------|------|
|
|
1091
|
-
| Hurl | plain text HTTP runner (Rust) | chaining, JSONPath assertion, CI 친화 |
|
|
1092
|
-
| Karate | Gherkin-like DSL | API+mock+perf+UI 통합, glue code 불필요 |
|
|
1093
|
-
| REST Assured | Java DSL | Hamcrest matchers, method chaining |
|
|
1094
|
-
| Newman (Postman) | CLI collection runner | CI/CD 파이프라인, headless 실행 |
|
|
1095
|
-
| Schemathesis | OpenAPI/GraphQL | property-based 자동 생성, zero per-endpoint 유지보수 |
|
|
1096
|
-
|
|
1097
|
-
### Hurl 예시 (rlp-desk test-spec에 적합)
|
|
1098
|
-
```hurl
|
|
1099
|
-
GET https://api.example.com/users
|
|
1100
|
-
HTTP 200
|
|
1101
|
-
[Asserts]
|
|
1102
|
-
jsonpath "$.users" count == 10
|
|
1103
|
-
|
|
1104
|
-
POST https://api.example.com/users
|
|
1105
|
-
{"name": "John"}
|
|
1106
|
-
HTTP 201
|
|
1107
|
-
[Captures]
|
|
1108
|
-
user_id: jsonpath "$.id"
|
|
1109
|
-
|
|
1110
|
-
GET https://api.example.com/users/{{user_id}}
|
|
1111
|
-
HTTP 200
|
|
1112
|
-
[Asserts]
|
|
1113
|
-
jsonpath "$.name" == "John"
|
|
1114
|
-
```
|
|
1115
|
-
|
|
1116
|
-
---
|
|
1117
|
-
|
|
1118
|
-
## 38. DevOps/SRE 테스트 통합
|
|
1119
|
-
|
|
1120
|
-
### 배포 검증 패턴
|
|
1121
|
-
| 패턴 | 설명 | 위험도 |
|
|
1122
|
-
|------|------|--------|
|
|
1123
|
-
| Smoke | 핵심 경로 테스트 | 최저 |
|
|
1124
|
-
| Canary | 2-25% 트래픽 라우팅 + 메트릭 모니터링 | 중간 |
|
|
1125
|
-
| Blue-Green | 동일 환경 2개, 한 번에 전환 | 중간 |
|
|
1126
|
-
| Shadow | 프로덕션 트래픽 미러링 (사용자 무영향) | 최저 |
|
|
1127
|
-
|
|
1128
|
-
### Feature Flag 테스트
|
|
1129
|
-
- 활성화/비활성화 양쪽 코드 경로 테스트 (37%만 체계적으로 수행)
|
|
1130
|
-
- 플래그 서비스 불가 시 fallback 테스트
|
|
1131
|
-
- 10개 플래그 = 1,024 상태 → 리스크 기반 조합 선택
|
|
1132
|
-
- 90일 sunset 정책 → 플래그 부채 방지
|
|
1133
|
-
- 출처: launchdarkly.com, yrkan.com
|
|
1134
|
-
|
|
1135
|
-
### DB 마이그레이션 테스트
|
|
1136
|
-
- 스키마 검증: 컬럼, 제약조건, 인덱스, 기본값
|
|
1137
|
-
- 데이터 무결성: FK 생존, 타입 정확도
|
|
1138
|
-
- 롤백: undo 마이그레이션이 스키마를 깨끗이 복원
|
|
1139
|
-
- 성능: 10K 행 2초 → 100M 행 4시간 가능 → 사전 측정
|
|
1140
|
-
- Zero-downtime: Expand-Contract 패턴 (추가→마이그레이션→제거)
|
|
1141
|
-
- `flyway check -drift`: 실제 DB vs 마이그레이션 이력 불일치 탐지
|
|
1142
|
-
|
|
1143
|
-
### Compliance as Code
|
|
1144
|
-
| 도구 | 용도 |
|
|
1145
|
-
|------|------|
|
|
1146
|
-
| Chef InSpec | CIS, PCI DSS, SOC2 벤치마크 프로파일 실행 |
|
|
1147
|
-
| OPA (Rego) | K8s admission, Terraform plan, API 인가 정책 |
|
|
1148
|
-
| Terratest | Go로 실제 인프라 프로비저닝→검증→파괴 |
|
|
1149
|
-
| Pulumi Test | TypeScript/Python/Go로 인프라 unit test |
|
|
1150
|
-
|
|
1151
|
-
---
|
|
1152
|
-
|
|
1153
|
-
## 39. 테스트 데이터 관리
|
|
1154
|
-
|
|
1155
|
-
### 팩토리 라이브러리
|
|
1156
|
-
| 언어 | 라이브러리 | 특징 |
|
|
1157
|
-
|------|-----------|------|
|
|
1158
|
-
| Python | factory_boy | Django/SQLAlchemy, SubFactory |
|
|
1159
|
-
| Ruby | FactoryBot | build_stubbed (DB 안 침) |
|
|
1160
|
-
| JS/TS | Fishery | TypeScript-first, Thoughtbot |
|
|
1161
|
-
| Any | Faker | 다국어 가짜 데이터 |
|
|
1162
|
-
|
|
1163
|
-
Best practice: 결정적 seed → 재현 가능, fully random 금지, lint factory, `build` > `create`
|
|
1164
|
-
|
|
1165
|
-
### 데이터 마스킹 (GDPR)
|
|
1166
|
-
- EDPB 2024: 마스킹 안 된 프로덕션 데이터 dev/test 사용 = GDPR Article 5(1)(a) 위반
|
|
1167
|
-
- 2024-2025 벌금: 8M-22M EUR (약한 가명처리 대상)
|
|
1168
|
-
|
|
1169
|
-
### Testcontainers
|
|
1170
|
-
- 테스트당 Docker 컨테이너 생성 → 자동 정리
|
|
1171
|
-
- 고정 포트 금지 (CI 충돌), 이미지 버전 고정 (latest 금지)
|
|
1172
|
-
|
|
1173
|
-
---
|
|
1174
|
-
|
|
1175
|
-
## 40. 비전통 출력 테스트
|
|
1176
|
-
|
|
1177
|
-
| 출력 유형 | 테스트 방법 | 도구 |
|
|
1178
|
-
|----------|-----------|------|
|
|
1179
|
-
| PDF | 페이지 → PNG 변환 → pixel diff | pdf-visual-diff, Applitools |
|
|
1180
|
-
| Email | 가짜 SMTP 서버 → API로 수신 확인 | Mailpit (MailHog 대체), Mailtrap, MailSlurp |
|
|
1181
|
-
| Webhook | unique URL에 수신 → payload 검사 | webhook.site, Beeceptor, Hookdeck |
|
|
1182
|
-
| 로그 | caplog/structlog 캡처 → assert | pytest caplog, pytest-structlog |
|
|
1183
|
-
| Cron | 로직 분리 → unit test + 스케줄 모니터링 | Cronitor |
|
|
1184
|
-
| CSV/Excel/JSON | 생성 → 파싱 → 필드/행 assert | csv, openpyxl, JSON Schema |
|
|
1185
|
-
| 설정 변경 | 스키마 검증 + 행동 테스트 | ctests (USENIX) |
|
|
1186
|
-
|
|
1187
|
-
---
|
|
1188
|
-
|
|
1189
|
-
## 41. 규제 산업 검증 프레임워크
|
|
1190
|
-
|
|
1191
|
-
### 의약품/제약 (GAMP 5)
|
|
1192
|
-
소프트웨어 카테고리별 검증 강도:
|
|
1193
|
-
| Cat | 유형 | 리스크 | 검증 |
|
|
1194
|
-
|-----|------|--------|------|
|
|
1195
|
-
| 1 | 인프라 (OS, 방화벽) | 최저 | 설치 확인 |
|
|
1196
|
-
| 3 | 비설정형 COTS | 중간 | 벤더 체크 + 리스크 기반 테스트 |
|
|
1197
|
-
| 4 | 설정형 소프트웨어 (ERP) | 중상 | Cat3 + 프로세스/데이터 흐름 |
|
|
1198
|
-
| 5 | 커스텀/비스포크 | 최고 | Cat4 + 공급자 감사 + 코드 리뷰 + unit test |
|
|
1199
|
-
|
|
1200
|
-
→ AI agent 적용: 단순 설정 변경 = Cat3, 복잡 통합 = Cat4, 신규 알고리즘 = Cat5
|
|
1201
|
-
|
|
1202
|
-
### IQ/OQ/PQ 3단계 검증
|
|
1203
|
-
| 단계 | 질문 | AI agent 대응 |
|
|
1204
|
-
|------|------|--------------|
|
|
1205
|
-
| IQ (설치 검증) | 올바르게 설치됐나? | 환경 설정 검증 |
|
|
1206
|
-
| OQ (운영 검증) | 올바르게 동작하나? | 기능 테스트 (L1+L2) |
|
|
1207
|
-
| PQ (성능 검증) | 실제 조건에서 작동하나? | E2E + 부하 테스트 (L3+L4) |
|
|
1208
|
-
|
|
1209
|
-
### 자동차 (ISO 26262 ASIL)
|
|
1210
|
-
| ASIL | 위험 | 커버리지 요구 |
|
|
1211
|
-
|------|------|-------------|
|
|
1212
|
-
| A | 최저 | statement coverage |
|
|
1213
|
-
| B | 중간 | branch coverage |
|
|
1214
|
-
| C | 높음 | branch + function/call |
|
|
1215
|
-
| D | 최고 | MC/DC coverage |
|
|
1216
|
-
|
|
1217
|
-
→ AI agent 적용: 읽기 전용 = ASIL-A, 데이터 변경 = ASIL-B/C, 금융/보안 = ASIL-D
|
|
1218
|
-
|
|
1219
|
-
### SOTIF (ISO 21448) — AI agent에 직접 적용 가능
|
|
1220
|
-
"정상 작동하지만 불충분한" 시나리오 분석:
|
|
1221
|
-
| 영역 | 설명 |
|
|
1222
|
-
|------|------|
|
|
1223
|
-
| 알려진 안전 | 검증 완료 |
|
|
1224
|
-
| 알려진 위험 | 완화 완료 |
|
|
1225
|
-
| 미지의 안전 | 잔여 위험 수용 |
|
|
1226
|
-
| 미지의 위험 | 시나리오 테스트로 축소해야 함 |
|
|
1227
|
-
|
|
1228
|
-
→ AI agent가 "설계되지 않은 상황"을 만났을 때 어떻게 되는지 명시적으로 테스트
|
|
1229
|
-
|
|
1230
|
-
### 금융 서비스
|
|
1231
|
-
**SOX 4가지 테스트 방법:** Inquiry(질문) + Observation(관찰) + Inspection(검사) + Sampling(샘플링)
|
|
1232
|
-
→ AI agent: (1) 결정 로직 리뷰, (2) 실행 관찰, (3) 로그/산출물 검사, (4) 독립 재실행 비교
|
|
1233
|
-
|
|
1234
|
-
**MiFID II 알고리즘 트레이딩 5가지 필수 테스트:**
|
|
1235
|
-
| 테스트 | AI agent 대응 |
|
|
1236
|
-
|--------|--------------|
|
|
1237
|
-
| 지연 테스트 | API 지연 시 agent 행동 |
|
|
1238
|
-
| 단절 테스트 | 서비스 장애 시 복구 |
|
|
1239
|
-
| 오류 거래 | 롤백/취소 처리 |
|
|
1240
|
-
| 가격 변동 스트레스 | 비정상 입력 시 행동 |
|
|
1241
|
-
| 메시지율 스트레스 | 고동시성 행동 |
|
|
1242
|
-
스트레스 기준: **최근 6개월 최대치 × 2**
|
|
1243
|
-
|
|
1244
|
-
---
|
|
1245
|
-
|
|
1246
|
-
## 42. 보안 테스트 심화
|
|
1247
|
-
|
|
1248
|
-
### OWASP Testing Guide v4.2 — 91 테스트 (11 카테고리)
|
|
1249
|
-
정보 수집(10) + 설정 관리(8) + ID 관리(7) + 인증(10) + 인가(4) + 세션(8) + 데이터 검증(16) + 에러 처리(2) + 암호화(3) + 비즈니스 로직(9) + 클라이언트(12)
|
|
1250
|
-
|
|
1251
|
-
### STRIDE → 테스트 매핑
|
|
1252
|
-
| 위협 | 보안 속성 | 테스트 |
|
|
1253
|
-
|------|----------|--------|
|
|
1254
|
-
| Spoofing | 인증 | 자격 증명 검증, 세션 토큰, 위장 시도 |
|
|
1255
|
-
| Tampering | 무결성 | 체크섬, 디지털 서명, 비인가 수정 |
|
|
1256
|
-
| Repudiation | 부인 방지 | 감사 추적 완전성, 로그 변조 탐지 |
|
|
1257
|
-
| Info Disclosure | 기밀성 | 암호화, 접근 제어, 정보 유출 스캔 |
|
|
1258
|
-
| DoS | 가용성 | 부하 테스트, 자원 고갈, rate limiting |
|
|
1259
|
-
| Elevation | 인가 | 권한 경계 테스트, 역할 상승 시도 |
|
|
1260
|
-
|
|
1261
|
-
### CWE Top 25 (2024) — 상위 10
|
|
1262
|
-
1. XSS (CWE-79), 2. Out-of-bounds Write (CWE-787), 3. SQL Injection (CWE-89), 4. CSRF (CWE-352), 5. Path Traversal (CWE-22), 6. Out-of-bounds Read (CWE-125), 7. OS Command Injection (CWE-78), 8. Use After Free (CWE-416), 9. Missing Authorization (CWE-862), 10. Unrestricted File Upload (CWE-434)
|
|
1263
|
-
|
|
1264
|
-
---
|
|
1265
|
-
|
|
1266
|
-
## 43. 접근성 테스트 심화
|
|
1267
|
-
|
|
1268
|
-
### WCAG 2.2 — 4원칙 (POUR) + 86 성공 기준
|
|
1269
|
-
- Perceivable, Operable, Understandable, Robust
|
|
1270
|
-
- Level A (필수), AA (권장), AAA (이상)
|
|
1271
|
-
- WCAG 2.2 신규 9개: Focus Not Obscured, Dragging Movements, Target Size, Consistent Help, Redundant Entry, Accessible Auth 등
|
|
1272
|
-
|
|
1273
|
-
### DHS Trusted Tester v5.0 — 20 테스트 절차
|
|
1274
|
-
키보드 접근, 폼, 링크/버튼, 이미지, 반복 콘텐츠, 구조, 언어, 대비, 테이블, 미디어 등
|
|
1275
|
-
|
|
1276
|
-
### EN 301 549 — WCAG 넘어선 요구사항
|
|
1277
|
-
- 실시간 텍스트 500ms 이내, 자막 100ms 동기화, 터치 범위 380-1220mm, 대체 생체 인증
|
|
1278
|
-
|
|
1279
|
-
---
|
|
1280
|
-
|
|
1281
|
-
## 44. 국제화/지역화 테스트
|
|
1282
|
-
|
|
1283
|
-
### i18n 체크리스트
|
|
1284
|
-
- UTF-8 전 계층 (DB, API, UI, 파일)
|
|
1285
|
-
- 비라틴 스크립트 (아랍어, 중국어, 키릴)
|
|
1286
|
-
- RTL 레이아웃 + 양방향 텍스트
|
|
1287
|
-
- 텍스트 확장 (독일어 +20%, 일부 언어 +200-400%)
|
|
1288
|
-
- 날짜/시간 (MM/DD vs DD/MM vs YYYY-MM-DD, 12h vs 24h)
|
|
1289
|
-
- 소수점 (1,234.56 vs 1.234,56)
|
|
1290
|
-
- 정렬 규칙 (독일어 ü, 스페인어 ñ)
|
|
1291
|
-
|
|
1292
|
-
### Pseudo-Localization 5가지 기법
|
|
1293
|
-
| 기법 | 탐지 대상 |
|
|
1294
|
-
|------|----------|
|
|
1295
|
-
| Accented chars (a→ä) | 인코딩, 폰트 |
|
|
1296
|
-
| 40% padding | 잘림, 오버플로우 |
|
|
1297
|
-
| 구분자 ^...^ | 잘림, 문자열 결합 |
|
|
1298
|
-
| 리소스 ID 해시 | 소스 위치 추적 |
|
|
1299
|
-
| 다중 스크립트 padding | 폰트 fallback |
|
|
1300
|
-
|
|
1301
|
-
---
|
|
1302
|
-
|
|
1303
|
-
## 45. 프라이버시/GDPR 테스트
|
|
1304
|
-
|
|
1305
|
-
### 7가지 데이터 주체 권리 테스트
|
|
1306
|
-
| 권리 | 테스트 |
|
|
1307
|
-
|------|--------|
|
|
1308
|
-
| 접근 | 고객이 보유 개인정보 전체를 요청/수신 가능? |
|
|
1309
|
-
| 정정 | 부정확 데이터 수정 가능? |
|
|
1310
|
-
| 삭제 | 삭제 요청 → 모든 시스템에서 완전 삭제? |
|
|
1311
|
-
| 제한 | 특정 처리 제한 가능? |
|
|
1312
|
-
| 이동성 | 읽기 가능 형식으로 내보내기? |
|
|
1313
|
-
| 반대 | 처리(특히 마케팅) 거부 가능? |
|
|
1314
|
-
| 자동 결정 | 자동 의사결정에 보호장치? |
|
|
1315
|
-
|
|
1316
|
-
### 8-Point QA 프레임워크
|
|
1317
|
-
데이터 최소화, 보안 처리, 접근 제어, 삭제/보존, 동의 관리, 이동성, 암호화/익명화, 로깅/모니터링
|
|
1318
|
-
|
|
1319
|
-
---
|
|
1320
|
-
|
|
1321
|
-
## 46. QE 도서 (2023-2026)
|
|
1322
|
-
|
|
1323
|
-
| 도서 | 저자 | 연도 | 핵심 |
|
|
1324
|
-
|------|------|------|------|
|
|
1325
|
-
| Software Testing with Generative AI | Winteringham | 2025 | LLM으로 테스트 계획, 데이터 생성, UI 자동화, 탐색적 테스트 |
|
|
1326
|
-
| AI and Software Testing | Rex Black et al. | 2022 | AI 신뢰성, ML 테스트, AI 기반 자동화. Independent Press Award 수상 |
|
|
1327
|
-
| Guide to Software Quality Engineering | Pargaonkar | 2024 | 개발/테스트/QA 종합 가이드 |
|
|
1328
|
-
| Full Stack Testing | Gayathri Mohan | 2022 | 10 카테고리 40+ 도구 |
|
|
1329
|
-
|
|
1330
|
-
---
|
|
1331
|
-
|
|
1332
|
-
## 47. 추가 스킬 (skills.sh — v3)
|
|
1333
|
-
|
|
1334
|
-
| 스킬 | 설치수 | 용도 |
|
|
1335
|
-
|------|--------|------|
|
|
1336
|
-
| security-auditor | 336 | 보안 감사 |
|
|
1337
|
-
| api-contract-testing | 283 | API 계약 테스트 |
|
|
1338
|
-
| static-code-analysis | 209 | 정적 분석 |
|
|
1339
|
-
| senior-secops | 204 | SecOps |
|
|
1340
|
-
| lint-and-validate | 148 | 린트+검증 |
|
|
1341
|
-
| performance-testing | 95 | 성능 테스트 |
|
|
1342
|
-
| security-architect | 89 | 보안 아키텍처 |
|
|
1343
|
-
| chaos-engineer | 70 | chaos engineering |
|
|
1344
|
-
| qa-resilience | 63 | QA 복원력 |
|
|
1345
|
-
| flyway-migrations | 62 | DB 마이그레이션 |
|
|
1346
|
-
| load-test-builder | 57 | 부하 테스트 |
|
|
1347
|
-
| audit-expert | 46 | 감사 |
|
|
1348
|
-
|
|
1349
|
-
---
|
|
1350
|
-
|
|
1351
|
-
## 48. 규제 산업 → AI agent 테스트 7가지 보편 패턴
|
|
1352
|
-
|
|
1353
|
-
1. **리스크 기반 강도 조절** (GAMP Cat1-5, ASIL A-D, SOX tiers)
|
|
1354
|
-
→ agent 액션을 리스크별 분류, 커버리지 비례 배분
|
|
1355
|
-
|
|
1356
|
-
2. **V-Model 추적성** (ASPICE SWE.1-6, IQ/OQ/PQ)
|
|
1357
|
-
→ 요구사항 → 테스트 → 결과 양방향 추적
|
|
1358
|
-
|
|
1359
|
-
3. **다중 방법 검증** (SOX 4방법, ISO 26262 5가지)
|
|
1360
|
-
→ 정적 분석 + 동적 테스트 + 수동 리뷰 + 모니터링
|
|
1361
|
-
|
|
1362
|
-
4. **시나리오 기반 안전 분석** (SOTIF 4분면, STRIDE 6위협)
|
|
1363
|
-
→ "미지의 위험" 영역 축소
|
|
1364
|
-
|
|
1365
|
-
5. **필수 감사 추적** (21 CFR Part 11 60+ 항목, SOX)
|
|
1366
|
-
→ 모든 agent 액션 who/what/when/why/prior-state 기록
|
|
1367
|
-
|
|
1368
|
-
6. **구체적 임계값 스트레스** (MiFID II: 6개월 최대 × 2)
|
|
1369
|
-
→ 과거 데이터 기반 방어 가능한 스트레스 공식
|
|
1370
|
-
|
|
1371
|
-
7. **버전별 배포 게이트** (MiFID II, GAMP 5, ASPICE)
|
|
1372
|
-
→ 특정 버전의 test+approval 없이 배포 불가
|
|
1373
|
-
|
|
1374
|
-
---
|
|
1375
|
-
|
|
1376
|
-
## 49. Best Practice 강제 — 레포 & 스킬 분석
|
|
1377
|
-
|
|
1378
|
-
### 핵심 발견: Vercel의 Rule Template 패턴이 gold standard
|
|
1379
|
-
|
|
1380
|
-
**vercel-labs/agent-skills** (612+ installs, 원본):
|
|
1381
|
-
- 66개 규칙 파일, 8개 우선순위 카테고리
|
|
1382
|
-
- 각 규칙: title, impact(CRITICAL/HIGH/MEDIUM/LOW), tags, INCORRECT 코드, CORRECT 코드
|
|
1383
|
-
- 핵심: "이것은 틀렸다(anti-pattern) → 이것이 맞다(pattern)" 대비로 강제
|
|
1384
|
-
|
|
1385
|
-
### 4가지 강제 패턴 (rlp-desk 흡수 대상)
|
|
1386
|
-
|
|
1387
|
-
**Pattern A: Rule Template (Vercel)**
|
|
1388
|
-
```yaml
|
|
1389
|
-
title: [규칙명]
|
|
1390
|
-
impact: CRITICAL | HIGH | MEDIUM | LOW
|
|
1391
|
-
tags: [카테고리]
|
|
1392
|
-
## Incorrect (anti-pattern + 코드)
|
|
1393
|
-
## Correct (올바른 패턴 + 코드)
|
|
1394
|
-
```
|
|
1395
|
-
→ rlp-desk: 프레임워크별 rule pack으로 test-spec에 참조 가능
|
|
1396
|
-
|
|
1397
|
-
**Pattern B: Checklist Enforcement (affaan-m/everything-claude-code, 3.1K installs)**
|
|
1398
|
-
반드시 통과해야 하는 체크리스트:
|
|
1399
|
-
- 함수 < 50줄, 파일 < 800줄, 중첩 ≤ 4단계
|
|
1400
|
-
- 보안 8항목: 하드코딩 시크릿 없음, SQL injection 방지, XSS 방지, CSRF, rate limit
|
|
1401
|
-
- 테스트 커버리지 ≥ 80% (비협상)
|
|
1402
|
-
- TDD: RED→GREEN→REFACTOR
|
|
1403
|
-
- `any` 금지 (`unknown` 사용), `console.log` 프로덕션 금지
|
|
1404
|
-
→ rlp-desk: Verifier가 체크리스트 통과 여부 확인
|
|
1405
|
-
|
|
1406
|
-
**Pattern C: Test Anatomy Rules (goldbergyoni/javascript-testing-best-practices, 24K stars)**
|
|
1407
|
-
테스트 구조 강제:
|
|
1408
|
-
- 3-part 테스트명: "[Unit] [Scenario] [Expected]"
|
|
1409
|
-
- AAA 패턴: Arrange / Act (1줄) / Assert (1줄)
|
|
1410
|
-
- Black-box만: public 메서드만 테스트
|
|
1411
|
-
- 현실적 데이터: Faker 사용, "foo/bar" 금지
|
|
1412
|
-
- 5가지 결과 테스트: 응답, 상태 변경, 외부 호출, 메시지, 관찰성
|
|
1413
|
-
- Stub > Mock: mock 남용 방지
|
|
1414
|
-
- 고정 fixture 금지: 테스트별 데이터 생성
|
|
1415
|
-
→ rlp-desk: Worker prompt에 테스트 작성 규칙으로 포함
|
|
1416
|
-
|
|
1417
|
-
**Pattern D: Codebase-Derived Standards (github/awesome-copilot, 7.6K installs)**
|
|
1418
|
-
기존 코드베이스 분석 → 규칙 자동 생성:
|
|
1419
|
-
- 들여쓰기, 네이밍, 주석, 조건문, 함수 구조 패턴 추출
|
|
1420
|
-
- 불일치 탐지 → 소수 패턴 플래그
|
|
1421
|
-
- 30+ 공식 스타일 가이드 참조
|
|
1422
|
-
→ rlp-desk: brainstorm 시 프로젝트 분석 → 프로젝트 맞춤 규칙 생성
|
|
1423
|
-
|
|
1424
|
-
---
|
|
1425
|
-
|
|
1426
|
-
## 50. 프레임워크별 Best Practice 레포 (강제 기준 소스)
|
|
1427
|
-
|
|
1428
|
-
### 코딩 표준
|
|
1429
|
-
|
|
1430
|
-
| 레포 | Stars | 언어 | 규칙 수 | 강제 방식 |
|
|
1431
|
-
|------|-------|------|---------|----------|
|
|
1432
|
-
| airbnb/javascript | 143K | JS/TS | 31 섹션 | ESLint config으로 기계 강제 |
|
|
1433
|
-
| goldbergyoni/nodebestpractices | 100K | Node.js | 102개 | 번호+설명+Otherwise |
|
|
1434
|
-
| ryanmcdermott/clean-code-javascript | 91K | JS | 함수 레벨 | INCORRECT/CORRECT 대비 |
|
|
1435
|
-
| faif/python-patterns | 40K | Python | 35+ 패턴 | anti-pattern 포함 (Singleton, God Object) |
|
|
1436
|
-
| golang-standards/project-layout | 50K | Go | 디렉토리 구조 | /src 금지, /internal 강제 |
|
|
1437
|
-
| alibaba/p3c | 30K | Java | 49 PMD 규칙 | IDE 플러그인 자동 검사 |
|
|
1438
|
-
| vercel-labs/agent-skills | — | React/Next.js | 66 규칙 | impact 분류 + 코드 대비 |
|
|
1439
|
-
|
|
1440
|
-
### 테스트 표준
|
|
1441
|
-
|
|
1442
|
-
| 레포 | Stars | 핵심 규칙 |
|
|
1443
|
-
|------|-------|----------|
|
|
1444
|
-
| goldbergyoni/javascript-testing-best-practices | 24K | 50+ 규칙. 3-part naming, AAA, 5 outcomes |
|
|
1445
|
-
| testing-library/react-testing-library | 19K | 행동 테스트, role/label 쿼리, 접근성 우선 |
|
|
1446
|
-
| testcontainers | 9K | 실제 컨테이너로 mock 대체 |
|
|
1447
|
-
|
|
1448
|
-
### 인프라/DevOps 표준
|
|
1449
|
-
|
|
1450
|
-
| 레포/도구 | 강제 방식 |
|
|
1451
|
-
|----------|----------|
|
|
1452
|
-
| OPA (Rego) | K8s admission, Terraform plan 정책 |
|
|
1453
|
-
| Chef InSpec | CIS/PCI/SOC2 프로파일 실행 |
|
|
1454
|
-
| Terratest | Go 테스트로 실제 인프라 검증 |
|
|
1455
|
-
| tflint | Terraform 린트 |
|
|
1456
|
-
|
|
1457
|
-
### UI/UX 표준
|
|
1458
|
-
|
|
1459
|
-
| 레포 | 핵심 |
|
|
1460
|
-
|------|------|
|
|
1461
|
-
| vercel-labs/web-interface-guidelines | 100+ 규칙. `<div onClick>` 금지, `aria-label` 필수, zoom 비활성화 금지 |
|
|
1462
|
-
| a11yproject.com/checklist | WCAG 2.2 AA 체크리스트 |
|
|
1463
|
-
| GOV.UK govuk-frontend | 접근성 AC 템플릿 |
|
|
1464
|
-
|
|
1465
|
-
---
|
|
1466
|
-
|
|
1467
|
-
## 51. Vercel Web Interface Guidelines — 핵심 Anti-Pattern (Worker/Verifier에 적용)
|
|
1468
|
-
|
|
1469
|
-
### 반드시 금지 (Verifier가 탐지)
|
|
1470
|
-
- `user-scalable=no` 또는 `maximum-scale=1` (zoom 비활성화)
|
|
1471
|
-
- `onPaste` + `preventDefault` (붙여넣기 차단)
|
|
1472
|
-
- `transition: all` (속성 명시 필요)
|
|
1473
|
-
- `outline-none` without `focus-visible` 대체
|
|
1474
|
-
- `<div onClick>` 또는 `<span onClick>` (반드시 `<button>`)
|
|
1475
|
-
- 이미지 `width`/`height` 미지정
|
|
1476
|
-
- 50+ 항목 `.map()` without virtualization
|
|
1477
|
-
- 폼 입력 `<label>` 없음
|
|
1478
|
-
- 아이콘 버튼 `aria-label` 없음
|
|
1479
|
-
- 하드코딩 날짜/숫자 포맷 (`Intl.DateTimeFormat`/`Intl.NumberFormat` 사용)
|
|
1480
|
-
|
|
1481
|
-
### 반드시 포함 (Worker가 따름)
|
|
1482
|
-
- `<button>` for actions, `<a>`/`<Link>` for navigation
|
|
1483
|
-
- `autocomplete` + meaningful `name` on inputs
|
|
1484
|
-
- 에러 메시지에 해결 방법 포함
|
|
1485
|
-
- 비동기 업데이트 시 `aria-live="polite"`
|
|
1486
|
-
- 숫자 컬럼 `font-variant-numeric: tabular-nums`
|
|
1487
|
-
|
|
1488
|
-
---
|
|
1489
|
-
|
|
1490
|
-
## 52. rlp-desk 적용: Best Practice 강제 전략
|
|
1491
|
-
|
|
1492
|
-
### brainstorm 단계
|
|
1493
|
-
- 프로젝트 스택 식별 → 해당 best practice 레포 참조
|
|
1494
|
-
- 예: React → vercel-labs/agent-skills 66 규칙, JS → airbnb/javascript
|
|
1495
|
-
- Pattern D: 기존 코드 분석 → 프로젝트 맞춤 규칙
|
|
1496
|
-
|
|
1497
|
-
### PRD 템플릿
|
|
1498
|
-
- AC에 해당 프레임워크 규칙 참조 필드 추가
|
|
1499
|
-
- 예: `standards_ref: airbnb/javascript, vercel-react-best-practices`
|
|
1500
|
-
|
|
1501
|
-
### test-spec 템플릿
|
|
1502
|
-
- "Standards Compliance" 섹션 추가
|
|
1503
|
-
- 해당 프레임워크의 lint config 실행 명령
|
|
1504
|
-
- anti-pattern 탐지 grep/lint 명령
|
|
1505
|
-
- 예: `npx eslint --config airbnb . --max-warnings 0`
|
|
1506
|
-
|
|
1507
|
-
### Worker prompt
|
|
1508
|
-
- Pattern C 테스트 규칙 포함: 3-part naming, AAA, 5 outcomes, 현실적 데이터
|
|
1509
|
-
- 해당 프레임워크 anti-pattern 목록 제공
|
|
1510
|
-
|
|
1511
|
-
### Verifier prompt
|
|
1512
|
-
- Pattern A/B 체크리스트로 준수 여부 판단
|
|
1513
|
-
- anti-pattern 탐지 시 FAIL + 구체적 위반 사항 보고
|
|
1514
|
-
- 함수 길이, 파일 크기, 중첩 깊이 정량 체크
|
|
1515
|
-
|
|
1516
|
-
### 추가 스킬 (skills.sh 참조)
|
|
1517
|
-
|
|
1518
|
-
| 카테고리 | 스킬 | 설치수 |
|
|
1519
|
-
|---------|------|--------|
|
|
1520
|
-
| 아키텍처 | architecture-patterns | 9.4K |
|
|
1521
|
-
| 코딩 표준 | coding-standards | 3.1K |
|
|
1522
|
-
| Playwright E2E | playwright-testing | 435 |
|
|
1523
|
-
| 클린 코드 | clean-code-principles | 332 |
|
|
1524
|
-
| 정적 분석 | static-code-analysis | 209 |
|
|
1525
|
-
| Playwright 초기화 | playwright-e2e-init | 91 |
|
|
1526
|
-
| DevOps | devops-flow | 87 |
|
|
1527
|
-
| 아키텍처 설계 | architecture-design | 57 |
|
|
1528
|
-
| API 패턴 | implementing-api-patterns | 22 |
|
|
1529
|
-
|
|
1530
|
-
---
|
|
1531
|
-
|
|
1532
|
-
## 53. 전체 스킬 카탈로그 (도메인별)
|
|
1533
|
-
|
|
1534
|
-
### 코딩 표준 & 아키텍처
|
|
1535
|
-
| 스킬 | 설치수 | 용도 |
|
|
1536
|
-
|------|--------|------|
|
|
1537
|
-
| architecture-patterns | 9.4K | 아키텍처 패턴 |
|
|
1538
|
-
| write-coding-standards-from-file | 7.6K | 기존 코드에서 표준 생성 |
|
|
1539
|
-
| coding-standards | 3.1K | 코딩 표준 템플릿 |
|
|
1540
|
-
| vercel-react-best-practices | 612 | React/Next.js 66 규칙 |
|
|
1541
|
-
| clean-code-principles | 332 | 클린 코드 원칙 |
|
|
1542
|
-
| coding-standards (davila7) | 288 | 코딩 표준 |
|
|
1543
|
-
| architecture-design | 57 | 아키텍처 설계 |
|
|
1544
|
-
|
|
1545
|
-
### 테스트 & QA
|
|
1546
|
-
| 스킬 | 설치수 | 용도 |
|
|
1547
|
-
|------|--------|------|
|
|
1548
|
-
| tdd-test-writer | 857 | TDD 테스트 작성 |
|
|
1549
|
-
| playwright-testing | 435 | Playwright E2E |
|
|
1550
|
-
| playwright-visual-testing | 336 | 시각 회귀 |
|
|
1551
|
-
| api-contract-testing | 283 | API 계약 테스트 |
|
|
1552
|
-
| static-code-analysis | 209 | 정적 분석 |
|
|
1553
|
-
| aj-geddes/mutation-testing | 135 | mutation testing |
|
|
1554
|
-
| lint-and-validate | 148 | 린트+검증 |
|
|
1555
|
-
| performance-testing | 95 | 성능 테스트 |
|
|
1556
|
-
| playwright-e2e-init | 91 | Playwright 초기화 |
|
|
1557
|
-
| jwilger/mutation-testing | 76 | mutation + GWT 시나리오 |
|
|
1558
|
-
| qa-resilience | 63 | QA 복원력 |
|
|
1559
|
-
| chaos-engineering-resilience | 61 | chaos engineering |
|
|
1560
|
-
| fast-check/testing-expert | 61 | property-based (공식) |
|
|
1561
|
-
| hypothesis-testing | 60 | Python property-based |
|
|
1562
|
-
| load-test-builder | 57 | 부하 테스트 |
|
|
1563
|
-
| agentic-qe/mutation-testing | 51 | 학습 기반 mutation |
|
|
1564
|
-
| trace-check | 47 | 요구사항 추적 |
|
|
1565
|
-
| contract-tester | 49 | 계약 테스트 |
|
|
1566
|
-
| moai-workflow-tdd | 35 | RED-GREEN-REFACTOR |
|
|
1567
|
-
| ralph-orchestrator/tdd | 30 | ralph TDD |
|
|
1568
|
-
| qe-visual-accessibility | 28 | 시각+접근성 |
|
|
1569
|
-
| bmad-test-strategy | 19 | TEA 테스트 전략 |
|
|
1570
|
-
| atdd | 7 | 2-stream ATDD |
|
|
1571
|
-
|
|
1572
|
-
### 보안
|
|
1573
|
-
| 스킬 | 설치수 | 용도 |
|
|
1574
|
-
|------|--------|------|
|
|
1575
|
-
| security-auditor | 336 | 보안 감사 |
|
|
1576
|
-
| senior-secops | 204 | SecOps |
|
|
1577
|
-
| security-architect | 89 | 보안 아키텍처 |
|
|
1578
|
-
| chaos-engineer | 70 | chaos engineering |
|
|
1579
|
-
| security-audit | 29 | 보안 감사 |
|
|
1580
|
-
| repo-sentinel | 22 | 12-표면 보안 |
|
|
1581
|
-
|
|
1582
|
-
### 인증 & DB
|
|
1583
|
-
| 스킬 | 설치수 | 용도 |
|
|
1584
|
-
|------|--------|------|
|
|
1585
|
-
| create-auth-skill | 10.6K | 인증 구현 |
|
|
1586
|
-
| database-design | 172 | DB 설계 |
|
|
1587
|
-
| oauth-implementation | 185 | OAuth |
|
|
1588
|
-
| flyway-migrations | 62 | DB 마이그레이션 |
|
|
1589
|
-
|
|
1590
|
-
### 모바일
|
|
1591
|
-
| 스킬 | 설치수 | 용도 |
|
|
1592
|
-
|------|--------|------|
|
|
1593
|
-
| senior-mobile | 276 | 모바일 종합 |
|
|
1594
|
-
| flutter-development | 271 | Flutter |
|
|
1595
|
-
| swift-expert | 112 | Swift |
|
|
1596
|
-
| mobile-developer | 74 | 모바일 종합 |
|
|
1597
|
-
|
|
1598
|
-
### 데이터 & ML
|
|
1599
|
-
| 스킬 | 설치수 | 용도 |
|
|
1600
|
-
|------|--------|------|
|
|
1601
|
-
| senior-data-engineer | 754 | 데이터 엔지니어링 |
|
|
1602
|
-
| etl-pipeline | 243 | ETL |
|
|
1603
|
-
| data-engineer | 208 | 데이터 엔지니어 |
|
|
1604
|
-
| kafka-engineer | 214 | Kafka |
|
|
1605
|
-
|
|
1606
|
-
### DevOps & 인프라
|
|
1607
|
-
| 스킬 | 설치수 | 용도 |
|
|
1608
|
-
|------|--------|------|
|
|
1609
|
-
| devops-flow | 87 | DevOps 워크플로우 |
|
|
1610
|
-
| ops-devops-platform | 73 | DevOps 플랫폼 |
|
|
1611
|
-
| devops-expert | 66 | DevOps 전문가 |
|
|
1612
|
-
| github-workflow-automation | 66 | GitHub Actions |
|
|
1613
|
-
| monitoring-expert | 50 | 모니터링 |
|
|
1614
|
-
| scaffold | 40 | 프로젝트 스캐폴드 |
|
|
1615
|
-
| monitoring-observability | 32 | 관찰성 |
|
|
1616
|
-
| terraform-iac-expert | 28 | Terraform |
|
|
1617
|
-
|
|
1618
|
-
### 문서화
|
|
1619
|
-
| 스킬 | 설치수 | 용도 |
|
|
1620
|
-
|------|--------|------|
|
|
1621
|
-
| api-changelog-versioning | 136 | API 변경 이력 |
|
|
1622
|
-
| project-docs | 53 | 프로젝트 문서 |
|
|
1623
|
-
| changelog | 47 | 변경 이력 |
|
|
1624
|
-
| documentation-patterns | 21 | 문서화 패턴 |
|
|
1625
|
-
|
|
1626
|
-
### 에러 처리 & 복원력
|
|
1627
|
-
| 스킬 | 설치수 | 용도 |
|
|
1628
|
-
|------|--------|------|
|
|
1629
|
-
| resilience-patterns | 17 | 복원력 패턴 |
|
|
1630
|
-
| message-queues | 21 | 메시지 큐 |
|
|
1631
|
-
| microservices-patterns | 30 | 마이크로서비스 |
|
|
1632
|
-
|
|
1633
|
-
---
|
|
1634
|
-
|
|
1635
|
-
## 54. 통합 정책 체계 — 전체 리서치를 아우르는 규칙
|
|
1636
|
-
|
|
1637
|
-
### Tier 0: 불변 원칙 (모든 프로젝트에 적용)
|
|
1638
|
-
|
|
1639
|
-
```
|
|
1640
|
-
P0-1: 검증 없는 완료는 없다
|
|
1641
|
-
→ 모든 US는 최소 L1(unit) + L3(E2E) 검증 필수
|
|
1642
|
-
→ "code inspection"은 검증이 아니다
|
|
1643
|
-
→ TODO/빈칸이 남은 test-spec → Verifier 무조건 FAIL
|
|
1644
|
-
|
|
1645
|
-
P0-2: AC는 속일 수 없어야 한다
|
|
1646
|
-
→ Given/When/Then 형식 필수
|
|
1647
|
-
→ 정량적 기준 필수 (숫자, 시간, 에러율)
|
|
1648
|
-
→ 부정 테스트(일어나면 안 되는 것) 필수
|
|
1649
|
-
→ 경계값 테스트 필수
|
|
1650
|
-
→ 도메인 언어만 사용 (기술 용어 금지)
|
|
1651
|
-
|
|
1652
|
-
P0-3: 테스트가 실제로 버그를 잡는지 검증한다
|
|
1653
|
-
→ mutation testing gate (score ≥ 60%)
|
|
1654
|
-
→ anti-pattern 체크: Liar, Inspector, Mockery, Tautological
|
|
1655
|
-
→ surviving mutant에 대응 시나리오 없으면 gaming
|
|
1656
|
-
|
|
1657
|
-
P0-4: Worker와 Verifier는 독립적이다
|
|
1658
|
-
→ Verifier는 Worker의 코드를 신뢰하지 않음
|
|
1659
|
-
→ Acceptance test는 Worker가 수정 불가
|
|
1660
|
-
→ 가능하면 다른 모델/엔진 사용 (consensus)
|
|
1661
|
-
|
|
1662
|
-
P0-5: 모든 변경은 추적 가능하다
|
|
1663
|
-
→ 요구사항 → AC → 테스트 → 증거 traceability
|
|
1664
|
-
→ 감사 추적: who/what/when/why/prior-state
|
|
1665
|
-
```
|
|
1666
|
-
|
|
1667
|
-
### Tier 1: 리스크 기반 확장 (프로젝트 리스크에 따라 적용)
|
|
1668
|
-
|
|
1669
|
-
```
|
|
1670
|
-
리스크 분류:
|
|
1671
|
-
LOW = 읽기 전용, 문서, 설정 (→ L1+L3)
|
|
1672
|
-
MEDIUM = 기능 추가, 리팩터 (→ L1+L2+L3)
|
|
1673
|
-
HIGH = 프로덕션 배포, 데이터 변경 (→ L1+L2+L3+L4)
|
|
1674
|
-
CRITICAL = 금융, 보안, 의료 (→ L1+L2+L3+L4+consensus+mutation)
|
|
1675
|
-
|
|
1676
|
-
리스크별 확장:
|
|
1677
|
-
MEDIUM+: 외부 서비스 연결 시 L2 integration 필수
|
|
1678
|
-
HIGH+: deploy verification (L4) + 롤백 테스트 필수
|
|
1679
|
-
CRITICAL+: consensus verification + mutation gate + 보안 체크리스트
|
|
1680
|
-
```
|
|
1681
|
-
|
|
1682
|
-
### Tier 2: 도메인별 규칙 팩 (해당 도메인 시 적용)
|
|
1683
|
-
|
|
1684
|
-
```
|
|
1685
|
-
[코드]
|
|
1686
|
-
→ 프레임워크 best practice 참조 (Vercel 66규칙, Airbnb, goldbergyoni 등)
|
|
1687
|
-
→ 함수 <50줄, 파일 <800줄, 중첩 ≤4
|
|
1688
|
-
→ TDD: RED→GREEN→REFACTOR (단, 일반 "TDD 해" 지시는 금지 — TDAD 논문)
|
|
1689
|
-
→ 테스트 3-part naming, AAA 패턴, 5가지 결과 테스트
|
|
1690
|
-
|
|
1691
|
-
[API]
|
|
1692
|
-
→ CRUD 상태코드 완전 매핑 (200/201/204/400/401/403/404/409/422/500)
|
|
1693
|
-
→ 인증/인가 negative test 필수
|
|
1694
|
-
→ contract test (Pact/Schemathesis)
|
|
1695
|
-
→ rate limit + security headers
|
|
1696
|
-
|
|
1697
|
-
[프론트엔드/UI]
|
|
1698
|
-
→ 반응형 4 breakpoint (320/768/1024/1920)
|
|
1699
|
-
→ 접근성 WCAG 2.2 AA (contrast 4.5:1, label, keyboard)
|
|
1700
|
-
→ visual regression (pixel diff < 5%)
|
|
1701
|
-
→ Vercel anti-pattern 탐지 (<div onClick> 금지 등)
|
|
1702
|
-
|
|
1703
|
-
[데이터 파이프라인]
|
|
1704
|
-
→ 입출력 row count 일치
|
|
1705
|
-
→ NULL 처리 + 스키마 검증
|
|
1706
|
-
→ 멱등성 (재실행 = 동일 결과)
|
|
1707
|
-
→ 알려진 입력의 정량적 출력 검증
|
|
1708
|
-
|
|
1709
|
-
[인프라]
|
|
1710
|
-
→ IaC로만 (수동 변경 금지)
|
|
1711
|
-
→ terraform validate + plan diff + Checkov
|
|
1712
|
-
→ health check + 모니터링 + 알림
|
|
1713
|
-
→ 롤백 절차 테스트 완료
|
|
1714
|
-
|
|
1715
|
-
[배포]
|
|
1716
|
-
→ smoke test (5분 이내)
|
|
1717
|
-
→ canary (메트릭 기반 자동 판단)
|
|
1718
|
-
→ 롤백 <5분 가능
|
|
1719
|
-
→ 이전 버전 아티팩트 보존
|
|
1720
|
-
|
|
1721
|
-
[모바일]
|
|
1722
|
-
→ 최소 OS 버전 지원
|
|
1723
|
-
→ 오프라인 모드 + 동기화
|
|
1724
|
-
→ 권한 요청 시점 + 거부 시 fallback
|
|
1725
|
-
→ 알림 딥링크 정상 동작
|
|
1726
|
-
|
|
1727
|
-
[보안]
|
|
1728
|
-
→ OWASP Top 10 / CWE Top 25 체크
|
|
1729
|
-
→ SAST + SCA (CVSS ≥7.0 = 0건)
|
|
1730
|
-
→ 하드코딩 시크릿 ZERO-TOLERANCE
|
|
1731
|
-
→ 보안 수정 시: PoC 재현 → 수정 → 회귀 테스트
|
|
1732
|
-
|
|
1733
|
-
[데이터/GDPR]
|
|
1734
|
-
→ 7가지 주체 권리 테스트 (접근/정정/삭제/제한/이동/반대/자동결정)
|
|
1735
|
-
→ 테스트 데이터 마스킹/익명화
|
|
1736
|
-
→ 동의 관리 + 철회 동작
|
|
1737
|
-
|
|
1738
|
-
[문서]
|
|
1739
|
-
→ 깨진 링크 0건
|
|
1740
|
-
→ 코드 예제 실행 가능
|
|
1741
|
-
→ API 변경 시 문서 동기화
|
|
1742
|
-
```
|
|
1743
|
-
|
|
1744
|
-
### Tier 3: 검증 품질 메타 규칙 (테스트 자체의 품질)
|
|
1745
|
-
|
|
1746
|
-
```
|
|
1747
|
-
Q1: 테스트는 행동을 검증한다 (구현이 아닌)
|
|
1748
|
-
Q2: 테스트는 독립적이다 (순서 무관, 상태 공유 없음)
|
|
1749
|
-
Q3: 테스트는 결정적이다 (flaky 아님)
|
|
1750
|
-
Q4: 테스트는 빠르다 (단위 <100ms, 통합 <5s, E2E <30s)
|
|
1751
|
-
Q5: 테스트는 읽기 쉽다 (DAMP > DRY, 3-part naming)
|
|
1752
|
-
Q6: 테스트는 현실적 데이터를 사용한다 (foo/bar 금지)
|
|
1753
|
-
Q7: 테스트는 5가지 결과를 검증한다 (응답/상태/외부호출/메시지/관찰성)
|
|
1754
|
-
|
|
1755
|
-
Test Quality Score (0-100):
|
|
1756
|
-
0-49: 비신뢰 → FAIL
|
|
1757
|
-
50-69: 기본 → 경고 후 PASS
|
|
1758
|
-
70-84: 양호 → PASS
|
|
1759
|
-
85-100: 고신뢰 → PASS
|
|
1760
|
-
```
|
|
1761
|
-
|
|
1762
|
-
### 적용 흐름
|
|
1763
|
-
|
|
1764
|
-
```
|
|
1765
|
-
brainstorm
|
|
1766
|
-
│ 프로젝트 스택 식별
|
|
1767
|
-
│ 리스크 분류 (LOW/MEDIUM/HIGH/CRITICAL)
|
|
1768
|
-
│ 해당 도메인 규칙 팩 선택
|
|
1769
|
-
│ Given/When/Then AC 작성 + 정량 기준
|
|
1770
|
-
↓
|
|
1771
|
-
init
|
|
1772
|
-
│ PRD: Tier 0 불변 원칙 + Tier 2 도메인 규칙 참조
|
|
1773
|
-
│ test-spec: L1-L4 + 도메인별 체크리스트 + anti-pattern
|
|
1774
|
-
↓
|
|
1775
|
-
run
|
|
1776
|
-
│ Worker: Tier 2 규칙 따라 구현+테스트
|
|
1777
|
-
│ Verifier: Tier 0 + Tier 1 + Tier 3 검증
|
|
1778
|
-
│ → L1-L4 실행 확인
|
|
1779
|
-
│ → AC 충족 확인 (Given/When/Then)
|
|
1780
|
-
│ → 테스트 품질 점수
|
|
1781
|
-
│ → anti-pattern 탐지
|
|
1782
|
-
│ → mutation score 체크
|
|
1783
|
-
↓
|
|
1784
|
-
verdict
|
|
1785
|
-
│ 모든 Tier 통과 → PASS
|
|
1786
|
-
│ 하나라도 실패 → FAIL + 구체적 위반 사항
|
|
1787
|
-
```
|
|
1788
|
-
|
|
1789
|
-
---
|
|
1790
|
-
|
|
1791
|
-
## 55. 성공 서비스 4가지 조건 → 검증 개선안
|
|
1792
|
-
|
|
1793
|
-
### 배경
|
|
1794
|
-
성공 서비스 공통 조건: 명확한 범위 설정, 풍부한 테스트 케이스, 독립적인 작업 환경, 고정된 의존성 관리.
|
|
1795
|
-
한계: 테스트 부족하거나 문제 정의가 모호한 소프트웨어에는 적용 어렵다.
|
|
1796
|
-
→ rlp-desk가 이 한계를 극복하는 도구가 되어야 한다.
|
|
1797
|
-
|
|
1798
|
-
### 개선 1: Ambiguity Gate (범위 명확성 게이트)
|
|
1799
|
-
- AC Quality Score 0-12 (6차원 × 0-2점): 단일 행동, 도메인 언어, 이해관계자, 이식성, 구체적 예시, 독립성
|
|
1800
|
-
- 0-5: REJECT (init 차단), 6-9: WARN, 10-12: PASS
|
|
1801
|
-
- "잘 동작", "빠르게", "안전하게" 등 모호 형용사 탐지 → 정량 기준 요구
|
|
1802
|
-
- boundary case 미정의 → "경계값은?" 질문
|
|
1803
|
-
- 적용: brainstorm + init 전 게이트
|
|
1804
|
-
|
|
1805
|
-
### 개선 2: Test Sufficiency Gate (테스트 충분성 게이트)
|
|
1806
|
-
- 공식: test_count ≥ AC_count × 3 (happy + negative + boundary 최소)
|
|
1807
|
-
- Per-AC 최소 3개: happy path 1 + negative 1 + boundary 1
|
|
1808
|
-
- happy만 있고 negative 없음 → FAIL
|
|
1809
|
-
- EP 커버리지 + BVA 커버리지 + Decision Table 완성도 체크
|
|
1810
|
-
- 적용: Verifier verdict 전 체크
|
|
1811
|
-
|
|
1812
|
-
### 개선 3: Scope Lock Enforcement (작업 환경 격리)
|
|
1813
|
-
- git diff --name-only로 Worker 수정 파일 vs US 범위 대조
|
|
1814
|
-
- 범위 밖 파일 수정 + 정당 사유 없음 → FAIL
|
|
1815
|
-
- 의존성 파일(package.json 등) 변경 시 AC에 명시 여부 확인
|
|
1816
|
-
- 적용: Verifier scope 검증
|
|
1817
|
-
|
|
1818
|
-
### 개선 4: Reproducibility Gate (의존성 고정 & 재현성)
|
|
1819
|
-
- lock 파일 존재 + 커밋 포함
|
|
1820
|
-
- 새 의존성 exact 버전 고정 (^/~ 아닌)
|
|
1821
|
-
- clean install 후 빌드 성공
|
|
1822
|
-
- 보안 취약점 스캔 통과
|
|
1823
|
-
- 테스트에 외부 네트워크 의존 없음
|
|
1824
|
-
- 적용: test-spec Reproducibility 섹션
|
|
1825
|
-
|
|
1826
|
-
### 한계 극복: 모호한 프로젝트에도 적용
|
|
1827
|
-
```
|
|
1828
|
-
[모호한 요청] → [Ambiguity Gate] → [Given/When/Then 생성] → [Sufficiency Gate] → [구현+검증]
|
|
1829
|
-
```
|
|
1830
|
-
Ambiguity Gate가 모호한 입력을 명확한 AC로 변환하는 과정을 강제.
|
|
1831
|
-
Test Sufficiency Gate가 테스트 부족을 허용하지 않음.
|
|
1832
|
-
|
|
1833
|
-
### 기존 정책 체계에 통합
|
|
1834
|
-
|
|
1835
|
-
| 기존 | 개선안 | 통합 위치 |
|
|
1836
|
-
|------|--------|----------|
|
|
1837
|
-
| Tier 0 P0-2 (AC 속임 방지) | + Ambiguity Gate (점수 기반 차단) | brainstorm→init 게이트 |
|
|
1838
|
-
| Tier 0 P0-3 (mutation gate) | + Test Sufficiency Gate (AC×3 최소) | Verifier 체크 |
|
|
1839
|
-
| Tier 0 P0-4 (독립 검증) | + Scope Lock Enforcement (git diff) | Verifier scope 검증 |
|
|
1840
|
-
| Tier 2 도메인 규칙 | + Reproducibility Gate (lock+clean install) | test-spec 섹션 |
|
|
1841
|
-
|
|
1842
|
-
---
|
|
1843
|
-
|
|
1844
|
-
## 56. Superpowers 스킬 분석 — rlp-desk 흡수
|
|
1845
|
-
|
|
1846
|
-
### Iron Law 패턴
|
|
1847
|
-
|
|
1848
|
-
모든 superpowers 스킬이 **절대 위반 불가 1줄 규칙**을 가짐:
|
|
1849
|
-
|
|
1850
|
-
| 스킬 | Iron Law |
|
|
1851
|
-
|------|---------|
|
|
1852
|
-
| TDD | `NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST` |
|
|
1853
|
-
| Verification | `NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE` |
|
|
1854
|
-
| Debugging | `NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST` |
|
|
1855
|
-
|
|
1856
|
-
→ rlp-desk 각 게이트에 Iron Law 적용:
|
|
1857
|
-
- Ambiguity Gate: `NO INIT WITHOUT AC QUALITY SCORE ≥ 6`
|
|
1858
|
-
- Sufficiency Gate: `NO PASS WITHOUT TEST ≥ AC × 3`
|
|
1859
|
-
- Layer Gate: `NO PASS WITH TODO IN ANY REQUIRED L-SECTION`
|
|
1860
|
-
- Verification Gate: `NO COMPLETION CLAIMS WITHOUT FRESH EVIDENCE`
|
|
1861
|
-
|
|
1862
|
-
### Verification Before Completion — 5-Step Evidence Gate
|
|
1863
|
-
|
|
1864
|
-
```
|
|
1865
|
-
1. IDENTIFY: 이 주장을 증명하는 명령어는?
|
|
1866
|
-
2. RUN: 명령어 실행 (fresh, complete)
|
|
1867
|
-
3. READ: 전체 출력, exit code, 실패 수
|
|
1868
|
-
4. VERIFY: 출력이 주장을 확인하는가?
|
|
1869
|
-
5. ONLY THEN: 주장
|
|
1870
|
-
```
|
|
1871
|
-
|
|
1872
|
-
금지 패턴 (Verifier가 탐지해야 함):
|
|
1873
|
-
- "should pass", "probably works", "seems to" → 증거 없는 주장
|
|
1874
|
-
- agent "success" 보고 신뢰 → 독립 검증 필수
|
|
1875
|
-
- 부분 검증 → 전체 증명 아님
|
|
1876
|
-
- "피곤해서" / "간단해서" → 면책 아님
|
|
1877
|
-
|
|
1878
|
-
실패 교훈 (superpowers 24건):
|
|
1879
|
-
- 사용자가 "I don't believe you" — 신뢰 파괴
|
|
1880
|
-
- 미정의 함수 배포 — 런타임 크래시
|
|
1881
|
-
- 요구사항 누락 배포 — 불완전 기능
|
|
1882
|
-
|
|
1883
|
-
→ Verifier 핵심 철학: **Worker가 "done"이라고 해도 직접 실행해서 증거 수집**
|
|
1884
|
-
|
|
1885
|
-
### TDD Iron Law — 합리화 방지 12개 패턴
|
|
1886
|
-
|
|
1887
|
-
| 합리화 | 반박 |
|
|
1888
|
-
|--------|------|
|
|
1889
|
-
| "테스트 안 해도 될 만큼 간단" | 간단한 코드도 깨짐. 테스트 30초 |
|
|
1890
|
-
| "나중에 테스트 추가" | 즉시 통과하는 테스트는 아무것도 증명 안 함 |
|
|
1891
|
-
| "이미 수동 테스트함" | 체계적 ≠ 임시. 기록 없고 재실행 불가 |
|
|
1892
|
-
| "X시간 작업 삭제는 낭비" | 매몰 비용 오류. 검증 안 된 코드가 진짜 낭비 |
|
|
1893
|
-
| "참고로 보관하고 테스트부터" | 보관하면 적응하게 됨. 삭제 = 삭제 |
|
|
1894
|
-
| "탐색 먼저 필요" | 탐색 OK. 버리고 TDD로 새로 시작 |
|
|
1895
|
-
| "테스트 어려움 = 설계 불명확" | 테스트에 귀 기울여라. 테스트 어려움 = 사용 어려움 |
|
|
1896
|
-
| "TDD가 느려" | TDD > 디버깅. 실용적 = 테스트 먼저 |
|
|
1897
|
-
| "기존 코드에 테스트 없음" | 개선하는 중. 기존 코드에 테스트 추가 |
|
|
1898
|
-
| "이번만 예외" | 예외 없음 |
|
|
1899
|
-
| "교조적이야, 실용적으로" | TDD가 실용적임 |
|
|
1900
|
-
| "정신이지 의식이 아니야" | tests-after는 "이게 뭘 하지?", tests-first는 "이게 뭘 해야 하지?" |
|
|
1901
|
-
|
|
1902
|
-
→ Worker prompt에 합리화 방지 목록 포함
|
|
1903
|
-
|
|
1904
|
-
### Writing Plans — Bite-Sized 5-Step Task
|
|
1905
|
-
|
|
1906
|
-
```
|
|
1907
|
-
Step 1: 실패 테스트 작성 (코드)
|
|
1908
|
-
Step 2: 실행 → 실패 확인 (명령어 + 예상 출력)
|
|
1909
|
-
Step 3: 최소 구현 (코드)
|
|
1910
|
-
Step 4: 실행 → 통과 확인 (명령어 + 예상 출력)
|
|
1911
|
-
Step 5: 커밋
|
|
1912
|
-
```
|
|
1913
|
-
|
|
1914
|
-
각 Step = 2-5분. 정확한 파일 경로, 완전한 코드, 정확한 명령어 포함.
|
|
1915
|
-
"validation 추가" 같은 모호한 지시 금지 → 구체적 코드 제공.
|
|
1916
|
-
|
|
1917
|
-
→ rlp-desk PRD의 US를 이 구조로 분해하면 Worker가 따르기 쉬움
|
|
1918
|
-
|
|
1919
|
-
### Brainstorming — Hard Gate + Scope Decomposition
|
|
1920
|
-
|
|
1921
|
-
```
|
|
1922
|
-
<HARD-GATE>
|
|
1923
|
-
디자인 승인 전에 어떤 구현도, 코드도, 스캐폴드도 금지
|
|
1924
|
-
</HARD-GATE>
|
|
1925
|
-
```
|
|
1926
|
-
|
|
1927
|
-
- "간단해 보인다" → 그래도 디자인 필수 (anti-pattern으로 명시)
|
|
1928
|
-
- 여러 독립 서브시스템 → 세부 질문 전에 즉시 분해 제안
|
|
1929
|
-
- 질문은 한 번에 하나 → 여러 질문 금지
|
|
1930
|
-
|
|
1931
|
-
→ rlp-desk brainstorm Hard Gate: AC 승인 없이 init 금지
|
|
1932
|
-
|
|
1933
|
-
### Systematic Debugging — 4-Phase + 3회 실패 에스컬레이션
|
|
1934
|
-
|
|
1935
|
-
```
|
|
1936
|
-
Phase 1: Root Cause Investigation (증거)
|
|
1937
|
-
Phase 2: Pattern Analysis (작동 사례와 비교)
|
|
1938
|
-
Phase 3: Hypothesis + Minimal Test (1변수)
|
|
1939
|
-
Phase 4: Implementation (테스트→수정→검증)
|
|
1940
|
-
|
|
1941
|
-
3회 수정 실패 → 아키텍처 문제 → 사용자와 논의
|
|
1942
|
-
```
|
|
1943
|
-
|
|
1944
|
-
실전 데이터: 체계적 접근 15-30분, 랜덤 수정 2-3시간
|
|
1945
|
-
첫 번째 수정 성공률: 95% vs 40%
|
|
1946
|
-
|
|
1947
|
-
→ rlp-desk Fix Loop 강화: 3회 consecutive failure → 단순 수정 아닌 아키텍처 재검토
|
|
1948
|
-
|
|
1949
|
-
### Code Review — 독립 컨텍스트 리뷰
|
|
1950
|
-
|
|
1951
|
-
리뷰어에게 세션 히스토리가 아닌 **정제된 컨텍스트만** 전달:
|
|
1952
|
-
- 뭘 구현했는가 (WHAT)
|
|
1953
|
-
- 요구사항은 무엇인가 (PLAN)
|
|
1954
|
-
- git diff (BASE_SHA → HEAD_SHA)
|
|
1955
|
-
|
|
1956
|
-
→ rlp-desk Verifier도 동일: Worker의 추론 과정이 아닌 **결과물만** 보고 검증
|
|
1957
|
-
|
|
1958
|
-
### 통합: Superpowers 파이프라인 vs rlp-desk 파이프라인
|
|
1959
|
-
|
|
1960
|
-
```
|
|
1961
|
-
Superpowers: rlp-desk 대응:
|
|
1962
|
-
brainstorming (Hard Gate) → brainstorm (Ambiguity Gate)
|
|
1963
|
-
writing-plans (Bite-Sized) → init PRD (US + AC)
|
|
1964
|
-
executing-plans (TDD) → run Worker (TDD + L1-L4)
|
|
1965
|
-
verification-before-completion → run Verifier (Evidence Gate)
|
|
1966
|
-
requesting-code-review → consensus verification
|
|
1967
|
-
systematic-debugging → fix loop (3회 에스컬레이션)
|
|
1968
|
-
finishing-branch → COMPLETE sentinel
|
|
1969
|
-
```
|
|
1970
|
-
|
|
1971
|
-
핵심 차이: superpowers는 **현재 세션 내 단일 워크플로우**, rlp-desk는 **fresh context 반복 루프**. 하지만 Iron Law, Evidence Gate, 합리화 방지는 동일하게 적용 가능.
|
|
1972
|
-
|
|
1973
|
-
---
|
|
1974
|
-
|
|
1975
|
-
## 57. TVER Wave 1 크롤링 결과 반영 (258개 소스)
|
|
1976
|
-
|
|
1977
|
-
### 출처
|
|
1978
|
-
- 논문 14편 (P0: 8, P1: 2, P2: 4)
|
|
1979
|
-
- 공식 문서 13건 (Claude Code, Cursor, Copilot, Devin, Playwright, Stryker, ISTQB, OWASP 등)
|
|
1980
|
-
- 엔지니어링 블로그 15건 (CodeRabbit, SonarSource, Kent Beck, Meta, Sentry, Trail of Bits 등)
|
|
1981
|
-
- GitHub 레포 15건 (Spec Kit 81K stars, Stryker, mutmut, Qodo Cover 등)
|
|
1982
|
-
- Medium 201개 유효 기사
|
|
1983
|
-
|
|
1984
|
-
### Cross-Lane Convergence (3+ lane에서 공통 확인)
|
|
1985
|
-
|
|
1986
|
-
| 주제 | 강도 |
|
|
1987
|
-
|------|------|
|
|
1988
|
-
| TDD-first가 AI 코드 품질을 높인다 | 매우 강 (TDAD, TDFlow, Claude/Cursor/Devin 공식, Kent Beck) |
|
|
1989
|
-
| Mutation score > Coverage | 매우 강 (MuTAP, MutGen, Meta ACH, Sentry, Trail of Bits, Stryker/mutmut) |
|
|
1990
|
-
| AI 코드는 구조적으로 더 많은 결함 포함 | 강 (CodeRabbit 1.7x, SonarSource 8x 중복, Qodo 76% red zone) |
|
|
1991
|
-
| Multi-agent 분리가 단일 agent보다 우수 | 중 (TDFlow 4 sub-agents, Cursor find issues, Osmani dual-model) |
|
|
1992
|
-
|
|
1993
|
-
### 기존 전략 수정 3가지
|
|
1994
|
-
|
|
1995
|
-
**수정 1: "어떻게 TDD를 해라" → "어떤 테스트를 확인해라"**
|
|
1996
|
-
|
|
1997
|
-
TDAD 논문 (arxiv 2603.17973):
|
|
1998
|
-
- 일반적 "TDD를 따르세요" 지시 → regression 악화 (6.08%→9.94%)
|
|
1999
|
-
- code-test dependency graph로 영향 테스트 명시 → regression 70% 감소 (1.82%)
|
|
2000
|
-
|
|
2001
|
-
→ Worker prompt 수정: 절차적 TDD 지시 대신 "이 변경이 영향주는 테스트 목록" 제공
|
|
2002
|
-
→ test-spec에 `impacted tests` 필드 추가
|
|
2003
|
-
|
|
2004
|
-
**수정 2: test-spec 5개 필수 필드 추가**
|
|
2005
|
-
|
|
2006
|
-
```
|
|
2007
|
-
target behavior: 이 변경이 어떤 행동을 바꾸는가
|
|
2008
|
-
impacted tests: 영향받는 기존 테스트 목록
|
|
2009
|
-
required new tests: 반드시 추가해야 할 새 테스트
|
|
2010
|
-
forbidden shortcuts: 금지된 우회 (mock 남용, assertion 삭제 등)
|
|
2011
|
-
pass/fail evidence: 통과/실패 증거 형식
|
|
2012
|
-
```
|
|
2013
|
-
|
|
2014
|
-
근거: TDAD "어떤 테스트를 확인할지 > 어떻게 TDD를 할지"
|
|
2015
|
-
|
|
2016
|
-
**수정 3: Verification checkpoint 3단계 분리**
|
|
2017
|
-
|
|
2018
|
-
기존: 큰 verify 1회 (per-US 또는 batch)
|
|
2019
|
-
개선:
|
|
2020
|
-
```
|
|
2021
|
-
Checkpoint 1: Story/Unit — 각 US 완료 시 (AC 검증)
|
|
2022
|
-
Checkpoint 2: Integration — 외부 서비스 연결 검증 (L2)
|
|
2023
|
-
Checkpoint 3: Release/Readiness — 배포 전 최종 (L3+L4)
|
|
2024
|
-
```
|
|
2025
|
-
각 checkpoint: evidence required + reviewer lane + retry condition
|
|
2026
|
-
|
|
2027
|
-
근거: Claude Code/Cursor/Devin 공식 문서 모두 "중간 checkpoint"를 강조
|
|
2028
|
-
|
|
2029
|
-
### 신규 추가 사항
|
|
2030
|
-
|
|
2031
|
-
**AI 코드 정량적 결함율 기준 (CodeRabbit 2025.12)**
|
|
2032
|
-
- AI 코드 PR당 평균 10.83 이슈 vs 인간 6.45 (1.7x)
|
|
2033
|
-
- 로직/정확성 오류 75% 증가
|
|
2034
|
-
- 보안 취약점 2.74x
|
|
2035
|
-
- 가독성 문제 3x+
|
|
2036
|
-
→ Verifier 체크리스트에 로직 정확성, 보안, 가독성 3축 검증 추가
|
|
2037
|
-
|
|
2038
|
-
**코드 중복 임계값 (SonarSource/GitClear)**
|
|
2039
|
-
- 2020-2024 5줄+ 중복 블록 8배 증가
|
|
2040
|
-
- 2024: 역사상 처음 중복 라인 > 리팩토링 라인
|
|
2041
|
-
→ test-spec quality gate에 코드 중복 임계값 추가
|
|
2042
|
-
|
|
2043
|
-
**Mock 비율 상한선 (Medium "Mocking Everything Made Our Tests Useless")**
|
|
2044
|
-
- 호텔 이중 예약 버그: mock 기반 테스트 통과, 프로덕션 장애
|
|
2045
|
-
- mock 에러: 1주차 12건 → 12주차 203건
|
|
2046
|
-
- "mock이 mock과 대화하며 환상이 환상과 일치하는지 검증"
|
|
2047
|
-
→ test-spec에 mock 비율 상한 + integration test 최소 비율
|
|
2048
|
-
|
|
2049
|
-
**GitHub Spec Kit (81K stars)**
|
|
2050
|
-
- GitHub 공식 오픈소스, spec-driven development
|
|
2051
|
-
- "intent가 source of truth"
|
|
2052
|
-
- strict TDD 강제, Copilot/Claude Code/Gemini CLI 호환
|
|
2053
|
-
→ rlp-desk의 전체 verification 파이프라인 참고 아키텍처
|
|
2054
|
-
|
|
2055
|
-
**Playwright AI Agents (v1.56)**
|
|
2056
|
-
- Planner: 앱 탐색 → Markdown 테스트 계획
|
|
2057
|
-
- Generator: 계획 → 실행 가능한 테스트 파일
|
|
2058
|
-
- Healer: 실패한 테스트 자동 수리
|
|
2059
|
-
- `npx playwright init-agents --loop=claude`
|
|
2060
|
-
→ E2E 검증 자동화 참고
|
|
2061
|
-
|
|
2062
|
-
**4대 AI Coding Tool 공식 TDD 권장**
|
|
2063
|
-
- Claude Code: "Include tests — single highest-leverage thing"
|
|
2064
|
-
- Cursor: "Agents perform best with clear target to iterate against"
|
|
2065
|
-
- Copilot: "Always validate the code it suggests"
|
|
2066
|
-
- Devin: "Clearly articulate your testing process"
|
|
2067
|
-
→ rlp-desk의 test-first spec 접근법이 업계 공식 best practice와 정렬
|
|
2068
|
-
|
|
2069
|
-
### Gaps (다음 wave에서 보강)
|
|
2070
|
-
1. ATDD/BDD with AI — 학술 연구 전무
|
|
2071
|
-
2. Visual regression — 도구 있으나 실전 경험 보고서 부재
|
|
2072
|
-
3. Integration/E2E AI verification — 대부분 unit test 수준
|
|
2073
|
-
4. Infrastructure testing (IaC) — 별도 조사 필요
|
|
2074
|
-
5. DORA metrics ↔ testing quality 인과관계 — 실증 연구 부재
|
|
2075
|
-
|
|
2076
|
-
---
|
|
2077
|
-
|
|
2078
|
-
## 58. 최종 구현 우선순위 (TVER Wave 1 반영)
|
|
2079
|
-
|
|
2080
|
-
| 순위 | 항목 | 근거 | 변경 |
|
|
2081
|
-
|------|------|------|------|
|
|
2082
|
-
| **P0** | test-spec 5개 필수 필드 (target behavior, impacted tests, required new tests, forbidden shortcuts, pass/fail evidence) | TDAD — "어떤 테스트 > 어떻게 TDD" | **신규** |
|
|
2083
|
-
| **P0** | Mutation score quality gate (coverage보다 상위) | MuTAP, MutGen, Meta ACH, Sentry, Trail of Bits | 기존→강화 |
|
|
2084
|
-
| **P0** | L1-L4 필수 섹션 + Verifier Layer Enforcement | trading 실전 장애 + 크롤링 확인 | 유지 |
|
|
2085
|
-
| **P0** | Iron Laws + Evidence Gate | superpowers + 크롤링 확인 | 유지 |
|
|
2086
|
-
| **P0** | Verification checkpoint 3단계 분리 | Claude/Cursor/Devin 공식 + TDFlow | **신규** |
|
|
2087
|
-
| **P1** | Ambiguity Gate + Test Sufficiency Gate | 성공 서비스 4조건 | 유지 |
|
|
2088
|
-
| **P1** | Worker: "영향 테스트 컨텍스트" 제공 (TDD 절차 대신) | TDAD regression 70% 감소 | **수정** |
|
|
2089
|
-
| **P1** | AI 코드 결함율 체크 (로직/보안/가독성 3축) | CodeRabbit 1.7x | **신규** |
|
|
2090
|
-
| **P1** | Mock 비율 상한 + integration test 최소 비율 | 호텔 이중 예약 사례 | **신규** |
|
|
2091
|
-
| **P1** | 코드 중복 임계값 | SonarSource 8x 증가 | **신규** |
|
|
2092
|
-
| **P2** | Scope Lock + Reproducibility Gate | 성공 서비스 4조건 | 유지 |
|
|
2093
|
-
| **P2** | Anti-pattern checklist (23종) | 기존 | 유지 |
|
|
2094
|
-
| **P2** | Domain rule packs (10개) | 기존 | 유지 |
|
|
2095
|
-
| **P3** | Playwright AI agents E2E | 크롤링 발견 | **신규** |
|
|
2096
|
-
| **P3** | Mutahunter (LLM mutation) | 크롤링 발견 | **신규** |
|
|
2097
|
-
| **P3** | Spec Kit 패턴 참조 | 81K stars | **신규** |
|