Solver 사용기

Solver의 원리

 

Match3 게임을 플레이하다보면 일정 시간 움직임이 없을 때 매치 가능한 블럭에 하이라이트 애니메이션을 통해서 ‘힌트’를 제공하는데 Solver는 이 ‘힌트’를 기반으로 작동한다.

 

(이미지)힌트 제공에는 우선순위가 있어, 아래의 순서에 따라 제공되고 레벨을 클리어할 수 있도록 한다.

*힌트 제공 순서

1. 특수 블럭 머지

2. 특수 블럭 제작

3. 미션클리어 블럭 매치

Solver의 인터페이스

 

(이미지)
게임내 설정팝업을 통해 Solver를 작동시킬 수 있으며, 작동시 위와 같은 인터페이스가 화면 하단에 노출된다.

– 1번 박스 : 테스팅 레벨을 설정하는 부분

시작레벨과 종료레벨을 원하는대로 설정 할 수 있으며, 아래 Run 버튼을 누르면 레벨 플레이가 시작되고, 우측

Stop버튼을 누르면 레벨 플레이가 멈춘다.

레벨 플레이가 시작되면 설정된 종료레벨을 클리어할때까지 지속적으로 레벨을 플레이하고, 설정된 종료레벨까지

클리어한 경우 자동으로 레벨 플레이가 멈춘다. 플레이 과정에서 실패한 레벨들은 2번 박스 부분에 자동 기입된다.

– 2번 박스 : 실패한 레벨들이 기입되는 공간

할당된 공백을 넘어가면 표기된 레벨들이 짤리는 현상이 있어서 이 부분은 개선 예정이다.

– 3번 박스 : 속도와 무브수를 조절하는 부분

Speed를 통해 Solver의 속도를 1~10배속까지 설정할 수 있다. 배속을 최대로 설정 후 테스트 하여도 속도로 인

한 문제점은 발생하지 않았다.

Move를 통해 Move수를 설정할 수 있다. 1~10 까지 설정할 수 있고, 숫자를 설정하게 되면 인게임에서 각 레벨에

부여된 Move수에 설정된 숫자를 곱한 만큼의 Move수가 주어진다.

Fail Count를 통해 한 레벨당 최대 실패 가능 횟수를 설정할 수 있다. 예를 들어, 100으로 설정하면 안 풀리는 레벨

이 있을 경우 100번 시도하고 설정된 실패 횟수인 100회를 넘어갈 경우 2번 박스의 Failed 부분에 기입된다.

Solver의 기능

 

Solver를 작동하면 아래와 같이 레벨이 자동으로 플레이된다.


(이미지)(이미지)


Solver의 장단점

 

Solver의 장점은 빠른 테스트 속도와 넓은 테스팅 범위이다. 배속설정이 가능하다는 점과, 레벨 클리어 과정에서 별 또는 어떤 아이템을 얻는 등의 클리어 애니메이션, 월드맵 이동 등과 같은 과정이 생략되서 수동으로 테스팅하는 거에 비해 확실히 속도가 빠르다. 또한, 모든 레벨을 테스트 할수 있어 결함이 발생한 레벨도 수월하게 체크할 수 있다.

하지만 단점도 있다. 첫 번째로 간헐적으로 일부 레벨에서 솔버가 멈추는 현상이 발생해서 수동으로 재시작 버튼을 눌러줘야 한다. 현재 이 부분은 개선 중이다.

두 번째로 Solver의 지능이 다소 낮다는 점인데, 복잡한 레벨의 경우 블럭의 구성에 따라 클리어할 때도 있고 못할 때가 있다. 추가적인 검증을 통해 이를 개선하려 한다.

 

Solver의 효율적인 활용 방법

 

App Player(Emulator)를 이용한 테스팅을 통해 Solver를 효율적으로 활용할 수 있다. App Player란 PC에서 모바일 게임을 비롯한 모바일 앱들을 실행할 수 있게 해주는 Emulator Program인데 대표적인 App Player로 BlueStacks와 Nox 등이 있다.

두가지 모두 사용해본 결과, 기능적인 부분에서 Nox가 더 유용하다고 판단하였는데, 그 이유는 아래와 같다.

1. 다양한 환경을 구현 할 수 있다.

유저들의 불만으로 접수되는 이슈들을 살펴보면 기기의 노후화로 인한 저사양문제, 기기의 다양화로 인한 해상도 문

제 등이 간혹 있는데 이런 세세한 부분을 Nox App Player 성능 설정 기능을 통해 사전에 발견할 수 있다. 유저들의

불만이 자주 접수되는 기기의 환경과 유사하게 설정하여 레벨테스팅 진행할 수 있기 때문이다. 이러한 기능은 해당

불만에 대한 발견 범위를 넓히는 것을 도와준다.

2. App Player의 Multi-Player 기능을통해 1대의 PC로 다수의 Emulator 를 구동 할 수 있다.

다수의 Emulator 구동을 통해 레벨 구간별 테스트를 진행하여 테스트 시간을 단축시킬 수 있고, Emulator별

성능을 다르게 설정할 수 있어 첫 번째 장점으로 언급했던 부분 또한 극대화 할 수 있다.

(이미지)

 

