게임은 많은 기능과 컴포넌트로 이루어진 소프트웨어 입니다. 간단히 RPG게임에 들어가 있는 컨텐츠들만을 나열하더라도 아래와같이 많은 콘텐츠가 있습니다.

graph TD; Player --> Game NPC --> Game Monster --> Game Vehicle --> Game Stage --> Game Equip --> Game Looting --> Game Ranking --> Game Quest --> Game

Player는 다양한 아이템들을 사용/장착하고 많은 NPC, Monster와 조우하며 상호작용합니다. 이 여정에는 많은 변수가 생길 수 있으며 헤아릴 수 없는 경우의 수가 발생합니다.

이렇게 콘텐츠가 많다는 것은 테스트해야 할 게 많다는 것도 나타내지만 한편으로는 복잡한 콘텐츠들을 자동으로 테스트할 수 있을지 의문이 들기도 합니다.

그런데 아래와 같이 게임테스트를 실제 자동화한 사례들이 있는데요.

👉
이 글은 E2E(End to end) UI조작과 사용자 Input을 통한 테스트 자동화에 대해 다룬 내용입니다. 게임서버 부하테스트 등의 내용과는 무관합니다.

게임 테스트 자동화 사례들

Activision의 Call of Duty (PC, Console)
엔씨소프트 ( Mobile )
QA 테스트 자동화에 도전하다
‘Technology: Push the Boundaries’ 시리즈에서는 이러한 엔씨인들이 각자의 분야에서 한계에 맞서 끊임없는 도전으로 탄생시킨 ‘기술’을 소개합니다. 그 첫 번째 이야기는 게임 QA의 자동화 테스트를 향한 도전입니다. 이 이야기는 ‘기본적이고 반복적인 테스트를 자동화할 수는 없을까?’라는 생각에서 출발합니다.
Riot Games의 League of Legends ( PC )
Automated Testing for League of Legends
http://riot.com/1QLle1Q #RiotTechBlog
용과 같이 ( PC, Console )

규모가 있는 회사들은 실제로 게임 테스트 자동화를 도입하고 산업에 적용하고 있습니다. 적용한다면 얻는 이점이 많기 때문이 아닐까 싶어요. 위 사례에서 알 수 있는 장점은 아래와 같습니다.

게임 테스트 자동화의 장점

회귀테스트를 자동화하여 인력과 시간을 아낄 수 있습니다.
  • 이 부분은 어떤 사람에게는 와닿을 수 있고, 다른 사람에게는 와닿지 않을 수 있는데요. 각 팀에서 회귀테스트에 소모되는 시간이 어느 정도인지는 정확히 알 수 없으나, 이를 자동화한다면 정말 많은 시간이 절약될 수 있습니다. 넷플릭스는 '오프닝 건너뛰기' 버튼을 도입해서 195년의 시간을 절약했다는 사실을 아시나요? 이와는 조금 다른 경우이긴 하지만 하나의 반복적인 부분을 줄인 것이 누적되면 많은 시간을 절약하는 결과를 가져와 줍니다. 또한 제품이 커지면 커질수록 회귀 테스트를 해야 하는 케이스는 점점 많아집니다. 제품이 커질수록 테스트에 소모되는 시간이 커진다는 것이고 그만큼 자동화의 필요성이 증가하고, 자동화로 절약할 수 있는 시간도 증가하는 것이겠죠.
버전별 특정 지표의 추이를 알 수 있다. (FPS, Memory, 발열, 테스트 실패 횟수 등 )
  • 게임은 많은 상호작용이 일어나는 만큼 중간에 유저의 집중을 깨트리는 요소가 발생하는 것은 정말 치명적입니다. 이런 요소들을 매번 기록하고 비교한다면 집중을 깨트릴 수 있는 요소가 배포되기 전에 미리 감지할 수 있고, 만약 배포되었다고 하더라도 이슈 추적이 한결 수월할 것입니다.

그렇다면 위 사례들에선 어떻게 자동화 시스템을 구축했을까요? 알 수 있는 점들은 아래와 같습니다.

게임 테스트 자동화를 어떻게 구축했을까?

모든 케이스를 다 자동화하지는 않았습니다.
  • 액티비전 발표 에서 볼 수 있듯이 지루하고 반복적인 작업을 자동화하고 자동화가 테스터를 대체하진 않았습니다. 자동화는 테스터가 좀 더 생산적이고 실험적인 작업을 할 수 있도록 시간을 절약해 주는 것이죠.
사람이 테스트 스크립트를 작성합니다.
  • 위 모든 사례에서는 전부 Python 스크립트를 사용했는데요. 그렇습니다. 원하는 테스트 케이스에 대한 스크립트를 작성해야 합니다. Python 등의 프로그래밍 언어를 알아야하고 테스트 스크립트 작성에 대한 학습을 해야합니다. 그리고 이 스크립트를 신기능, 기능변경시 유지보수해야할 수 있습니다.
자동화 테스트 스크립트 작성 예시들이 제각각입니다.
  • 테스트를 자동화하기 위해 만든 라이브러리는 회사마다 모두 내부에서 제작한 것입니다. 다른 회사에서는 쓸 수 없습니다. 즉 현재 게임테스트를 자동화하기 위한 라이브러리 표준이 없습니다.
시스템에 필요한 게 정말 많습니다.
  • WebServer를 개발하고 DB를 사용해야 합니다. 시간별 지표를 저장하는 TSDB도 사용할 수도 있습니다. 그리고 이 모든 테스트를 시각화해야할 WebPage도 만들어야합니다. 그리고 소스코드가 있는 버전관리시스템과 연동까지 해야합니다. CI 시스템과 연동하여 개발프로세스에 테스트 자동화가 포함되는 시스템을 만들고 매 작업이 반영될 때마다 자동화 테스트를 실행하고 실패시에 알람을 주는 기능까지 만들어야 유의미한 효과를 얻을 수 있습니다.
  • 그리고 추가로 신뢰성, 안정성 등을 위해 만들 테스트 AutoRetry, 잘못된 실패에 대한 처리 등.
  • 많은 부분을 검증하기 위해 만들 버전별 지표 추이 비교등

게임 테스트 자동화를 구축하는 것은 정말 쉽지 않아 보입니다. 제가 생각하기엔 아래 로드맵을 거치면 유의미한 효과를 볼 수 있을것 같은데 어떤가요?

게임 테스트 자동화까지의 여정

  • 게임내에 게임테스트 자동화 라이브러리를 넣는다.
  • 게임 밖에서 게임을 조작할 수 있는 게임테스트 스크립트 작성법을 학습한다.
  • 게임 테스트 스크립트를 작성하고 실행해본다.
  • CI 시스템과 연동하여 자동으로 테스트 스크립트가 실행되도록 한다.
  • 테스트 실패시 실패원인에 대해서 추적할 수 있는 리포트 시스템을 만든다.
  • 슬랙 알람 등을 통해 인지할 수 있게한다.

게임 테스트 자동화를 시작하고 실제 유의미한 결과를 얻기까지의 여정이 길게 느껴질 수 있지만, 그럼에도 게임 테스트 자동화가 매력적이라면 시도해 보는 것은 어떨까요?