# QA 자동화

> 제 본업입니다. 그런데 수확이 제일 적습니다 — 이미 같은 자리에 가 있어서. 그리고 가져오겠다고 적은 4.5건 중 점검 때 들어가 있던 건 1건뿐이라, 나머지 3.5건을 이틀에 걸쳐 다 넣었습니다(2026-09-28~29). 여섯 번째 clumsy는 같은 걸 두 번 뜯고 아직 한 번도 안 돌렸습니다(2026-10-02).

- 수치: 6편 · 적용 4.5 / 7
- 사람이 보는 화면: https://aitryed.com/ko/teardowns/qa/
- 반대 언어: https://aitryed.com/en/teardowns/qa/index.md
- 이 사이트 안내(AI용): https://aitryed.com/ko/llms.txt

---

**제 본업 이야기입니다. 그리고 다섯 칸 중에서 배워 온 게 제일 적은 칸입니다.**

먼저 「QA 자동화」가 뭔지부터 말씀드리겠습니다.

게임이나 앱을 만들면 **제대로 돌아가는지 일일이 눌러 보며 확인**해야 합니다. 버튼을 누르고, 화면이 맞게 뜨는지 보고, 값이 제대로 들어갔는지 확인합니다. 그걸 사람이 손으로 하는 게 「QA」이고, **기계가 대신 눌러 주게 만드는 것**이 「QA 자동화」입니다.

이 칸에는 남들이 만든 자동화를 열어 보고 적은 글이 여섯 편 있습니다.

## 본업인데 배워 온 게 제일 적습니다 — 그게 나쁜 뜻이 아닙니다

앞의 다섯 편을 뜯어서 제 것에 **들여오겠다고 적은** 기법은 **4.5건**입니다. 다른 칸에 비해 적습니다. (점검 때 실제로 들어가 있던 것은 1건이었습니다 — 아래 2026-09 점검.)

처음엔 「내가 잘못 뜯었나」 싶었는데 아니었습니다. **같은 문제를 오래 붙들고 있으면 다들 비슷한 답에 도착하기 때문**입니다.

비유하면 이렇습니다. 산 정상에 오르는 길이 몇 개 안 될 때, 먼저 오른 사람과 나중 오른 사람이 만나는 지점이 같습니다. 그때 「배울 게 없네」가 아니라 <strong>「내 길이 맞았구나」</strong>가 소득입니다.

## 배울 게 없어도 조사가 헛되지 않은 이유

이게 이 칸에서 제일 중요한 이야기입니다. 두 가지 다른 종류의 소득이 나왔습니다.

**첫째, 혼자만의 결론이 둘이 됐습니다.** 어떤 판단은 저 혼자 해 온 것이라 **맞는지 틀린지 확인할 길이 없었습니다.** 그런데 전혀 모르는 사람이 전혀 다른 회사에서 **똑같은 결론에 독립적으로 도착해 있었습니다.** 표본 하나가 둘이 된 것입니다. 기법을 하나도 안 가져왔어도 이건 값이 큽니다.

**둘째, 남의 원칙이 제 것을 재는 자가 됐습니다.** 어떤 편에서는 가져올 기법이 **0건**이었습니다. 그런데 그 사람들이 세운 원칙을 자로 삼아 제 코드를 재 보니, **제가 만들어 둔 방어 장치가 실제 실행에는 하나도 안 걸려 있다**는 걸 발견했습니다. 배운 게 없는데 고칠 게 나온 것입니다.

## 「이미 가 있다」가 늘 같은 뜻은 아니었습니다

두 편일 때는 「이미 같은 결론에 가 있다」 한 가지로 읽었습니다. 네 편이 되니 **그 안에 두 종류**가 섞여 있었습니다. 같은 답에 도착한 것과, 같은 답을 적어만 두고 실제로는 안 해 둔 것은 **완전히 다릅니다.**

그리고 실제로 제가 두 번째에 걸렸습니다 — <strong>「해 뒀다」고 믿었던 것이 사실은 「하겠다고 적어 둔 것」</strong>이었습니다.

## 권한 하나가 증거의 성질을 바꾼 이야기

기법이 아닌 소득이 하나 있습니다.

게임에서 뽑기 확률이 광고한 대로인지 확인하는 일이 있습니다. 예전에는 **수백 판을 직접 뽑아서 통계로 추정**했습니다. 오래 걸리고, 나온 결과도 「아마 맞을 것이다」 수준입니다.

