개념
AI가 잘 만드는 것과 잘 놓치는 것
AI에게 "이 함수의 테스트를 만들어줘"라고 하면, 명세에 명시적으로 적힌 정상 케이스는 잘 만들어낸다. 문제는 모듈 3에서 배운 설계 기법이 겨냥하는, "명시적으로 적혀있진 않지만 당연히 확인해야 하는" 케이스들이다.
AI가 잘 만드는 것: "가격이 10000원이고 할인율이 10%면 9000원이다"
AI가 자주 놓치는 것: 할인율이 정확히 0%일 때, 100%일 때, 음수일 때,
가격이 0원일 때(모듈 3 레슨 1의 경계값)모듈 3의 설계 기법을 검증 체크리스트로 재사용하기
새로운 기법을 배우는 게 아니라, 이미 배운 것을 거꾸로 활용하는 것이 이 레슨의 핵심이다.
경계값 분석(모듈 3 레슨 1) 체크하기
질문: "AI가 만든 테스트에 정확히 경계에 있는 값(최솟값, 최댓값,
그 바로 안팎)이 있는가?"
예: "재고가 0개일 때 구매 버튼이 비활성화된다"는 명세가 있다면,
AI가 만든 테스트에 정확히 재고 0개, 1개인 케이스가 있는가?동등분할(모듈 3 레슨 1) 체크하기
질문: "입력값의 각 그룹(유효한 범위, 무효한 범위)이 골고루
대표되는가, 아니면 전부 비슷한 정상값만 테스트하는가?"결정 테이블(모듈 3)이나 페어와이즈(모듈 3 레슨 5) 체크하기
질문: "조건이 여러 개 조합될 때(예: 회원등급 × 쿠폰 종류), AI가
만든 테스트가 몇 가지 조합만 다루고 있지는 않은가?"악성 입력·예외 상황(모듈 3 레슨 8~9) 체크하기
질문: "빈 문자열, null, 매우 긴 입력, 특수문자 같은 비정상
입력에 대한 케이스가 있는가?"명세를 나란히 놓고 대조하기
가장 실용적인 방법은, 명세와 AI가 만든 테스트 목록을 나란히 놓고, 명세의 각 조건이 테스트로 몇 개나 대응되는지 표로 정리하는 것이다.
명세 조건 대응 테스트 개수
쿠폰 코드가 유효할 때 2개
쿠폰 코드가 만료됐을 때 0개 ← 갭
쿠폰 코드가 존재하지 않을 때 0개 ← 갭
쿠폰 최소 주문 금액 미달일 때 0개 ← 갭이 표는 모듈 12(레슨 4)에서 배운 계약 테스트의 발상과 비슷하다 — "약속(명세)과 실제(테스트)가 일치하는가"를 명시적으로 대조하는 것이다.
커버리지 도구와 함께 쓰기
모듈 10(레슨 5)에서 배운 커버리지 도구(라인·브랜치 커버리지)는 이 작업을 보완할 수 있다. 브랜치 커버리지가 낮은 부분은 AI가 아예 건드리지 않은 조건 분기일 가능성이 높다 — 다만 모듈 10(레슨 5)에서 배운 것처럼, 커버리지 도구는 "실행 여부"만 볼 뿐 "경계값이 정확한지"까지는 확인 못 한다는 한계는 여전히 그대로다.
빈틈을 찾은 다음에는
빈틈을 발견했다고 전부 사람이 직접 채울 필요는 없다 — 모듈 18a(레슨 1)에서 배운 것처럼, 발견한 빈틈을 구체적으로 명시한 프롬프트로 AI에게 "이 경계값 케이스도 추가해줘"라고 다시 요청하는 것이 효율적이다. 빈틈을 찾는 것은 사람의 역할, 채우는 초안을 만드는 것은 다시 AI에게 맡길 수 있다.
실무에서 왜 필요한가
"AI가 테스트 케이스 30개를 만들었다"는 숫자에 안심하는 대신, 명세 대조표를 만들어보면 실제로는 정상 케이스만 20번 반복되고 정작 중요한 예외 상황은 하나도 없다는 게 드러나는 경우가 흔하다. 모듈 3의 설계 기법을 검증 체크리스트로 재사용할 줄 아는 QA는, AI가 만든 테스트의 진짜 커버리지를 정확히 판단할 수 있다.