Computer Science/Software Engineering

[Software Engineering] Software Testing

__K.Jun__ 2025. 2. 18. 17:28

소프트웨어 테스트의 목표와 원칙

(1) 테스트의 목표

  • 소프트웨어 테스트는 오류(결함, 버그)를 찾는 과정이다.
  • 성공적인 테스트란 아직 발견되지 않은 오류를 찾아내는 것이다.
  • 테스트는 버그가 없음을 증명하는 것이 아니라, 버그의 존재를 증명하는 것이다.

(2) 소프트웨어 테스트의 원칙

  1. 모든 테스트는 고객 요구 사항과 연계되어야 함
    → 테스트는 고객의 요구 사항을 검증하는 방향으로 진행되어야 한다.
  2. 테스트 계획은 가능한 빨리 수립해야 함
    → 분석 모델이 완성되는 즉시 테스트 계획을 시작할 수 있다.
  3. 파레토 법칙(80-20 법칙)이 적용됨
    → 대부분의 오류(80%)는 코드의 일부(20%)에서 발생하는 경향이 있다.
  4. 테스트는 작은 단위에서 큰 단위로 진행됨
    → 개별 모듈부터 시작하여 전체 시스템까지 확장하는 방식이다.
  5. 완벽한 테스트(모든 경우의 수를 테스트)는 불가능함→ 현실적으로 가능한 수준에서 테스트를 수행해야 한다.

 

소프트웨어 테스트의 수준

소프트웨어 테스트는 단위(Unit) → 통합(Integration) → 시스템(System) → 인수(Acceptance) 단계로 진행된다.

(1) 단위(Unit) 테스트

  • 소프트웨어의 개별 모듈(컴포넌트)이 정상적으로 작동하는지 확인하는 테스트.
  • 목표:
    • 각 모듈이 예상대로 작동하는지 검증.
    • 경계 조건, 데이터 구조, 에러 처리 등을 테스트.
  • 테스트 도구:
    • JUnit, xUnit 등 자동화된 테스트 프레임워크 활용.

단위 테스트 환경

  • 드라이버(Driver): 테스트 데이터를 입력하고 결과를 출력하는 역할.
  • 스텁(Stub): 아직 개발되지 않은 하위 모듈을 대신하는 가짜 모듈.

 

 

(2) 통합(Integration) 테스트

  • 개별 단위 테스트를 통과한 모듈들을 결합하여 테스트하는 과정.
  • 목표:
    • 모듈 간 인터페이스 및 상호작용의 오류를 발견.
  • 주요 기법:
    1. 증분 통합 테스트 (Incremental Integration Testing)
      • 작은 단위로 테스트를 진행하며 점진적으로 전체 시스템을 구성.
    2. 상향식(Bottom-Up) 통합 테스트
      • 하위 모듈부터 먼저 테스트한 후 점진적으로 상위 모듈과 통합.
      • 테스트를 위해 드라이버(Driver) 사용.
    3. 하향식(Top-Down) 통합 테스트
      • 최상위 모듈부터 테스트한 후 점진적으로 하위 모듈을 추가.
      • 아직 구현되지 않은 하위 모듈은 스텁(Stub) 으로 대체.

증분 통합 테스트 (Incremental Integration Testing)
상향식(Bottom-Up) 통합 테스트
하향식(Top-Down) 통합 테스트

회귀 테스트 (Regression Testing)

  • 새로운 모듈이 추가될 때, 기존 기능이 제대로 동작하는지 검증하는 테스트.
  • 기존 테스트 사례를 다시 실행하여 의도치 않은 버그가 발생했는지 확인.

 

 

(3) 시스템(System) 테스트

  • 전체 시스템이 올바르게 동작하는지 검증하는 단계.
  • 기능적 요구사항(Functional Requirements)뿐만 아니라, **비기능적 요구사항(Non-Functional Requirements)**도 검증.
    • 성능 테스트
    • 보안 테스트
    • 스트레스 테스트
    • 호환성 테스트 등
  • 일반적으로 독립적인 테스트 그룹에서 수행.

 

(4) 인수(Acceptance) 테스트

  • 고객 또는 최종 사용자가 시스템이 요구사항을 충족하는지 검증하는 테스트.
  • 내부 인수 테스트(Internal Acceptance Testing)
    • 개발 조직 내에서 수행하며, 제품 관리, 영업, 고객 지원 팀(개발/테스트 팀 제외 인원들)이 참여.
  • 외부 인수 테스트(External Acceptance Testing)
    • 고객이나 최종 사용자에 의해 수행.

사용 사례 테스트 (Use Case Testing)

  • 고객의 실제 사용 시나리오를 기반으로 테스트 케이스 설계.
  • 컴포넌트 간 통합 결함(Integration Defect) 을 발견하는 데 유용.

알파(Alpha) 및 베타(Beta) 테스트

  • 알파 테스트(Alpha Testing)
    • 개발사 내부에서 제한된 환경에서 사용자들이 소프트웨어를 테스트.
  • 베타 테스트(Beta Testing)
    • 실제 사용자 환경에서 제품을 시험 운영하고 피드백을 받는 과정.
728x90