그런데 원본 데이터를 볼 권한이 생기자, 같은 확인이 **질의문 한 줄에 5초**로 끝났습니다. 그리고 결과가 「아마」가 아니라 **확정**이 됐습니다.

→ 배운 것: **도구를 바꿔서 빨라진 게 아니라, 볼 수 있는 자리가 바뀌어서 증거의 종류 자체가 바뀌었습니다.**

## 다섯 번째 편에서는 심판하러 갔다가 제가 걸렸습니다

앞의 넷은 전부 남의 발표나 글을 읽은 것이었습니다. 다섯 번째는 **처음으로 남의 코드를 직접 받아서 제 데이터에 돌려 본 편**입니다.

남의 검출 도구가 제대로 잡는지 시험하러 갔는데, **제 데이터에 돌려 보니 엉뚱한 것을 잔뜩 잡았습니다.** 그 도구가 나쁜 게 아니라 **제가 쓰려던 자리에 안 맞는 도구**였던 것입니다. 그걸 안 재 보고 들였으면 그대로 들어왔을 것입니다.

## 가져온다고 적은 4.5건 중 코드에 들어간 건 1건이었습니다 — 2026-09 점검

한 달쯤 지나, 편마다 「가져온다」고 적은 것이 정말 들어갔는지 제 코드를 열어 확인했습니다.

| 편 | 가져온다고 적은 것 | 2026-09 지금 |
|---|---|---|
| [에이슬립 QA 자동화](/ko/teardowns/qa/asleep-qa/index.md) | 좌표로 대충 눌러 통과한 것을 따로 센다 | **들어갔습니다** — 탭마다 근거를 적는 «탭 원장» |
| [오토플레이 테스트 툴](/ko/teardowns/qa/autoplay-test-tool/index.md) | 「힘은 주는데 안 움직임」으로 끼임 잡기 · 두 시계가 함께 울려야 확정 | 점검 때는 **없었습니다** → 둘 다 **넣었습니다**(9/28) |
| [watermarks-remover](/ko/teardowns/qa/watermarks-remover/index.md) | 문장 리듬 한 항 · 모르는 파일이 나오면 멈추는 검사 | 점검 때는 **둘 다 없었습니다** → 멈추는 검사(9/28)와 리듬 한 항(9/29, 긴 글 전용) **둘 다 넣었습니다** |
| [토스 네뷸라](/ko/teardowns/qa/toss-nebula/index.md) | 기법 대신 찾아낸 «관문 두 벌» 고치기 | **절반** — 실제 실행 길에 잠금은 걸었고, 관문은 아직 두 벌 |
| [QA 인프라 발표](/ko/teardowns/qa/qa-infrastructure/index.md) | 뽑기 사례를 글의 예시로 | **들어갔습니다** — [「아마 맞다」는 판정이 아니다](/ko/writing/verdicts/evidence-grades/index.md) |

**「가져온다」고 적는 일과 실제로 넣는 일은 따로였습니다.** 뜯고 나서 판정 표에 «채택»을 적으면 그 자리에서 일이 끝난 것처럼 느껴지는데, 코드는 그걸 모릅니다. 그래서 이 칸의 숫자를 «채택 4.5»가 아니라 <strong>«적용 4.5 / 4.5»</strong>로 고쳐 적습니다 — 점검 때 들어가 있던 1건에, 그 뒤 이틀 동안 넣은 3.5건(모르는 파일이면 배포를 멈추는 검사 · 끼임의 모순 감지 · 두 시계 확정 · 긴 글 전용 문장 리듬)을 더한 수입니다. 효과는 갈립니다. 문장 리듬은 첫 판에서 쉬운 설명 두 편을 잡아 고쳤고, 끼임 쪽 둘은 시뮬레이션에서 아직 거른 게 없습니다 — 지금 봇은 걷는 내내 밀고, 시뮬레이션에는 기어가는 경우도 없어서입니다. 넣은 것과 효과가 난 것도 따로 셉니다.

반대 방향의 틀림도 하나 나왔습니다. 오토플레이 편에서 「제 끼임 판정은 층이 하나뿐」이라고 적었는데, 코드를 열어 보니 **둘째 층이 이미 있었습니다** — 그 편에 고쳐 적었습니다.

그리고 이 칸 밖에서, 남이 만든 물건이 처음으로 제 QA 파이프라인에 들어왔습니다. 판정용 모델 **Jev**를 사진 판독기의 «두 번째 눈»으로 붙였습니다(2026-09-24). 뜯기가 아니라 나흘 시범으로 재 보고 들였고, 잰 범위에서 진짜 오류를 잡은 적은 아직 없습니다 → [사진 판독기](/ko/built/android-qa/judge/index.md).

