본문 바로가기
성공지식백과 로고성공지식백과

AI가 작성한 테스트는 무엇을 검증하고 있을까

테스트가 모두 통과해도 요구사항의 경계에서 오류가 남을 수 있습니다. 기대값의 출처와 실패할 조건을 보면 AI가 만든 테스트를 평가할 수 있습니다.

AI 코딩테스트 설계경계값품질 검증
글 정성준 6분 읽기
공유:

배송비 함수를 AI로 만들고 테스트까지 받았는데, 주문액이 정확히 5만 원일 때만 배송비가 붙는 오류가 남습니다. 함수와 테스트가 모두 ‘5만 원 초과’를 기준으로 계산했다면 같은 오류를 공유합니다. Playwright의 테스트 원칙도 사용자가 관찰하는 동작을 검증하고 구현 세부사항에 기대지 않도록 권고합니다.

AI 생성 테스트를 검토할 때는 테스트 이름과 개수에 앞서 기대값의 근거를 읽습니다. ‘지금 함수가 돌려주는 값’과 ‘합의한 요구사항이 정한 값’이 같아 보이는 동안에는 이 차이가 잘 드러나지 않습니다.

기대값을 만들기 전에 확정할 요구사항

‘5만 원 이상 무료배송’에는 기준 금액을 할인 전후 중 어디에서 계산하는지, 부가 비용을 포함하는지, 어떤 배송 지역에 적용하는지가 빠져 있습니다. 이 조건이 정해지지 않은 상태에서 AI가 만든 기대값은 작성 과정에서 보탠 가정입니다. 누가 선택했는지 모르는 가정을 테스트로 굳히면 기능을 고칠 때도 무엇이 맞는지 판단하기 어렵습니다.

설명용 가상 쇼핑몰의 규칙을 다음처럼 고정합니다. 입력은 할인 뒤 상품 합계이며 원 단위의 0 이상 정수입니다. 50,000원 이상이면 배송비는 0원, 그 미만이면 3,000원입니다. 문자열·소수·음수·유한하지 않은 숫자는 오류로 거부합니다. 지역 할증과 회원 등급은 이 함수의 범위에서 제외합니다.

정한 규칙으로 정상값의 기대 결과를 함수 실행 없이 계산할 수 있습니다. 40,000원에는 3,000원, 50,000원에는 0원입니다. 잘못된 입력은 배송비를 매기기 전에 거부한다는 실패 조건도 생깁니다. 오류 종류와 화면에 보여 줄 문구까지 계약에 필요하다면 따로 확정합니다.

요구사항과 테스트를 연결할 때는 규칙 한 줄에 검사 하나를 기계적으로 맞추지 않습니다. 무료배송 규칙에는 경계 바로 아래와 경계값이 모두 필요하고, 잘못된 입력 규칙에는 자료형·범위·유한성을 서로 나눈 사례가 필요합니다. 여러 조건이 결합된 할인은 조건 조합별 결과를 먼저 적는 편이 검토하기 쉽습니다.

같은 계산식을 복사하면 오류도 함께 통과한다

아래 코드는 방금 정한 규칙의 경계를 잘못 구현한 예시입니다. 첫 테스트의 기대값도 같은 비교식을 사용하므로 50,000원에서 오류를 놓칩니다. 둘째 테스트는 요구사항에서 확정한 0원을 직접 기대값으로 사용합니다.

javascript복사
import assert from 'node:assert/strict';

function shippingFee(subtotal) {
  return subtotal > 50000 ? 0 : 3000;
}

const subtotal = 50000;

// 구현과 같은 계산을 기대값에 복사한 검사: 통과
assert.equal(shippingFee(subtotal), subtotal > 50000 ? 0 : 3000);

// 요구사항의 "50,000원 이상"을 검사: 실패
assert.equal(shippingFee(50000), 0);

2026년 10월 28일 UTC에 Windows·Node.js v24.19.0에서 이 가상 함수의 두 검사를 실행했습니다. 같은 식을 복사한 검사는 통과했고, 기대값을 0원으로 둔 검사는 실제 반환값 3,000원 때문에 실패했습니다. 저장된 실행 기록은 이 작은 예시를 확인한 것이며 실제 쇼핑몰의 품질 평가가 아닙니다.

기대값의 계산식도 명세에서 직접 나올 수 있습니다. 환율·세율처럼 명세가 수식으로 정해진 기능은 수식 자체가 요구사항입니다. 다만 테스트가 운영 코드의 보조 함수를 다시 호출해 답을 만들거나, 같은 분기문을 그대로 옮겼다면 별도의 근거로 계산한 대표값을 함께 둡니다. 같은 계산 경로만 비교하면 그 경로의 공통 오류를 찾기 어렵습니다.

내부 호출 횟수 검사가 필요한 경우도 있습니다. 외부 결제 호출을 한 번으로 제한하는 계약이라면 호출 횟수가 관찰할 결과가 됩니다. 단순히 현재 함수가 보조 함수를 두 번 부른다는 이유로 그 횟수를 고정하면, 동작을 유지한 리팩터링에도 테스트가 깨집니다. 검사가 지키려는 약속을 설명할 수 있는지가 판단 기준입니다.

정상값·경계값·잘못된 입력의 관찰값

