[전통적인 방법론] 폭포수(Waterfall) 모델 - 5. 4단계 – 테스트 (Testing) (3. 통합 테스트 및 시스템 테스트)

2025. 3. 12. 15:51개발/개발 방법론

3. 통합 테스트 및 시스템 테스트

소프트웨어 테스트는 개발된 시스템이 요구사항을 충족하는지 검증하는 중요한 과정입니다.
특히 통합 테스트(Integration Testing) 및 시스템 테스트(System Testing)는 개별 모듈이 조합되었을 때의 동작을 확인하고,
시스템 전체가 정상적으로 작동하는지 검증하는 중요한 단계입니다.

이 문서에서는 통합 테스트 및 시스템 테스트의 개념, 인터페이스 및 모듈 간 테스트 방법, 성능 테스트 및 보안 테스트 개요를 정리하겠습니다.


1️⃣ 통합 테스트(Integration Testing)

📌 통합 테스트란?
여러 개의 모듈(단위 테스트가 완료된 모듈)을 결합하여 올바르게 동작하는지 검증하는 과정
✅ 단일 모듈이 아닌, 모듈 간의 데이터 흐름과 인터페이스를 검증
✅ API, 데이터베이스, 외부 시스템과의 연결이 정상적으로 수행되는지 확인

📌 통합 테스트의 주요 목표
✅ 개별 모듈 간의 데이터 교환이 정상적으로 이루어지는지 확인
모듈 간의 의존성 문제(Dependency Issue) 발견
비즈니스 로직이 정상적으로 연결되는지 검증

📌 통합 테스트 수행 방법

방식  설명
빅뱅(Big Bang) 방식 모든 모듈을 한 번에 통합 후 테스트
상향식(Bottom-Up) 방식 하위 모듈부터 점진적으로 통합 후 테스트
하향식(Top-Down) 방식 최상위 모듈부터 하위 모듈을 통합 후 테스트
샌드위치(Sandwich) 방식 상향식과 하향식 방식을 결합하여 테스트

📌 통합 테스트 예제 (전자상거래 시스템)

1. 사용자 로그인 모듈과 결제 시스템 간의 데이터 연동 확인
2. 장바구니 모듈과 주문 처리 모듈의 상호 작용 테스트
3. 주문 완료 후 이메일 알림 시스템과의 연결 테스트

각 모듈이 독립적으로 동작하는 것이 아니라, 서로 유기적으로 결합되어 정상적으로 작동해야 함


2️⃣ 인터페이스 및 모듈 간 테스트 방법

📌 모듈 간 테스트의 핵심은 "데이터의 흐름과 연동이 정상적으로 이루어지는지 확인"하는 것

📌 인터페이스 및 모듈 간 테스트 주요 방법

테스트 유형 설명
API 테스트 REST API 또는 GraphQL API가 정상적으로 요청 및 응답을 수행하는지 검증
Mock 및 Stub 사용 실제 모듈 대신 Mock 객체 또는 Stub을 활용하여 테스트 수행
데이터베이스 연동 테스트 SQL 쿼리 실행 및 데이터 무결성 확인
서비스 간 통신 테스트 마이크로서비스 환경에서 서비스 간 호출이 정상적으로 수행되는지 검증

📌 API 테스트 예제 (Flask + pytest 활용)

import requests

def test_api():
    response = requests.get("http://localhost:5000/users")
    assert response.status_code == 200
    assert "user_id" in response.json()

API 요청과 응답이 정상적으로 처리되는지 검증 가능

📌 Mock 객체를 활용한 테스트 예제 (Python)

from unittest.mock import MagicMock

class PaymentGateway:
    def process_payment(self, amount):
        pass  # 실제 결제 모듈과 연결

# Mock 객체를 활용한 결제 시스템 테스트
payment_mock = PaymentGateway()
payment_mock.process_payment = MagicMock(return_value="Success")

assert payment_mock.process_payment(100) == "Success"

Mock 객체를 사용하면 실제 결제 시스템 없이도 테스트 가능


3️⃣ 시스템 테스트(System Testing)

