Java의 통합 테스팅 소개

Mehvish Ashiq 2024년2월15일
  1. 통합 테스트 소개
  2. 통합 테스트의 중요성
  3. 통합 테스트 유형
  4. 통합 테스트에 필요한 단계
Java의 통합 테스팅 소개

이 자습서에서는 통합 테스트를 소개하고 단위 테스트와 차별화하는 방법을 강조합니다. 또한 장단점을 고려하여 다양한 유형의 통합 테스트에 대해 설명합니다.

그런 다음 통합 테스트를 수행하는 데 필요한 단계에 대해 배우고 통합 테스트를 이해하기 위한 실제 시나리오를 따릅니다.

통합 테스트 소개

테스트 피라미드에는 단위 테스트, 통합 테스트 및 기능 테스트의 세 가지 유형의 테스트가 있습니다. 이 문서는 통합 테스트를 중심으로 진행됩니다. 즉, 다양한 모듈을 그룹으로 결합할 때 예상대로 작동하는지 확인합니다.

소프트웨어는 여러 프로그래머가 코딩한 다양한 모듈로 구성되어 있습니다. 여기서 통합 테스팅의 주요 목표는 논리적으로 통합하고 그룹으로 테스트하여 두 개 이상의 소프트웨어 모듈 간의 인터페이스를 테스트하는 것입니다.

또한 다양한 소프트웨어 구성 요소를 통합할 때 상호 작용의 결함을 노출하여 인터페이스의 정확성을 결정합니다. 통합 테스트 프로세스는 모든 소프트웨어 구성 요소가 단위 테스트를 거치면 시작됩니다.

단위 테스트 및 통합 테스트를 시각화하려면 다음을 참조하십시오.

Java의 통합 테스트 소개 - 단위 테스트와 통합 테스트 비교

다음은 통합 테스트가 단위 테스트와 다른 점을 강조하는 몇 가지 사항입니다.

단위 테스트 통합 테스팅
여기에서 개발자는 소프트웨어의 내부 디자인을 잘 알고 있습니다. 여기서 테스터는 소프트웨어의 내부 설계를 알지 못합니다.
모든 모듈은 개별적으로 테스트됩니다. 우리는 모든 모듈을 결합하고 그룹으로 테스트합니다.
화이트박스 테스트라고 합니다. 블랙박스 테스트라고 합니다.
개발자가 수행합니다. 테스터가 수행합니다.
여기서 결함을 찾는 것은 쉽습니다. 통합 테스트에서 결함을 노출하는 것은 어렵습니다.
단위 테스트에서 모든 프로젝트 구성 요소는 다른 구성 요소가 완료될 때까지 기다리지 않고 개별적으로 독립적으로 테스트됩니다. 통합 테스트는 모든 부품이 완료되면 수행됩니다.
비용 효율적입니다. 유지 보수 비용도 저렴합니다. 비쌉니다. 유지 보수 비용도 많이 듭니다.
모듈 사양은 초기에 수행됩니다. 인터페이스 사양은 처음에 수행됩니다.
코드를 심층적으로 탐색하는 것입니다. 통합 구조의 세부 가시성에 관한 것입니다.
통합 테스트보다 빠른 실행. 여기서는 모듈의 통합으로 인해 속도가 비교적 느립니다.

자세한 내용은 여기에서 확인할 수 있습니다.

통합 테스트의 중요성

모든 소프트웨어 구성 요소가 단위 테스트를 거치지만 여러 가지 이유로 결함이 여전히 노출될 수 있으므로 통합 테스트의 중요성이 높아집니다. 그들 중 일부는 아래에 나열되어 있습니다.

  1. 소프트웨어 모듈의 더 나은 통합을 가능하게 합니다.
  2. 통합 테스팅을 사용함으로써 소프트웨어 모듈 전송 중 데이터 수정을 방지할 수 있습니다.
  3. 또한 수동 테스트의 다양한 문제를 극복합니다.
  4. 통합 테스팅은 또한 효과적인 제3자 테스팅을 가능하게 합니다.
  5. 모든 소프트웨어 구성 요소가 하나의 단위로 작동하고 예상대로 출력을 생성하는지 확인해야 합니다.
  6. 데이터베이스와 외부 하드웨어 인터페이스 및 소프트웨어 모듈의 인터페이스에서 결함을 찾는 것이 유용합니다.
  7. 때로는 클라이언트가 소프트웨어 모듈 개발 중에 요구 사항을 변경합니다. 이 경우 새 요구 사항이 단위 테스트 수준에서 테스트되지 않을 가능성이 있습니다. 따라서 여기에서 통합 테스트가 필수적입니다.

통합 테스트 유형

이 기사에서는 장단점을 고려하여 통합 테스트에 대한 두 가지 접근 방식에 대해 설명합니다.

  1. 빅뱅
  2. 증분(하향식, 상향식 및 샌드위치 방식으로 추가 분류됨)

통합 테스트를 위한 빅뱅 접근법

