소프트웨어 테스트(Software Testing)는 소프트웨어 제품이나 서비스의 품질을 측정하고, 요구사항과 기대에 부합하는지 확인하며, 결함을 발견하기 위해 수행하는 체계적인 활동이다. 국제 표준 ISO/IEC/IEEE 29119에서는 소프트웨어 테스팅을 위한 개념, 프로세스, 문서 및 기법을 정의하고 있으며, 이 표준은 테스트 계획 수립부터 실행, 평가, 종료까지의 전 과정을 체계적으로 관리할 수 있는 프레임워크를 제공한다.
소프트웨어 테스트의 주요 목적은 다음과 같다. 첫째, 소프트웨어가 명시된 요구사항을 충족하는지 확인(Verification)하고 검증(Validation)한다. 둘째, 소프트웨어에 존재하는 결함(Defect)이나 버그(Bug)를 발견하여 수정할 수 있도록 한다. 셋째, 소프트웨어가 의도한 대로 동작하지 않는 상황(장애, Failure)을 사전에 식별한다. 넷째, 소프트웨어의 품질에 대한 신뢰도를 확보한다.
테스트는 수행 방식에 따라 크게 수동 테스트(Manual Testing)와 자동화된 테스트(Automated Testing)로 구분된다. 수동 테스트는 사람이 직접 애플리케이션을 조작하며 테스트를 수행하는 방식이며, 자동화된 테스트는 미리 작성된 테스트 스크립트를 컴퓨터가 실행하는 방식이다. 자동화된 테스트는 지속적 통합(Continuous Integration)과 지속적 제공(Continuous Delivery) 환경에서 핵심적인 구성 요소로 활용된다.
테스트는 소프트웨어 개발 생명주기(SDLC)의 여러 단계에서 다양한 수준과 유형으로 수행된다. 주요 테스트 유형은 다음과 같다.
- 단위 테스트(Unit Test): 애플리케이션의 개별 클래스, 메서드, 모듈 등 가장 작은 단위의 기능이 정상 동작하는지 검증한다. 일반적으로 자동화 비용이 저렴하고 실행 속도가 빠르다.
- 통합 테스트(Integration Test): 여러 모듈 또는 서비스가 상호 연동될 때 올바르게 작동하는지 확인한다. 데이터베이스 상호작용, 마이크로서비스 간 통신 등을 검증한다.
- 기능 테스트(Functional Test): 애플리케이션의 비즈니스 요구사항에 초점을 맞추며, 특정 작업의 출력 결과를 확인한다.
- 엔드투엔드 테스트(End-to-End Test): 전체 애플리케이션 환경에서 사용자의 행동을 복제하여 다양한 사용자 흐름이 예상대로 작동하는지 확인한다.
- 수용 테스트(Acceptance Test): 시스템이 비즈니스 요구사항을 충족하는지 공식적으로 확인하는 테스트이다.
- 성능 테스트(Performance Test): 특정 워크로드에서 시스템의 신뢰성, 속도, 확장성, 반응성을 평가한다.
- 스모크 테스트(Smoke Test): 애플리케이션의 기본 기능이 정상 작동하는지 빠르게 확인하는 기본 테스트이다.
테스트는 프로그램 실행 여부에 따라 정적 테스트(Static Testing, 실행 없이 코드 검토 등 수행)와 동적 테스트(Dynamic Testing, 프로그램을 실행하여 테스트)로도 구분된다. 또한 테스트 기법에 따라 구조 기반(화이트박스) 테스트와 명세 기반(블랙박스) 테스트로 분류되기도 한다.
소프트웨어 테스트 방법론으로는 V-Model, 애자일 테스팅, TDD(Test-Driven Development), BDD(Behavior-Driven Development) 등이 있으며, 테스트 피라미드(Test Pyramid) 원칙에 따라 단위 테스트를 가장 많이 작성하고 상위 수준으로 갈수록 테스트 수를 줄이는 것이 일반적인 전략이다.
소프트웨어 테스트 분야는 ISTQB(International Software Testing Qualifications Board)와 같은 국제 자격 체계를 통해 지식 체계가 정립되어 있으며, ISO/IEC/IEEE 29119, ISO/IEC 25023 등의 국제 표준이 테스팅 개념과 품질 측정 방식을 구체화하고 있다.