모바일 게임 테스트 자동화 igc 2016

38
모바일 테스트 자동화 NCSOFT / SET team 김종원 Inven Game Conference

Upload: jongwon-kim

Post on 16-Apr-2017

521 views

Category:

Software


5 download

TRANSCRIPT

Page 1: 모바일 게임 테스트 자동화 Igc 2016

모바일테스트자동화NCSOFT / SET team

김종원

Inven Game Conference

Page 2: 모바일 게임 테스트 자동화 Igc 2016

2

NCSOFT (2004 ~현재)

SET팀 (Software engineering in test) 2015 ~前리니지이터널 Technical director (2007 ~ 2013)모바일게임기개발프로젝트 (2004 ~ 2005)

모코코(2000)

임베디드리눅스기반 PDA플랫폼, PalmOS 5.x스마트폰개발(갤럭시)

한글과컴퓨터(1994)

윈도우용아래아한글 3.0시리즈,한글 96등개발휴먼컴퓨터(1991),한메소프트 (1992)

윈도우프로그래밍개발시작,한메한글 for 윈도우

월간마이크로소프트웨어와 ZDNet 에여러기술관련글과 ‘망치와모루’라는컬럼으로기고

김종원

Page 3: 모바일 게임 테스트 자동화 Igc 2016
Page 4: 모바일 게임 테스트 자동화 Igc 2016

4

(현재상황)보급선은식량이떨어진후 15일후에도착예정

책임자 :발사일정을 13일정도더줄일방법있나?

담당자 :탑재는 3일걸림,점검과시험과정에 10일걸림

책임자 :점검과정중크리티컬문제발견확률은?

담당자 :대략 2.5% (허걱,불안한데?)

책임자 :성공확률 0%보단 97.5%가나음.점검생략.고고~

담당자 :ㅠㅠ (건너뛸생각이면서왜물은거야?)

식량보급을위한보급선발사일정협의중

Page 5: 모바일 게임 테스트 자동화 Igc 2016
Page 6: 모바일 게임 테스트 자동화 Igc 2016

6

Page 7: 모바일 게임 테스트 자동화 Igc 2016

7

Page 8: 모바일 게임 테스트 자동화 Igc 2016

8

Page 9: 모바일 게임 테스트 자동화 Igc 2016

구글 페이스북

QA업무 개발 개발

테스트 관련 직무SET - 테스트 인프라 및 테스트 기능 개발

TE - 테스트 엔지니어, 사용자이자 기술자없음

테스트 조직 생산성혁신팀 (Engineering productivity) 없음

목표근본 원인 파악 및 예방에 중점

테스팅이 기술 혁신과 개발에 방해되지 않도록 함개발 효율 극대화 및 테스트 수행 대기 최소화

테스트 범위개발자는 소형 테스트, 중형은 SET, 대형은 TE가 테

스트 주체개발자가 모든 테스트 케이스 작성 및 유지 보수

코드 리뷰리뷰 시스템에 코드 뿐만 아니라 테스트 결과도 포

함 시켜 리뷰 받음구글과 동일

테스트 자동화 사람의 직관이 필요하지 않은 것은 모두 자동화테스트 유형별로 자동화 수행. 항상 성공하는 테스트

케이스는 제거함

배포 단계 테스팅' 단계에서 사내 배포. 이후 '베타'로 오픈 릴리즈 일주일 전에 사내 배포. 업데이트는 하루 2번

구글과페이스북의테스팅

9

Page 10: 모바일 게임 테스트 자동화 Igc 2016

QC (Quality Control) 품질제어품질에대해미리정의된요구사항을검증하는프로세스일련의요구사항을부합하는지점검하는것과미리정의된요구사항충족검증

QA (Quality Assuarance)품질보증QC업무를할수있는프로세스에대해지속적으로개선과유지보수를제공하는업무QC프로세스를포함하는메타프로세스

테스트엔지니어링(Software test engineering)QC라는실제세계와QA라는메타세계를연결하는다리역할테스트를하는것이아니라테스트환경을개발한다

QC와QA를연결하는테스트엔지니어링

10

Page 11: 모바일 게임 테스트 자동화 Igc 2016

유저측면작은이슈에민감하여이탈이심하다단한번의앱크래시만으로도게임삭제/유저이탈PC게임에비해브랜드충성고객적음, 게임브랜드인식이쉽게나빠짐

기기측면기기파편화가심해, 최소한의호환성확보가가장중요같은기기모델에도여러 OS 버전분포 (OS 업데이트잘안함)

국가별기기확보/ 환경설정의어려움

모바일게임의런칭이슈 1/2

11

Page 12: 모바일 게임 테스트 자동화 Igc 2016

https://opensignal.com/reports/2014/android-fragmentation/

12

Page 13: 모바일 게임 테스트 자동화 Igc 2016