## 여섯 번째 편은 같은 대상을 두 번 뜯고, 한 번도 안 돌렸습니다

[clumsy](/ko/teardowns/qa/clumsy/index.md)는 PC의 인터넷을 일부러 나쁘게 만드는 도구입니다. 끊김 테스트에 쓰려고 열었는데, 다 쓰고 나서야 **8월에 이미 같은 결론을 적어 둔 리포트**가 있다는 걸 알았습니다. 두 번 다 「쓴다」고 적었고, 두 번 다 돌려 보지 않았습니다.

위 점검에서 본 「적는 일과 넣는 일은 따로」를, 이번엔 한 대상 안에서 두 번 겪은 셈입니다. 그래서 이 칸의 숫자가 <strong>«적용 4.5 / 7»</strong>이 됩니다 — 적은 것에 clumsy의 2.5건이 더해졌고, 들어간 것은 그대로입니다.

## 여기부터는 자세한 기록입니다

남이 만든 테스트 자동화를 뜯는 자리. 디바이스 팜, 실기기 무인 회귀, 게임 오토플레이 도구, 에이전트 기반 테스트 플랫폼.

**제 본업인데 수확이 제일 적습니다.** 다섯 편에서 기법 이전은 4.5건입니다(2026-09-29 기준: 판정 표에 적은 것 4.5 · 코드에 들어간 것 4.5 — 점검 때 1, 점검 뒤 3.5 · 위 «2026-09 점검» 절). 잘못 뜯어서가 아니라, 같은 제약 아래 굴러온 시간이 길어서 대개 이미 같은 결론에 가 있기 때문입니다.

## 그래서 여기서 나오는 값어치가 다르다

| 대상 | 기법 | 실제로 남은 것 |
|---|---|---|
| [에이슬립 QA 자동화](/ko/teardowns/qa/asleep-qa/index.md) | 11종 중 **1** | 같은 제약 아래서 **남이 독립적으로 같은 결정에 도달했다**는 사실 |
| [토스 네뷸라](/ko/teardowns/qa/toss-nebula/index.md) | **0** | 남의 원칙을 자로 삼으니 **제 관문이 두 벌**이라는 게 보였다 |
| [오토플레이 테스트 툴](/ko/teardowns/qa/autoplay-test-tool/index.md) | 4종 중 **2** | 끼임을 **데이터의 모순**으로 잡고, 오탐을 **타이머 둘의 AND**로 걷는다 |
| [QA 인프라 발표](/ko/teardowns/qa/qa-infrastructure/index.md) | **0** | 도구가 아니라 **증거의 성격**이 접근 권한에서 갈린다는 사례 |
| [watermarks-remover](/ko/teardowns/qa/watermarks-remover/index.md) | 4종 중 **1.5** | 검출기를 들이기 전에 **자기 코퍼스로 오탐률부터** 재라 — 그것도 실제로 걸 자리의 코퍼스로 |
| [clumsy](/ko/teardowns/qa/clumsy/index.md) | 6종 중 **2.5** (적용 0) | 같은 대상을 두 번 분석해도 판정은 그대로였다 — **판정을 옮기는 건 실측뿐** |

가져올 게 없어도 조사가 헛되지 않습니다. 에이슬립 쪽은 **표본이 하나뿐이던 결론을 둘로 만들었고**(온프레미스·라이브 fail-closed·무인 회귀·요소 기준 타겟팅), 네뷸라 쪽은 기법을 0개 주는 대신 제 코드에서 **정식 관문의 방어가 실제 런에 하나도 안 걸려 있다**는 걸 찾아냈습니다.

## 그리고 두 편 다 제 판정이 뒤집혔다

에이슬립은 두 번 고쳤습니다. "침묵 감지가 신규 수확"이라고 적었다가 **제 코드에 이미 있어서** 지웠고, 그래서 "신규 0건"으로 닫으려다 **발췌가 얇아서** 저자가 핵심이라 부른 절을 통째로 놓친 걸 발견해 다시 열었습니다.

네뷸라는 초판의 유일한 수확이 기각됐습니다. `uiautomator dump`가 2,350ms라는 실측을 근거로 채택했는데, **제 파이프라인에 그 호출이 0건**이었습니다. 게임 클라이언트는 화면을 네이티브 서피스 하나에 그려서 접근성 트리가 애초에 안 잡힙니다.

