Android/TDD

TDD 기초 개념잡기 (테스트 용어, 종류)

네모메모 2023. 11. 27. 20:53
반응형

 

 

 

 

 

 

테스트에는 다양한 테스트 종류가 있으며, 각각은 특정 목적과 범위에서 따라서 선택 및 수행되고 소프트웨어를 평가합니다.

 

종합적으로 모든 종류의 테스트를 조합하여 소프트웨어의 품질을 유지하고 개선하는 것이 일반적인 개발 방법입니다.

 

 


테스트 기초 용어

 

테스트 스위트(Test Suite)

: 여러 테스트 케이스를 하나로 묶어서 실행하거나 구성하는 도구

  • 여러 테스트를 그룹화하여 함께 실행하거나, 특정 기능 또는 모듈에 대한 모든 테스트를 한 번에 실행하는 데 사용됩니다.
  • 여러 테스트 케이스를 그룹화하고 관리한다.
  • 주로 테스트 프레임워크에서 지원되며, 큰 프로젝트에서 여러 모듈 또는 기능에 걸친 테스트를 효과적으로 관리할 수 있도록 도와줍니다.

 

테스트 케이스(Test Case)

: 특정 입력 상태에서 특정 기능 또는 코드 조각의 동작을 검증하기 위한 테스트 단위

  • 각 테스트 케이스는 일반적으로 특정 조건에서 예상 결과와 실제 결과를 비교하는 테스트를 포함합니다.

 

테스트 대역 (테스트 더블, Test Double)

: 실제 의존성을 대체하여 테스트를 더 효과적으로 수행하기 위한 객체

  • 특정 상황에서 테스트를 단순화하거나, 외부 의존성을 제어하거나, 특정 동작을 확인하기 위해 사용됩니다.
  • 특히 외부 서비스와의 통합이나 특정 환경에서 테스트하기 어려운 경우에 유용
  • 대표적인 테스트 더블 유형 : 테스트 스텁(Test Stub), 테스트 스파이(Test Spy), 테스트 모의 객체(Mock Object), 페이크(Fake) 등이 있다.
  • 테스트 스텁 (Test Stub)
    • : 실제로 동작하는 객체를 대신하여 호출되면 미리 정의된 결과를 반환하는 특수한 테스트 더블(Test Double)
    • 주로 외부 서비스 호출 또는 리소스에 대한 가짜 구현을 만들 때 사용됩니다.
  • 테스트 스파이 (Test Spy)
    • : 테스트 중에 객체의 상태나 동작을 기록하는 데 사용되는 테스트 더블(Test Double)
    • 호출된 메서드나 함수의 정보를 기록하여 나중에 테스트에서 확인하는 데 유용합니다.
  • 테스트 모의 객체 (Mock Object)
    • : 특정 동작을 모방하여 특정 조건에서 어떻게 동작하는지를 검증하기 위한 테스트 더블(Test Double)
    • 주로 인터페이스를 구현하여 특정 메서드 호출이 예상대로 이루어지는지를 확인하는 데 사용됩니다.
    • 사람들이 흔히 '테스트 대역'과 '목'을 동의어로 사용하지만, 기술적으로는 그렇지 않다.
      • 테스트 대역 => 실행과 관련없는 모든 종류의 가짜 의존성을 설명하는 포괄적인 용어
      • 목 => '테스트 대역' 의존성의 한 종류
  • 페이크(Fake)
    • : 실제로 동작하는 객체를 대신하여 가벼운 구현을 제공하는 테스트 더블(Test Double)
    • ex) 메모리 내의 데이터베이스 대신 간단한 데이터 저장소를 사용하는 것 등

 


 

테스트 대상 시스템(SUT, System Under Test)

  • : 용어 그대로 테스트 대상인 시스템
  • 일반적으로 클래스 전체를 가리킴

vs

테스트 대상 메서드(MUT, Method Under Test)

  • : 테스트에서 호출한 SUT의 메서드
  • 일반적으로 메서드를 가리킴

=> MUT SUT 흔히 동의어로 사용하지만, 일반적으로는 MUT 메서드를 가리키는 반해 SUT 클래스 전체를 가리킨다.

 

 

 

 

 

 

 


테스트종류

임의로 테스트를 두 종류로 나누어 보면 동작이나 기능을 검증하는 테스트, 사용자 경험을 모방하거나 시뮬레이션하는 테스트로 보인다.

 

1. 동작이나 기능을 검증하는 테스트

단위 테스트(Unit Test)

  • 실행가능한 소프트웨어의 최소 단위인 함수, 메서드, 또는 모듈과 같은 코드 조각을 개별적으로 검증하는 테스트
  • 목적 : 코드의 작은 부분이 의도대로 동작하는지 확인하고, 변경이나 추가된 코드가 기존 기능에 영향을 주지 않도록 하는 것

 

통합 테스트(Integration Test)

    • 여러 개별 컴포넌트가 함께 동작할 때 예상대로 상호작용하는지를 평가하는 테스트
    • cf) Unit test 달리 개발자가 변경할 없는 부분 (ex. 외부 라이브러리, db)까지 묶어서 검증할 사용된다.
    • 컴포넌트 간의 인터페이스 및 상호작용을 검증하여 시스템 전체의 통합된 기능을 평가합니다.

 

