서버 테스트 방법 들

Posted by 엘키의 주절 주절 on April 25, 2008

스트레스 테스트

  • 예상한 것보다 훨씬 많은 행동을 시도하는 테스트 클라이언트를 통해서, 많은 부하가 발생했을 시에도 정상동작하는지 확인한다.

접속/해제 테스트

  • 좀비 클라이언트가 남는지 확인한다.
  • 접속/해제시 소켓 재사용 로직이 잘 처리되는지 확인한다. (최대 접속 가능 수가 5000이라고 치면, 5000개 이상의 클라이언트로 접속/해제 테스트를 수행한다)

로그인 / 로그 아웃 테스트

  • 로그인 과정에서 끊길 수 있도록, 난수로 결정된 시간 값으로 클라이언트에서 디스커넥을 시도한다. 좀비가 남지 않는지 확인해야 하는데, 이 좀비는 위의 접속해제와 다른 것이 소켓 풀에서의 좀비가 아니라, 서버 로직상에서의 좀비를 확인해야 한다.

랜덤 (더미) 패킷 테스트

  • 프로토콜에 전혀 맞지 않는 (비암호화) 무작위 생성 패킷을 발송한다.
  • 이 검사를 통해 프로토콜 검사를 통과하는 경우는 생길 수 있지만, 그로 인한 예외처리가 잘 되어있는지를 확인하기 위함이다.

변조 패킷 테스트

  • 프로토콜엔 맞되, 들어있는 값이 다른 패킷을 생성해 발송한다.
  • 예를 들면, 뒤에 붙는 데이터 크기보다 더 큰 크기라고 속여서 발송하는 것이다. (실제 길이는 8byte인데, 헤더에는 64byte라고 속이는 등)
  • header의 값을 참조로만 사용하게끔 서버의 verify 로직이 잘 작성 되어있는지 확인하는 테스트이다.

#부하 테스트

  • 프로토콜을 맞춘 패킷을 매우 많이 쏘아올려, 동시 접속자 몇당, 초당 몇 바이트의 패킷 까지 정상적인 수행 속도를 유지하는지 확인한다.
  • 패킷별로 패킷 처리 속도도 기록하라.

로직 테스트

  • 정상적인 로직이 구현되었는지 확인하는 테스트 클라이언트를 구현하고 확인하라. 잘못된 데이터를 전달 받거나, 패킷이 회신 되지 않거나 했을 때에는 개발자에게 알려주도록 하라.

경계 값 테스트

  • 로직 테스트 시 데이터를 올려보낼때 경계값(아이템 최대치가 10이 제한이면, 10, 11 , 0, -1, -32768 등의 값을 올려보낸다) 과 터무니 없는 값도 입력해서 예상치 못한 행동을 미리 시도해보는 것이 좋다.

무작위 패킷 테스트

  • 정상적인 클라이언트가 올려보내기로한 패킷의 순서를 무시하고 패킷을 올려보낸다.
  • 패킷이 순서가 존재하는 상황이 줄어야겠지만, 거래나 퀘스트 같은 경우가 여러 과정을 거치게끔 되어있는 경우가 많다.
  • 동일한 패킷을 여러번 올려보내도 로직상 문제가 없는지 확인한다. (아이템 보상 패킷, 되팔기 패킷 등이 주 검토 대상.)