📌 시스템 테스트란?
✅ 전체 소프트웨어 시스템이 실제 운영 환경과 유사한 환경에서 정상적으로 작동하는지 검증하는 과정
✅ 기능뿐만 아니라 성능, 보안, 사용성까지 포함하여 테스트 수행
✅ 주로 Selenium(웹 UI 테스트), JMeter(부하 테스트), OWASP ZAP(보안 테스트) 등을 활용

📌 시스템 테스트 수행 단계 1️⃣ 테스트 환경 구축 – 실제 운영 환경과 유사한 환경을 설정
2️⃣ 기능 테스트 수행 – 요구사항에 따라 모든 기능이 정상적으로 동작하는지 확인
3️⃣ 성능 및 보안 테스트 수행 – 부하 테스트, 침투 테스트 등을 통해 시스템 안정성 검증
4️⃣ 사용자 테스트(User Acceptance Testing, UAT) – 최종 사용자가 테스트 수행 후 피드백 반영

📌 시스템 테스트의 주요 유형

테스트 유형 설명
기능 테스트(Functional Testing) 사용자가 기대하는 기능이 정상적으로 동작하는지 검증
성능 테스트(Performance Testing) 시스템의 속도, 처리량, 응답 시간을 검증
보안 테스트(Security Testing) 시스템의 취약점을 식별하고 보안 강화

📌 Selenium을 활용한 UI 자동화 테스트 예제

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://example.com")
assert "Example Domain" in driver.title
driver.quit()

브라우저에서 자동으로 테스트를 실행하여 UI가 정상적으로 동작하는지 확인 가능


4️⃣ 성능 테스트 및 보안 테스트 개요

🔹 성능 테스트 (Performance Testing)

📌 성능 테스트란?
✅ 시스템이 고부하 상태에서도 정상적으로 동작하는지 검증하는 테스트
✅ 웹사이트, API 서버, 데이터베이스 등의 응답 속도, 처리량, 동시 접속자 수 등을 측정

📌 성능 테스트 유형

테스트 유형 설명
부하 테스트 (Load Testing) 시스템이 일정 부하에서 정상 작동하는지 테스트
스트레스 테스트 (Stress Testing) 예상 최대 부하 이상에서의 성능 검증
지속성 테스트 (Soak Testing) 장기간 동작 시 시스템의 안정성 검증

📌 JMeter를 활용한 부하 테스트 예제

jmeter -n -t test_plan.jmx -l test_results.jtl

JMeter를 사용하여 여러 사용자가 동시 접속하는 환경을 시뮬레이션 가능


🔹 보안 테스트 (Security Testing)

📌 보안 테스트란?
✅ 시스템이 해킹, 악성 코드 공격, SQL Injection 등의 보안 취약점에 대해 안전한지 검증
✅ 자동화된 보안 테스트 도구(OWASP ZAP, Burp Suite)를 활용하여 수행

📌 보안 테스트 주요 유형

테스트 유형 설명
취약점 스캐닝 (Vulnerability Scanning) OWASP ZAP 등을 사용하여 보안 취약점 탐색
SQL Injection 테스트 악성 SQL 문을 삽입하여 데이터베이스 보안 검증
XSS(Cross-Site Scripting) 테스트 스크립트 공격을 탐지하여 보안 강화

📌 OWASP ZAP을 활용한 보안 테스트 실행

zap-cli quick-scan http://example.com

웹 애플리케이션의 보안 취약점을 자동으로 분석 가능


📌 결론

📌 통합 테스트는 모듈 간의 연동이 정상적으로 이루어지는지 검증하는 과정
📌 시스템 테스트는 전체 시스템이 운영 환경에서 정상적으로 동작하는지 검증하는 과정
📌 성능 테스트는 시스템이 부하 상태에서도 정상 작동하는지 평가
📌 보안 테스트는 시스템의 보안 취약점을 탐색하고 보호 조치를 수행
📌 적절한 테스트 전략을 수립하여 소프트웨어의 안정성과 신뢰성을 확보하는 것이 중요함 🚀