
요약: AI가 만든 테스트 케이스를 검토할 때는 입력 도메인 파악 → 동치 분할 → 경계값 분석 → 상태/순서/타입·인코딩 예외를 순서대로 적용하면 빠진 경계 조건을 체계적으로 찾을 수 있으며, 아래의 검토표를 사용해 빠진 항목을 기록하고 보완할 수 있습니다.
언제·왜 이 방법이 필요한가
AI는 일반적으로 대표값과 흔한 오류를 잘 제안하지만, 경계값·비표준 입력·상태 기반 시나리오처럼 시스템 요구사항의 작은 예외를 놓치기 쉽습니다. 특히 보안·금융·입력 검증 로직에서 경계 누락은 실제 결함으로 이어지므로 체계적 검토가 필요합니다.
어떻게: 검토 순서(체계적 접근)
- 입력 도메인·타입 정의
각 입력의 타입(정수·실수·문자열·파일 등), 허용 범위, 형식(패턴), 널 허용 여부, 기본값을 명확히 적습니다.
- 동치 분할(Equivalence classes)
정상 클래스와 오류 클래스로 구분해 대표값을 뽑습니다. 예: 정수 입력이라면 양수·음수·0·큰값·널 등.
- 경계값 분석(Boundary Value Analysis)
각 범위의 경계 주변 값(경계-1, 경계, 경계+1)과 임계값을 체크합니다. 오프바이원이 흔한 실수입니다.
- 상태·순서 고려
상태 머신이 있거나 호출 순서에 의존하면, 상태 전환 전후의 입력 조합을 점검합니다(예: 로그인 전/후, 트랜잭션 롤백 이후).
- 타입·인코딩·포맷 예외
문자열의 경우 빈값, 공백, 제어문자, 유니코드, 널 바이트, 긴 문자열, 다른 인코딩을 넣어봅니다. 숫자는 소수, 지수 표기, 문자열 숫자 등.
- 조합·상호작용(Combinatorial)
모든 입력을 조합해 중요한 교차 케이스를 검사합니다. 완전 조합이 비현실적이면 페어와이즈(pairwise)로 축약합니다.
- 비정형 입력·대량·성능 경계
대량 입력, 동시성, 시간·타임아웃 같은 운영 경계도 확인합니다.
- 자동화·프로퍼티 테스트·퍼징
프로퍼티 기반 테스트(예: Hypothesis), 퍼저로 의외의 경계를 찾습니다. AI 제안과 자동화 결과를 교차검증합니다.
- AI 제안 교차검증
AI가 준 케이스를 위 절차와 대조하여 누락을 표로 정리한 뒤, AI에게 "이 표에서 빠진 경계값을 찾아 달라"고 요청하면 발견률이 올라갑니다.
프롬프트 예시(검토 보조용)
AI에게 검토를 의뢰할 때는 구체적 입력 도메인과 현재 제안된 케이스를 함께 줍니다. 예: "quantity: int 1..1000, 현재 케이스: [1, 100, 1000, -1, 0]. 위에서 빠진 경계·타입·인코딩 관련 케이스를 10개 이상 목록으로 제시하라."
구체적 예제: 주문 수량(quantity) 필드 사례
요구사항: quantity는 정수, 1 이상 1000 이하. NULL 불허, 타입 강제 변환은 허용하지 않음. 아래는 AI가 준 초기 케이스와 우리가 추가해야 할 경계·오류 케이스를 정리한 예입니다.
| 입력명 | 타입·도메인 | AI 제안(대표) | 추가로 검토할 정상·오류·경계 | 비고 |
|---|---|---|---|---|
| quantity | int, 1..1000, non-null | 1, 100, 1000, -1, 0 |
|
오프바이원·타입 변환 관찰 필요 |
pytest 예제(단일 필드 단위 테스트)
def validate_quantity(q):
if q is None:
raise ValueError("quantity required")
if not isinstance(q, int):
raise TypeError("quantity must be int")
if q < 1 or q > 1000:
raise ValueError("quantity out of range")
return True
# 테스트 케이스(대표)
import pytest
@pytest.mark.parametrize("input,exc", [
(1, None), (1000, None), (0, ValueError), (1001, ValueError),
("1", TypeError), (1.0, TypeError), (None, ValueError)
])
def test_quantity(input, exc):
if exc:
with pytest.raises(exc):
validate_quantity(input)
else:
assert validate_quantity(input) is True
예상 결과: 위 테스트는 정상 케이스에서 True, 오류 케이스에서 적절한 예외가 발생해야 통과합니다. AI가 처음 제안한 케이스에 대해 위 확장 케이스들이 실패하면 경계 누락입니다.
정상·오류·경계 입력을 검토하는 표(템플릿)
아래 템플릿을 각 입력 필드별로 작성해 빠진 항목을 체크하세요. 실제 팀 리뷰에서 이 표를 사용해 AI 제안과 비교하면 편합니다.
| 입력명 | 타입/도메인 | 정상(대표값) | 오류(대표값) | 경계(구체값) | 비고/우선순위 |
|---|---|---|---|---|---|
| 예: quantity | int, 1..1000, non-null | 1, 100, 1000 | -1, 0, "1", 1.0, null | 1, 2, 999, 1000, 1001 | 보안/재무 민감 → 우선 |
| 예: price | decimal, >=0, 2소수점 | 0.00, 9.99 | -0.01, "9.99a", null | 0, 0.01, 9999999.99 | 반올림/정밀도 확인 |
한계와 흔한 실수
- AI 출력을 그대로 신뢰하면 경계나 특수 문자·인코딩 케이스를 놓칩니다. 항상 도메인 기준으로 교차검증하세요.
- 상태·시퀀스 기반 결함은 단일 입력 케이스만으로 발견되지 않습니다. 시나리오 기반 테스트를 추가하세요.
- 퍼징이나 프로퍼티 테스트는 많은 케이스를 찾지만, 발견된 결과의 의도를 해석하려면 도메인 지식이 필요합니다.
- 국제화·로컬 시간·통화·숫자 포맷 등 운영 환경 차이를 잊지 마세요.
실용 요약: AI가 준 케이스를 표로 정리하고 위의 순서(입력 도메인→동치분할→경계값→상태·인코딩→자동화)로 교차검증하면 빠진 경계 조건을 체계적으로 발견·보완할 수 있습니다. 검토표를 팀의 PR 템플릿이나 테스트 리뷰 체크리스트로 등록해 반복 사용하세요.