본문으로 건너뛰기
QA-Lab
중급20

왜 AI 산출물을 교차검증해야 하는가: 만드는 일과 검증하는 일은 다르다

AI가 코드를 짜는 속도는 빠르지만, "빠르게 만들어졌다"와 "맞다"는 다른 이야기다. 이 모듈 전체가 서 있는 전제를 명확히 한다.

  • #AI교차검증
  • #AI산출물검증

개념

다시 떠올리는 전제 — 그럴듯함과 정확함

모듈 18a(레슨 1)에서 "AI는 테스트 케이스를 그럴듯하게 만든다"고 배웠다. 이 원칙은 테스트 케이스뿐 아니라 AI가 생성한 모든 산출물 — 테스트 코드, 자동화 스크립트, 심지어 이 모듈에서 다룰 검증 결과 자체에도 똑같이 적용된다.

"AI가 테스트 코드를 만들었다" ≠ "그 테스트 코드가 맞다"

만드는 일과 검증하는 일은 다른 인지 작업이다

모듈 9(레슨 1)에서 "코드를 짜는 것과 읽는 것은 다른 기술"이라고 배웠다. 여기서 한 걸음 더 나아가면, **"AI가 짠 것을 사람이 검증하는 것"**은 또 다른 별개의 기술이다.

짜기(Generation): "이 요구사항을 만족하는 코드를 만들어라"
검증(Verification): "이미 만들어진 이 코드가 정말 요구사항을 만족하는가?"

AI는 첫 번째 작업(생성)은 매우 빠르게 잘한다. 하지만 AI가 스스로 자신의 산출물을 완벽하게 검증할 수 있다고 가정하면 안 된다 — 이건 모듈 18b(레슨 1)에서 다룬 "LLM-as-Judge도 틀릴 수 있다"는 한계와도 이어진다. 그래서 이 검증 작업은 사람, 그것도 코드를 읽을 줄 아는 QA(모듈 9)가 맡아야 하는 역할이다.

이 모듈에서 다룰 세 가지 함정

AI가 생성한 테스트 코드를 검토할 때, 반복적으로 나타나는 세 가지 문제 유형이 있다.

레슨 2 — 환각 API: 존재하지 않는 함수·메서드를 그럴듯하게 호출
레슨 3 — 가짜 테스트: 실제로는 아무것도 검증하지 않는 테스트
레슨 4 — 커버리지 갭: 명세에 있지만 AI가 놓친 케이스

이 세 가지는 전부 "코드가 실행되고, 통과 표시가 뜨는데도" 여전히 숨어있을 수 있는 문제라는 공통점이 있다 — 겉으로는 멀쩡해 보이는 게 가장 위험하다.

"신뢰하지도 거부하지도 않는다"는 태도

AI가 만든 걸 무조건 의심해서 처음부터 다시 짜는 것도, 무조건 믿고 그대로 쓰는 것도 둘 다 비효율적이다. 이 모듈이 지향하는 태도는 모듈 6(레슨 1)에서 배운 것과 비슷한 **"판단은 사람이, 근거는 체계적으로"**다.

거부: "AI가 짠 건 다 못 믿어" → AI를 쓰는 의미가 없어짐
맹신: "AI가 짰으니 맞겠지" → 이 모듈이 경고하는 모든 위험에 노출됨
교차검증: "AI가 짠 걸 구체적인 기준으로 확인한다" → 이 모듈의 목표

이 능력이 왜 커리큘럼의 정점인가

이 모듈을 검증하려면 모듈 9(코드 읽기, HTTP, SQL)의 기초, 모듈 3(테스트 설계 기법)의 케이스 설계 감각, 모듈 10(단위 테스트, AAA 패턴)의 테스트 구조 이해, 모듈 6(심각도 판단)의 우선순위 감각이 전부 동시에 필요하다. 이 모듈은 새로운 지식을 배운다기보다, 이 커리큘럼 전체에서 쌓아온 능력을 하나의 구체적인 작업(AI 산출물 검증)에 실제로 적용하는 자리다.

실무에서 왜 필요한가

"AI로 테스트 코드를 만들었더니 생산성이 3배 늘었어요"라는 말 뒤에, 그 코드를 검증하지 않았다면 위험한 착각일 수 있다. 이 모듈에서 배울 구체적인 검증 기준을 가진 QA는, AI의 속도를 안전하게 활용하면서도 "겉으로는 통과하지만 실제로는 아무것도 지켜주지 못하는" 테스트 스위트를 만드는 함정을 피할 수 있다.

실습 과제

과제 1 — 생성과 검증 구분하기 (10분)

"AI에게 결제 API 테스트 코드를 짜달라고 요청해서 20개의 테스트가 생성됐다"는 상황에서, "생성" 단계에서 이미 끝난 것과 "검증" 단계에서 QA가 별도로 해야 할 일을 구분해 적는다.

과제 2 — 이 커리큘럼 되짚어보기 (10분)

이 모듈을 위해 필요할 것 같은, 이전 스테이지에서 배운 능력을 3가지 이상 골라(예: 모듈 3의 경계값 분석, 모듈 9의 코드 읽기) 각각이 이 모듈에서 어떻게 쓰일지 예상해 적는다.

자가 체크리스트

  • "그럴듯함"과 "정확함"의 차이를 AI 산출물 전반에 적용해 설명할 수 있다
  • 생성과 검증이 왜 다른 인지 작업인지 설명할 수 있다
  • 이 모듈에서 다룰 세 가지 함정(환각 API, 가짜 테스트, 커버리지 갭)을 나열할 수 있다
  • "신뢰하지도 거부하지도 않는" 태도가 왜 실무적으로 합리적인지 설명할 수 있다

흔한 실수

  • AI가 만든 코드가 실행되고 통과 표시가 뜨면 충분히 검증됐다고 생각한다. 이 모듈에서 다룰 세 함정 모두 "통과 표시가 뜨는데도" 숨어있을 수 있다.
  • AI 산출물을 검증하는 것도 AI에게 맡기면 된다고 생각한다. AI가 자신의 산출물을 완벽하게 검증할 수 있다는 보장이 없다.
  • AI가 짠 건 무조건 다시 짜야 한다고 극단적으로 접근한다. 이러면 AI 활용의 이점 자체가 사라진다 — 균형 잡힌 검증이 핵심이다.

참고 자료

  • Anthropic — Building Effective AI Agents — AI 산출물 검증의 필요성에 대한 공식 논의
  • ISTQB — AI 확장 신디랩 자료 — AI 기반 산출물 검증의 공식 개념