개념
한 번의 성공이 항상 성공을 의미하지 않는다
모듈 10(레슨 4)에서 배운 비결정적 요소는, 코드에서는 시간이나 랜덤 값을 통제해서 "없앨 수 있는" 문제였다. 하지만 LLM 자체의 출력 비결정성은 통제해서 없앨 수 없다 — 같은 프롬프트를 열 번 넣으면, 아홉 번은 잘 답하고 한 번은 이상하게 답할 수 있다.
전통적 테스트: 한 번 실행해서 통과하면, 코드가 안 바뀌는 한 계속 통과 (결정적)
LLM 테스트: 한 번 실행해서 통과해도, 다음 실행에서 실패할 수 있음 (비결정적)통과율(Pass Rate)이라는 새로운 지표
단일 성공/실패 대신, 같은 테스트를 N번 반복 실행해서 몇 %가 통과했는지를 지표로 삼는다. 모듈 6(레슨 5)에서 배운 품질 지표(결함 밀도, 결함 탈출률)와 비슷한 발상을, LLM 출력의 신뢰도를 측정하는 데 적용한 것이다.
같은 프롬프트를 100번 실행:
- 92번: 정확하고 안전한 답변
- 5번: 정확하지만 형식이 살짝 다름
- 3번: 부정확한 답변(환각 포함)
→ "핵심 정확도 통과율 92%"라는 근거 있는 숫자로 보고할 수 있다몇 번 반복해야 충분한가
이건 모듈 16(레슨 3)에서 배운 k6 부하 테스트의 "몇 명의 가상 사용자로 테스트할 것인가"와 비슷한 질문이다 — 반복 횟수가 적으면 우연이 결과를 왜곡할 수 있고, 너무 많으면 시간과 비용이 커진다. 일반적으로:
- 초기 탐색 단계: 10~20회 정도로 대략적인 감을 잡음
- 배포 전 신뢰도 확인: 100회 이상으로 더 정밀한 통과율 확보
- 핵심 기능(안전성이 중요한 답변): 더 많은 반복과 다양한 변형 프롬프트허용 가능한 통과율은 얼마인가
모듈 14(레슨 4)에서 배운 품질 게이트 설계 원칙이 여기서도 적용된다 — 모든 기능에 100% 통과율을 요구하는 것은 비현실적이고, 동시에 모든 실패를 허용하는 것도 위험하다.
안전 관련 답변(예: 의료·법률 관련 안내): 매우 높은 통과율 요구,
실패 시 명확히 "확인이 필요합니다"로 유도하는지까지 확인
일반 정보 제공: 상대적으로 유연한 기준 허용 가능통과율만으로는 부족하다 — 실패 유형 분석
92%가 통과했다고 안심하기 전에, 나머지 8%가 어떻게 실패했는지를 봐야 한다. 이건 모듈 6(레슨 5)에서 배운 "지표는 신호일 뿐, 해석이 필요하다"는 원칙과 같다.
실패 유형 A: 형식이 살짝 다름(예: 글머리 기호 대신 번호를 씀) — 경미함
실패 유형 B: 사실관계가 틀림(환각) — 심각함같은 "실패"라도 유형에 따라 심각도(모듈 6 레슨 1)가 완전히 다르다.
회귀 시 통과율 변화 추적하기
모델 버전이 바뀌거나 프롬프트를 수정했을 때, 이전 통과율과 비교하는 것이 회귀 테스트(모듈 10)의 LLM 버전이다.
프롬프트 수정 전: 통과율 92%
프롬프트 수정 후: 통과율 78% ← 회귀가 발생했다는 신호실무에서 왜 필요한가
"이 AI 기능 테스트해봤더니 잘 되던데요"라는 한 번의 확인은, LLM의 비결정성을 감안하면 거의 의미가 없다. QA가 반복 실행과 통과율이라는 도구를 쓰면, "92% 신뢰도로 정상 동작하며, 실패 사례의 대부분은 형식 문제이지 사실 오류는 아니다"처럼 훨씬 근거 있는 보고를 할 수 있다.