이 접근 방식에서는 모든 소프트웨어 구성 요소를 통합하여 테스트 중에 엔터티로 알려진 단위로 테스트합니다. 이 통합 프로세스는 단위 테스트의 모든 구성 요소가 완료될 때까지 실행되지 않습니다.

시스템 테스트와 혼동하지 마십시오. 우리는 전체 시스템이 아닌 다양한 소프트웨어 모듈의 통합만 테스트합니다(시스템 테스트에서 수행됨).

가장 큰 장점은 모든 소프트웨어 구성 요소를 통합하고 하나의 단위로 테스트할 수 있는 반면 빅뱅 접근 방식을 사용하여 결함을 식별하기 어렵다는 것입니다. 따라서 모든 소규모 시스템에 편리합니다.

빅뱅 접근법을 다음과 같이 시각화할 수 있습니다. 우리는 6개의 서로 다른 모듈을 통합하고 빅뱅을 사용하여 테스트했습니다.

java의 통합 테스트 소개 - big bang

통합 테스트를 위한 증분 접근 방식

이 접근 방식을 사용하여 서로 논리적으로 관련된 두 개 이상의 소프트웨어 모듈을 통합한 다음 애플리케이션의 적절한 기능을 테스트합니다. 그런 다음 다른 관련 모듈/구성 요소가 점진적으로 통합되고 테스트됩니다.

이 절차는 논리적으로 관련된 모든 구성 요소가 통합되고 테스트될 때까지 계속됩니다.

이 접근 방식은 하향식, 상향식 및 샌드위치 방식으로 더 분류됩니다. 아래에서 StubsDrivers를 통해 각각 알아봅시다.

  1. Stub - 테스트 중인 모듈/구성 요소에 의해 호출됩니다.
  2. 드라이버 - 테스트할 모듈/구성 요소를 호출합니다.

하향식 접근법

여기서 통합은 소프트웨어 시스템의 제어 흐름에 따라 위에서 아래로 수행됩니다. 이 접근 방식을 사용하여 더 높은 수준의 구성 요소를 테스트한 다음 더 낮은 수준의 구성 요소로 이동하여 소프트웨어 기능을 확인합니다.

여기에서 일부 구성 요소가 아직 읽히지 않은 경우 Stubs를 사용할 수 있습니다. 실제 환경에서 일어날 일과 일치하는 유기적인 방식입니다.

이 접근 방식의 또 다른 장점은 중요한 모듈을 우선적으로 테스트할 수 있다는 것입니다. 이렇게 하면 더 높은 수준에서 결함을 찾아 먼저 수정할 수 있습니다.

반면에 마지막에 주요 기능을 테스트하는 것이 이 접근 방식의 유일한 관심사입니다. 다음 다이어그램에서 시각화할 수 있습니다.

java의 통합 테스트 소개 - 하향식

상향식 접근 방식

여기서는 상위 수준 모듈 테스트를 지원하는 데 사용되는 하위 수준 모듈을 먼저 테스트합니다. 이 절차는 최상위 수준에서 모든 모듈/구성 요소를 테스트할 때까지 계속됩니다.

상향식 접근 방식에서는 드라이버라는 자극 프로그램을 사용합니다. 낮은 수준에서 결함과 오류를 찾는 것은 쉽지만 높은 수준의 문제는 모든 구성 요소가 통합되고 테스트된 끝에야 찾을 수 있습니다.

java의 통합 테스트 소개 - 상향식

샌드위치 접근법

이 접근 방식은 하향식 및 상향식 접근 방식을 결합하므로 하이브리드 통합 테스트라고 합니다. StubsDrivers를 사용합니다.

여기에서 최상위 구성 요소는 하위 구성 요소로 테스트됩니다. 동시에 하위 구성 요소/모듈은 최상위 모듈/구성 요소와 통합되고 시스템으로 테스트됩니다.

이 접근 방식을 다음과 같이 시각화할 수 있습니다.

java에서 통합 테스트 소개 - 하이브리드

통합 테스트에 필요한 단계

다음 단계는 사용 중인 소프트웨어 테스팅 전략(위에서 논의됨)에 관계없이 필요합니다.

  • 통합 테스트 계획을 세우십시오.
  • 테스트 시나리오, 사례 및 스크립트를 설계합니다.
  • 모든 테스트 사례를 실행한 다음 결함을 노출하고 보고합니다.
  • 결함을 추적하고 다시 테스트하십시오.
  • 3단계와 4단계는 성공적으로 통합될 때까지 반복됩니다.

통합 테스트를 이해하기 위한 실제 사례

performPayment()라는 메서드가 있다고 가정합니다. 이 메서드는 두 개의 매개변수 amountservice 유형의 double 및 PaymentService를 각각 사용합니다.

단위 테스트에서는 service 인수에 대한 모형을 만들어 테스트하고 통합 테스트는 실제 외부 service를 사용하여 해당 service가 입력 데이터에 응답하는지 확인하는 테스트입니다. 예상대로.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook