소프트웨어 테스팅에서 스레드 테스팅이란 무엇입니까?

⚡ 스마트 요약

스레드 테스트는 통합 시스템을 통과하는 단일 비즈니스 작업의 핵심 기능 역량을 검증하는 것으로, 모든 구성 요소 개발이 완료된 후가 아니라 통합 테스트 초기에 실행됩니다.

  • 🧵 핵심 아이디어: 스레드는 하나의 엔드 투 엔드 비즈니스 트랜잭션이며, 테스트는 통합된 모듈 전체에 걸쳐 해당 경로를 따라 진행됩니다.
  • ⏱️ 실행 시: 시스템 통합 전략의 일환으로, 통합 테스트 초기 단계에서 사용됩니다.
  • 🔀 두 가지 맛: 단일 스레드 테스트는 한 번에 하나의 트랜잭션을 실행하고, 다중 스레드 테스트는 여러 트랜잭션을 동시에 실행합니다.
  • 🐞 포착되는 것: 단일 경로 테스트에서 놓치는 경쟁 조건, 교착 상태, 공유 리소스 충돌 및 데이터 손상 문제를 해결합니다.
  • 🧰 실행 방법: 다양한 애플리케이션 조합, 여러 인스턴스, 다양한 하드웨어 및 코드 검사를 사용하여 반복 실행합니다.
  • 📉 정직한 한계: 멀티스레드 코드에 대한 재현 가능한 단위 테스트는 여전히 어렵기 때문에 타이밍 결함이 간헐적으로 발생할 수 있습니다.

소프트웨어 테스트에서 스레드 테스트란 무엇이며, 단일 스레드와 멀티 스레드 유형은 무엇인가요?

스레드 테스트란 무엇입니까?

스레드 테스트 스레드라고 불리는 특정 작업의 핵심 기능 수행 능력을 검증하는 소프트웨어 테스트 유형입니다. 일반적으로 소프트웨어 개발 초기 단계에서 수행됩니다. 통합 테스트 단계. 스레드 기반 테스트는 시스템 통합 테스트 중에 채택되는 점진적 전략 중 하나입니다. 따라서 스레드 테스트는 보다 정확하게 다음과 같이 설명할 수 있습니다. 스레드 상호 작용 테스트.

여기서 '스레드'는 단순히 운영체제 관련 스레드만을 의미하는 것이 아닙니다. 소프트웨어 공학 용어에서 '스레드'는 하나의 완전한 비즈니스 거래를 의미합니다. 예를 들어 "고객이 주문을 합니다"와 같은 것입니다. trac모든 모듈을 통해 전달됩니다. 스레드 테스트는 모듈들이 서로 연결된 후에도 해당 단일 경로가 여전히 올바르게 작동하는지 확인합니다.

아래 다이어그램은 전체 시스템이 조립되기 전에 개별 스레드가 어떻게 통합되고 하위 시스템으로 실행되는지를 보여줍니다.

스레드 테스트 다이어그램은 스레드가 하위 시스템에 점진적으로 통합된 다음 전체 시스템에 통합되는 과정을 보여줍니다.

스레드 테스트 유형

스레드 기반 테스트는 두 가지 범주로 분류되며, 이러한 구분은 테스트 데이터와 발견될 가능성이 있는 결함을 결정합니다.

  • 단일 스레드 테스트: 단일 스레드 테스트는 한 번에 하나의 애플리케이션 트랜잭션만 처리합니다. 하나의 요청만 처리되므로 응답 동작을 예측할 수 있고, 테스트 스크립트를 작성하고 반복하기가 쉽습니다.
  • 멀티스레드 테스트: 멀티스레드 테스트는 여러 개의 트랜잭션이 동시에 활성화되는 환경을 가정합니다. 동일한 서비스에 대해 별도의 스레드를 준비하여 동시 부하 조건에서 응답성과 공유 상태 처리를 관찰할 수 있도록 합니다.

단일 스레드 테스트에서 문제없이 통과한 트랜잭션도 멀티 스레드 실행에서는 실패할 수 있습니다. 두 번째 실행에서 동일한 레코드, 연결 및 메모리에 대한 경합이 추가되기 때문입니다.

스레드 테스트를 수행하는 방법

스레드 프로세스는 전체 개발 수명주기보다는 통합 활동에 중점을 둡니다. 실제 접근 방식은 다음과 같습니다.

  • 스레드 기반 테스트는 세션 기반 테스트의 일반화된 형태입니다. 즉, 세션은 스레드 형식이지만 스레드가 반드시 세션일 필요는 없습니다.
  • 해당 스레드 또는 프로그램(작은 기능)은 하위 시스템으로 점진적으로 통합 및 테스트된 후 전체 시스템에 대해 실행됩니다.
  • 가장 기본적인 수준에서, 이는 시스템 통합 담당자에게 테스트 대상의 범위를 더 잘 파악할 수 있도록 해줍니다.
  • 소프트웨어 구성 요소를 직접 테스트하는 대신, 시스템 통합자는 전체 시스템의 맥락에서 논리적 실행 경로를 테스트하는 데 집중해야 합니다.

