QA 엔지니어 면접을 진행하는 도중 Positive Case, Negative Case, Edge Case에 대한 질문을 받았는데, 개념이 명확히 잡혀있지 않아 답변을 제대로 하지 못했다. TC를 작성하는 등 전체적인 테스트 설계에 핵심이 되는 개념인 만큼, 제대로 정리할 필요가 있다고 느꼈다.
Positive Case
정상적인 입력/상황에서 기능이 기대한 대로 동작하는 지에 대해 검증하는 테스트 케이스
- 목적: 시스템이 정상적인 사용 흐름에서 정확히 동작하는지 확인
- 입력값: 유효하며 일반적인 값 사용
- ex) 로그인 화면에서 올바른 ID, PW 입력 후 로그인 성공
Positive Case는 쉽게 말해서 "정상적으로 잘 사용했을 때, 잘 동작하는가?"를 보는 테스트 케이스다. 대부분의 기능 요구사항에 대한 케이스가 여기에 속한다.
Negative Case
잘못된 입력 또는 예외 상황에서 시스템이 오류를 잘 처리하는지에 대해 검증하는 테스트 케이스
- 목적: 잘못된 사용, 입력, 시스템 상태 등에서 에러 처리가 적절한지 확인
- 입력값: 잘못된 값, 비정상적인 값 사용
- ex) 회원가입 화면에서 ID를 입력하지 않았을 때 "ID를 입력하세요" 등의 에러 메시지 표시
Negative Case는 "비정상적으로 사용했을 때, 시스템이 망가지지 않는지(에러 메시지가 잘 표시되는지)를 보는 테스트 케이스다. 보통 사용자의 실수나 예외 흐름 등을 고려해서 설계한다.
Edge Case
입력 값이나 조건이 한계점에 가까울 때, 시스템이 올바르게 반응하는지 확인하는 테스트
- 목적: 최소값/최대값, 경계값, 시스템 한계 상황에서의 동작 확인
- 입력값: 제한된 범위의 가장자리 값, 입력 크기 한계 등
- ex) Zoom 옵션 필드(0~18 제한)에서 0, 18, -1, 19등 값을 입력
Edge Case는 "경계에 닿은 값을 입력했을 때도 잘 동작하는가?"를 보는 테스트다. 정말 예외적인 상황이기 때문에 비교적 우선순위는 떨어지지만, 소홀히 할 경우 예상치 못한 버그가 발생할 수 있다.
정리
나는 그 동안 Negative Case와 Edge Case에 대한 개념을 헷갈리고 있었다. '예외사항'이라는 큰 틀에 두 가지 개념을 혼동하고 있었다. 물론 Negative Case 또한 '예외적인' 상황의 케이스이긴 하지만, 목적과 범위가 다르다. Negative Case는 일부러 말도 안되는 상황을 가정하는 테스트이고, Edge Case는 정상 범위 내 가장자리(끝)를 찔러보는 테스트라고 보면될 것이다.
Negative와 Edge를 한 번에 사용할 수도 있다. 예를 들어 API 응답에 대한 테스트를 진행한다고 했을 때, Timeout 임계점이 5초라고 가정해보자. 일부러 응답을 임계값에 가깝게 지연시켜 아래와 같은 시나리오를 작성할 수 있다.
시나리오 | 기대 결과 | 설명 |
API 응답 시간이 4.9초일 때 vs 5.1초일 때 응답 차이 확인 | 4.9초: 정상 처리 5.1초: Timeout 처리 후 5초 지연 발생 |
경계 기준 전후의 반응 차이를 보기 위함 |
아직도 갈 길이 멀다. 공부할 것들이 산더미다.
'Minding's Programming > Knowledge' 카테고리의 다른 글
[Testing] SW 테스트 기본 개념들 정리 (0) | 2025.03.04 |
---|---|
[OmniParserV2] LLM과 함께 사용할 수 있는 화면 인식 GUI 자동화 도구 (설치 및 실행 방법) (1) | 2025.02.25 |
[Python 3.13] Python에서 GIL을 비활성화 할 수 있다? (0) | 2025.02.24 |
[QA/Testing] 모바일 앱 테스트 자동화 오픈소스 Appium 사용해보기 (0) | 2025.02.20 |
[프로젝트] Catch Me My Capital - 합리적인 투자 의사결정을 위한 금융 데이터 파이프라인 및 백테스팅 도구 (테스트 도입 편) (0) | 2025.02.18 |