테스트 관련 강좌
시스템 테스팅에 대해 알아보니..
프리스케이터
2025. 4. 29. 08:00
시스템 테스팅에 대해 알아보았습니다.
시스템 테스팅은 소프트웨어 수명주기 내에서 여러 모듈이 통합된 전체 시스템을 대상으로 진행하는 테스트 단계로, 실제 사용자 요구사항과 환경을 반영하여 시스템 전체의 기능 및 비기능적 특성을 검증하는 중요한 과정입니다.
1. 시스템 테스팅의 개념 및 목적
- 개념: 시스템 테스팅은 단위 테스트와 통합 테스팅을 거쳐 개별 모듈과 상호작용이 검증된 후, 전체 시스템이 사용자 요구사항(Functional Requirements)과 비기능적 요구사항(Non-Functional Requirements)을 충족하는지를 확인하는 테스트 단계입니다.
이 단계에서는 시스템을 하나의 완성된 제품으로 보고, 실제 운영 환경과 유사한 조건에서 검증합니다. - 목적:
- 전체 시스템이 정의된 요구사항에 맞게 동작하는지, 기능 구현이 올바르게 이루어졌는지 확인합니다.
- 사용자 관점에서 실제 사용 환경에서의 동작, 성능, 보안, 사용성 등을 종합적으로 평가하여 문제점을 사전에 발견하고 수정하는 데 중점을 둡니다.
- 시스템 통합 후 발생할 수 있는 인터페이스, 데이터 흐름, 조작 시나리오 등 복합적인 문제를 조기에 식별하여 안정성을 확보하는 것이 목표입니다.
2. 시스템 테스팅의 주요 특징 및 방법
2.1. 주요 특징
- 전체 시스템 검증: 시스템 테스팅은 개별 모듈의 기능뿐 아니라, 모듈들이 결합된 전체 시스템의 상호작용을 검증합니다.
- 비기능적 요구사항 검증: 성능 테스트, 보안 테스트, 스트레스 테스트, 사용성 테스트 등과 같이 기능 외에 시스템의 품질 특성을 평가하는 테스트가 포함됩니다.
- 사용자 관점의 테스트: 최종 사용자의 관점에서 실제 운영 환경을 모방하여 시스템이 올바른 동작과 적절한 응답 시간을 제공하는지를 중점적으로 확인합니다.
- 블랙박스 테스트: 주로 시스템의 내부 구현보다는 사용자 인터페이스와 기능적 요구사항을 중점적으로 검증하는 방식으로 진행됩니다.
2.2. 테스트 방법 및 진행 절차
- 테스트 계획 수립: 시스템 테스팅 범위, 목표, 테스트 환경, 사용될 도구 및 자원 등을 미리 계획하고 문서화합니다. → 여기에는 테스트 시나리오, 테스트 케이스, 기대 결과 등이 포함됩니다.
- 테스트 케이스 설계: 기능적 요구사항뿐 아니라, 성능, 보안, 사용성 등 비기능적 요구사항을 포함한 다양한 시나리오를 기반으로 테스트 케이스를 작성합니다.
- 테스트 환경 구성: 실제 운영 환경과 유사한 환경에서 테스트를 수행합니다. 이는 하드웨어, 소프트웨어, 네트워크 구성이 실제와 동일하거나 매우 유사해야 하며, 테스트 데이터 및 사용자 시나리오도 실제 사용 조건을 반영합니다.
- 테스트 실행 및 결과 분석: 계획된 테스트 케이스에 따라 테스트를 실행하고, 발생하는 결함을 기록 및 분석합니다. 발견된 문제점은 개발팀과 협력해 수정된 후 재테스트(Re-testing) 및 회귀 테스트(Regression Testing)를 실행합니다.
- 테스트 보고 및 문서화: 전체 테스트 과정과 결과를 정리한 보고서를 작성하여 향후 참고 자료로 활용하고, 문제점과 개선 사항을 지속적으로 관리할 수 있도록 합니다.
3. 시스템 테스팅의 예시
예시: 온라인 뱅킹 시스템
상황: 온라인 뱅킹 시스템은 사용자 로그인, 계좌 조회, 이체, 대출 신청 등 다양한 기능을 포함합니다.
개별 모듈들이 통합되어 전체 시스템이 완성된 후, 시스템 테스팅을 통해 다음과 같은 항목들을 검증합니다.
- 기능 테스트: 사용자가 로그인하여 계좌 정보를 조회하고 이체를 진행할 때, 모든 기능이 명세에 맞게 동작하는지 확인합니다.
- 성능 테스트: 다수의 사용자가 동시에 접속하여 거래를 수행할 때 시스템의 응답속도와 처리량이 안정적인지 테스트합니다.
- 보안 테스트: 비밀번호 암호화, 세션 관리, 침입 탐지 등 보안 관련 요구사항이 충족되는지 검증합니다.
- 사용성 테스트: 실제 사용자들이 시스템을 사용하면서 인터페이스의 편리성 및 직관성을 평가합니다.
발생한 문제는 즉각 기록되고 수정되어 다시 테스트를 수행하는 과정을 거쳐 최종적으로 안정적인 시스템 배포를 목표로 합니다.
# 시스템 테스팅(System Testing)과 통합 테스팅(Integration Testing) 비교
1. 같은 점
- 목적:
- 두 단계 모두 단위 테스트와 컴포넌트 테스트가 완료된 후, 모듈 간의 상호작용이나 전체 기능이 제대로 동작하는지를 검증하여 결함을 조기에 발견하는 데 초점을 맞춥니다.
- 자동화 도구 활용 가능:
- 각각 자동화된 테스트 스크립트를 활용하여 테스트를 반복 실행하고, 코드 수정 시 회귀 테스트를 수행할 수 있습니다.
- 검증 방법:
- 블랙박스 테스트 기법을 주로 활용하여, 내부 구현보다는 요구사항에 부합하는 출력과 동작을 확인합니다.
- QA의 역할:
- 두 단계 모두 QA 엔지니어가 테스트 케이스 작성, 실행, 결과 분석, 결함 보고 및 추적 등을 통해 전체 시스템의 품질을 보증하기 위해 수행됩니다.
2. 다른 점
2.1. 테스트 범위
- 통합 테스팅:
- 초점: 개별 모듈들이 결합될 때, 모듈 간 인터페이스, 데이터 흐름, 상호 작용이 올바르게 이루어지는지를 중점적으로 검증합니다.
- 대상: 여러 단위나 컴포넌트가 통합된 단계로, 아직 전체 시스템이 완성되기 전의 중간 결과물에 해당합니다.
- 예시: 한 주문 처리 시스템에서 주문 모듈과 결제 모듈의 데이터 전달, 인터페이스 규격 준수 여부 등을 테스트하는 경우.
- 시스템 테스팅:
- 초점: 전체 시스템이 요구사항에 따라 통합되어, 최종 사용자 관점에서 기능, 성능, 보안, 사용성 등 비기능적 요소까지 포함한 종합적인 동작을 검증하는 데 중점을 둡니다.
- 대상: 모든 모듈이 통합된 완성된 시스템을 대상으로 하며, 실제 운영 환경과 유사한 조건에서 테스트가 진행됩니다.
- 예시: 온라인 뱅킹 시스템이 전체적으로 로그인, 계좌 조회, 이체, 보안 기능 등이 최종적으로 정상 동작하는지를 테스트하는 경우.
2.2. 실행 시점 및 목적
- 통합 테스팅:
- 모듈 단위로 개발된 개별 요소들을 결합한 후, 모듈 간 데이터 교환 및 상호 작용의 문제점을 조기에 발견하여 개선하는 데 목적이 있습니다.
- 문제가 발생하면 오류의 원인이 어느 모듈 사이의 인터페이스에서 발생했는지 비교적 쉽게 추적할 수 있습니다.
- 시스템 테스팅:
- 전체 시스템이 하나의 완성된 제품으로서 사용자 요구사항, 비즈니스 로직, 시스템 성능을 충족하는지를 최종적으로 검증합니다.
- 실제 사용환경을 모방한 테스트를 통해, 전체적인 사용자 경험과 시스템 안정성을 최종 확인합니다.
결론
요약하면, 통합 테스팅은 개별 모듈들이 결합되어 올바르게 상호 작용하는지에 초점을 맞추며, 시스템 테스팅은 모든 모듈들이 완전히 통합된 상태에서 전체 시스템이 요구사항과 품질 기준을 충족하는지를 확인하는 단계입니다.
두 단계 모두 QA 엔지니어의 역할이 중요하지만, 테스트의 범위와 초점이 서로 다르므로 그에 맞는 테스트 케이스 작성 및 환경 구성이 필요합니다.
시스템 테스팅은 전체 소프트웨어의 통합된 기능과 성능, 보안, 사용성을 종합적으로 검증하는 결정적인 단계입니다.
QA 엔지니어는 실제 운영 환경을 최대한 모방한 테스트 환경에서 모든 기능과 비기능적 요구사항을 확인하여, 최종적으로 사용자에게 안정적인 제품을 제공할 수 있도록 노력해야 합니다.