개발생명주기단계별/통합_시스템 테스팅

책 요약 – 스트레스 테스팅 전략 by Jorgensen

grapevine9700 2023. 5. 1. 07:00
반응형

출처: Software Testing A Craftsman’s Approach, Paul C. Jorgensen, Fourth Edition, 2014년
14장 System Testing, 284~287페이지 

 

테스트 대상 애플리케이션 특성에 따라 다양한 접근 방식이 요구되는 스트레스 테스팅 전략에 대해 논한다.

 


 

스트레스 테스팅 전략(Stress Testing Strategies)

성능 테스트(performance testing), 수용 능력 테스트(capacity testing) 또는 부하 테스트(load testing)라고도 불리는 이 테스트는 가장 일반적이며 가장 중요한 형태의 비기능적 테스팅(nonfunctional testing)이다. 스트레스 테스팅은 테스트 대상 시스템의 특성과 매우 밀접한 관련이 있기 때문에 스트레스 테스팅 기법도 애플리케이션에 따라 달라진다. 여기서는 세 가지 일반적인 전략을 예를 들어 설명한다.

 

압축(Compression)

극도의 부하가 존재할 때 시스템의 성능을 생각해보자. 어떤 웹 기반 애플리케이션이 매우 인기가 있는데 그 서버 수용 능력이 부족하다거나, 또는 전화 교환 시스템에서는 그러한 트래픽 부하를 나타내기 위해 BHCA(Busy Hour Call Attempts)라는 용어를 사용한다. 이런 시스템에서의 전략은 압축(compression)’으로 가장 잘 이해할 수 있다.

 

로컬 스위칭 시스템은 가입자가 통화를 시작하는 것을 인식해야 한다. 가입자 회선 상태가 유휴(idle)에서 활성(active)으로 바뀌는 것을 감지하는 것 외에 숫자키(digit keys) 입력 또한 통화 시도의 주요 지표이다. 일부 다이얼 전화가 여전히 존재하지만, 대부분의 가입자들은 숫자키를 사용한다. 기술적 용어로 DTMF(Dual Tone Multifrequency) 톤이라고 하는데, 3×4 배열의 숫자 키패드가 열에 3개의 주파수, 행에 4개의 주파수를 가지고 있다. 각각의 숫자가 두 개의 주파수 톤으로 표현되므로 DTMF(이중 톤 다중 주파수)라는 이름이 븥었다. 로컬 스위칭 시스템은 이 톤을 디지털 형태로 변환해야 하며, DTMF 수신기가 이를 수행한다.

 

이제 압축 전략을 이해하기 위한 가상의 예를 보자. 로컬 스위칭 시스템이 반드시 50,000 BHCA를 지원해야 한다고 가정 시 이를 위해 시스템에 5000 DTMF 수신기가 있을 수 있다. 이 트래픽 부하를 테스트하려면 60분 내에 50,000건의 통화 시작이 생성되어야 한다. 압축 전략은 이 숫자들을 더 관리하기 쉬운 크기로 줄이는 것이다. 만약 프로토타입에 50개의 DTMF 수신기만 있다면 부하 테스트는 500건의 호출 시도만 생성하면 된다.

 

 

복제(Replication)

일부 비기능적 요구사항은 실제로 수행하기가 비정상적으로 어려울 수 있다. 실제 성능을 알아보다가 테스트 중인 시스템을 파괴하게 될 수도 있는 데, 이를 대신하여 여러 형태의 복제를 시도한다. 다음은 두 가지 예이다.

 

육군 야전 전화 교환 센터의 비기능적인 요구사항 중 하나가 시스템이 낙하산 투하 후에도 작동해야 한다는 것이었다. 실제로 이를 시도하는 것은 매우 비용이 많이 들고 병참 측면에서도 복잡했다. 시스템 테스터들 중 누구도 이것을 복제하는 방법을 알지 못했지만 전직 낙하산 부대원과 상의한 후 낙하산 낙하의 충격이 10피트(3미터) 벽에서 뛰어내리는 것과 유사하다는 것을 알게 되었다. 테스터들은 포크 리프트 스키드에 시제품(prototype)을 올려놓고 10피트 높이까지 들어올린 뒤 스키드에서 떨어질 때까지 앞으로 기울였다. 땅에 떨어진 후에도 시제품은 여전히 작동했고, 테스트는 통과했다.

 

항공기의 가장 위험한 사고 중 하나는 공중에서 새와 충돌하는 것이다. 다음은 록히드 마틴이 제작한 F35 제트기의 비기능적 요구사항을 발췌한 것이다(Owens et al., 2009).

캐노피 시스템은 강화 앞유리에 480노트, 캐노피 크라운에 350노트로 4파운드 새의 충격을 견뎌야 하며, 아래를 충족해야 한다:

  • 디자인 아이 "High" 자리에 앉은 조종사에 타격이 가도록 파손되거나 꺾이지 않음
  • 조종사가 정상 기능을 못하게 만드는 부상을 입힐 수 있는 캐노피 손상 없음
  • 항공기의 안전한 작동 또는 비상 탈출을 못하게 하는 손상 없음

 

공중에서 나는 새가 일부러 충돌하도록 만드는 것은 불가능하기 때문에 록히드 마틴의 테스터들은 앞유리와 캐노피에 죽은 닭을 쏠 수 있는 정교한 대포로 이 문제를 재현했고, 테스트가 통과했다.

 

 

수학적 접근법(Mathematical Approaches)

경우에 따라 비기능적 테스팅을 직접적 또는 간접적으로 수행하기가 불가능할 수 있다. 이 때 도움이 될 수 있는 세 가지 형태의 분석에 대기열 이론(queuing theory), 신뢰성 모델(reliability models), 시뮬레이션(simulation)이 있다.

 

대기열 이론(Queuing Theory)

대기열 이론은 서버(servers)와 서비스를 사용하는 작업 대기열(queues of tasks)을 상대한다. 대기열 이론을 뒷받침하는 수학이 작업 도착률(task arrival rates), 서비스 시간(service times), 대기열 수(the number of queues), 서버 수(the number of servers)를 다룬다. 식료품점의 계산대, 영화관에서 표를 사기 위한 줄, 스키장에서 리프트 줄 같은 우리 일상 생활에서 이러한 예를 많이 볼 수 있다: 서비스 시간은 어떤 형태의 시스템 수용력(system capacity)을 나타내며, 대기열은 시스템에 제공되는 트래픽(트랜잭션)을 나타낸다.

 

신뢰성 모델(Reliability Models)

신뢰성 모델은 대기열 이론과 다소 관련이 있다. 신뢰성은 컴포넌트의 고장률(failure rates)을 다루며, 시스템 고장 확률(likelihood of system failure), 평균 고장 시간(MTTF), 평균 고장 간격(MTBF), 평균 복구 시간(MTTR)과 같은 특성을 계산한다. 시스템 컴포넌트의 실제 또는 추정 고장률이 주어지면 이러한 정량적 특성을 계산할 수 있다.

 

전화 교환 시스템의 경우 40년 연속 작동 동안 2시간 이하 다운타임이라는 신뢰성 요구사항이 있다. 이는 0.99999429의 가용성(availability) 또는 5.7 × 10–6 (0.0000057)의 고장률을 의미한다. 이를 어떻게 보장할 수 있을까? 신뢰성 모델이 그 첫 번째 선택이다. 운영 프로파일 계산에 사용하는 방식과 매우 유사하게 트리 다이어그램(tree diagrams) 또는 방향 그래프(directed graphs)로 신뢰성 모델을 표현한다. 이러한 모델은 신뢰성 모델에서 물리적 또는 추상적으로 함께 연결된 개별 시스템 컴포넌트의 고장률(failure rates)을 기반으로 한다.

 

미국 지방 시장을 겨냥한 디지털 단말국(digital end office)은 미국 정부 기관인 REA(Rural Electric Administration)의 인증을 받아야 했다. 이 기관은 압축 전략을 채택하였고, 6개월 현장 테스트(on-site test)를 요구했다. 시스템의 다운타임이 30분 미만이면 인증을 통과한다. 테스트가 시작된 지 몇 달 동안 시스템이 2분 미만의 다운타임을 보였는데, 그러던 어느 날 토네이도가 마을을 강타했고 시스템이 위치한 건물을 파괴했다. REA는 이 테스트를 실패라고 선언했으며, 아주 간곡한 애원이 있은 후에야 재시험으로 이어졌다. 두 번째 테스트에서는 6개월 동안 30초 미만의 다운타임이 발생했다.

 

신뢰성 모델이 물리적 시스템에서 견고한 적용 역사를 가지고 있지만 이를 소프트웨어에도 적용할 수 있을까? 물리적 컴포넌트는 노후화되어 결국 성능이 저하된다. 반면 소프트웨어는 일단 잘 테스트되고 나면 성능이 저하되지 않는다. 소프트웨어에 적용되는 신뢰성 모델과 하드웨어에 적용되는 신뢰성 모델 간의 주요 차이점은 고장 발생률(the arrival rate of failures)로 귀결된다.

 

몬테카를로 테스팅(Monte Carlo Testing)

몬테카를로 테스트는 시스템 테스터가 쓸 수 있는 마지막 무기일지도 모른다. 몬테카를로 테스트의 기본 아이디어는 아주 많은 수의 스레드(트랜잭션)를 무작위로 생성한 다음 무언가 예상치 못한 일이 발생하는지 확인하는 것이다. “몬테카를로부분은 전체 접근 방식이 도박이라는 사실이 아니라 의사난수(pseudorandom)의 사용에서 비롯된다. 몬테카를로 테스팅은 물리적 변수(physical variables)와 연관된 계산이 사용되는 애플리케이션에서 성공적이었다. 몬테카를로 테스트의 주요 단점은 많은 수의 랜덤 트랜잭션이 생성되므로 이 랜덤 테스트케이스의 통과 또는 실패 여부를 결정하기 위해 유사하게 많은 수의 예상 출력이 필요하다는 것이다.

 

 

반응형