기본 테스팅 (Fundamental Testing)

Fundamental testing은 소프트웨어 테스팅의 기본적인 프로세스와 원칙을 의미한다.
이는 소프트웨어의 품질을 보장하기 위한 체계적인 접근 방식을 제공한다.

Fundamental testing process는 다음과 같은 주요 단계로 구성된다:

  1. 계획 및 통제 (Planning and Control)

    • 테스트의 범위, 목표, 위험을 결정한다.
    • 필요한 리소스를 식별하고 일정을 수립한다.
  2. 분석 및 설계 (Analysis and Design)

    • 테스트 조건을 식별한다.
    • 테스트 케이스를 설계한다.
    • 테스트 환경을 준비한다.
  3. 구현 및 실행 (Implementation and Execution)

    • 테스트 케이스를 우선순위화하고 실행한다.
    • 결과를 기록하고 결함을 보고한다.
  4. 종료 기준 평가 및 보고 (Evaluating Exit Criteria and Reporting)

    • 테스트 목표 달성 여부를 평가한다.
    • 결과를 이해관계자에게 보고한다.
  5. 테스트 종료 활동 (Test Closure Activities)

    • 테스트 자산을 문서화하고 보관한다.

이러한 프로세스는 소프트웨어 개발 주기 전반에 걸쳐 반복적으로 적용되며, 각 단계는 소프트웨어의 품질을 향상시키는 데 중요한 역할을 한다.

Fundamental Testing의 중요한 원칙들

  1. 조기 테스팅 (Early Testing)
    가능한 한 일찍 테스트를 시작하여 문제를 조기에 발견하고 수정 비용을 최소화한다.

  2. 철저한 테스팅 (Exhaustive Testing)
    모든 가능한 경우를 테스트하는 것은 불가능하므로, 위험 기반으로 중요한 케이스를 선별하여 테스트한다.

  3. 테스트 케이스 그룹핑
    연관된 테스트 케이스들을 논리적으로 그룹화하여 효율적으로 관리한다:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    class PaymentSystemTests:
        def test_valid_payment(self):
            # 정상적인 결제 테스트
            pass
    
        def test_insufficient_funds(self):
            # 잔액 부족 상황 테스트
            pass
    
        def test_network_failure(self):
            # 네트워크 오류 상황 테스트
            pass
    
  4. 독립적인 테스팅
    각 테스트는 다른 테스트의 결과에 영향을 받지 않도록 독립적으로 설계된다.

핵심 구성 요소 비교

비교 항목Unit TestIntegration TestSystem TestAcceptance Test
정의개별 코드 단위(함수, 메서드, 클래스 등)의 동작을 검증하는 테스트여러 모듈이나 컴포넌트 간의 상호작용을 검증하는 테스트전체 시스템의 end-to-end 동작을 검증하는 테스트사용자 관점에서 시스템이 요구사항을 충족하는지 검증하는 테스트
테스트 범위가장 작은 단위 (단일 함수/모듈)여러 모듈의 결합전체 시스템전체 시스템의 비즈니스 요구사항
수행 시점개발 단계에서 즉시모듈 개발 완료 후통합 테스트 완료 후시스템 테스트 완료 후
테스트 주체개발자개발자/테스터QA 팀최종 사용자/고객
테스트 환경개발 환경통합 테스트 환경테스트 환경실제 운영 환경과 유사한 환경
기술 지식 요구높음 (코드 레벨)중간 (인터페이스 수준)낮음 (시스템 수준)매우 낮음 (사용자 수준)
자동화 정도매우 높음높음중간낮음
테스트 목적코드의 정확성 검증컴포넌트 간 통신 검증전체 시스템 기능 검증비즈니스 요구사항 충족 검증
피드백 속도즉각적빠른 편느린 편매우 느림
테스트 비용매우 낮음중간높음매우 높음
테스트 데이터단순한 테스트 데이터통합 테스트용 데이터실제와 유사한 데이터실제 운영 데이터
실행 빈도매우 자주 (코드 변경시마다)자주 (기능 통합시)가끔 (주요 릴리즈 전)드물게 (최종 승인 전)
오류 발견 시점매우 이른 시점이른 시점늦은 시점매우 늦은 시점
수정 비용매우 낮음중간높음매우 높음
주요 도구 예시JUnit, NUnitSelenium, PostmanTestComplete, SoapUIManual Testing Tools

추가적인 특징들:

  1. 테스트 의존성:
  • Unit Test: 독립적으로 실행
  • Integration Test: 다른 모듈에 의존
  • System Test: 전체 시스템에 의존
  • Acceptance Test: 전체 시스템과 비즈니스 프로세스에 의존
  1. 테스트 시나리오 복잡도:
  • Unit Test: 단순한 시나리오
  • Integration Test: 중간 수준의 복잡도
  • System Test: 복잡한 시나리오
  • Acceptance Test: 실제 사용 시나리오
  1. 유지보수 용이성:
  • Unit Test: 매우 쉬움
  • Integration Test: 중간
  • System Test: 어려움
  • Acceptance Test: 매우 어려움

이러한 테스트들은 서로 보완적인 관계에 있으며, 품질 높은 소프트웨어를 만들기 위해서는 모든 단계의 테스트가 적절히 수행되어야 한다.


참고 및 출처