음성 테스트란 무엇입니까? 예제가 포함된 테스트 케이스
⚡ 스마트 요약
네거티브 테스트는 소프트웨어 애플리케이션이 예상치 못한 입력 데이터나 작동 조건에 노출될 때 어떻게 동작하는지 검사하여 제품이 충돌하거나 데이터가 손상되거나 보안 취약점이 노출되는 대신 정상적으로 작동하도록 하는 것입니다.

음성 테스트
음성 테스트 네거티브 테스트는 예상치 못한 입력 데이터나 조건에 대해 소프트웨어 애플리케이션을 검사하는 소프트웨어 테스트 유형입니다. 예상치 못한 데이터나 조건은 간단한 폼 필드의 잘못된 데이터 유형부터 고의적인 해킹 공격까지 다양합니다. 네거티브 테스트의 목적은 잘못된 입력으로 인해 애플리케이션이 충돌하는 것을 방지하고 제품의 품질과 안정성을 향상시키는 것입니다.
긍정적인 테스트만으로는 시스템이 정상적인 조건에서만 작동한다는 것을 입증할 수 있습니다. 부정적인 테스트는 동일한 시스템이 비정상적인 조건에서도 작동함을 확인시켜 주며, 이것이 바로 내결함성 제품에 필요한 요소입니다.
음성 테스트의 예
엘리베이터는 정상적인 작동과 고장 시 작동 모두를 쉽게 상상할 수 있기 때문에 네거티브 테스트를 설명하는 데 가장 자주 사용되는 예입니다.
엘리베이터의 작동 원리는 익숙합니다. 층 번호를 누르면 엘리베이터가 해당 층으로 이동하고, 지정된 층에 도착하면 문이 자동으로 열립니다.
아래에는 동일한 리프트에 대한 몇 가지 부정적인 시나리오가 나열되어 있으며, 그 옆에는 양성 테스트가 대신하는 가정이 함께 제시되어 있습니다.
| 음성 테스트 | 긍정적인 테스트 |
|---|---|
| 인원(체중)이 지정된 한도를 초과하면 어떻게 되나요? | 지정된 인원만 엘리베이터에 탑승한다고 가정합니다. |
| 엘리베이터 안에서 누군가 담배를 피우거나 불을 지르면 어떻게 되나요? | 엘리베이터 내부에 연기나 화재가 없을 것으로 가정합니다. |
| 운영 중 정전이 발생하면 어떻게 되나요? | 엘리베이터 작동 중에는 정전이 발생하지 않을 것으로 가정합니다. |
이 모든 사례는 음성 검사 결과로 나타납니다. 하지만 이러한 사례들이 절대 발생하지 않을 것이라고 장담할 수는 없으므로, 각각의 사례를 차단해야 합니다.
과적 상태를 전혀 점검하지 않고, 엘리베이터가 과부하 상태에서 비정상적으로 작동한다고 가정해 봅시다. 이러한 사소한 오류 하나가 시스템의 신뢰성을 손상시키고 심지어 인명 피해까지 초래할 수 있습니다. 이것이 바로 실제적인 네거티브 테스트의 의미이며, 네거티브 테스트가 중요한 이유입니다.
소프트웨어도 마찬가지입니다. 네거티브 테스트는 의도적으로 정상적인 운영 절차에서 벗어난 것입니다. 회원가입 양식을 예로 들어 보겠습니다.
| 음성 테스트 | 긍정적인 테스트 |
|---|---|
| 이메일 입력란에 유효하지 않은 이메일 주소를 입력했습니다. | 이메일 입력란에는 유효한 이메일 주소만 입력할 수 있습니다. |
| 전화번호 입력란에 특수문자 등 유효하지 않은 전화번호를 입력하세요. | 숫자 입력란에는 숫자만 입력할 수 있습니다. |
| 지정된 범위를 벗어난 크기의 이미지를 업로드하세요. | 지정된 크기 범위 내의 이미지만 업로드됩니다. |
| 유효하지 않은 파일(예: ...)을 업로드하세요. XML or SQL 이미지 업로드 필드에 있는 파일 | .jpg 또는 .png와 같은 유효한 이미지 형식만 업로드할 수 있습니다. |
이러한 부정적인 상황들이 발생하더라도 시스템은 여전히 작동해야 합니다. 숫자 입력란에 문자가 입력되면 애플리케이션은 예상치 못한 데이터를 처리할 수 없어 충돌할 수 있습니다. 더 심각한 경우는... SQL 인젝션 같은 필드에 있는 문자열이 데이터베이스 내용을 지워버릴 수도 있습니다. 이러한 종류의 손실 때문에 네거티브 테스트가 존재하는 것입니다.
음성 테스트를 수행하는 이유는 무엇입니까?
테스트는 시간과 비용을 소모하므로 무엇을, 어떻게, 얼마나 테스트할지 결정하는 것이 중요합니다. 프로젝트의 양측 입장에서 네거티브 테스트에 예산의 일부를 투자해야 하는 이유는 각기 다릅니다.
조직 관점
고객에게 양질의 제품을 제공하는 것은 조직의 책임이며, 네거티브 테스트는 이러한 의무의 일부입니다. 또한, 어떤 시스템도 완전히 오류가 없을 수는 없지만, 네거티브 테스트는 조직이 실패를 방지하기 위해 합리적인 모든 조치를 취했다는 증거가 되기도 합니다.
영향력이 결정적인 요소입니다. 전자상거래 사이트가 모든 긍정적인 테스트를 통과했더라도 공격자가 SQL 인젝션을 실행하여 데이터를 삭제할 수 있는 취약점을 가지고 있을 수 있습니다. 이는 심각한 보안 침해이며, 부정적인 테스트만이 이러한 취약점을 찾아낼 수 있습니다.
특히 웹사이트와 같은 공개 애플리케이션은 방문자의 사용 방식을 거의 제어할 수 없으므로, 비정상적인 사용 사례를 차단하고 방지하는 유일한 방법은 네거티브 테스트입니다. 악의적인 사용자에게도 동일하게 적용됩니다. 공격자는 시스템을 파괴할 기회를 적극적으로 노리므로, 해킹 시나리오는 네거티브 테스트 범위에 반드시 포함되어야 합니다.
클라이언트 관점
고객은 취약점이 전혀 없는 제품을 기대하며, 네거티브 테스트는 이러한 기대를 충족시켜 줍니다. 전자상거래나 온라인 주식 거래와 같은 민감한 제품의 경우, 보안 테스트 음성 판정은 선택 사항이 아닌 필수 사항입니다.
고객의 유일한 실질적인 관심사는 비용입니다. 실패의 영향을 분석하고 나면, 고객은 네거티브 테스트 노력을 어느 정도까지 기울여야 할지 결정할 수 있습니다.
음성 판정 방법
네거티브 테스트는 애플리케이션이 실제로 받을 수 있는 모든 입력을 고려하는 것에서 시작하며, 애플리케이션이 받아야 하는 입력뿐만 아니라 실제로 받을 수 있는 모든 입력을 고려해야 합니다. 이러한 각각의 입력은 각각 범주에 속합니다. 테스트 케이스 심지어 해당 기능을 사용하는 방식이 명백히 잘못된 경우에도 마찬가지입니다. 이메일 필드는 유효한 이메일 주소가 아닌 모든 것으로 테스트되고, 이미지 업로드 컨트롤은 이미지가 아닌 모든 파일 형식으로 테스트됩니다.
잘못된 입력값의 목록은 사실상 무한하기 때문에 네거티브 테스트 케이스의 우선순위를 정해야 합니다. .png 파일만 허용하는 이미지 필드의 경우, 업로드될 수 있는 파일 형식에는 .jpeg, .xml, .xls 등이 포함됩니다. XML이나 SQL 파일은 .jpeg 파일보다 훨씬 더 큰 영향을 미칠 가능성이 있으므로 이러한 경우를 먼저 실행합니다. 실행 전에 영향력을 기준으로 테스트 케이스의 우선순위를 정하는 것이 네거티브 테스트 비용을 절감하는 비결입니다.
대부분의 부정적인 테스트 사례는 즉흥적인 시도보다는 몇 가지 확립된 설계 기법에서 비롯됩니다.
- 경계 값: 유효 범위를 벗어난 값, 예를 들어 1부터 100까지의 값을 허용하는 필드에서 0과 101을 바로 입력하는 경우를 생각해 보세요.
- 유효하지 않은 동등 클래스: 예를 들어 숫자 필드에 문자가 포함된 경우처럼, 거부된 입력 유형별로 대표값을 하나씩 선택하세요.
- 오류 추측: 과거 결함 사례를 활용하여 이러한 유형의 기능을 망가뜨릴 가능성이 가장 높은 입력값을 파악합니다.
- 형식이 잘못되었거나 유해한 데이터: 유효성 검사 및 보안 처리를 탐지하는 스크립트 태그, SQL 조각 및 과도하게 큰 페이로드.
- 퍼지 테스트: 처리되지 않은 충돌을 찾기 위해 대량의 무작위 또는 변형된 입력을 자동으로 생성합니다.
- 흐름 중단: 거래 도중에 취소, 새로 고침, 시간 초과 또는 연결 끊김이 발생할 수 있습니다.
어떤 기법을 사용하든 예상되는 결과는 "시스템이 다운되지 않았다"라고만 기록하는 것이 아니라, 유효성 검사 메시지, 업로드 거부, 정상적인 롤백과 같이 통제되고 읽기 쉬운 오류로 기록되어야 합니다.
음성 판정의 장단점
다른 모든 검사 기법과 마찬가지로, 음성 검사에도 장점과 단점이 있으며, 이는 적용 장소, 시기 및 적용 정도에 따라 달라집니다.
음성 테스트의 장점
- 이는 제품 품질을 직접적으로 보호합니다. 왜냐하면 품질이 좋은 제품은 악용될 수 있는 취약점이 없는 제품이기 때문입니다.
- 이는 적용 범위를 넓힙니다. 잘못된 입력은 의도적이든 우발적이든 실제 시스템에 도달할 수 있으므로, 의미 있는 적용 범위를 확보하려면 잘못된 입력 사례도 올바른 입력 사례와 함께 실행되어야 합니다.
- 이는 제품 출시 전에 고객의 신뢰도를 높여줍니다.
- 이는 구조적으로 양성 테스트가 발견할 수 없는 결함, 예를 들어 처리되지 않은 예외 및 취약한 입력 유효성 검사 등을 드러냅니다.
음성 테스트의 단점
- 어떤 상황에서는 시간과 에너지 낭비일 수 있습니다. 예를 들어, 단일 사용자를 위해 개발된 애플리케이션의 경우 100명의 동시 사용자를 테스트하는 것은 의미가 없으므로, 적절한 조건을 선택하는 것이 중요하며 일부 시스템은 부정적인 테스트가 거의 필요하지 않습니다.
- 케이스를 설계하려면 숙련되고 경험이 풍부한 사람이 필요합니다.
- 고객 입장에서는 비용이 추가되고 출시가 지연될 수 있습니다.
- 이는 노력 측면에서 경쟁을 불러일으킵니다. 음성 검사에 많은 비용을 투자하는 팀은 양성 검사에 대한 투자를 소홀히 할 수 있습니다.