작업 단위가 구성 요소가 아닌 비즈니스 경로이기 때문에 스레드 테스트는 자연스럽게 그 사이에 위치합니다. 모듈 테스트 가득 찬 시스템 테스트.

멀티스레드 테스트 팁

멀티스레드 관련 결함은 타이밍에 따라 달라지므로, 한 번의 완벽한 실행만으로는 충분한 증거를 제시할 수 없습니다. 아래 팁들을 활용하면 이러한 결함을 발견할 가능성을 높일 수 있습니다.

  • 멀티스레드 프로그램을 테스트하려면 다양한 애플리케이션 조합을 실행하여 프로그램을 반복적으로 실행해 보세요.
  • 멀티스레드 프로그램을 테스트하려면 프로그램의 여러 인스턴스를 동시에 실행하세요.
  • 다양한 부하 수준과 작업량을 가진 여러 하드웨어 모델에서 멀티스레드 프로그램을 실행해 보세요.
  • 코드 검사를 활용하세요. 일부 동기화 오류는 재현하기보다 읽기가 더 쉬울 수 있습니다.
  • 메인 스레드 이외의 스레드에서 발생한 오류 및 실패만 수집하십시오.

나사산 테스트 중 발견되는 일반적인 결함

동시성 오류는 스택 트레이스가 깨끗할 때 거의 나타나지 않습니다. trace. 아래 범주들은 멀티스레드 실행에서 드러나는 대부분의 문제점을 설명하며, 각 범주마다 인식할 가치가 있는 뚜렷한 증상이 있습니다.

  • 경기 조건: 두 개의 스레드가 순서 없이 동일한 값을 읽고 쓰기 때문에 최종 결과는 어느 스레드가 먼저 완료되었는지에 따라 달라집니다. 증상: 실행 결과에 따라 합계가 정확하게 나오는 경우도 있고, 잘못 나오는 경우도 있습니다.
  • 이중 자물쇠: 두 스레드가 각각 상대방이 필요로 하는 락을 보유하고 있어 어느 쪽도 진행하지 못합니다. 증상: 트랜잭션이 오류 없이 종료되는 대신 무한정 멈춰 있습니다.
  • 리소스 경합: 스레드들이 동일한 연결, 파일 핸들 또는 레코드를 위해 대기열에 쌓이면서 하드웨어 한계에 도달하기 훨씬 전에 처리량이 급격히 감소합니다.
  • 데이터 손상: 부분적으로 작성된 공유 구조는 유효한 트랜잭션이 생성할 수 없는 상태로 레코드를 남깁니다.
  • 굶주림: 우선순위가 낮은 스레드는 필요한 리소스를 얻지 못하므로 시스템의 나머지 부분은 정상적으로 보이지만 특정 사용자 경로에서 시간 초과 오류가 발생합니다.

각각의 문제에 대해서는 실패한 실행 과정을 로그에 기록해야 합니다. 그렇지 않으면 50번 시도 중 한 번만 발생하는 결함을 보고하는 것이 불가능하기 때문입니다. 결함 관리 프로세스.

스레드 테스트 vs 동시성 테스트 vs 통합 테스트

이 세 가지 용어는 서로 중복되는 부분이 많고 테스트 계획에서 자주 혼동됩니다. 아래 표는 의도에 따라 용어를 구분한 것입니다.

아래 스레드 테스트 동시성 테스트 통합 테스트
테스트 대상 장치 모듈 간 단일 비즈니스 거래 여러 사용자 또는 스레드가 동시에 작업합니다. 두 개 이상의 구성 요소 간의 인터페이스
주요 질문 이 키 경로가 처음부터 끝까지 제대로 작동하나요? 동시 접속 시 어떤 문제가 발생하나요? 모듈들이 서로 제대로 통신하나요?
일반적인 단계 초기 통합 테스트 시스템 또는 성능 테스트 단위 테스트 후
결함 탐지 대상 실행 경로 오류, 인수인계 누락 교착 상태, 경쟁 조건, 락 경합 인터페이스 불일치, 잘못된 데이터tracts
관계 멀티스레드 변형은 동시성 테스트와 중복됩니다. 스레드 테스트의 멀티스레드 영역보다 더 광범위함 스레드 테스트는 그 안에 포함된 점진적인 전략 중 하나입니다.

즉, 동시성 테스트 동시 접속이 시스템에 어떤 영향을 미치는지 묻는 반면, 스레드 테스트는 중요한 경로 하나가 통합 과정에서 제대로 유지되는지 여부를 확인합니다. 두 가지 테스트를 모두 수행하는 팀은 일반적으로 스레드 테스트를 먼저 진행합니다.

