DMF_Crawler/docs/research/11-tdd-red-and-design-audit-theory.md
Yun Chan 56a6e2da93 chore: 저장소 구조 정리 및 문서화, 첫 커밋
- src/dist 산출물 분리 원칙 정리(.gitignore, .gitattributes)
- 루트 및 주요 폴더(config/scripts/prompts/tests/src, 런타임 폴더 5종)에
  안내용 README.md 추가
- CHANGELOG.md, LICENSE, docs/ops/05-release-and-versioning.md 추가
- docs/README.md 문서 지도 갱신
2026-09-04 09:25:44 +09:00

334 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TDD · E2E RED · 디자인 감사 이론 조사 정본
> 이 문서는 DMF Crawler 의 **TDD/RED/디자인 감사 이론 SSOT** 다.
> 프로젝트 적용 규칙은 `docs/design/07-tdd-red-system.md` 가 정본이고, 이 문서는 그 근거 아카이브다.
**작성/검색 기준**: 2026-09-03 KST
**근거 채택 기준**: (A) 2026년 9월 기준 최근 6개월 내 자료, 또는 (B) Kent Beck·W3C·NN/g·Playwright·Testing Library·Google Testing Blog·GDS 같은 권위 자료, 또는 (C) 유명 책·논문·체계적 문헌고찰·arXiv/IEEE/ACM/ScienceDirect 계열 연구
**원문 아카이브**: `docs/research/_raw/tdd-red/`
---
## 0. 결론 12개
1. **TDD 의 핵심은 테스트가 아니라 설계 루프다.** Kent Beck 의 두 규칙은 “자동화 테스트가 실패할 때만 새 코드를 쓴다”와 “중복을 제거한다”다. Red-Green-Refactor 는 이 두 규칙을 실행하는 리듬이다.
2. **RED 는 반드시 실제로 실패해야 한다.** 즉시 통과하는 테스트는 새 행동을 규정하지 못했거나, 기존 테스트의 중복이거나, 주장이 약하다. 그런 테스트는 RED 로 인정하지 않는다.
3. **Green 은 최소 구현이다.** 미래 추상화·범용화·과잉 구조는 Refactor 단계 전까지 금지한다.
4. **Refactor 는 Green 상태에서만 한다.** 실패 중인 테스트를 둔 채 구조 변경을 하면 실패 원인이 행동 변경인지 리팩터링 사고인지 분리할 수 없다.
5. **테스트는 구현 세부가 아니라 관찰 가능한 행동을 검증해야 한다.** Testing Library 의 “The more your tests resemble the way your software is used, the more confidence they can give you.” 원칙과 Playwright 의 사용자 관찰 출력 중심 원칙이 같은 결론을 낸다.
6. **E2E 는 TDD 의 전부가 아니다.** 빠른 단위/통합 테스트가 대부분을 맡고, E2E 는 핵심 사용자 여정·회귀 위험·시각/접근성 감사에 집중한다. 느린 E2E 를 무한 증식시키면 TDD 가 아니라 병목이 된다.
7. **AI 에이전트에게 “TDD 해”라고만 말하면 충분하지 않다.** 2026 TDAD 논문은 단순 TDD prompting 이 회귀를 늘릴 수 있고, 코드-테스트 영향 분석을 함께 줬을 때 회귀를 크게 줄였다고 보고한다. 에이전트는 “어떤 테스트가 무엇을 보호하는지” 알아야 한다.
8. **AI 가 만든 테스트는 자동으로 가치 있지 않다.** 2026 “Rethinking the Value of Agent-Generated Tests” 계열 연구는 에이전트 작성 테스트가 종종 관찰/디버깅 피드백에 머물고, 강한 검증으로 작동하지 않을 수 있음을 경고한다.
9. **테스트 스위트는 확장만 하지 않는다.** 의미 없는 RED, 같은 결함을 여러 번 검사하는 중복 RED, 구현에 묶인 brittle RED 는 통폐합·삭제한다. 단, 삭제는 대체 근거와 사용자 위험 분석이 있어야 한다.
10. **디자인 감사도 RED 로 만든다.** “예쁘다/별로다” 같은 감상이 아니라, 대비·정렬·레이아웃 overflow·폼 라벨·키보드 포커스·입력 시나리오·버튼 클릭·엑셀 시트 구조·컨테이너 경계 같은 실패 조건을 자동화 가능한 주장으로 바꾼다.
11. **자동 접근성 검사는 필요하지만 충분하지 않다.** WCAG/W3C/axe 는 contrast·label·ARIA 오류를 잘 잡지만, 레이블 의미·초점 순서·문구 이해성·시각적 균형·사용자 흐름은 수동/시나리오 테스트와 결합해야 한다.
12. **이 프로젝트의 디자인 감사 대상은 웹만이 아니다.** DMF Crawler 는 `tkinter` GUI 와 `xlsx` 리포트가 핵심 UI 이므로, Playwright/axe 원칙을 그대로 베끼지 말고 `tkinter` 위젯 트리 검사와 xlsx zip/XML 검사로 변환해야 한다.
---
## 1. 원문 아카이브 인덱스
| 파일 | 출처 | 채택 사유 | 검증 상태 |
|---|---|---|---|
| `google-testing-blog-way-of-tdd-2026.raw.html` | Google Testing Blog, “The Way of TDD”, 2026-03 | 최근 6개월 경계 내 최신 실무 권위 블로그 | 원문 저장 성공 |
| `gds-way-test-driven-development.raw.html` | UK Government Digital Service, TDD standard | 정부 디지털 서비스 표준, Red-Green-Refactor 설명 | 원문 저장 성공 |
| `informit-kent-beck-tdd-by-example.raw.html` | Kent Beck, *Test Driven Development: By Example* 출판사 페이지 | TDD 고전/권위 책 | 원문 저장 성공 |
| `testing-library-guiding-principles.raw.html` | Testing Library Guiding Principles | 사용자 행동과 닮은 테스트 원칙의 대표 출처 | 원문 저장 성공 |
| `playwright-best-practices.raw.html` | Playwright Best Practices | E2E 테스트 공식 권위 문서 | 원문 저장 성공 |
| `wcag22.raw.html` | W3C WCAG 2.2 Recommendation | 접근성 공식 표준 | 원문 저장 성공 |
| `vercel-web-interface-guidelines-command.raw.md` | Vercel Web Interface Guidelines | AI agent UI 코드 감사 체크리스트 | 원문 저장 성공 |
| `nng-good-visual-design.raw.html` | NN/g, Good Visual Design, Explained | 시각 디자인 권위 자료 | 원문 저장 성공 |
| `nng-web-form-design.raw.html` | NN/g, Website Forms Usability | 폼 UX 권위 자료 | 원문 저장 성공 |
| `nng-form-placeholders.raw.html` | NN/g, Placeholders in Form Fields Are Harmful | placeholder-only label 금지 근거 | 원문 저장 성공 |
| `nng-form-white-space.raw.html` | NN/g, Group Form Elements Effectively Using White Space | 라벨/입력 proximity·white space 근거 | 원문 저장 성공 |
| `arxiv-2312-04687-llm4tdd.raw.html` | LLM4TDD | LLM + TDD 초기 연구 | 원문 저장 성공 |
| `arxiv-2505-09027-tests-as-prompt.raw.html` | Tests as Prompt / WebApp1K | 테스트를 prompt/spec 으로 쓰는 최신 연구 | 원문 저장 성공 |
| `arxiv-2506-09289-utboost.raw.html` | UTBoost | 기존 테스트 부족·에이전트 패치 오판 경고 | 원문 저장 성공 |
| `arxiv-2602-07900-agent-generated-tests.raw.html` | Rethinking Agent-Generated Tests | 에이전트 생성 테스트의 한계 경고 | 원문 저장 성공 |
| `arxiv-2603-08806-test-driven-ai-agent-definition.raw.html` | Test-Driven AI Agent Definition | prompt/agent behavior 자체를 TDD 로 검증 | 원문 저장 성공 |
| `arxiv-2603-17973-tdad.raw.html` | TDAD: Test-Driven Agentic Development | AI coding agent 회귀 감소·impact analysis 근거 | 원문 저장 성공 |
| `ieee-what-do-we-know-tdd.raw.html` | IEEE Xplore, “What Do We Know about TDD?” | 체계적 문헌고찰로 검색 확인 | 원문 0 bytes — 원문 인용 금지, DOI/검색 근거만 사용 |
> 원문 저장 성공은 “페이지가 로컬에 저장됐다”는 뜻이지, 모든 주장을 자동 승인한다는 뜻이 아니다. 프로젝트 규칙으로 승격하려면 `docs/design/07-tdd-red-system.md` 의 사용자 위험/검증 가능성 필터를 통과해야 한다.
---
## 2. TDD 정통 이론
### 2.1 Kent Beck: 두 규칙과 Red-Green-Refactor
Kent Beck 의 *Test Driven Development: By Example* 는 이 프로젝트에서 TDD 의 최고 권위 근거로 취급한다. 출판사/요약 기준으로 핵심은 다음이다.
- 새 코드는 **자동화 테스트가 실패할 때만** 작성한다.
- 중복을 제거한다.
- Red: 아주 작은 실패 테스트를 작성한다.
- Green: 빨리 통과시킨다. 일시적으로 못생긴 코드도 허용된다.
- Refactor: 테스트가 계속 통과하는 상태에서 중복·이름·구조를 정리한다.
DMF Crawler 에서의 해석:
| 원칙 | 이 프로젝트 적용 |
|---|---|
| failing automated test first | `src/` 변경 전 `tests/` 에 실패하는 주장 추가. 문서만 바꾸는 경우도 문서 링크/정책 테스트 또는 체크리스트를 추가한다. |
| do the simplest thing | API/DB/리포트가 통과할 최소 구현 우선. 미래 웹 UI·브라우저 수집 추상화는 테스트 없이 만들지 않는다. |
| eliminate duplication | 테스트 중복도 제거 대상. 같은 실패를 여러 파일에서 반복하면 하나의 강한 시나리오로 합친다. |
| refactor only when green | `compileall`, import, 관련 pytest 가 실패하는 동안 구조 변경 금지. 먼저 RED 를 Green 으로 만든다. |
### 2.2 GDS/Google: TDD 는 설계 품질과 피드백 루프
GDS Way 의 TDD 표준은 Red-Green-Refactor 를 “작은 실패 테스트 → 전체 테스트 통과 → 설계 반복” 루프로 설명한다. Google Testing Blog 의 2026 글도 TDD 를 품질·재사용·자신감의 도구로 설명하되, 은탄환은 아니라고 본다.
프로젝트 적용:
- TDD 는 “테스트 파일을 많이 만든다”가 아니라 “작은 행동 단위로 설계를 밀어낸다”다.
- 실패가 너무 크면 원인을 알 수 없다. RED 는 한 번에 하나의 행동/위험만 드러내야 한다.
- 리포트/GUI 디자인처럼 주관이 섞이는 영역도 **측정 가능한 실패 조건**으로 쪼갠다.
### 2.3 체계적 문헌고찰: 품질 이점은 있으나 생산성은 혼합
IEEE/ScienceDirect 계열 체계적 문헌고찰들은 대체로 TDD 가 외부 품질·내부 품질에 긍정 효과를 줄 수 있지만, 생산성 효과는 맥락별로 혼합이라고 요약된다. 따라서 이 프로젝트는 “TDD 를 신처럼 여긴다”는 사용자 방침을 따르되, **무의미한 테스트 팽창은 TDD 가 아니라 비용**으로 본다.
프로젝트 적용:
- 테스트 작성 자체를 산출물로 착각하지 않는다.
- 테스트가 결함을 막지 못하면 약한 테스트다.
- 너무 느려 자주 못 돌리는 테스트는 TDD inner loop 에 맞지 않으므로 nightly/E2E 계층으로 내린다.
---
## 3. AI coding agent 와 TDD
### 3.1 LLM4TDD: 테스트가 prompt 와 검증 장치가 될 수 있다
`LLM4TDD` 는 LLM 을 테스트 주도 방식으로 반복 유도하는 연구다. 핵심 함의는 “자연어 요구만으로 구현을 맡기지 말고, 테스트가 요구를 실행 가능한 형태로 제한해야 한다”다.
DMF Crawler 적용:
- 에이전트에게 “DMF API 구현해”라고 시키지 않는다.
- 먼저 `tests/test_source_mfds.py` 에 fixture 기반 실패를 만든다.
- 그 테스트 이름과 실패 로그를 에이전트 지시의 중심에 둔다.
### 3.2 Tests as Prompt / WebApp1K: 테스트 자체가 스펙이다
`Tests as Prompt` 는 테스트 케이스가 prompt 이자 verification 역할을 하는 벤치마크를 제안한다. 중요한 관찰은 TDD 성공이 일반 코딩 능력보다 **instruction following****in-context learning** 에 크게 좌우된다는 점이다.
DMF Crawler 적용:
- `AGENTS.md` 는 “어떤 테스트를 왜 돌리는지”를 명확히 적는다.
- 테스트 이름은 요구사항 번호와 위험을 포함한다. 예: `test_r2_2_rejects_full_withdrawal_on_empty_success_body`.
- 장문 프롬프트에 모든 문서를 집어넣기보다, 해당 테스트와 관련 SSOT 문서만 읽게 한다.
### 3.3 TDAD: agent 에게 영향 테스트 지도를 줘야 한다
2026 TDAD 논문은 AI coding agent 가 기존 테스트를 깨뜨리는 회귀를 자주 만든다고 지적하고, 코드-테스트 의존 지도/impact analysis 를 제공하면 회귀가 크게 감소한다고 보고한다. 단순히 “TDD 로 해”라고 prompting 하는 것만으로는 충분하지 않거나 해로울 수 있다는 점이 핵심이다.
DMF Crawler 적용:
- 파일을 바꾸기 전 “영향 테스트 목록”을 적는다.
- 예시:
- `normalize.py``tests/test_normalize.py`, `tests/test_diff.py`, `tests/test_integrity.py`, report data tests
- `storage/repo.py` → migration tests, pipeline smoke, report data tests
- `report/*` → xlsx zip/XML tests, visual/layout audit tests
- `gui/*` → tkinter structure/a11y tests, text input/button scenario tests
- 에이전트는 관련 테스트만 먼저 돌린 뒤 전체 smoke 로 확장한다.
### 3.4 Agent-generated tests 경고: 얕은 테스트는 통과 장식이 된다
2026 “Rethinking the Value of Agent-Generated Tests” 는 에이전트가 작성한 테스트가 최종 문제 해결률을 자동으로 높인다고 볼 수 없으며, 디버깅 관찰 수단에 머무는 경우가 많다고 경고한다. UTBoost 도 기존 테스트가 부족하면 잘못된 패치가 통과한다고 보여준다.
DMF Crawler 적용:
- 에이전트가 만든 테스트는 **반드시 실패 확인**을 거친다.
- 실패 이유가 “모듈 없음/오타”뿐이면 행동 RED 로 약하다. 실제 요구 위반까지 도달하도록 보강한다.
- “현재 구현을 그대로 assert” 하는 회고성 테스트는 거부한다.
- 과거 버그가 있으면 그 버그를 재현하는 fixture 를 먼저 만든다.
### 3.5 Test-Driven AI Agent Definition: 지침서도 테스트 대상이다
`Test-Driven AI Agent Definition` 은 agent prompt/behavior 를 실행 가능한 테스트로 검증하는 방법론을 제안한다. visible/hidden test split, mutation testing, spec evolution 이 핵심이다.
DMF Crawler 적용:
- `AGENTS.md` 자체가 정책 SSOT 를 참조한다.
- 에이전트 지침 변경 시 다음을 검증한다.
- “테스트 없이 코드 변경 금지” 문구가 있는가.
- “RED 삭제/완화 금지” 문구가 있는가.
- “디자인 감사 RED”가 구체 항목을 포함하는가.
- “실패를 숨기지 말 것” 규칙이 있는가.
---
## 4. E2E/사용자 행동 테스트 이론
### 4.1 Testing Library: 사용자와 닮은 테스트
Testing Library 의 대표 문장:
> The more your tests resemble the way your software is used, the more confidence they can give you.
실무 규칙:
- CSS 클래스나 내부 함수명보다 사용자에게 보이는 텍스트/역할/라벨을 우선한다.
- 폼은 label 로 찾는다.
- 버튼은 role/name 으로 찾는다.
- 테스트 ID 는 마지막 수단이다.
DMF Crawler 변환:
- 웹 프론트가 아니어도 “사용자와 닮은 테스트” 원칙은 그대로 쓴다.
- CLI: 실제 `python -m dmf_crawler doctor` 출력과 종료 코드를 검사한다.
- GUI: 실제 tkinter 위젯에 텍스트를 입력하고 버튼 command 를 호출한다.
- xlsx: 실제 파일을 zip 으로 열고 workbook/sheet XML 을 검사한다.
### 4.2 Playwright: E2E 는 관찰 가능한 출력과 격리
Playwright 공식 best practices 의 핵심은 다음으로 요약된다.
- 사용자가 보는/상호작용하는 출력 중심으로 테스트한다.
- 테스트는 독립적이어야 한다.
- 안정적인 locator 를 사용한다.
- E2E 는 중요한 흐름에 집중한다.
- 시각 회귀는 OS/browser 환경을 고정해야 한다.
DMF Crawler 적용:
- 브라우저 수집 경로가 들어오면 “엑셀 다운로드 버튼 클릭 → 파일 생성 → `.crdownload` 사라짐 → xlsx 구조 검증”을 E2E 로 둔다.
- 공공 사이트 실접속은 기본 테스트에서 제외하고 fixture/mock 서버를 사용한다.
- 실제 nedrug 접속은 사용자가 승인한 수동 smoke 로만 둔다.
---
## 5. 디자인 감사 이론
### 5.1 W3C/WCAG 2.2: 접근성 최소선
DMF Crawler 디자인 RED 는 최소 WCAG 2.2 AA 를 기준으로 삼는다.
| 영역 | 기준 | 자동화 가능한 RED |
|---|---|---|
| 텍스트 대비 | 1.4.3, 일반 4.5:1 / 큰 글자 3:1 | 팔레트 HEX 대비 계산 테스트 |
| 비텍스트 대비 | 1.4.11, UI 경계/상태 3:1 | input border/focus/아이콘 상태색 대비 계산 |
| 색 단독 전달 금지 | 1.4.1 | 상태가 색+라벨+기호로 표현되는지 검사 |
| 키보드 접근 | 2.1.1 | 모든 버튼/입력의 tab/focus 가능성 검사 |
| 초점 표시 | 2.4.7, 2.4.11 | focus style 또는 tkinter highlight/focus 이동 검사 |
| 라벨/지시 | 3.3.2 | 입력마다 visible label/help/error 연결 검사 |
| 오류 식별 | 3.3.1/3.3.3 | 빈 입력 제출 시 오류 문구+복구 버튼 검사 |
### 5.2 NN/g: 폼·정렬·시각 계층
NN/g 자료는 다음 UX 결정을 뒷받침한다.
- 폼은 가능하면 단일 컬럼.
- 라벨은 입력 가까이에 둔다.
- placeholder 를 label 대체로 쓰지 않는다.
- 관련 필드는 white space 와 섹션 제목으로 묶는다.
- 시각 디자인은 grid alignment, typographic hierarchy, intentional color, consistency 가 핵심이다.
DMF Crawler 적용:
- 온보딩 GUI 는 “중앙 정렬된 큰 덩어리”가 아니라 좌측 라벨/상태/행동 버튼의 스캔 가능한 구조를 기본으로 한다.
- 입력창 내부 padding, 버튼 높이, 아이콘과 텍스트 baseline 정렬은 테스트 대상이다.
- 오류 문구는 [무엇]/[왜]/[어떻게]/[다음] 4요소를 강제한다.
### 5.3 Vercel Web Interface Guidelines: agent 가 잡아야 할 UI 결함 목록
Vercel 의 command.md 는 AI agent 가 UI 코드를 감사할 때 잡아야 할 항목을 구체적으로 제시한다. 이 프로젝트는 웹 UI 가 아니더라도 항목을 일반화해 쓴다.
- 접근성: icon-only button label, form label, semantic control, alt/decorative distinction, live region.
- focus: outline 제거 금지, focus visible, sticky/overlay 가 focus 를 가리지 않음.
- forms: autocomplete/name/type, paste 차단 금지, clickable label, inline errors, first error focus.
- typography: `...` 대신 `…`, tabular numbers, heading wrapping.
- content handling: long text overflow, flex child min-width, empty state.
- layout: unwanted scrollbar, content overflow, safe area.
- interaction: hover/focus/active feedback, destructive action confirmation/undo.
- anti-patterns: `transition: all`, `outline: none`, div click handler, unlabeled inputs/icons, hardcoded date/number format.
DMF Crawler 변환:
| Web guideline | tkinter/xlsx 변환 |
|---|---|
| form controls need label | `Entry`/`Combobox` 옆/위에 명시 텍스트 존재 |
| icon-only button aria-label | 아이콘 버튼은 텍스트 라벨 또는 tooltip/help text 존재 |
| focus visible | 버튼/입력의 focus highlight 또는 순서 검사 |
| long content handling | 한글 긴 성분명/업체명 fixture 로 clipping/overflow 검사 |
| tabular numbers | xlsx 수치 열의 number format, CLI 표 정렬 검사 |
| empty states | 변경 0건/워치리스트 0건/AI 없음 상태 시 깨진 표 금지 |
| URL reflects state | GUI 복구 모드는 `--focus <check_key>` 로 상태 직접 진입 가능 |
---
## 6. 이 프로젝트의 “빡센 디자인 RED” 범위
디자인 RED 는 다음을 반드시 잡는다.
### 6.1 정렬/레이아웃
- 의미 없는 전체 중앙 정렬 금지. 제목·KPI 처럼 의도 있는 중앙 정렬만 허용.
- 폼 라벨과 입력은 grid 에 맞고 서로 가까워야 한다.
- 버튼 그룹은 같은 높이/간격/정렬선을 가져야 한다.
- 아이콘과 텍스트는 vertical center/baseline 이 맞아야 한다.
- 컨테이너보다 큰 요소, 잘리는 텍스트, 가로 스크롤 발생을 실패로 본다.
- flex/grid 류 레이아웃에서는 긴 텍스트가 줄바꿈/말줄임/폭 축소를 할 수 있어야 한다. 웹이면 `min-width: 0` 류를 검사한다.
### 6.2 타이포그래피
- 최소 본문 크기: GUI 10pt, xlsx 본문 10pt, 각주 9pt 이하 남용 금지.
- 정보 계층: 제목/섹션/본문/도움말/오류가 크기·굵기·색으로 구분돼야 한다.
- 숫자 열은 정렬과 number format 이 안정적이어야 한다.
- 한국어 긴 문자열이 폭 255 같은 비정상 Excel 열폭을 만들면 실패.
### 6.3 폼/입력
- placeholder-only label 금지.
- 실제 입력 테스트 필수: API 키 붙여넣기, 잘못된 키, 빈 값, 긴 값, 한글/영문 혼합.
- paste 차단 금지.
- 오류 시 첫 오류로 포커스 이동 또는 명확한 안내.
- input 내부 padding/버튼과의 간격이 최소값 이상이어야 한다.
### 6.4 접근성/상태 표현
- 색만으로 신규/변경/취하/경고를 표현하면 실패.
- 상태는 라벨+기호+색+서식(취하는 취소선 등) 4중 이상 표현.
- 포커스 가능한 요소는 키보드로 접근 가능해야 한다.
- 모달은 닫기/나중에/복구 액션이 명확해야 한다.
### 6.5 xlsx 리포트 디자인
- 시트 순서: `00_대시보드`, `01_오늘변경분`, `02_전체현황`, `03_성분별`, `04_업체별`, `05_워치리스트`(조건부), `06_추이`, `99_메타`.
- 대시보드 첫 화면 무스크롤 목표: 1366×768 노트북에서 90% zoom 기준.
- 틀 고정/자동필터/조건부서식/내부 링크/출처 문구가 없으면 실패.
- 파일은 zip/xlsx 구조 검증을 통과해야 한다.
- openpyxl 에 의존하지 않는다. 검증도 stdlib zipfile/XML 로 한다.
---
## 7. RED 확장·통폐합·삭제 원칙
1. **사용자 유즈케이스 없는 RED 금지.** “있으면 좋음”만으로 테스트를 추가하지 않는다.
2. **같은 위험을 검사하는 RED 는 통합한다.** 중복은 실행 시간을 늘리고 실패 원인을 흐린다.
3. **brittle selector/좌표 테스트는 금지한다.** 사용자 의미(role/label/text), xlsx 구조, 위젯 역할 중심으로 검사한다.
4. **테스트 삭제는 허용된다.** 단, 다음 중 하나가 문서화돼야 한다.
- 더 강한 통합/시나리오 테스트가 같은 위험을 덮는다.
- 요구사항이 삭제됐다.
- 테스트가 구현 세부에 묶여 리팩터링을 방해했다.
- flaky 원인이 환경이며 안정화 비용이 가치보다 크다.
5. **테스트 완화는 삭제보다 위험하다.** 임계값을 낮추거나 assert 를 약하게 바꾸려면 실패 스크린샷/로그와 사용자 영향 분석이 필요하다.
---
## 8. 프로젝트 적용 문서
이 연구 정본의 적용 규칙은 다음 문서가 담당한다.
- `docs/design/07-tdd-red-system.md` — 프로젝트 TDD/RED 운영 체계 SSOT
- `AGENTS.md` — AI coding agent 작업 규칙
- `CLAUDE.md` — Claude Code 진입용 얇은 포인터
---
## 9. 미해결·추가 검증 항목
- [ ] IEEE/ScienceDirect 논문 원문은 접근 제한/빈 응답이 있어 직접 인용을 하지 않았다. 필요 시 DOI 기반 서지 정보만 별도 표로 확정한다.
- [ ] `google-testing-blog-way-of-tdd-2026.raw.html` 은 원문 저장은 됐으나 HTML 정제 후 핵심 문구를 별도 발췌하는 작업이 남았다.
- [ ] GUI screenshot 기반 pixel diff 는 현재 런타임 의존성 3개 원칙과 충돌한다. dev 의존성으로 둘지, tkinter geometry 검사로만 갈지 결정해야 한다.
- [ ] 브라우저 수집 경로가 구현되면 Playwright/axe 를 쓸지, Chrome DevTools Protocol 직접 검사로 충분한지 결정해야 한다.