Performance Testing 1
성능 테스트는 사용자가 웹 서비스를 이용할때의 응답성을 알아볼 수 있는 테스트 유형중 하나이다. 이 과정을 통해 서비스의 처리량과 안전성, 확장성을 보장할 수 있다. 핵심 성능 테스트의 활동은 총 7가지의 과정으로 나누어진다. 첫번째 과정으로는 테스트 환경을 확인해야 한다. 테스트 팀이 도구와 리소스를 물리적 테스트 환경과 생산 환경에서도 사용할 수 있는지 확인해야 한다. 테스트 환경을 이해하면 효율적인 테스트 설계 및 계획이 가능하며 어떤 상황에서는 주기적으로 이 과정을 반드시 재 검토하기도 합니다.
두번째 과정은 성능이 받아들일 수 있는 기준을 확인합니다. 응답시간과 처리량, 리소스 이용 목표와 제약조건을 확인하면 가장 원하는 성능의 설정 조합을 평가할 수 있습니다. 응답시간은 사용자의 관심사이고 처리량은 기능의 관심사이고 리소스 이용은 시스템의 관심사이다.
세번째 과정은 계획과 설계를 테스트합니다. 시나리오를 구성하여 유저의 변화를 시뮬레이션 하는 방법과 테스트 데이터를 정의하고 수집합니다. 그리고 이 정보를 시스템에 사용할 모델로 통합하여 구현하고 실행, 분석합니다.
네번째 과정은 테스트 환경을 구성합니다. 각 테스트에 실행될 요소들이 테스트 환경에 구성되어 있는지 확인 합니다.
다섯번째 과정은 테스트 설계를 구현합니다. 테스트 설계를 보고 성능 테스트를 개발합니다.
여섯번째 과정은 테스트를 실행합니다. 테스트의 유효성을 검사하고 테스트합니다.
일곱번째 과정은 결과와 레포트를 분석하고 재검사합니다. 결과 데이터를 공유하고 통합시킵니다.
성능 테스트를 왜 할까? 성능 테스트는 비용과 기회 비용, 기업의 평판과 같은 위험을 해결하기 위해 실시됩니다.
- 출시 전 어플리케이션의 성능을 예측하고 이 예측을 통해 성능 문제를 평가할 수 있습니다. 이 예측들은 투자자들한테 가치가 있습니다. 투자자들은 어플리케이션이 출시될 준비가 되었는지, 또는 미래성장을 다루는 것에 능숙한지 또는 그것이 출시되기전에 성능 개선/ 하드웨어 업그레이드를 필요로 하는지에 대해 결정하는 사람들입니다
- 이는 출시하기 전에 성능을 개선하거나 스케일업이 필요한지 아니면 출시 후에 해결할 수 있는지 알 수 있습니다.
- 시스템의 성능과 함께 유저의 불만족 같은 데이터를 제공합니다.
- 확장성 또는 안정성 문제나 어플리케이션의 응답 시간에 불만족한 유저들때문에 브랜드의 신뢰도 손실이나 수익 손실의 예측에 도움되는 정보를 제공합니다.
- 인프라 적합성을 평가합니다. 현재 수용량을 평가하거나 안정성을 수용하는지 결정하고 예산에 따른 자원 사용에 맞는 성능을 내는지 확인합니다.
- 개발 전 후의 원하는 성능을 결정하고 현재 성능과 원하는 성능 특성의 비교를 제공합니다.
- 다양한 부하 행동을 분석하고 병목 현상을 확인하면 성능을 향상 시킬 수 있습니다.
프로젝트의 맥락을 파악하지 못하면 시간 낭비와 좌절과 충돌로 이어지게 된다. 프로젝트 맥락이란 프로젝트를 성공하는 것과 관련된 것들이며 프로젝트의 비전이나 의도, 성능 테스트 목표, 성과 기준, 프로젝트 예산, 생명 주기, 프로젝트 스케줄, 이용할 수 있는 환경과 도구, 팀의 기술, 성능 문제의 우선순위, 형편없이 실행되는 어플리케이션을 배포했을때의 비즈니스의 영향이다.
- 성능 테스트와 튜닝의 관계 : 팀은 필요한 하드웨어 용량을 줄이고, 플랫폼 여유 공간을 늘리기 위해 리소스의 양을 줄여 시스템 성능을 향상 시킨다. 팀간의 협력 없이는 성능문제를 효율적으로 해결하는 데 거의 불가능하다. 성능 테스터는 핵심 인력이며 다양한 부하 조건과 구성하에 응답 시간과 구성요소와 리소스를 모니터링 한다.
튜닝은 반복적인 과정을 따라야 한다. 테스트는 가상 환경에서 재현 가능 하도록 하며, 성능에 문제될 요소를 찾았을 경우 튜닝 단계에 들어간다. 튜닝 단계가 완료되면 변경한 부분이 적용되며 테스트에 실패할 경우 변경된 튜닝을 폐기한다.
성능 테스팅은 확장성과 시스템의 안정성, 속도를 검증하거나 결정한다. 또한 응답시간과 처리량, 리소스 활용도도 달라진다. 부하 테스팅은 가동 중에 예측한 부하 크기일 경우에 시스템의 성능 특성이 유효한지 초점을 둔다. 스트레스 테스팅은 예상 이상의 조건일 경우에 시스템의 성능 특성을 검증하는데 초점을 둔다.
베이스 라인을 이용하면 다양한 빌드, 버전에서 성능이 증가하는지 감소하는지 편차를 찾을 수 있다. 또한 베이스라인은 특별한 구성을 제외하고는 변하지 않아야 한다.
- 시스템, 구성요소, 어플리케이션을 위한 베이스라인을 생성할 수 있다.
- 베이스 라인은 비교를 위한 기준으로 세팅하며, 최적화 또는 회귀를 추적할 수 있다.
- 베이스 라인은 성능 변화에 도울 수 있다.
- 베이스 라인은 재 사용할 수 있어야 한다.
- 베이스 라인은 지표다.
벤치마킹은 다른 시스템의 성능과 비교하는 과정이다. 어플리케이션들의 벤치마크 점수를 결정하는데 필요한 성능 지표를 캡쳐하기 위해서 벤치마크 명세서를 준수하여 테스트 한다. 벤치마킹의 고려사항은 룰에 맞춰 행동해야 하며, 투명할 수 있다. 또한 다양한 메트릭의 결과를 알려줘야 한다.
성능테스트는 시스템의 병목현상을 알려주고, 추후의 테스팅의 베이스라인을 만들어주며, 성능 튜닝의 효과를 지원하고 요구사항과 성능 목표를 준수하는지 결정에 도움을 준다. 또한 개발 수명 주기에 성능 테스트를 일찍 추가하면 프로젝트의 상당한 가치를 추가할 수 있다.