화면비율의파편화

https://imseongkang.wordpress.com/2016/04/21/mobilescreensize/https://opensignal.com/reports/2014/android-fragmentation/

13

Page 14: 모바일 게임 테스트 자동화 Igc 2016

네트워크사용성측면불안정한무선네트워크환경(지연및음영지역, 비정상연결)사용자이동에따른네트워크단절및전송지연(예:엘리베이터이동)게임사용중전화, 문자, 푸시알림으로인한플레이인터럽트

프로젝트관리측면다수게임동시개발,출시일정이겹치는경우출시프로젝트에비례하여테스트인력을증가시킬수없음출시후라이브단계는최소의인력으로동일한 QA 품질확보예)회귀(리그레션)테스트는어떻게?

모바일게임이슈 2/2

* 회귀테스트: 수정된부분이기존기능에영향을주었거나과거발생했던 문제가다시발생하는지확인하는테스트

14

Page 15: 모바일 게임 테스트 자동화 Igc 2016

15

모바일게임자동화사례 (해외)

B사구글과MS 출신으로구성된별도의테스트엔지니어팀활용

SET또는 SDET이라고부르는직군

개발초반부에자동테스트시스템구축에집중빌드시스템에서테스트용빌드를생성, PC상에서자동테스트진행QA 는자체인력 30여명외에현지외주QA회사활용

Page 16: 모바일 게임 테스트 자동화 Igc 2016

16

테스트자동화의수난

부정적인식• 게임테스트는사람이직접하는것이라는인식• 게임은웹브라우저나네이티브앱과달리자동테스트툴없음

테스트프레임워크가게임내 UI 구성요소를인식하지못함랜덤으로터치하는방식이나화면좌표기록으로테스트스크립트작성

• 개발중의잦은 UI변경으로좌표기반스크립트무용지물• OS와플랫폼에맞춰각기다른테스트스크립트작성비용증가• 화면비율과해상도가달라좌표기반의스크립트를제한적용• 직접사람이테스트하는것이더유용하다는인식

Page 17: 모바일 게임 테스트 자동화 Igc 2016

수동테스트 vs 자동테스트

좁은범위테스트,많은비용과시간 넓은범위테스트범위,빠른테스트및적은비용

17

Page 18: 모바일 게임 테스트 자동화 Igc 2016

18

테스트할모바일디바이스도필요한데

꼭필요한기기호환성테스트• 국내는점유율상위 50개의기기가 90%정도차지• 중국테스트업체의경우 300개이상의기기에서호환성테스트진행• 북미,유럽의경우 150개이상의기기테스트필요• 해당기기확보뿐만아니라테스트인력비용도만만치않음

클라우드테스팅환경제공업체• 테스트대행업체들중자체테스트랩을대여하여테스트환경제공• 자체기기에앱설치및기본적인테스트스크립트를동작• 소규모뿐만아니라대형업체들도가세

Page 19: 모바일 게임 테스트 자동화 Igc 2016

19

모바일디바이스테스트랩

클라우드서비스를이용하여테스트장비대여• 리모트터미널을이용한개별테스트,다수디바이스에대한일괄테스트

• 성능모니터링및테스트결과리포트가제공• 접근성(속도)및보안(테스트앱삭제등)이중요• 개별기기대여보다는스크립트기반의일괄테스트가유용

서비스제공사• Perfecto Mobile, TestObject, Bitbar (TestDroid),

Xamarin Test Cloud등의중소업체들• Amazon Device Farm, Google cloud test lab등의대형업체• 기존테스트결과로그가그대로남아있는사례가있어보안에좀더신경써야함

Page 20: 모바일 게임 테스트 자동화 Igc 2016

20

테스트자동화프레임워크

사람대신일을시킬테스트환경이필요• PC환경에서는오랫동안여러툴이사용되어왔음

• 매크로나스크립트기반의툴이지금도다양하게존재

• 모바일환경은 PC만큼자유롭지도않고플랫폼도여러개로나뉘어존재하여통합된테스트환경이필수적임

대표적인모바일테스트프레임워크• Appium, Robotium, Calabash, UIAutomator, Espresso• 확장성이나스크립트언어등을고려하여선택해야함

Page 21: 모바일 게임 테스트 자동화 Igc 2016

21

테스트자동화프레임워크비교

Page 22: 모바일 게임 테스트 자동화 Igc 2016

22

모바일자동테스트방법

• 몽키테스트 (랜덤터치 +시스템이벤트)

• 화면컴포넌트의랜덤터치테스트• 테스트순서를레코딩한것을재생• 화면이미지검색을통해원하는컴포넌트를찾아터치

단점테스트중의예외상황또는일정확률로발생하는이벤트에대한대비를하기위해이벤트검출코드를작성해야하는데무척어려움

