블랙박스 테스트
블랙박스 테스트는 애플리케이션의 내부 동작 방식을 알지 못하고 기능성을 검사하는 소프트웨어 테스트 방법이다. 테스터는 코드나 설계에 대한 지식 없이 외부 사용자의 입장에서 시스템에 접근하여, 입력값을 제공하고 출력값을 분석하여 시스템을 평가한다.
블랙박스 테스트의 목적은 사용자의 관점에서 소프트웨어가 기능 및 비기능적 요구사항을 충족하고 예상한 대로 동작하는지 확인하는 것이다. 이러한 유형의 테스트는 기능성, 사용성, 호환성 등 다양한 영역에서 결함을 발견할 수 있다. 블랙박스 테스트는 수동으로 수행될 수도 있고 자동화된 도구를 이용해 수행될 수도 있다.
블랙박스 테스트는 다음과 같은 방법으로 수행할 수 있다.
1. 구문 기반(Syntax-Driven) 테스트
Syntax-Driven Testing(구문 기반 테스트)은 언어의 구문 규칙을 이용하여 표현할 수 있는 시스템에 대해 사용되는 테스트 유형이다. 예를 들면, 컴파일러나 문맥-자유 문법으로 표현할 수 있는 프로그래밍 언어 등이다.
구문 기반 테스트에서는 각 문법 규칙이 적어도 한 번 사용되도록 테스트 케이스를 생성한다. 이는 시스템의 구문 규칙이 올바르게 구현되었는지 확인하고 시스템에 구문 관련 문제가 없는지 보장하기 위해 수행된다.
2. 동치 분할(Equivalence partitioning) 테스트
동치 분할(Equivalence partitioning) 테스트는 소프트웨어 테스트에서 일반적으로 사용되는 기법 중 하나로, 입력값을 분류하여 각각의 동등한(동치) 그룹으로 나누고, 이 중 하나의 대표값만을 선택하여 테스트하는 방법이다.
동치 그룹이란, 시스템에서 동일한 방식으로 처리되는 입력값들의 집합을 의미한다. 이를 통해 테스트 케이스의 수를 줄이면서도 시스템의 다양한 입력값을 효과적으로 테스트할 수 있다.
이 기법은 두 단계로 이루어진다.
- 동치 클래스의 식별 - 입력 도메인을 최소한 두 개의 집합으로 분할한다. 유효한 값과 유효하지 않은 값으로 구분할 수 있다. 예를 들어, 유효한 범위가 0에서 100까지인 경우 49와 같은 유효한 입력값과 104와 같은 유효하지 않은 입력값을 선택한다.
- 테스트 케이스 생성 - (i) 유효한 입력 값 및 유효하지 않은 입력 값에 대해 각각 고유한 식별 번호를 지정한다. (ii) 유효한 값 및 유효하지 않은 값에 대한 모든 테스트 케이스를 커버하는 테스트 케이스를 작성하되, 두 개 이상의 유효하지 않은 입력이 서로 영향을 미치지 않도록 한다. 예를 들어, 숫자의 제곱근을 계산하는 경우, 동치 클래스는 다음과 같이 된다.
- 정확한 제곱수인 정수 - 결과는 정수가 됩니다.
- 정확한 제곱수가 아닌 정수 - 결과는 소수점 이하의 수가 있는 실수가 됩니다.
- 양의 소수
- 음의 정수 또는 소수
- 숫자 이외의 문자, 예를 들면 "a", "!", ";" 등.
3. 경계값 분석(Boundary value analysis)
경계값은 오류가 발생하기 좋은 곳이다. 따라서 입력 도메인의 경계 값에 대한 테스트 케이스를 설계하면 테스트의 효율성이 높아지며 오류를 발견할 확률도 증가한다. 예를 들면 - 유효한 범위가 10에서 100이면 유효하지 않은 입력뿐만 아니라 10, 100에 대해서도 테스트를 수행한다.
4. 원인 효과 그래프(Cause-effect Graphing)
원인 결과 그래프(Cause-effect Graphing)는 논리적 입력(원인)과 해당 작업(효과) 간의 관계를 확립하는 기술이다. 원인과 효과는 부울 그래프를 사용하여 나타낸다.
다음 단계를 따른다.
- 입력(원인)과 출력(효과)을 식별한다.
- 원인-효과 그래프를 작성한다.
- 그래프를 결정 테이블로 변환한다.
- 결정 테이블 규칙을 테스트 케이스로 변환한다.
다음과 같은 원인-효과 그래프에서
다음과 같은 의사결정 테이블로 변환할 수 있다.
각 열은 테스트를 위한 규칙에 해당하므로, 이는 4개의 테스트 케이스를 만들어야 한다는 것을 의미한다.
5. 요구사항 기반 테스팅(Requirement-based testing)
요구사항 기반 테스팅(Requirement-based testing)은 소프트웨어 시스템의 SRS(Software Requirements Specification)에서 제공된 요구사항을 검증하는 테스트 기법이다. 이를 통해 시스템이 요구사항을 충족시키는지 여부를 확인할 수 있다. 요구사항은 테스트 케이스를 작성하는 데 사용된다. 이 방법은 개발자와 고객 간의 의사소통을 돕고, 시스템이 기대되는 대로 작동하는지 확인하는 데 중요한 역할을 한다.
6. 호환성 테스트(Compatibility testing)
테스트 케이스 결과는 제품뿐만 아니라 기능 제공을 위한 인프라에도 의존한다. 인프라 매개변수가 변경되어도 제대로 작동해야 한다. 소프트웨어 호환성에 영향을 주는 몇 가지 매개변수는 다음과 같다.
- 프로세서(Pentium 3, Pentium 4) 및 다양한 프로세서
- 컴퓨터의 아키텍처와 특성(32비트 또는 64비트)
- 데이터베이스 서버와 같은 백엔드 구성 요소
- 운영 체제(Windows, Linux 등)
블랙박스 테스팅 유형
다음은 블랙박스 테스팅의 여러 카테고리다.
기능적 테스트(Functional Testing)
시스템 소프트웨어의 기능적 요구사항을 결정하는 테스트다.
회귀 테스팅(Regression Testing)
새롭게 추가된 코드가 기존 코드와 호환되는지 확인하는 것이다. 다른 말로 하면, 새로운 소프트웨어 업데이트가 소프트웨어의 기능에 영향을 미치지 않도록 보장한다. 이는 시스템 유지 보수 작업 및 업그레이드 후에 수행된다.
비기능 테스팅(Nonfunctional Testing, NFT)
비기능 테스트는 기능적인 소프트웨어 테스팅이 아닌, 소프트웨어의 성능, 사용성, 확장성 등을 중점적으로 테스트하는 것을 말한다. 예를 들어, 소프트웨어의 응답 시간, 로딩 시간, 사용자 인터페이스, 보안 등을 검증할 수 있다. 이러한 테스트는 소프트웨어의 기능 이외의 요소들이 소프트웨어의 품질에 영향을 미칠 때 유용하다.
블랙박스 테스트에 사용되는 도구
- Appium : 모바일 앱과 웹 앱을 자동화하는 오픈소스 프레임워크이다. 이 도구는 Android 및 iOS 플랫폼의 앱을 자동으로 테스트할 수 있다. Appium은 Selenium WebDriver 프로토콜을 사용하여 모바일 앱을 자동화한다. 또한, Appium은 여러 언어에서 작성된 클라이언트 라이브러리를 지원하여, Python, Ruby, Java, JavaScript 등에서 사용할 수 있다.
- Selenium: 무료이며 오픈소스 자동화 도구다. 웹 응용 프로그램 테스트를 위해 사용된다. Selenium은 테스트 스크립트를 작성하기 위한 여러 언어와 통합되며 웹 응용 프로그램을 자동화하고 테스트하기 위한 기능을 제공한다. Selenium은 크로스 브라우저 테스트를 지원하여 동일한 테스트를 여러 웹 브라우저에서 수행할 수 있다. 이는 사용자가 여러 웹 브라우저와 운영 체제를 가진 사용자를 대상으로 하는 웹 응용 프로그램을 개발하는 데 매우 유용하다.
- Microsoft Coded UI: 사용자 인터페이스(UI) 테스트를 자동화하기 위한 도구다. Visual Studio를 사용하여 작성된 .NET 기반 애플리케이션의 UI 컨트롤을 검사하고 조작하여 UI의 기능 및 성능을 테스트할 수 있다. 이 도구를 사용하면 테스트를 더 빠르게 실행하고 반복할 수 있으며, UI 테스트를 더욱 강력하고 견고하게 만들 수 있다.
- Applitools: 인공지능(AI)을 활용한 자동화 UI 테스트 도구다. Applitools는 시각적 인식 기술을 사용하여 웹, 모바일 및 데스크톱 애플리케이션의 UI를 자동으로 테스트하고, 설계적인 오류를 찾아낸다. 이를 통해 개발자와 QA 팀은 빠르고 정확한 UI 테스트를 수행할 수 있으며, 테스트 결과를 더 쉽게 관리할 수 있다. Applitools는 다양한 프로그래밍 언어와 테스트 자동화 프레임워크와 호환되며, CI/CD 파이프라인과 통합하여 사용할 수 있다.
- HP QTP: HP QuickTest Professional의 약자로, HP사에서 개발한 테스트 자동화 도구다. 이 도구는 테스트 수행, 디버깅 및 테스트 결과 보고서 생성과 같은 작업을 자동화하여 테스트 프로세스를 효율적으로 관리할 수 있도록 지원한다. HP QTP는 GUI 및 웹 기반 응용 프로그램을 테스트하는 데 사용된다. HP QTP는 기능 테스트, 성능 테스트 및 보안 테스트 등을 수행할 수 있다. 이 도구는 VBScript 언어를 사용하여 테스트 스크립트를 작성한다.
블랙박스 테스트의 특징
1. 독립적인 테스팅: 블랙박스 테스트는 애플리케이션 개발에 참여하지 않는 테스터들에 의해 수행되어 테스트가 공정하고 중립적임을 보장한다.
2. 사용자 관점에서의 테스팅: 블랙박스 테스트는 최종 사용자의 관점에서 수행되어 애플리케이션이 사용자 요구 사항을 충족하고 사용이 용이한지 확인할 수 있다.
3. 내부 코드에 대한 지식 없어도 됨: 블랙박스 테스팅을 수행하는 테스터들은 애플리케이션의 내부 코드에 액세스 할 수 없기 때문에 애플리케이션의 외부 동작과 기능을 테스트하는 데 집중할 수 있다.
4. 요구 사항 중심 테스팅: 블랙박스 테스팅은 일반적으로 애플리케이션의 요구 사항에 기반하여 수행되므로 애플리케이션이 필요한 사양을 충족시키도록 보장한다.
5. 다양한 테스팅 기술: 블랙박스 테스팅은 기능 테스트, 사용성 테스트, 인수 테스트, 회귀 테스트와 같은 다양한 테스팅 기술을 사용하여 수행될 수 있다.
6. 자동화하기 쉬움: 블랙박스 테스팅은 다양한 자동화 도구를 사용하여 쉽게 자동화할 수 있으며 전체적인 테스트 시간과 노력을 줄일 수 있다.
7. 확장성: 블랙박스 테스팅은 테스트 대상인 애플리케이션의 규모와 복잡성에 따라 확장 가능하다.
8. 애플리케이션에 대한 제한된 지식: 블랙박스 테스트를 수행하는 테스터는 테스트 중인 응용프로그램에 대한 지식이 제한되어 있으므로 테스트가 최종 사용자가 응용프로그램과 상호 작용하는 방식을 보다 잘 나타낼 수 있다.
블랙박스 테스트의 장점
1. 테스터가 블랙박스 테스트를 구현하기 위해 더 많은 기능 지식이나 프로그래밍 기술을 보유할 필요 없다.
2. 더 큰 시스템에서 테스트를 구현하는 데 효율적이다.
3. 테스트는 사용자 또는 클라이언트의 관점에서 실행된다.
4. 테스트 케이스는 쉽게 재현할 수 있다.
5. 기능 명세서에서 모호한 부분이나 모순점을 찾는 데 사용된다.
블랙박스 테스트의 단점
1. 테스트 프로세스를 구현하는 동안 동일한 테스트를 반복할 가능성이 있다.
2. 명확한 기능 사양이 없으면 테스트 케이스를 구현하기가 어렵다.
3. 테스트 단계별로 입력이 복잡하기 때문에 테스트 케이스를 실행하기가 어렵다.
4. 때때로 테스트 실패의 원인을 찾기 어렵다.
5. 응용 프로그램의 일부 프로그램이 테스트되지 않을 수 있다.
6. 제어 구조의 오류는 드러나지 않는다.
7. 다양한 입력 샘플로 작업하는 것은 고된 작업이 될 수 있으며 많은 시간을 소비할 수 있다.
'Software Engineering > Testing & Debugging' 카테고리의 다른 글
경계값 분석(Boundary value analysis) (3) | 2024.04.26 |
---|---|
Debugging (0) | 2023.04.23 |
화이트 박스 테스트 (0) | 2023.04.22 |
테스트 가이드라인 (2) | 2023.04.16 |
소프트웨어 테스트의 7가지 원칙 (0) | 2023.04.15 |
댓글