Testing

zioo·2022년 2월 21일
0

Backend

목록 보기
36/40

Validation 과 Verification 차이

Validation : 시스템이 사용자의 요구사항을 만족하며 개발되고 있는가?

Verification : 시스템이 명세를 만족하면서 개발되고 있는가?

  • 유닛 테스트 : 함수 하나하나와 같이 코드의 작은 부분을 테스트하는 것
  • 통합 테스트 : 서로 다른 시스템들의 상호작용이 잘 이루어 지는지 테스트하는 것
  • 기능 테스트 : 사용자와 어플리케이션의 상호작용이 원활하게 이루어지는지 테스트하는 것

유닛/단위 테스트

테스트가 가능한 최소 단위로 나누어진 소프트웨어 (모듈, 프로그램, 객체, 클래스 등) 내에서 결함을 찾고 그 기능을 검증하는것.

  • 구현 단계에서 각 모듈이 구현된 후에, 단위 테스트를 수행

  • 모듈을 단독적으로 실행할 수 있는 환경이 필요하다.

"테스트 데이터"를 "테스트 드라이버"에 입력으로 넣고

"모듈"을 호출하고 모듈아래의 "테스트 스텁"들을 호출하여 연산을 하고

"모듈"은 "테스트 드라이버"에 실행결과를 반환.

통합 테스트

모듈을 통합하는 과정에서 모듈 간 호환성의 문제를 찾아내기 위해 수행되는 테스트입니다.

  • 모듈을 통합하는 과정에서 수행되는 테스트

  • 모듈 간의 상호 작용이 올바르게 되는지를 검사하는 테스트

  • 통합 테스트에서 오류가 발생되는 경우

  • 개별적인 모듈에 대한 테스트가 불충분하여 오류가 발생한다.

  • 개별 모듈에서 동일한 전역변수를 사용하는 등의 실수로 인해 모듈간의 예기치 못한 상호작용이 발생하여 오류가 발생한다.

기능 테스트 (E2E Test, Brower Test)

사용자와 어플리케이션의 상호작용이 원활하게 이루어지는지 테스트하는 것,
어떤 어플리케이션이 제대로 동작하는지 완전한 기능을 테스트하는 것

  • 통합 테스트와 관련이 있음
  • 모든 코드가 함께 실행되는 상태에서 전체 애플리케이션의 기능을 확인하는 테스트를 의미합니다.
  • 해당 시스템과 해당 시스템을 구축하고 배포하는 프로세스를 모두 시험하는 것을 말합니다.
    • 용어를 사용하는 곳마다 조금씩 차이가 있다고 합니다.
  • 내부 기능들까지(클래스의 메서드) 테스트 할 필요는 없습니다.
    • 이는 단위테스트의 영역입니다.
  • 단점은 테스트를 만들기가 힘들고, 만든 테스트를 신뢰하기도 힘들다는 것입니다.

예시

역시 설명은 게임을 예로 드는 것이 가장 이해 가기 쉬울 것 같아 게임으로 예를 들자면.

슬라임이라는 몬스터가 있고 유저가 슬라임을 때려잡는 상황이다. 이때 다음과 같은 함수가 있다고 가정하자.

  • 유저가 슬라임에게 달려가는 Move 함수
  • 유저가 슬라임을 공격하는 Attack 함수
  • 슬라임을 때려잡은 후 전리품을 수집하는 Gather 함수

유닛 테스트는 Move, Attack, Gather 함수가 잘 동작하는지 (여러 가지 입력 값을 줘봐서 제대로 된 출력 값이 나오는지)
함수 하나하나를 테스트를 하는 것에 비유할 수 있다.

통합 테스트는 유저가 슬라임을 때려잡고 전리품을 수집할 텐데 실제로 데이터베이스에 수집한 전리품이 잘 들어갔는지 테스트를 하는 것에 비유할 수 있다.

기능 테스트는 유저가 슬라임에게 달려가 슬라임을 때려잡고 전리품을 수집하는 하나의 과정이 제대로 수행되었는지 테스트하는 것에 비유할 수 있다.

0개의 댓글