나사산 테스트의 장점

이 기술은 여러 가지 실질적인 이유로 통합 계획에 포함될 만한 가치가 있습니다.

  • 핵심 비즈니스 경로는 초기에 검증되므로 전체 시스템이 구축되기 전에 잘못된 인수인계 문제를 발견할 수 있습니다.
  • 테스트 단위가 절대적인 개념이 아니라 식별 가능한 트랜잭션이기 때문에 시스템 통합 담당자는 범위에 대한 명확한 그림을 얻을 수 있습니다.tract 구성요소 경계.
  • 시스템 컨텍스트에서 논리적 실행 경로를 테스트하면 격리된 상태에서 발견할 수 있는 오류가 드러납니다. 구성 요소 테스트 볼 수 없습니다.
  • 멀티스레드 실행은 동시성 결함(교착 상태, 경쟁 조건 및 리소스 충돌)을 드러내어, 그렇지 않으면 프로덕션 환경에까지 영향을 미칠 수 있는 문제를 방지합니다.
  • 점진적 통합 방식은 한 번에 하나의 스레드만 추가하기 때문에 디버깅 영역을 작게 유지합니다.
  • 결과는 바로 다음 단계로 이어집니다. 회귀 테스트왜냐하면 지나가는 스레드는 회귀 테스트 스위트의 명확한 후보가 되기 때문입니다.

스레드 테스트의 단점

  • 멀티스레딩 테스트에서 가장 큰 어려움은 단위 테스트에 대해 재현 가능한 테스트 코드를 작성하는 것입니다.
  • 멀티스레드 코드에 대한 단위 테스트를 작성하는 것은 어려운 작업입니다.
  • 멀티스레드 테스트의 기준은 싱글스레드 테스트와 다릅니다. 멀티스레드 테스트에서는 메모리 크기, 저장 용량, 타이밍 문제 등의 요소가 코드가 서로 다른 하드웨어에서 실행될 때 달라집니다.
  • 스레드는 해당 스레드가 거치는 모듈을 사용할 수 있게 되기 전에는 테스트할 수 없으므로 일정은 통합 순서에 따라 달라집니다.
  • 간헐적인 오류는 환경적 잡음으로 치부하기 쉽기 때문에 체계적인 로깅이 필수적입니다.

자주 묻는 질문

테스트 책임자는 비즈니스 분석가와 협력하여 매출 영향 및 사용 빈도를 기준으로 거래 순위를 매깁니다. 가장 가치가 높은 경로부터 먼저 통합 및 스레드화하므로 중요한 전달 오류가 발생하더라도 일정이 남아 있는 동안 발견할 수 있습니다.

이는 비즈니스 경로, 거쳐간 모듈, 모듈 간에 전달되는 데이터 및 예상 최종 상태를 기록합니다. 컴포넌트와는 다릅니다. 테스트 사례통과 조건은 전체 거래의 마지막에 있습니다.

일반적으로는 구성 가능한 가상 사용자를 생성하는 부하 발생기가 선택됩니다. JMeter 일반적으로 많이 사용되는 오픈 소스 옵션입니다. 스레드 수, 램프업 및 루프 설정은 멀티스레드 시나리오에 직접적으로 적용됩니다.

머신러닝 모델은 수천 번의 반복 실행에서 얻은 로그 패턴을 클러스터링하여 시스템 멈춤이나 손상된 레코드에 앞서 발생하는 인터리빙을 표시합니다. 이를 통해 간헐적인 타이밍 오류의 원인을 소수의 의심스러운 시퀀스로 좁힐 수 있습니다.

GitHub 부조종사 스레드 풀, 래치 및 스트레스 루프를 신속하게 생성합니다. 하지만 생성된 테스트는 실제 인터리빙을 강제하지 않고도 통과하는 경우가 많기 때문에 테스터는 여전히 중요한 동기화 지점을 결정해야 합니다.

정해진 수치는 없습니다. 팀은 오류가 더 이상 발생하지 않을 때까지 다양한 작업 부하와 하드웨어에서 실행을 반복한 다음, 환경이 변경될 때 타이밍 결함이 다시 나타나므로 해당 시나리오를 야간 테스트 스위트에 유지합니다.

우선순위가 높은 모든 스레드는 미해결 결함 없이 처음부터 끝까지 실행되고, 멀티스레드 실행은 목표 동시 실행률에서 완료되며, 데드락이나 데이터 손상과 같은 클래스 결함이 발생하지 않습니다. 테스트 수명 주기.

예, 스레드는 모듈이 아닌 서비스 간의 요청 경로가 됩니다. 분산 환경입니다. tracing는 로컬 호출 스택을 대체하며, 동일한 질문이 적용됩니다. 하나의 비즈니스 트랜잭션이 모든 홉을 거쳐 손상 없이 유지될까요?

이 게시물을 요약하면 다음과 같습니다.