> 실측은 맞았는데 대상이 틀렸다. 벤치마크를 재기 전에 <strong>"이 호출이 내 런에서 실제로 일어나는가"</strong>를 먼저 봐야 했다.

## 네 편이 되니 「이미 가 있다」의 뜻이 갈렸다

두 편일 때는 *"이미 같은 결론에 가 있다"* 하나로 읽었습니다. 넷이 되니 **그 안에 두 종류가 섞여 있었습니다.**

**하나는 진짜로 같은 자리입니다** — 에이슬립의 결정 열한 개 중 열이 그랬습니다. **다른 하나는 같은 자리인 줄 알았는데 한 겹이 얕은 것**입니다. 오토플레이 편이 그랬습니다. 저도 봇의 끼임을 판정하고 있었고 틀린 것도 아니었는데, **후보를 잡는 층과 오탐을 걷는 층을 나누지 않았을 뿐**이었습니다.

**이 둘은 안 뜯어보면 구분이 안 됩니다.** 둘 다 *"우리도 하고 있는데"* 로 보이기 때문입니다. 층을 나누자마자 **오탐의 원인이 이름을 갖게 됐습니다** — *"의도적으로 멈춘 정상 상태"*.

**(2026-09 기준 정정)** 오토플레이 편의 「층을 나누지 않았다」는 틀렸다. 제 끼임 판정에는 후보(3초 동안 60cm 미만 이동) 뒤에 **탈출 시도로 확정하는 둘째 층**이 7월 코드부터 있었다. 한 겹 얕았던 건 층의 개수가 아니라 **«입력과 실제를 같이 보는» 모순 감지**다. 그건 2026-09-28 에 넣었다.

## 그리고 이 분류에는 도구가 아닌 수확이 하나 있다

QA 인프라 편에서 남은 건 기법이 0종인데, **뽑기 확률 검증 사례** 하나가 남았습니다. 수백 판을 뽑아 **통계로 추정**하던 것이, 원본 조회 권한이 생기자 **쿼리 한 줄 5초**가 되면서 **증거의 성격이 추정에서 확정으로 바뀌었습니다.**

빨라진 게 아닙니다. **무엇을 증거로 칠 것인가**가 바뀐 겁니다. [판정을 다루는 글](/ko/writing/verdicts/index.md)에 그대로 들어갈 예시라, 이 분류에서 나온 것 중 **글로 가는 유일한 수확**입니다. (2026-09 기준 — 들어갔다: [「아마 맞다」는 판정이 아니다](/ko/writing/verdicts/evidence-grades/index.md)가 이 사례를 «표본에서 원본 직접 조회로» 몇 칸을 건너뛴 예로 쓴다.)

## 다섯 번째는 이 분류의 첫 레포였고, 검출기를 심판하러 갔다가 제가 걸렸다

앞의 넷은 전부 남의 발표·아티클이었습니다. [watermarks-remover](/ko/teardowns/qa/watermarks-remover/index.md)가 **이 분류에서 처음으로 코드를 읽은 편**이고, 그래서 여기서만 할 수 있는 일을 했습니다 — 남의 검출기를 **제 데이터에 직접 돌려 봤습니다.**

결과가 이 분류에서 제일 값비쌌습니다. **AI 글을 가르라고 만든 지표가, 첫 발화에서 사람이 쓴 제 글을 잡았습니다.** 문장길이 변동계수를 제 사이트 장문 98편에 돌리니 중앙값 0.668 로 널찍했는데, 그 규칙이 실제로 살 채널의 원고로 옮겨 재니 여섯 중 하나가 임계 아래였고 **그 하나는 이미 게시까지 끝낸 제 글**이었습니다.

> 오탐률을 **잴 자리를 틀리면** 오탐률 자체가 거짓말이 된다. 장문에서 재고 짧은 글에 걸면, 재기 전보다 나빠진다.

QA 로 읽으면 이건 익숙한 실패입니다. **테스트 데이터가 프로덕션 분포와 다른 것.** 다만 이번엔 제가 그 테스트 데이터를 고른 사람이었습니다. 네뷸라 편에서 *"이 호출이 내 런에서 실제로 일어나는가"* 를 배웠는데, 같은 구멍의 **한 칸 옆**이었습니다 — 호출은 일어나는데 **재는 표본이 다른 곳**에서 왔습니다.
