- Live SUT smoke surfaced 4 structural gaps post-#11 fix - recorder UIA path capture works (PID attach + FromPoint) - player resolver only matches last AutomationId → wrong elements - recorder type-step target empty → player skips text input - Box command not reproduced; coordinate replay partially works Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.3 KiB
3.3 KiB
2026-04-07 Smoke Test 1회차 결과
- 이슈: #11 fix 검증 → 새 이슈 #12 도출
- 소요 시간:
1.5시간 (Step 04 + 4번 재녹화) - Context 사용량: ~370k tokens (orchestrator 누적)
진행 단계
| Step | 결과 | 메모 |
|---|---|---|
| 0 | 환경 확인 | .NET 9 SDK, SUT 존재, DPI 100% |
| 1 | 빌드 + dotnet test |
60/60 green |
| 2 | SUT 수동 실행 | manual-box.hmeg 저장 성공 |
| 3 | recorder 1회차 (box-create.yaml) |
target 100% null, 113 step skip |
| 3-fix | 이슈 #11 fix (STAThread 등) | merged commit 139fbbc |
| 3-2회차 | recorder (box-v2.yaml) |
target 여전히 null — attach 실패 (창 제목 mismatch) |
| 3-3회차 | recorder PID attach (box-v3.yaml) |
VS Code 창이 잡힘 (recorder는 시스템 hook이라 모든 창 캡처) |
| 3-4회차 | SUT-only 캡처 (box-v4.yaml) |
✅ target에 SUT UIA path 정확히 잡힘 (MetroWindow, CommandBox, CB) |
| 4 | player 재생 (cleaned box-v4-clean.yaml) |
exit 0이지만 Box 미생성 |
결정적 발견
성공
- recorder의 PID attach + UIA
FromPoint가 정상 동작 - yaml에 SUT 컨트롤 path 정확히 기록 (
MetroWindow[@AutomationId='root']/CommandPanel/.../CB) - Win32 VK → 문자 번역 (
BOX,enter) - player의
null guard가 의도대로 동작 — type 스텝을 안전하게 skip - Box 명령 자체는 SUT가 받음 (좌표 입력은 일부 진행됨)
실패 / 해결할 gap
Gap A — player UiaPlayerHost.ResolveElement AutomationId-only 매칭
MetroWindow/ItemsControl같이 마지막 segment에 AutomationId가 없는 path는 빈 string으로 검색 → first descendant 아무거나 잡음 → 엉뚱한 좌표 클릭- 결과: 메뉴 클릭이 재질 스타일 팝업을 열거나, ItemsControl의 임의 위치를 클릭
Gap B — recorder type 스텝에 target 미설정
DragCollapser가 type 스텝을 만들 때 typeRes가 null이면 target을 안 채움- player의 null guard가 type을 skip → "BOX"·"10" 입력 안 됨
- typeRes가 항상 null인 이유: 키 이벤트는 resolver를 안 부르도록 fix했기 때문 (정당한 이유). 하지만 그러면 type 스텝의 target은 어디서 가져와야 하는가? → 직전 focus_change 이벤트의 element를 사용하는 게 자연스러움
Gap C (부수) — recorder가 시스템 전역 hook이라 SUT 외 창의 이벤트도 캡처. 사용자가 alt+tab하면 다른 창 path가 섞임. 필터 필요.
Gap D (부수) — yaml 한글 인코딩 PowerShell 출력 시 깨짐 (파일 자체는 정상일 가능성)
Box 명령이 안 그려진 이유 정리
- type 스텝 2개 skip → "BOX" 미입력 → Box 명령 미발동
- click 7개는 잘못된 element를 잡고 엉뚱한 좌표 클릭
- 그래도 일부 좌표가 우연히 SUT 영역과 겹쳐 메뉴 팝업 열림 정도 발생
다음 단계
- 이슈 #12 생성: player full-path resolver + recorder type-step target inheritance
- Generator → Evaluator 사이클
- Smoke 2회차
Smoke가 잡아낸 것의 가치
샌드박스 60 unit test 전부 green 상태에서도 라이브 실행 시 발견된 구조적 gap이 4개. harness design 기사가 강조한 "integration gaps that unit tests miss" 정확한 사례. Smoke test 패턴의 가치 실증.