From 3738a0df5c0a18985efb88c20c77725c9c06ccff Mon Sep 17 00:00:00 2001 From: minsung Date: Tue, 7 Apr 2026 20:28:46 +0900 Subject: [PATCH] docs: flesh out README with project overview --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c6de73a..b0ad78f 100644 --- a/README.md +++ b/README.md @@ -1 +1,61 @@ -WPF Application User Input Regression Test +# recordingtest + +사내 WPF 3D 편집 응용(자체 엔진 **HmEG**, MEF plugin 아키텍처)에 대한 **사용자 입력 회귀 테스트 자동화 도구**. +도구 자체이지 SUT가 아니다. 자세한 운영 지침은 [CLAUDE.md](CLAUDE.md), 현재 진행 상태는 [PROGRESS.md](PROGRESS.md), 다음 할 일은 [PLAN.md](PLAN.md)를 참고. + +## 핵심 전략 — Golden-file 회귀 + +수동 테스트 입력을 레코딩 → 리플레이 → 결과 저장 파일을 정규화 후 baseline과 diff. ApprovalTests 패턴과 동형이며 SUT 코드 변경 협조를 최소화하기 위한 의도적 선택이다. + +``` +[수동 테스트] → 입력 레코드 + 결과 파일 A (approved baseline) +[회귀 시점] → 입력 리플레이 → 결과 파일 B → normalize → diff(A, B) +``` + +## 모듈 구성 + +| 모듈 | 책임 | 상태 | +|------|------|------| +| [Recordingtest.SutProber](src/Recordingtest.SutProber/) | SUT 정적 probe (plugin/Json/assembly 카탈로그) | PoC pass | +| [Recordingtest.Recorder](src/Recordingtest.Recorder/) | 입력 캡처 (UIA element path + offset + 키/마우스/포커스) | PoC pass | +| [Recordingtest.Player](src/Recordingtest.Player/) | 시나리오 재생, 비동기 동기화 | PoC pass | +| [Recordingtest.Normalizer](src/Recordingtest.Normalizer/) | 결과 파일 정규화 (timestamp/GUID/path/float/order) | PoC pass | +| [Recordingtest.DiffReporter](src/Recordingtest.DiffReporter/) | approved vs received diff 리포트 | PoC pass | +| [Recordingtest.EngineBridge.Client](src/Recordingtest.EngineBridge.Client/) + [Recordingtest.EgPlugin](src/Recordingtest.EgPlugin/) | HmEG 내부 상태 sidecar (MEF plugin masquerade + HttpListener) | v2 pass | +| [Recordingtest.Runner](src/Recordingtest.Runner/) | 5-모듈 E2E 파이프라인 + 실패 triage | PoC pass | + +## 작업 사이클 — Planner / Generator / Evaluator + +Anthropic harness design 원칙을 채택. 같은 에이전트가 생성과 평가를 겸하지 않는다. + +1. `/contract ` — Sprint Contract 작성 (`docs/contracts/.md`, 검증 가능한 DoD) +2. Generator — 계약 기준으로 구현 +3. `/evaluate ` — 독립 evaluator가 채점, pass 시에만 PROGRESS.md 갱신 + +## 기술 스택 + +- **언어**: C# / .NET (SUT와 동일 생태계) +- **UI 자동화**: [FlaUI](https://github.com/FlaUI/FlaUI) 1순위, Win32 low-level hook hybrid +- **시나리오 포맷**: YAML/JSON (git diff 친화적) +- **베이스라인**: `*.approved.{ext}` / `*.received.{ext}` + +## 디렉터리 + +``` +recordingtest/ +├── src/ # 모듈별 C# 프로젝트 +├── scenarios/ # 시나리오 YAML +├── docs/ +│ ├── contracts/ # Sprint Contracts + evaluations +│ ├── history/ # 작업 히스토리 +│ ├── sut-catalog/ # sut-prober 산출물 +│ └── guides/ # smoke test, deploy 가이드 +├── CLAUDE.md # 에이전트 운영 지침 +├── PROGRESS.md # 완료 상태 +└── PLAN.md # 우선순위 큐 +``` + +## 저장소 + +- Origin: https://gitea.hmac.kr/kimminsung/recordingtest +- 이슈/PR은 동일 Gitea, 커밋 메시지에 `#N` 참조