Negative Testing 이란 Positive Testing 의 반대의 의미로 간단하게 설명할 수 있겠다. 이것은 아래와 같이 다시 말할수 있다.
부정 테스트(Negative testing)는 실패 테스트(failure testing) 또는 오류 경로 테스트(error path testing) 라고도 하며 , 테스터가 의도적으로 잘못되었거나 예상치 못한 또는 잘못된 입력을 사용하여 시스템이 어떻게 반응하는지 확인하는 테스트 접근 방식입니다.
애플리케이션이 의도한 대로 작동하는지 확인하는(긍정적 테스트) 대신, 부정적 테스트는 충돌, 취약점 노출 또는 의도치 않은 동작 없이 오류를 올바르게 처리하는지 확인합니다.
예를 들어:
✅ Positive testing : 로그인 양식에 유효한 이메일과 비밀번호를 입력하고 인증이 성공했는지 확인합니다.
❌ Negative testing : 잘못된 이메일 형식(예: "user@domain")을 입력하고 시스템이 오류 메시지를 올바르게 표시하는지 확인합니다.
왜 부정적 테스트를 사용해야 하나요?
부정적 테스트는 단순히 물건을 시험해 보는 것이 아니라 실제 사용 사례에서 소프트웨어 오류를 예방하는 것입니다.
1. 소프트웨어 안정성 및 신뢰성 향상
사용자는 실수를 하고, 네트워크는 실패하고, 예상치 못한 시나리오가 발생합니다. 부정적 테스트는 시스템이 회복성이 있고 정지되거나 충돌하는 대신 오류를 원활하게 처리하도록 보장합니다.
2. 보안 강화
잘못된 오류 처리로 인해 SQL 주입, 버퍼 오버플로 또는 보안 침해와 같은 심각한 취약성이 발생할 수 있습니다. 시스템이 잘못되거나 악의적인 입력에 어떻게 반응하는지 테스트하면 위험을 최소화하고 민감한 데이터를 보호할 수 있습니다.
3. 더 나은 사용자 경험을 보장합니다
잘 테스트된 시스템은 사용자를 난해한 실패나 예상치 못한 동작으로 혼란스럽게 만드는 대신 명확한 오류 메시지로 안내합니다. 부정적인 테스트는 좌절감을 줄여 사용자가 실수에서 쉽게 회복할 수 있도록 도와줍니다.
4. 생산에서 비용이 많이 드는 실패를 방지합니다.
출시 후 중요한 버그를 수정하는 것은 비용이 많이 들고 회사 평판에 해롭습니다. 개발 주기 초기에 부정적인 테스트 사례를 포착하고 해결하면 프로덕션 사고의 가능성이 줄어듭니다.
음성 검사를 효과적으로 수행하는 방법
1. 부정적인 테스트 시나리오 식별
표준 사용 사례를 넘어 다음을 탐색해 보세요.
- Invalid inputs(잘못된 입력) (예: 숫자 필드에 문자 입력, 지원되지 않는 문자 사용)
- Boundary values(경계 값) (예: 입력 한도 초과, 최소 및 최대 허용 값 테스트)
- Unexpected user actions(예상치 못한 사용자 작업) (예: 버튼을 여러 번 클릭, 프로세스 중간에 이동)
- Security threats(보안 위협) (예: 스크립트 삽입, URL 조작, 무단 액세스 시도)
2. 테스트 실행 및 동작 관찰
부정적인 테스트 케이스를 체계적으로 실행하세요. 시스템이 다음 사항을 확인하는지 확인하세요.
✔️ 올바른 오류 메시지를 표시하는지
✔️ 잘못된 작업을 방지하는지
✔️ 디버깅을 위해 오류를 적절히 기록하는지
✔️ 충돌, 정지 또는 취약성을 노출하지 않는지
3. 가능한 곳에서는 자동화하기
탐색적 부정 테스트가 가치 있는 반면, 일부 사례는 지속적인 검증을 보장하기 위해 자동화할 수 있습니다. 예를 들어, 자동화된 스크립트를 사용하여 잘못된 입력을 입력하거나 보안 위협을 시뮬레이션하면 중요한 버그를 더 빨리 발견하는 데 도움이 될 수 있습니다.
4. 문서화 및 추적 문제
부정적인 테스트 중에 애플리케이션이 잘못 실패하면(예: 오류 메시지를 표시하는 대신 충돌) 즉각적인 주의가 필요합니다. 구조화된 테스트 관리 도구를 사용하면 부정적인 테스트 시나리오를 문서화하고, 실패를 추적하고, 적절한 수정을 보장하기가 쉽습니다.
실례
🚨 Twitter Character Limit Bug (2019)
한 사용자가 긴 문자열을 트윗에 붙여 넣으면 모바일 앱이 충돌할 수 있다는 사실을 발견했습니다. 이는 입력 검증이 부족해서 발생했습니다. 전형적인 부정적 테스트 실패 사례입니다.
🚨 Login Bypass Exploits
일부 웹사이트는 로그인 양식이 잘못된 입력을 제대로 처리하지 못해 침해를 당했습니다. 예를 들어, 공격자는 " OR 1=1; --"쿼리를 입력하기만 해도 무단 액세스가 허용되는 시스템을 악용했습니다. 부정적인 테스트를 통해 이를 일찍 감지할 수 있었습니다.
🚨 E-Commerce Checkout Errors
사용자가 잘못된 프로모션 코드를 입력하거나, URL 매개변수를 수정하거나, 필드를 비워두는 경우 일부 체크아웃 시스템이 예기치 않게 실패합니다. 적절한 부정 테스트를 실시했다면 이러한 문제를 예방할 수 있었을 것입니다.
요약 및 결론
네거티브 테스트는 소프트웨어를 깨는 것이 아니라 더 강하게 만드는 것입니다. 사용자가 발견하기 전에 취약점을 발견하여 시스템이 안정적이고 안전하며 사용자 친화적임을 보장합니다.
참고 : https://medium.com/@case_lab/negative-testing-in-qa-356abd434cfd
댓글