Page 23: 모바일 게임 테스트 자동화 Igc 2016

• 테스트하려는앱에특정코드나모듈을삽입하여컴파일하지않고도테스트할수있도록하는것이목표

• Selenium WebDriver API를제공하는언어는 무엇이든스크립트로쓸수있다 (Java/Javascript/Python/Ruby/C#/…)

• 테스트스크립트는 http방식으로 Appium서버와통신하고서버는디바이스에서동작하는테스트지원라이브러리인UIAutomator같은서비스와 TCP로연결,명령과결과를주고받는다

• 네이티브,하이브리드,웹앱방식의모바일앱테스트가능

• Android/iOS플랫폼모두지원

Appium

23

Page 24: 모바일 게임 테스트 자동화 Igc 2016

안드로이드앱의테스트과정1. 테스트시나리오기반스크립트작성 (Java)및컴파일2. 디바이스연결및 Appium서버실행3. 테스트러너(JUnit/TestNG)를사용하여테스트스크립트실행4. Appium는 adb를이용하여디바이스에부트스트랩앱을다운로드5. 부트스트랩앱은 Appium서버와연결후 UIAutomator의 API로서버의명령을전달

6. 스크립트의명령을 Appium서버가받아서 UIAutomator를이용앱의동작을제어하는방식

7. 테스트명령이기대하는결과가나오지않으면테스트러너에서예외발생하고중단

Appium

24

Page 25: 모바일 게임 테스트 자동화 Igc 2016

Windows / OS X

Android Device

Appium프레임워크의동작방식

Test script

UI AutomationiOS Driver

UI automator

Instrumentation

iOS device

Appium server(node.js)HTTP

JSON wire protocol

Command

Command

UI automator(Android 4.2+)

Selendroid(Android 2.3+)

Test runner

Appiumclient API

25

Page 26: 모바일 게임 테스트 자동화 Igc 2016

26

오브젝트기반의자동테스트

• 클라이언트내의 UI오브젝트를일정규칙의 path로명명하여스크립트에서컨트롤하는방법

• 스크립트에서는해당오브젝트의존재유무나상태를보고기다릴것인지이벤트를발생할것인지판단함

• 예외상황에대한처리도다른방법에비해쉬움

• UI의텍스트를추출해원하는수치와비교를하거나클라이언트에삽입한모듈과통신하여테스트를위한명령이나로그를비교할수있음

Page 27: 모바일 게임 테스트 자동화 Igc 2016

게임테스트를위한프레임워크확장

AppiumServer

UI AutomationLibrary

Test Script(오브젝트 기반)

Game ObjectFind Module

In-Game Object Query

TestApp

return objects information

GameObject

InspectorModule

확장 Appium 프레임워크 (게임내테스트용모듈삽입)

기존 Appium프레임워크

AppiumServer

UI Automation

Library

Test Script(좌표기반)

TestApp

27

Page 28: 모바일 게임 테스트 자동화 Igc 2016

28

모바일게임테스트를위한확장(1/2)게임테스트자동화를위한플러그인모듈개발

• 화면상의좌표로만테스트를해야하던기존의테스트방식을개선

• 게임내 UI 오브젝트의정보를제공하는모듈개발(Unity3D 플러그인)

• 모바일테스트프레임워크인 Appium의서버를확장하여게임내오브젝트를찾는인터페이스추가

• 테스트스크립트작성을위한 Appium클라이언트 API 확장

findElementByGameObjectNamefindElementByGameObjectNameAndTag…

Page 29: 모바일 게임 테스트 자동화 Igc 2016

29

모바일게임테스트를위한확장(2/2)좌표기반이아닌오브젝트기반 테스트스크립트작성

• 화면배치가바뀌어도동작이되도록좌표가아닌문자열을사용

• 게임엔진내의 Scene내부의계층구조와이름등을이용오브젝트 ID생성 (자체개발한 Unity3D Inspector 툴을이용타겟 UI문자열추출)

• 문자열 ID 기반으로된스크립트를한번작성하면화면비율이나해상도가바뀐기기에서재사용가능

• 막연히특정시간동안기다리는방식을피할수있어테스트속도향상특정오브젝트가나올때까지기다렸다가해당오브젝트를터치할수있어테스트시간및 정확도를높임

Page 30: 모바일 게임 테스트 자동화 Igc 2016

30

오브젝트기반의테스트방법시연(1.3x 속도)

Page 31: 모바일 게임 테스트 자동화 Igc 2016

31

Page 32: 모바일 게임 테스트 자동화 Igc 2016

32

테스트스크립트예RunCommand(“AddCash 1000");

WaitUntilDisable(networking, 10);

RunCommand(“AddStamina 10");

WaitUntilDisable(networking, 10);

String staminaText = "UIRoot/HudRoot/PlayerInfoUI/HudRoot/Stamina/Text_Root/Text";

MobileElement me = driver.findElementByGameObjectName(staminaText);

String staminaNum = me.getText().replaceAll("\\[[\\-a-zA-Z0-9]*\\]", "");

String staminas[] = staminaNum.split("/");

int stamina = Integer.parseInt(staminas[0]);

String staminaCharge = "UIRoot/HudRoot/PlayerInfoUI/HudRoot/Stamina/InkBG_Root/BG";

ClickAfterWaitingClickable(staminaCharge, 5);

String buyStamina = "UIRoot/PopupRoot/ShopMiniStaminaDlg/Body/ListViewPanel/CardRoot/Collider";

ClickAfterWaitingClickable(buyStamina, 5);

String changeBtn = "UIRoot/PopupRoot/ShopBuyItemPopup/Content/Btn_Confirm/Enable_Btn";

ClickAfterWaitingClickable(changeBtn, 5); // buy button

WaitUntilDisable(networking, 10);

Page 33: 모바일 게임 테스트 자동화 Igc 2016

33

소규모개발사의테스트자동화

테스트를위한여러툴을직접개발할수는없는상황Appium의이미지비교방식이바로사용해볼수있는방법클라이언트프로그래머의지원을받을수있다면

• 테스트용도로 PC에서실행하는테스트코드와게임클라이언트와네트워크를 연결.테스트코드에서게임에접속해서사전에정의한 UI의 ID를사용하여클릭또는표시대기등의동작을수행

• 테스터가아닌프로그래머가테스트코드를직접작성하는것이훨씬빠름.테스터는해당코드를기반으로살붙이기

• UI의 ID를동작과연관되어이해하기쉽게명명하고리소스에디터내에서해당오브젝트의정보를바탕으로테스트코드를작성하도록함

Page 34: 모바일 게임 테스트 자동화 Igc 2016

34

오브젝트 ID명명 TIP

테스트스크립트를쉽게하는이름붙이기• 오브젝트의 ID를중복없이컨텐츠마다이름규칙을부여

• 반복사용하는오브젝트는 ID를짧게부여하는것이좋음

• 연속된동작에서같은 ID를사용한 UI오브젝트를사용하는것은피할것.예를들면재사용되는팝업윈도우의경우어느화면에서열린윈도우인지파악이어려움. 스크립트작성시혼동을피할수있게구분

• 화면전환시전환시점을명확히알수있는시스템로그나메시지를제공하면테스트가훨씬수월해짐

• 화면에동시에여러객체를같은이름으로생성하는것은절대피할것.스크립트에서구별할수없음

Page 35: 모바일 게임 테스트 자동화 Igc 2016

35

테스트명령어 (빌더명령어)

빠른테스트를위한테스트명령어제공• 개발및테스트를위해클라이언트및서버에서수행하는명령

• 보통숨겨진콘솔창을띄워서입력

• 서비스바이너리에서는동작하지않도록기능이제거됨

• 테스트스크립트에서테스트명령을사용할수있도록하면테스트가훨씬수월해짐

command(“ShowMeTheMoney 1000000”)

command(“SkipTutorial”)

Page 36: 모바일 게임 테스트 자동화 Igc 2016

36

남겨진과제

스크립트작성속도향상• 직관적인테스트스크립트작성환경제공필요• 스크립트중간부터실행을다시할수있는기능개발

게임 UI를위한헬퍼함수개발• 테스트에도움을줄수있는게임별라이브러리구축

Appium프로젝트와머지• 확장한코드를 Appium프로젝트에계속머지해야하는문제• 기존의기능은변경하지않고최소한의수정만을함

다양한게임엔진지원• Unity3D외에 UnrealEngine이나 Cocos2D와같은게임엔진들을지원하는플러그인의개발필요

• 엔진버전마다기능이다르고 NGUI같은상용라이브러리버전에도영향을받음

Page 37: 모바일 게임 테스트 자동화 Igc 2016

Code Commit

37

CI와테스트연동

CodingBuild

ReleasePre-build

TestRelease

Post-buildTest

정적 분석

Static Analysis

유닛 테스트

기능 테스트 코드

Test cases 작성

테스트 용 서버 및클라이언트 자동 빌드

테스트 환경 자동 구성

시나리오 기반 테스트

테스트용빌드

Emulator/Cloud test

기능/환경테스트

SW 결함 검출

Test 수행

테스트 결과 자동 발송

Report

개발Process

TestPipeline

코드 커버리지분석

효과적인테스트자동화는개발파이프라인중간부터시작해야

Page 38: 모바일 게임 테스트 자동화 Igc 2016

38

Q & A

Twitter

@jongwonkim

@nvil

구인 :함께같이일할동료를찾고있습니다.언제든지연락주세요