Solver의 Testing 결과

 

App Player의 Multi-Player 기능을 통해 9개의 Emulator를 구동하였다. 다수의 Emulator를 구동시킨데에는 2가지 이유가 있는데, 첫 번째는 다양한 디바이스 환경을 구현하기 위함이고, 두 번째는 레벨을 구간별로 테스트하기

위함이다.

그래서 9개의 Emulator를 3개의 구간으로 나누었고, 각각 3개씩 초반/중반/후반 레벨로 나누어 구간별로 테스트를 진행하였다. 구간을 나눈 가장 큰 이유는 테스팅 시간 단축하기 위해서다.

예를 들어, Lollipopmatch3는 2600개 정도의 레벨이 있는데, 1레벨 부터 2600레벨까지 테스팅을 하게 되면 1시간에 평균 200레벨을 플레이한다는 가정하에 13시간 가량이 소요되서 효율적이지 못하다. 반면에 3개의 구간으로 나누게되면 880개의 레벨만 테스팅하면 되기 때문에 4~6시간 정도 밖에 소요되지 않는다.

추가적으로 앞에 “Solver의 장단점”에서 단점으로 언급했던 Solver의 낮은 지능 문제는 구간별 테스팅을 통해 어느정도 보완할 수 있다고 판단하였다.

예를 들어, 500레벨이 좀 복잡해서 블럭의 구성에 따라 클리어할 때도 있지만 실패하는 경우도 있다고 가정한다면 레벨 테스팅 종료단계에서 실패된 레벨들을 체크하면서 아래와 같이 판단할 수 있다.

– 1. 초반레벨을 플레이한 3개의 Emulator중 500레벨을 3개 모두 실패한 경우 : 테스터의 검증이 필요한 레벨

– 2. 3개중 1개는 성공한 경우 : 클리어 가능한 레벨

이런 식으로 사후 검증을 통해서 풀 수있는 레벨인데 실패한 부분을 체크해서 Solver의 낮은 지능 문제를 일부 보완 할수 있다고 판단하였다. 지속적인 테스팅을 통해 데이터를 수집해서 최적의 보완 방법을 찾아나갈 계획이다.

Tester vs Solver

 

기존 레벨테스팅 환경은 부족한 점이 매우 많았다. 업무환경상 한정적인 시간내에서 레벨 테스트를 진행하다보니 아래와 같이 일부 업데이트밖에 테스트를 진행하지 못했기 때문이다.

– 기본 업데이트(플랫폼, 버그 수정 등)의 경우 : 전체에서 랜덤으로 5%

– 레벨 수정 업데이트의 경우 : 수정된 레벨내에서 랜덤으로 5~10%​

사실상 랜덤으로 지정한 레벨들외에 결함이 발생하면 손 쓸수가 없어서 결함이 그대로 유저들에게 전달되는 경우가 종종 있었다. Solver는 이런 애로사항을 잘 보완한다.

물론 Tester 수준의 지능으로 플레이를 하는게 아니기 때문에 구동과정에서도 개선해야 할 부분이 많고 테스트 완료 시점에 테스트 output을 점검/개선하는 과정이 필수적으로 요구되기도 한다.

하지만 이런 부분을 점진적으로 개선해나간다면 고퀄리티의 Solver Testing이 가능해질 것이다. Solver Testing은 수동 Testing에 비해 대폭 단축된 시간에 진행할 수 있고, Testing 구동 후 다른 업무를 할 수 있어 근무시간내 Testing을 진행해야 하는 Tester와 비교해보았을 때 확실히 효율적이다.

결과적으로 Level Testing 부분에 있어 Solver가 Tester를 확실히 능가한다.

 

Solver 개선사항 및 방향성​

 

Solver는 아래와 같은 기대효과를 가진다.

 

(이미지)

첫 번째로,모든 레벨을 테스트 할 수 있어 이슈를 사전 예방하고 퀄리티를 향상시킬 수 있다. Lollipopmatch3의 예를 들어보자.

(영상)
무한드랍현상

Lollipopmatch3에서 신규 엔진으로 전체적인 교체가 이루어지는 과정에서 특정 레벨에서 무한드랍현상 발생했다.

무한드랍현상은 match3에서 포털과 고정블럭의 배치에 따라 아주 간헐적으로 발생하는데, 어떻게 블럭을 파괴하느냐에 따라 발생하므로 수동으로는 재현하기가 다소 어려운 이슈이다. 하지만 Solver를 통해서 이를 발견하고 수정할 수 있었다.

이를 통해 Solver의 지능이 다소 낮더라도 한 번이라도 Solver를 통해 모든 레벨을 플레이하는 것이 유의미하다는 것을 알 수 있었다. 추후 이러한 단점을 보완한다면 더욱 더 유용하게 쓰일 것이다.

두 번째로, 단축된 Testing시간으로 인해 기존 Level Testing에 사용했던 시간을 사람의 판단력이 필요한

Testing 혹은 게임의 품질을 향상 시킬 수 있는 부분에 집중할 수 있게 되었다.

세 번째로, 지속적인 개선으로 추후 완성도가 높아진다면 Solver를 레벨 난이도까지 검증하는 툴로도 발전시킬 수 있을 것이라고 기대한다.