학습 본문으로 건너뛰기
VAIRODE
pytest·debugging·logging46번째 작은 수업
오늘은 질문 하나만 해결해요46 / 52

처음이어도 괜찮아요 · 그림부터 시작해요

재현 가능한 failure triage evidence loop

오늘의 질문

oracle·fixture scope·mock boundary·logging context가 섞인 failure를 baseline→inject→localize→replay 순서로 국소화하고 sealed regression evidence를 만든다. 이 판단을 생략하면 통과한 test와 많은 log가 있어도 결함을 놓치거나 잘못된 수정을 승인할 수 있습니다.

아직 답을 몰라도 괜찮아요. 아래 작은 예시를 보고 먼저 예상해 보세요.

01 · 가볍게 시작하기

정답을 보기 전에 먼저 골라볼까요?

눈으로만 보고 답 하나를 떠올려 보세요AI가 수정한 간헐적 주문 처리 결함의 release review에서 재현 가능한 failure triage evidence loop 계약을 적용한다.synthetic td46 fixture · secret 없는 고정 입력 · exact Python 3.14.6
  1. 1
    먼저 골라보기

    틀려도 괜찮아요. 지금 생각한 답 하나를 정해요.

  2. 2
    그림으로 확인하기

    움직이는 순서와 달라지는 곳만 천천히 찾아요.

  3. 3
    내 말로 다시 말하기

    한 문장으로 말해 보면 내가 이해한 곳을 확인할 수 있어요.

02 · 그림으로 보기

그림이 움직이는 순서를 직접 확인해요

PYTHON FAILURE TRIAGE · EVIDENCE LAB

실패를 추측하지 말고, 재현 가능한 증거로 원인을 좁히세요

4 SCENES · 12 CASES · 48 STATES
어떤 실패 관측 계약을 먼저 점검할까요?
ACTIVE INCIDENT결정적 증거 계약PY-M09-11-1

실패를 만드는 최소 입력과 기대값을 한 문장으로 고정했나요?

같은 함수에 oracle 강도와 상태 공유 방식을 바꿔 비교하세요.

누적 triage phase

← ↑ ↓ → · Home · End

REPRODUCE_AND_BOUND