시스템 테스트(System Test)

  • 완전한 소프트웨어 시스템의 기능, 성능, 안정성, 보안 등을 평가하는 테스트
  • 모든 컴포넌트 및 시스템의 상호작용을 검증하며, 사용자 시나리오를 시뮬레이션하여 전체 시스템이 예상대로 동작하는지 확인합니다.

 

인수 테스트(Acceptance Test)

  • 소프트웨어가 최종 사용자 또는 고객의 요구 사항을 충족하는지 검증하는 테스트
  • 사용자 시나리오에 기반하여 시스템이 예상대로 동작하는지 확인하며, 종종 사용자가 직접 수행하는 테스트를 포함합니다.

 

회귀 테스트(Regression Test):

  • 코드 변경, 버그 수정 또는 새로운 기능 추가 후에 기존 기능이 여전히 정상적으로 동작하는지를 검증하는 테스트
  • 코드 변경으로 인해 기존 기능에 문제가 발생하지 않도록 하는 것이 목적

 

스트레스 테스트(Stress Test)

  • 시스템이 특정 조건에서 어떻게 동작하는지 확인하는 테스트
  • 대량의 데이터나 동시 사용자의 증가 등을 시뮬레이션하여 시스템의 성능 한계를 확인합니다.

 


 

2. 사용자 경험을 모방하거나 시뮬레이션하는 테스트

엔드투엔드(E2E) 테스트(End-to-End Test)

  • 소프트웨어 시스템 전체를 실제 사용자 환경에서 실행하여 테스트하는 것
  • 소프트웨어의 내부 구조 보다는 비즈니스 쪽에 초점을 두어 실제 시나리오대로 잘 동작하는지 테스트
  • 시스템의 모든 컴포넌트 및 서비스를 포함하며, 사용자의 시점에서 애플리케이션이 어떻게 동작하는지를 확인합니다.
  • 통합된 시스템의 동작을 검증하며, 주로 사용자 플로우를 완전히 시뮬레이션하여 시스템이 예상대로 상호작용하는지를 테스트합니다.

 

시나리오 테스트(Scenario Test)

  • 사용자의 실제 사용 시나리오를 기반으로 소프트웨어를 테스트하는 것
  • 특정 사용자 또는 사용자 그룹이 시스템을 어떻게 사용할지를 시뮬레이션하며, 다양한 상황에서 시스템이 예상대로 반응하는지 확인합니다.
  • 주로 사용자 행동을 다양한 시나리오로 모델링하고, 각 시나리오에 대한 예상 결과를 검증합니다.

 

인수 테스트(Acceptance Test)

  • 소프트웨어가 최종 사용자 또는 고객의 요구 사항을 충족하는지 검증하는 테스트
  • 사용자 시나리오에 기반하여 시스템이 예상대로 동작하는지 확인하며, 종종 사용자가 직접 수행하는 테스트를 포함합니다.
  • 앞서 설명한 엔드투엔드 테스트와 시나리오 테스트는 종종 인수 테스트의 일부로 간주될 수 있습니다.
  • 일반적으로 사용자의 요구 사항을 기반으로 특정 기능이나 시나리오에 대한 테스트를 수행하며, 전체 소프트웨어 제품이 사용자에게 받아들여질 있는지를 평가합니다.

 

 

셋이 너무 헷갈려서 비교하자면,

 

엔드투엔드(E2E) 테스트(End-to-End Test)

시나리오 테스트(Scenario Test)

인수 테스트(Acceptance Test)

목적 특정 사용자 시나리오와 플로우대로 시스템이 예상대로 동작하는지 확인 시스템 전체를 테스트하여 사용자의 시점에서 시스템이 예상대로 동작하는지 확인 최종 사용자의 요구 사항을 충족하는지를 확인
범위 특정 시나리오나 플로우 중점으로 함 전체 시스템을 대상으로 한 사용자의 경험을 시뮬레이션 사용자의 요구 사항을 기반으로 한 특정 기능이나 시나리오(이므로 범위가 시스템 전체일 수도 있고, 특정 모듈이나 기능일 수도 있다.)
검증대상 ex 특정 사용자 시나리오에서 시스템이 예상대로 동작하는지 사용자가  애플리케이션에서 로그인, 데이터 입력, 기능 탐색 등을 어떻게 수행하는지 사용자가 특정 요구 사항을 충족하는지를 확인하기 위해 특정 기능에 대한 테스트

라고 한다.


 

 

 

 

 

 

 

 

 


출처

- https://velog.io/@ongsim123/TIL-Unit-test-Integration-test-e2e-test-%EA%B7%B8%EB%A6%AC%EA%B3%A0-TDD#-unit-test-%EB%8B%A8%EC%9C%84%ED%85%8C%EC%8A%A4%ED%8A%B8

- https://brunch.co.kr/@boorownie/5

- https://toast1307.tistory.com/11

- https://docs.nhncloud.com/ko/Game/GameAnvil/ko/hammer/hammer-3-scenario-test-guide/

반응형