소프트웨어 개발 프로세스에 대한 강의를 듣던 중 강사님이 여러 테스트에 대해서 지나가면서 언급하신적이 있어서 한번 정리해보고자 한다.
소프트웨어 테스트를 하는 이유
소프트웨어 테스트는 소프트웨어가 올바르게 동작하고 버그는 없는지 발견하기 위한 과정이다. 소프트웨어의 개발 방법론과 함께 많은 테스트가 함께 연구되어 왔다. 여러 테스트 기법들에 대해 한번 알아보겠다.
블랙박스 테스트(Black-Box Test)
- 블랙박스 테스트는 테스트 대상 소프트웨어의 내부구조 및 소스코드에 대한 접근없이 테스트를 하는 것을 말한다.
- 프로그램의 입력 데이터를 주고 출력 데이터가 제대로 나오는지 확인하는 방법이다.
- 즉, 개발자 입장이 아닌 사용자 입장에서 소프트웨어의 요구사항과 결과물이 일치하는지 확인하기 위한 테스트이다.
화이트박스 테스트(White-Box Tets)
- 블랙박스 테스트와는 반대로 프로그램의 코드나 모듈에 직접 접근하여 제대로 동작하는지 확인하는 테스트를 말한다.
- 개발자 입장에서 소프트웨어의 로직이 제대로 동작하는지 확인하는 테스팅 기법이다.
단위 테스트(Unit Test)
- 모듈 테스트라고도 한다.
- 시스템에서 테스트 가능한 가장 작은 단위를 개별적으로 테스트한다.
- 시스템의 클래스나 함수 단위로 주로 테스트가 진행된다.
통합 테스트(Integration Test)
- 소프트웨어의 구성 요소들을 결합하여 테스트하는 것이다.
- 구성 요소간의 상호작용이 원활하게 이루어지는지 인터페이스를 테스트한다.
- 단위테스트에서는 찾지 못했던 버그를 찾을 수 있다.
인수 테스트(Acceptance Test)
- 단위, 통합 테스트와 달리 비즈리스 로직에 초점을 맞춘다.
- 소트트웨어 인수를 목적으로 하는 테스트이므로 요구사항대로 소프트웨어가 잘 동작하는지를 검증한다.
- 소프트웨어 내부구조는 잘 고려하지 않고 사용자 관점에서 테스트 하는 경우가 많다.
무결성 테스트(Integrity Test)
- 프로그래밍 언어의 문법과 컨벤션을 준수했는지를 확인한다
- 코드의 신뢰도 와 견고성을 검증하는 테스트이다.
부하 테스트(Load Test)
- 시스템에 부하를 지속적으로 증가시켜 테스트한다.
- 실제 시스템에 적용될 예상 트래픽을 사용한다.
- 소프트웨어가 향후 예상되는 로드를 관리할 수 있도록 구성요소에 대한 상한을 결정한다.
스트레스 테스트(Stress Test)
- 시스템이 과부하 상태에서 어떻게 동작하는지를 알아보는 검사이다
- 부하 상태에서 시스템의 모니터링이 정상적으로 이루어지는지, 보안상 문제는 없는지, 장애 복구가 제대로 되는지등을 확인한다.
- 시스템의 오류를 확인하고 복구가 정상적으로 되는지 확인하기 위한 테스트이다.
회귀 테스트(Regression TEst)
- 소프트웨어가 변경되거나 기능개선이 이루어질 경우 그 이루어진 부분만이 아닌 이전에 실시했던 테스트케이스까지 전체 또는 일부를 재시험하는 테스트이다.
- 코드가 변경되기 전에 작동하는 기능에 영향이 생기지는 않았는지 테스트 하는 것을 의미한다.
보안 테스트(Security Test)
- 소프트웨어의 보안상 취약점등을 확인하는 테스트읻.
- 소프트웨어의 인증, 인가, 접근제어 등의 적절하게 제공되고 있는지를 테스트한다.
호환성 테스트(Compatibility Test)
- 소프트웨어가 다른 하드웨어에서 실행될 수 있는지, 다른 소프트웨어와 호환되는지 등을 확인하는 테스트이다.
- 다른 소프트웨어라 함은 브라우저, 운영체제, 데이터베이스 등등 다양한 종류가 있다.
- 하드웨어는 컴퓨터, 모바일 등이 있고 네트워크 환경에 따라서도 테스트를 한다.