seed와 단일 경계값으로 실패를 세 번 동일하게 재현합니다.def fee(amount): return max(0, amount // 10)

실패·fixture timeline

  1. T+000msrunning
    COLLECT

    node id와 parametrized case를 고정

  2. T+017msqueued
    ARRANGE

    입력·expected·seed snapshot

  3. T+034msqueued
    CALL

    fee 경계 분기와 반환값

  4. T+051msqueued
    ASSERT

    oracle과 actual의 의미 비교

call stack과 data flow

  1. test_fee_boundaryactive
    test_fee.py:18
    • amount=<bounded>
    • expected=<oracle>
    • triage_target=false
  2. feedormant
    billing.py:7
    • amount=<input>
    • rate=10
    • triage_target=true
  3. pytest_assertrepr_comparedormant
    rewrite.py:<assert>
    • left=<actual>
    • right=<expected>
    • triage_target=false
  1. inputBOUNDARY INPUTamount=10
  2. contextORACLEexpected=1
  3. outputACTUALactual=1
  4. stateASSERTION1 == 1

ACTIVE HYPOTHESIS · unscored

fee의 10 단위 경계와 oracle이 동일한 명세를 표현한다.반증 조건: 9·10·11 중 하나가 잘못된 상수 mutant와 같은 결과를 내면 기각

assertion·debugger·log 증거 ledger

  1. assertionCAPTURED
    ASSERTION DIFFexpected 1 == actual 1
  2. debuggerSEALED
    BOUNDARY LOCALSamount=10 · rate=10
  3. traceSEALED
    MUTANT RESULTconstant-return mutant → FAIL
  4. logSEALED
    REPLAY RECEIPT3 runs · same node ids · PASS
최종 판정은 04 · 수정하고 재검증 단계에서만 공개합니다.

재현하고 경계를 고정. 최소 반례와 기대값을 고정해 재현 가능한 기준선을 만들었습니다.

amount=10에서 expected=1과 actual=1을 고정해 동일한 실행 경계를 확보했습니다.seed와 단일 경계값으로 실패를 세 번 동일하게 재현합니다.

최종 판정은 네 번째 phase에서만 공개합니다결정적 증거 계약: 입력·환경·oracle을 고정하고 독립된 두 관측 채널로 같은 원인을 확인합니다.

재현 가능한 failure triage evidence loop에서 숨은 입력·상태·제어 흐름·oracle·관측 증거를 한 화면에서 대조한다.재현 가능한 failure triage evidence loop의 baseline, injected defect, first divergence, assertion/log/trace evidence와 sealed regression을 연결한 interactive-svg상호작용: fixture와 단계 탭을 선택하면 expected·actual·evidence가 동기화되고 최종 단계에서만 판정과 수정 근거를 공개한다. · 모션 축소: 자동 이동 없이 선택 상태를 즉시 표시하고 번호·문자 label·선 종류·도형으로 색상 외 의미를 중복 제공한다.

처음 보는 말도 책 읽듯 풀어봐요

이 수업은 쉬운 뜻과 생활 예를 아직 함께 준비하지 못했어요. 설명 없는 정확한 이름은 먼저 보여 주지 않을게요.

그림에서 찾을 쉬운 규칙

  1. 01triage는 expected·environment·collection manifest·state baseline을 고정한 뒤 한 failure axis만 주입한다.
  2. 02assertion diff·fixture lifecycle·mock lookup·LogRecord·traceback과 필요 시 faulthandler dump는 같은 correlation id로 연결한다.
  3. 03수정 승인은 clean process replay, order permutation, secret absence와 regression·negative-control 통과까지 요구한다.

03 · 같이 풀어보기

한 단계씩 따라가면 어렵지 않아요

AI가 수정한 간헐적 주문 처리 결함의 release review에서 재현 가능한 failure triage evidence loop 계약을 적용한다.

함께 볼 작은 예시synthetic td46 fixture · secret 없는 고정 입력 · exact Python 3.14.6
내 말로 8자 이상 적어요 · 0 / 240

04 · 이제 내가 해볼 차례

여기까지 오면 이런 일을 할 수 있어요

oracle·fixture scope·mock boundary·logging context가 섞인 failure를 baseline→inject→localize→replay 순서로 국소화하고 sealed regression evidence를 만든다.

  • 재현 가능한 failure triage evidence loop의 예상 결과·관찰 결과·판정 oracle을 실행 전에 분리해 기록한다.
  • weak oracle·session fixture·wrong patch가 동시에 존재한다.에서 최초 불일치 지점과 근본 원인을 재현 가능한 evidence로 국소화한다.
  • 48 state가 고유하고 마지막 phase에서만 원인 verdict·수정·sealed replay가 공개을 정상·경계·실패 fixture에 적용하고 false green·false red가 없는지 검증한다.

05 · 자주 헷갈리는 지점

틀린 답도 이유를 알면 다음에는 맞힐 수 있어요

01실패한 assertion 줄만 고치면 triage loop가 끝난다.

한 번 더 생각해 볼 질문재현 가능한 failure triage evidence loop의 최소 fixture에서 이 주장을 깨는 관찰값과 판정 근거를 각각 한 줄로 쓰세요.

이렇게 고쳐 생각해요triage는 expected·environment·collection manifest·state baseline을 고정한 뒤 한 failure axis만 주입한다.

02retry에서 통과한 flaky test는 수정된 것으로 볼 수 있다.

한 번 더 생각해 볼 질문재현 가능한 failure triage evidence loop의 최소 fixture에서 이 주장을 깨는 관찰값과 판정 근거를 각각 한 줄로 쓰세요.

이렇게 고쳐 생각해요assertion diff·fixture lifecycle·mock lookup·LogRecord·traceback과 필요 시 faulthandler dump는 같은 correlation id로 연결한다.

03많은 stack dump와 log가 있으면 correlation·redaction이 없어도 강한 evidence다.

한 번 더 생각해 볼 질문재현 가능한 failure triage evidence loop의 최소 fixture에서 이 주장을 깨는 관찰값과 판정 근거를 각각 한 줄로 쓰세요.

이렇게 고쳐 생각해요수정 승인은 clean process replay, order permutation, secret absence와 regression·negative-control 통과까지 요구한다.

06 · 더 궁금할 때만 보기

선생님과 검토자를 위한 믿을 만한 원문

원문과 어디까지 참고했는지 펼쳐 보기처음 배우는 동안에는 열지 않아도 괜찮아요.