ASTQB가 설명하는 명세 기반 테스트 기법은 같은 방식으로 처리될 입력을 묶는 동등분할과, 순서가 있는 구간의 끝을 검사하는 경계값 분석을 구분합니다. 앞의 배송비 규칙에서는 0 이상 50,000원 미만과 50,000원 이상이 서로 다른 정상 구간입니다. 허용하지 않는 값은 별도 구간으로 남습니다.

다음 표는 이 가상 규칙의 검사 설계입니다. 모든 항목을 실행했다는 결과표가 아니며, 앞에서 실제 실행한 값은 50,000원 한 개입니다.

입력요구사항에서 정한 결과이 검사가 잡는 문제
0원배송비 3,000원유효한 최솟값을 누락하는 오류
40,000원배송비 3,000원일반 유료 구간의 계산 오류
49,999원배송비 3,000원무료 구간을 너무 일찍 시작하는 오류
50,000원배송비 0원이상과 초과를 혼동하는 오류
50,001원배송비 0원무료 구간의 일반 동작 오류
-1원입력 오류음수를 정상 주문으로 처리하는 오류
문자열 50000 또는 50,000.5원입력 오류자동 형 변환 또는 소수 허용 오류
NaN 또는 Infinity입력 오류유한성 검사를 빠뜨리는 오류

표에 없는 조건은 여전히 검토 대상으로 남습니다. 주문 취소나 쿠폰 적용 뒤 금액이 바뀌면 배송비를 다시 계산하는지, 화면 표시와 서버 저장값이 맞는지는 함수 하나의 입력표로 확인되지 않습니다. 이벤트 순서가 결과를 바꾸면 ‘쿠폰 전 주문 → 쿠폰 적용 → 금액 재계산’처럼 상태 변화도 별도로 검사합니다.

비동기 화면에서는 버튼 클릭 직후의 성공 문구와 실제 저장 결과를 구분합니다. 저장 뒤 새로고침해도 주문이 남는지, 실패 응답에서는 성공 표시가 뜨지 않는지 관찰값을 정합니다. Playwright의 웹 우선 검증 설명은 조건을 기다리며 확인하는 assertion을 권고합니다. 고정 시간만 기다리면 느린 환경에서는 실패하고, 빠른 환경에서는 불필요하게 기다릴 수 있습니다.

틀린 코드에 실패하는지 시험하기

새 테스트를 검토할 때는 찾으려는 오류 하나를 말로 적고 그 오류가 있는 코드에 검사가 실패하는지 봅니다. 배송비 조건을 >=에서 >로 바꾸거나 거부해야 할 입력의 검사를 제거하는 방식입니다. 정상 코드와 오류 코드를 같은 검사로 구분할 수 있으면 해당 오류에 대한 검출 능력을 확인할 수 있습니다.

이런 점검을 체계화한 방법이 변이 테스트입니다. Stryker의 변이 연산자 문서에는 비교·조건·논리 연산 등을 바꾸는 예시가 나옵니다. 의도적으로 바꾼 코드가 살아남았으면 도달하지 못한 경로인지, 실행했지만 결과를 확인하지 않은 경로인지 살펴볼 단서가 됩니다.

모든 코드 변경이 요구사항 위반은 아닙니다. 결과가 같은 변경까지 모두 실패하게 만들면 테스트가 구현에 더 단단히 묶입니다. 변이 점수만 높이려고 내부 값 검사부터 늘리기보다, 살아남은 변경이 실제 계약을 위반하는지 먼저 판정합니다. 외부 서비스 응답을 가짜로 바꾸는 테스트에서도 가짜가 실제 API의 오류 형태와 저장 시점을 얼마나 반영하는지 확인합니다.

테스트 통과 뒤에도 남는 기능·보안·운영 책임

배송비 함수 테스트의 통과는 정해 둔 입력과 결과에 대한 증거입니다. 실제 사용자의 주문 흐름, 계정 간 접근 제한, 외부 결제 실패, 데이터 복구 시간은 다른 관찰과 실행 조건이 필요합니다. 권한과 비밀값을 다루는 구체적인 점검은 바이브 코딩 앱의 배포 전 보안 검사에서 이어집니다.

AI에게 테스트를 맡길 때는 요구사항 원문, 확정한 가정, 기대값 계산 근거, 실패해야 할 사례, 실행 명령과 실제 결과를 함께 받습니다. 작성된 파일과 실행된 파일이 같은지 확인하고, 건너뛴 검사와 재시도 뒤에만 통과한 검사도 남깁니다. 실행 환경이 없어서 만들어 둔 테스트는 ‘미실행’으로 표시합니다.

합의한 요구사항의 대표값과 실패 조건이 연결돼 있고, 해당 오류를 넣었을 때 검사가 실패하며, 실행하지 않은 품질 영역을 설명할 수 있으면 검토를 마칠 근거가 생깁니다. 모델의 벤치마크 점수와 개별 저장소에서 채택할 조건을 비교하는 일은 별도 평가로 다룹니다.

자료 확인 기준: 2026년 10월 28일 UTC. 테스트 도구의 API와 지원 동작은 개정 시 다시 확인합니다.

저장소 단위의 AI 코딩 평가
관련 글