CS

소프트웨어 테스트

2026년 01월 30일 07:22

Software Test

1. 소프트웨어 테스트란?

  • 소프트웨어가 요구사항에 맞게 동작하는지 확인하는 과정

  • 오류(Error) 및 결함(Bug)을 발견하기 위한 활동이며 결함이 없음을 증명하는 활동이 아님

  • 살충제 패러독스: 동일한 테스트 케이스를 반복해서 수행하면 새로운 결함을 더 이상 발견하지 못하는 현상

  • 파레토의 법칙: 소프트웨어 테스트에서는 전체 결함의 대부분이 소수의 모듈에 집중되어 발생

2. 테스트의 목적

  • 오류 및 결함 발견
  • 소프트웨어 품질 향상
  • 신뢰성 확보

3. 생명주기 단계별 테스트 (V-모델 기준)

개발 단계테스트 단계
요구사항 분석인수 테스트
시스템 설계시스템 테스트
아키텍처 설계통합 테스트
모듈 설계단위 테스트

4. 테스트 단계별 정리

단위 테스트 (Unit Test)

  • 대상: 함수, 클래스, 단일 모듈
  • 수행자: 개발자
  • 목적: 모듈 내부 로직의 정확성 검증
  • 특징
    • 내부 구조를 고려한 테스트
    • 구현 직후 수행
    • 화이트박스 테스트 중심

통합 테스트 (Integration Test)

  • 대상: 여러 모듈의 결합
  • 수행자: 개발자 또는 테스트 담당자
  • 목적: 모듈 간 인터페이스 오류 검출
  • 특징
    • 상위·하위 모듈 연동 테스트
    • 스텁(Stub)과 드라이버(Driver) 사용

시스템 테스트 (System Test)

  • 대상: 전체 시스템
  • 수행자: 테스트 담당자
  • 목적: 시스템 요구사항 충족 여부 검증
  • 특징
    • 실제 환경과 유사한 조건
    • 기능 테스트 + 비기능 테스트 포함
    • 블랙박스 테스트 중심

인수 테스트 (Acceptance Test)

  • 대상: 완성된 시스템
  • 수행자: 사용자
  • 목적: 요구사항 만족 여부 최종 확인
  • 특징
    • 사용자 관점 테스트
    • 계약 기준에 따라 수행
    • 블랙박스 테스트
    • 알파, 베타 테스트

5. 테스트 관점에 따른 분류

블랙박스 테스트 (Black Box Test)

  • 특징

    • 내부 구조를 고려하지 않음
    • 입력과 출력만을 기준으로 테스트
    • 사용자 관점 테스트
  • 적용 단계

    • 시스템 테스트
    • 인수 테스트
  • 대표 기법

    • 동치 분해: 입력 값을 유효한 그룹과 무효한 그룹으로 나누어 각 그룹에서 대표 값을 선택해 테스트
    • 경계값 분석: 입력 값의 최소값·최대값 등 경계 부근에서 오류가 발생하기 쉬운 점을 집중 테스트
    • 원인–결과 그래프: 입력 조건(원인)과 출력 결과(결과)의 논리적 관계를 그래프로 표현하여 테스트 케이스 도출

화이트박스 테스트 (White Box Test)

  • 특징

    • 내부 구조를 고려하여 테스트
    • 코드 흐름과 분기 구조 확인
    • 개발자 관점 테스트
  • 적용 단계

    • 단위 테스트
  • 대표 기법

    • 기초 경로 검사: 프로그램의 제어 흐름 그래프를 기반으로 독립적인 모든 실행 경로를 최소 한 번 이상 테스트
    • 제어 구조 테스트: 프로그램의 순차, 선택, 반복 구조가 올바르게 동작하는지 검사

6. 스텁과 드라이버

스텁 (Stub)

  • 하위 모듈을 대신하는 가짜 모듈
  • 호출 당하는 모듈
  • 하향식 통합 테스트에서 사용

드라이버 (Driver)

  • 상위 모듈을 대신하는 가짜 모듈
  • 호출 하는 모듈
  • 상향식 통합 테스트에서 사용

7. 테스트 커버리지 (Test Coverage)

  • 테스트가 프로그램을 얼마나 실행했는지를 측정하는 기준
  • 테스트의 충분성을 판단하는 지표

주요 커버리지 종류

  • 구문 커버리지: 모든 문장이 한 번 이상 실행되었는지
  • 분기 커버리지: 모든 조건의 참/거짓이 실행되었는지
  • 조건 커버리지: 조건식 내 각 조건이 실행되었는지

8. 테스트 오라클 (Test Oracle)

테스트 결과가 올바른지 판단하기 위한 기준

테스트 실행 결과를 기대 결과(Expected Result) 와 비교하여 성공 또는 실패를 판정

  • 목적: 테스트 결과의 옳고 그름 판단
  • 특징
    • 자동 또는 수동으로 판정 가능
    • 모든 테스트에는 오라클이 존재해야 테스트 수행 가능
    • 오라클이 없으면 테스트 결과의 정확성 판단 불가

9. 회귀 테스트 (Regression Test)

프로그램 수정 또는 변경 이후 기존 기능이 정상적으로 동작하는지 확인하는 테스트

  • 목적: 수정으로 인해 발생할 수 있는 부작용(Side Effect) 검출
  • 특징
    • 기존 테스트 케이스를 재사용
    • 변경된 부분 및 영향 범위 중심으로 수행
    • 유지보수 단계에서 주로 수행

10. 정적 테스트 / 동적 테스트

정적 테스트 (Static Test)

  • 프로그램을 실행하지 않고 검토
  • 코드 또는 문서 기반 테스트
  • 종류
    • 워크스루(Walkthrough): 개발자가 주도하며 설명하면서 검토
    • 인스펙션(Inspection): 전문가가 참여하는 공식적인 검토

동적 테스트 (Dynamic Test)

  • 프로그램을 실제로 실행하여 테스트
  • 실행 결과를 기반으로 오류 검출

11. 알파 테스트 / 베타 테스트

알파 테스트

  • 개발자 환경에서 수행
  • 사용자 참여 가능
  • 내부 검증 목적

베타 테스트

  • 실제 사용자 환경에서 수행
  • 배포 전 최종 검증