SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
모바일 게임 테스트 자동화
수 많은 모바일 기기를 대하는 우리의 자세
NCSOFT / SET 팀
김종원
목차
1. 테스트 관점으로 본 모바일 게임 이슈
2. 테스트 자동화의 수난
3. 테스트 자동화 프레임워크
4. 모바일 게임 테스트를 위한 확장
5. 남겨진 과제
6. Q & A
김종원
NCSOFT (2004~ 현재)
SET 팀 (Software engineering in test)
前 리니지 이터널 Technical director (2007 ~ 2013)
모코코(2000)
임베디드 시스템 용 JVM, 리눅스 용 PDA, PalmOS 스마트폰
한글과컴퓨터(1994)
윈도우용 아래아한글 3.0 시리즈, 한글 96 등 개발
휴먼컴퓨터(1991)
계약직 프로그래머로서 윈도우 프로그램 개발 시작
마이크로소프트웨어, ZDNet등에 여러 글과 ‘망치와모루’라는 컬럼 기고
모바일 게임 vs PC 게임
내 맘대로 두 게임 환경을 비교를 해보면
플레이어 수, 100+ 배
OS 버전, 10+ 배
기기의 다양성, 100+ 배
화면의 크기, 100+
네트워크 불안정성, 100+배
모바일 게임 이슈 (1/2)
유저 측면
• 작은 이슈에 민감하여 이탈이 심하다
• 단 한 번의 앱 크래시만으로도 게임 삭제/유저 이탈
• PC게임에 비해 브랜드 충성 고객 적음, 게임 브랜드 인식이 쉽게 나빠짐
기기 측면
• 기기 파편화가 심해, 최소한의 호환성 확보가 가장 중요
• 같은 기기 모델에도 여러 OS 버전 분포 (OS 업데이트 잘 안 함)
• 국가별 기기 확보/ 환경 설정의 어려움
https://opensignal.com/reports/2014/android-fragmentation/
화면 비율의 파편화
https://imseongkang.wordpress.com/2016/04/21/mobilescreensize/https://opensignal.com/reports/2014/android-fragmentation/
모바일 게임 이슈 (2/2)
네트워크 사용성 측면
• 불안정한 무선 네트워크 환경(지연 및 음영 지역, 비정상 연결)
• 사용자 이동에 따른 네트워크 단절 및 전송 지연(예: 엘리베이터 이동)
• 게임 사용 중 전화, 문자, 푸시 알림으로 인한 플레이 인터럽트
프로젝트 관리 측면
• 다수 게임 동시 개발, 출시 일정이 겹치는 경우
• 출시 프로젝트에 비례하여 테스트 인력을 증가시킬 수 없음
• 출시 후 라이브 단계는 최소의 인력으로 동일한 QA 품질 확보
예) 회귀(리그레션) 테스트는 어떻게?
* 회귀 테스트: 수정된 부분이 기존 기능에 영향을 주었거나 과거 발생했던 문제가 다시 발생하는 지 확인하는 테스트
모바일 게임 자동화 사례 (국내)
잘나가는 모바일 게임 회사
• 몽키러너를 이용한 UI기반 테스트를 시도했으나, 잦은 UI 변경으로 중단
• 시도 이후 게임에 테스트 자동화를 적용한 사례 없음
• 스크린 샷을 수작업으로 비교하는 정도의 시도
• 게임 QA는 제품 출시 직전 많은 인력 투입으로 기기 호환성 집중 테스트
모바일 게임 자동화 사례 (해외)
잘나가는 미국 모바일 게임 회사
• 구글과 MS 출신으로 구성된 별도의 테스트 엔지니어 팀 활용
• SET 또는 SDET 이라고 부르는 직군
• 개발 초반부에 자동 테스트 시스템 구축에 집중
• 빌드 시스템에서 테스트 용 빌드를 같이 생성, PC 상에서 자동 테스트 진행
• QA 는 자체 인력 30여 명 외에 현지 외주 QA 회사 활용
테스트 자동화의 수난
부정적 인식
• 게임 테스트는 사람이 직접 하는 것이라는 인식이 기본
• 게임은 웹 브라우져나 네이티브 앱과 달리 테스트 툴이 발달하지 못함
• 특히 테스트 프레임워크가 게임 내 UI 구성 요소를 인식하지 못함
• 랜덤으로 터치하는 방식이나 화면 좌표 기록으로 테스트 스크립트 작성
• 개발 중의 잦은 UI 변경으로 좌표기반 스크립트 무용지물
• OS와 플랫폼에 맞춰 각기 다른 테스트 스크립트 작성 비용 증가
• 화면 비율과 해상도가 달라 좌표 기반의 스크립트가 제한적으로만 적용
• 테스트 자동화 하는 비용으로 직접 사람이 하는 것이 더 유용하다는 인식
수동 테스트 vs 자동 테스트
좁은 범위 테스트, 많은 비용과 시간 넓은 범위 테스트 범위, 빠른 테스트 및 적은 비용
테스트 할 모바일 디바이스도 필요한데
꼭 필요한 기기 호환성 테스트
• 중국 테스트 업체의 경우 300개 이상의 기기에서 호환성 테스트 진행
• 북미, 유럽의 경우 150개 이상의 기기 테스트 필요
• 해당 기기 확보 뿐만 아니라 테스트 인력 비용도 만만치 않음
클라우드 테스팅 환경 제공 업체
• 테스트 대행 업체들 중 자체 테스트 랩을 대여하여 테스트 할 수 있는 환경 제공
• 자체 기기에 앱 설치 및 기본적인 테스트 스크립트를 동작시킬 수 있는 환경
• 소규모 뿐만 아니라 대형 업체들도 가세
모바일 디바이스 테스트 랩
클라우드 서비스를 이용하여 테스트 장비 대여
• 리모트 터미널을 이용한 개별 테스트나 다수 디바이스에 대한 일괄 테스트
• 성능 모니터링 및 테스트 결과 리포트가 제공
• 접근성(속도) 및 보안(테스트 앱 삭제 등)이 중요
• 개별 기기 대여보다는 스크립트 기반의 일괄 테스트가 유용
서비스 제공사
• Perfecto Mobile, TestObject, Bitbar (TestDroid),
Xamarin Test Cloud 등의 중소 업체들
• Amazon Device Farm, Google cloud test lab 등의 대형 업체
테스트 자동화 프레임워크
사람 대신 일을 시킬 테스트 환경이 필요
• PC 환경에서는 오랫동안 여러 툴이 사용되어 왔음
• 매크로나 스크립트 기반의 툴이 지금도 다양하게 존재
• 모바일 환경은 PC만큼 자유롭지도 않고 플랫폼도 여러 개로 나뉘어 존재하여
통합된 테스트 환경이 필수적임
대표적인 모바일 테스트 프레임워크
• Appium, Robotium, Calabash, UIAutomator, Espresso
• 확장성이나 스크립트 언어 등을 고려하여 선택해야 함
테스트 자동화 프레임워크 비교
Appium
특징
• 테스트 하려는 앱에 특정 코드나 모듈을 삽입하여 컴파일하지 않고도 테스트 할
수 있도록 하는 것이 목표
• Selenium WebDriver API를 제공하는 언어는 무엇이든 스크립트로 쓸 수
있다 (Java/Javascript/Python/Ruby/C#/…)
• 테스트 스크립트는 http방식으로 Appium 서버와 통신하고 서버는
디바이스에서 동작하는 테스트 지원 라이브러리인 UIAutomator 같은
서비스와 TCP로 연결, 명령과 결과를 주고 받는다
• 네이티브, 하이브리드, 웹 앱 방식의 모바일 앱 테스트 가능
• Android/iOS/PC 플랫폼 모두 지원
Appium
안드로이드 앱의 테스트 과정
1. 테스트 시나리오 기반 스크립트 작성 (Java) 및 컴파일
2. 디바이스 연결 및 Appium 서버 실행
3. 테스트 러너(JUnit/TestNG)를 사용하여 테스트 스크립트 실행
4. Appium 서버는 adb를 이용하여 디바이스에 부트스트랩 앱을 다운로드
5. 부트스트랩 앱은 Appium서버와 TCP 연결 후 UIAutomator의 API로 서버의 명령을
전달
6. 테스트는 스크립트의 명령을 Appium 서버가 받아서 UIAutomator를 이용 앱의
동작을 제어하는 방식으로 진행됨
7. 테스트 명령이 기대하는 결과가 나오지 않으면 테스트 러너에서 예외 발생하고 중단
Android Device
PC or Mac
Appium 프레임워크의 동작 방식
Test script
UI Automation
iOS 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
Appium client
API
모바일 게임 테스트를 위한 확장 (1/2)
게임 테스트 자동화를 위한 플러그인 모듈 개발
• 화면상의 좌표로만 테스트를 해야 하던 기존의 테스트 방식을 개선
• 게임 내 UI 오브젝트의 위치를 찾을 수 있는 모듈을 개발(Unity3D 플러그인)
• 모바일 테스트 프레임워크인 Appium의 서버를 확장하여 게임 내 오브젝트를
찾는 인터페이스 추가
• 테스트 스크립트 작성을 위한 Appium 클라이언트 API 확장
• findElementByGameObjectName
• findElementByGameObjectNameAndTag
• …
모바일 게임 테스트를 위한 확장 (2/2)
좌표 기반이 아닌 오브젝트 기반 테스트 스크립트 작성
• 화면 배치가 바뀌어도 동작이 되도록 좌표가 아닌 문자열을 사용
• 게임 엔진 내의 Scene 내부의 계층 구조와 이름 등을 이용 오브젝트 ID 생성
(자체 개발한 Unity3D Inspector 툴을 이용 타겟 UI 문자열 추출)
• 문자열 ID 기반으로 된 스크립트를 한 번 작성하면 화면 비율이나 해상도가
바뀐 기기에서 재사용 가능
• 막연히 특정 시간 동안 기다리는 방식을 피할 수 있어 테스트 속도 향상
특정 오브젝트가 나올 때까지 기다렸다가 해당 오브젝트를 터치할 수 있어 테스트 시간 및
정확도를 높임
게임 테스트를 위한 프레임워크 확장
Appium
Server
UI Automation
Library
Test Script
(오브젝트 기반)
Game Object
Find Module
In-Game Object
Query
Test
App
return objects
information
Game
Object
Inspector
Module
확장 Appium 프레임워크 (게임 내 테스트 용 모듈 삽입)
기존 Appium 프레임워크
Appium
Server
UI
Automation
Library
Test Script
(좌표 기반)
Test
App
Android 용 게임 테스트 스크립트 (Java)
wait_until("UI/Login/BG/Facebook", 10);
driver.findElementByGameObjectName("UI/Login/BG/Facebook“).click();
wait_until(By.className("android.widget.ImageView“), 10);
driver.findElementByGameObjectName("android.widget.ImageView“).click();
wait_until(”UI/PopupDialog/BG/CloseStyle/CloseButton“), 10);
driver.findElementByGameObjectName(”UI/PopupDialog/BG/CloseStyle/CloseButton“).click();
wait_until("UI/Login/BG/Facebook", 10);
driver.findElementByGameObjectName("UI/Login/BG/Facebook“).click();
wait_until(By.className("android.widget.ImageView“), 10);
List<MobileElement> inputs = driver.findElementByGameObjectName("android.widget.ImageView“).click();
inputs.get(0).sendKeys(“userid@ncsoft.com");
driver.hideKeyboard();
inputs.get(1).sendKeys(“password1234");
driver.hideKeyboard();
wait_until(By.xpath("//android.widget.Button[@content-desc='로그인 ']"), 10);
driver.findByXPath("//android.widget.Button[@content-desc='로그인 ']").click();
새로 추가한
함수
남겨진 과제
게임 UI를 위한 추가 API 개발
• 클릭이나 스와이프 외에 다양한 UI 동작을 제어할 수 있는 API 추가 중
Appium 프로젝트와 머지
• 게임 테스트를 위해 확장한 코드를 Appium 프로젝트에 머지할 수 있도록 대응
• 블랙 박스 형태로만 테스트하고자 하는 Appium 컨셉과 맞지 않는 문제
다양한 게임 엔진 지원
• Unity3D 외에 UnrealEngine이나 Cocos2D와 같은 게임 엔진들을 지원하는
플러그 인의 개발
CI와 테스트 연동
Code
Commit
Coding
Build
Release
Pre-build
Test
Release
Post-build
Test
• 정적 분석
Static Analysis
• 유닛 테스트
• 기능 테스트 코드
• 추가되는 기능에
대응하는 테스트
시나리오 동시 작성
Test cases 작성
• 테스트 용 서버 및
클라이언트 자동 빌드
• 테스트 환경 자동 구성
• 시나리오 기반 테스트
코드를 실행
테스트 용 빌드
Emulator/Cloud test
 기능/환경 테스트
 SW 결함 검출
Test 수행
• 테스트 결과 자동 발송
• Build Release에 대한
판단 근거자료
Report
개발
Process
Test
Pipeline
코드 커버리지 분석
효과적인 테스트 자동화는 개발 파이프라인 중간부터 시작해야
Q & A
Twitter
@nvil || @jongwonkim
감사합니다

Mais conteúdo relacionado

Mais procurados

우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 SangIn Choung
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스철민 신
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfJongwon Kim
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅영기 김
 
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)SangIn Choung
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드SangIn Choung
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app HíbridaElias Nogueira
 
SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SangIn Choung
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)SangIn Choung
 
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1Amazon Web Services Korea
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testingAdam Stephensen
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testingikhwanhayat
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introMaurice De Beijer [MVP]
 

Mais procurados (20)

우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅
 
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app Híbrida
 
SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
 
Unit test
Unit testUnit test
Unit test
 
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testing
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Unit testing
Unit testingUnit testing
Unit testing
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
 

Destaque

모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개진일 최
 
D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트
D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트
D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트NAVER D2
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)Jongwon Kim
 
Selenium for XE
Selenium for XESelenium for XE
Selenium for XE승훈 오
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 

Destaque (7)

모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개
 
D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트
D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트
D2 OPEN SEMINAR - 개발자에 의한, 개발자를 위한 테스트
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
Test and ci
Test and ciTest and ci
Test and ci
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)
 
Selenium for XE
Selenium for XESelenium for XE
Selenium for XE
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 

Semelhante a 모바일 게임 테스트 자동화 (Appium 확장)

모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016Jongwon Kim
 
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAmazon Web Services Korea
 
모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415SeungBeom Ha
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션SangIn Choung
 
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템SeungBeom Ha
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)Sungmin Kim
 
[AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
 [AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기 [AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
[AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기Amazon Web Services Korea
 
Five Star Mobile App을 위한 테스트 체계 만들기
Five Star Mobile App을 위한 테스트 체계 만들기Five Star Mobile App을 위한 테스트 체계 만들기
Five Star Mobile App을 위한 테스트 체계 만들기Ki Bae Kim
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드SangIn Choung
 
mAppCheck 상품소개서
mAppCheck 상품소개서mAppCheck 상품소개서
mAppCheck 상품소개서준형 김
 
Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Lim SungHyun
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolhyunae lee
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolhyunae lee
 
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종guest7178884
 
[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test
[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test
[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation TestNAVER Engineering
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구Lim SungHyun
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2tobeware
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 

Semelhante a 모바일 게임 테스트 자동화 (Appium 확장) (20)

모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
 
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
 
모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션
 
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
 
[AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
 [AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기 [AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
[AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
 
Five Star Mobile App을 위한 테스트 체계 만들기
Five Star Mobile App을 위한 테스트 체계 만들기Five Star Mobile App을 위한 테스트 체계 만들기
Five Star Mobile App을 위한 테스트 체계 만들기
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드
 
mAppCheck 상품소개서
mAppCheck 상품소개서mAppCheck 상품소개서
mAppCheck 상품소개서
 
Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종
 
[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test
[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test
[26]자동화, 계륵에 살 붙이기 : Evolution of Android Automation Test
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 

모바일 게임 테스트 자동화 (Appium 확장)

  • 1. 모바일 게임 테스트 자동화 수 많은 모바일 기기를 대하는 우리의 자세 NCSOFT / SET 팀 김종원
  • 2. 목차 1. 테스트 관점으로 본 모바일 게임 이슈 2. 테스트 자동화의 수난 3. 테스트 자동화 프레임워크 4. 모바일 게임 테스트를 위한 확장 5. 남겨진 과제 6. Q & A
  • 3. 김종원 NCSOFT (2004~ 현재) SET 팀 (Software engineering in test) 前 리니지 이터널 Technical director (2007 ~ 2013) 모코코(2000) 임베디드 시스템 용 JVM, 리눅스 용 PDA, PalmOS 스마트폰 한글과컴퓨터(1994) 윈도우용 아래아한글 3.0 시리즈, 한글 96 등 개발 휴먼컴퓨터(1991) 계약직 프로그래머로서 윈도우 프로그램 개발 시작 마이크로소프트웨어, ZDNet등에 여러 글과 ‘망치와모루’라는 컬럼 기고
  • 4. 모바일 게임 vs PC 게임 내 맘대로 두 게임 환경을 비교를 해보면 플레이어 수, 100+ 배 OS 버전, 10+ 배 기기의 다양성, 100+ 배 화면의 크기, 100+ 네트워크 불안정성, 100+배
  • 5. 모바일 게임 이슈 (1/2) 유저 측면 • 작은 이슈에 민감하여 이탈이 심하다 • 단 한 번의 앱 크래시만으로도 게임 삭제/유저 이탈 • PC게임에 비해 브랜드 충성 고객 적음, 게임 브랜드 인식이 쉽게 나빠짐 기기 측면 • 기기 파편화가 심해, 최소한의 호환성 확보가 가장 중요 • 같은 기기 모델에도 여러 OS 버전 분포 (OS 업데이트 잘 안 함) • 국가별 기기 확보/ 환경 설정의 어려움
  • 8. 모바일 게임 이슈 (2/2) 네트워크 사용성 측면 • 불안정한 무선 네트워크 환경(지연 및 음영 지역, 비정상 연결) • 사용자 이동에 따른 네트워크 단절 및 전송 지연(예: 엘리베이터 이동) • 게임 사용 중 전화, 문자, 푸시 알림으로 인한 플레이 인터럽트 프로젝트 관리 측면 • 다수 게임 동시 개발, 출시 일정이 겹치는 경우 • 출시 프로젝트에 비례하여 테스트 인력을 증가시킬 수 없음 • 출시 후 라이브 단계는 최소의 인력으로 동일한 QA 품질 확보 예) 회귀(리그레션) 테스트는 어떻게? * 회귀 테스트: 수정된 부분이 기존 기능에 영향을 주었거나 과거 발생했던 문제가 다시 발생하는 지 확인하는 테스트
  • 9. 모바일 게임 자동화 사례 (국내) 잘나가는 모바일 게임 회사 • 몽키러너를 이용한 UI기반 테스트를 시도했으나, 잦은 UI 변경으로 중단 • 시도 이후 게임에 테스트 자동화를 적용한 사례 없음 • 스크린 샷을 수작업으로 비교하는 정도의 시도 • 게임 QA는 제품 출시 직전 많은 인력 투입으로 기기 호환성 집중 테스트
  • 10. 모바일 게임 자동화 사례 (해외) 잘나가는 미국 모바일 게임 회사 • 구글과 MS 출신으로 구성된 별도의 테스트 엔지니어 팀 활용 • SET 또는 SDET 이라고 부르는 직군 • 개발 초반부에 자동 테스트 시스템 구축에 집중 • 빌드 시스템에서 테스트 용 빌드를 같이 생성, PC 상에서 자동 테스트 진행 • QA 는 자체 인력 30여 명 외에 현지 외주 QA 회사 활용
  • 11. 테스트 자동화의 수난 부정적 인식 • 게임 테스트는 사람이 직접 하는 것이라는 인식이 기본 • 게임은 웹 브라우져나 네이티브 앱과 달리 테스트 툴이 발달하지 못함 • 특히 테스트 프레임워크가 게임 내 UI 구성 요소를 인식하지 못함 • 랜덤으로 터치하는 방식이나 화면 좌표 기록으로 테스트 스크립트 작성 • 개발 중의 잦은 UI 변경으로 좌표기반 스크립트 무용지물 • OS와 플랫폼에 맞춰 각기 다른 테스트 스크립트 작성 비용 증가 • 화면 비율과 해상도가 달라 좌표 기반의 스크립트가 제한적으로만 적용 • 테스트 자동화 하는 비용으로 직접 사람이 하는 것이 더 유용하다는 인식
  • 12. 수동 테스트 vs 자동 테스트 좁은 범위 테스트, 많은 비용과 시간 넓은 범위 테스트 범위, 빠른 테스트 및 적은 비용
  • 13. 테스트 할 모바일 디바이스도 필요한데 꼭 필요한 기기 호환성 테스트 • 중국 테스트 업체의 경우 300개 이상의 기기에서 호환성 테스트 진행 • 북미, 유럽의 경우 150개 이상의 기기 테스트 필요 • 해당 기기 확보 뿐만 아니라 테스트 인력 비용도 만만치 않음 클라우드 테스팅 환경 제공 업체 • 테스트 대행 업체들 중 자체 테스트 랩을 대여하여 테스트 할 수 있는 환경 제공 • 자체 기기에 앱 설치 및 기본적인 테스트 스크립트를 동작시킬 수 있는 환경 • 소규모 뿐만 아니라 대형 업체들도 가세
  • 14. 모바일 디바이스 테스트 랩 클라우드 서비스를 이용하여 테스트 장비 대여 • 리모트 터미널을 이용한 개별 테스트나 다수 디바이스에 대한 일괄 테스트 • 성능 모니터링 및 테스트 결과 리포트가 제공 • 접근성(속도) 및 보안(테스트 앱 삭제 등)이 중요 • 개별 기기 대여보다는 스크립트 기반의 일괄 테스트가 유용 서비스 제공사 • Perfecto Mobile, TestObject, Bitbar (TestDroid), Xamarin Test Cloud 등의 중소 업체들 • Amazon Device Farm, Google cloud test lab 등의 대형 업체
  • 15. 테스트 자동화 프레임워크 사람 대신 일을 시킬 테스트 환경이 필요 • PC 환경에서는 오랫동안 여러 툴이 사용되어 왔음 • 매크로나 스크립트 기반의 툴이 지금도 다양하게 존재 • 모바일 환경은 PC만큼 자유롭지도 않고 플랫폼도 여러 개로 나뉘어 존재하여 통합된 테스트 환경이 필수적임 대표적인 모바일 테스트 프레임워크 • Appium, Robotium, Calabash, UIAutomator, Espresso • 확장성이나 스크립트 언어 등을 고려하여 선택해야 함
  • 17. Appium 특징 • 테스트 하려는 앱에 특정 코드나 모듈을 삽입하여 컴파일하지 않고도 테스트 할 수 있도록 하는 것이 목표 • Selenium WebDriver API를 제공하는 언어는 무엇이든 스크립트로 쓸 수 있다 (Java/Javascript/Python/Ruby/C#/…) • 테스트 스크립트는 http방식으로 Appium 서버와 통신하고 서버는 디바이스에서 동작하는 테스트 지원 라이브러리인 UIAutomator 같은 서비스와 TCP로 연결, 명령과 결과를 주고 받는다 • 네이티브, 하이브리드, 웹 앱 방식의 모바일 앱 테스트 가능 • Android/iOS/PC 플랫폼 모두 지원
  • 18. Appium 안드로이드 앱의 테스트 과정 1. 테스트 시나리오 기반 스크립트 작성 (Java) 및 컴파일 2. 디바이스 연결 및 Appium 서버 실행 3. 테스트 러너(JUnit/TestNG)를 사용하여 테스트 스크립트 실행 4. Appium 서버는 adb를 이용하여 디바이스에 부트스트랩 앱을 다운로드 5. 부트스트랩 앱은 Appium서버와 TCP 연결 후 UIAutomator의 API로 서버의 명령을 전달 6. 테스트는 스크립트의 명령을 Appium 서버가 받아서 UIAutomator를 이용 앱의 동작을 제어하는 방식으로 진행됨 7. 테스트 명령이 기대하는 결과가 나오지 않으면 테스트 러너에서 예외 발생하고 중단
  • 19. Android Device PC or Mac Appium 프레임워크의 동작 방식 Test script UI Automation iOS 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 Appium client API
  • 20. 모바일 게임 테스트를 위한 확장 (1/2) 게임 테스트 자동화를 위한 플러그인 모듈 개발 • 화면상의 좌표로만 테스트를 해야 하던 기존의 테스트 방식을 개선 • 게임 내 UI 오브젝트의 위치를 찾을 수 있는 모듈을 개발(Unity3D 플러그인) • 모바일 테스트 프레임워크인 Appium의 서버를 확장하여 게임 내 오브젝트를 찾는 인터페이스 추가 • 테스트 스크립트 작성을 위한 Appium 클라이언트 API 확장 • findElementByGameObjectName • findElementByGameObjectNameAndTag • …
  • 21. 모바일 게임 테스트를 위한 확장 (2/2) 좌표 기반이 아닌 오브젝트 기반 테스트 스크립트 작성 • 화면 배치가 바뀌어도 동작이 되도록 좌표가 아닌 문자열을 사용 • 게임 엔진 내의 Scene 내부의 계층 구조와 이름 등을 이용 오브젝트 ID 생성 (자체 개발한 Unity3D Inspector 툴을 이용 타겟 UI 문자열 추출) • 문자열 ID 기반으로 된 스크립트를 한 번 작성하면 화면 비율이나 해상도가 바뀐 기기에서 재사용 가능 • 막연히 특정 시간 동안 기다리는 방식을 피할 수 있어 테스트 속도 향상 특정 오브젝트가 나올 때까지 기다렸다가 해당 오브젝트를 터치할 수 있어 테스트 시간 및 정확도를 높임
  • 22. 게임 테스트를 위한 프레임워크 확장 Appium Server UI Automation Library Test Script (오브젝트 기반) Game Object Find Module In-Game Object Query Test App return objects information Game Object Inspector Module 확장 Appium 프레임워크 (게임 내 테스트 용 모듈 삽입) 기존 Appium 프레임워크 Appium Server UI Automation Library Test Script (좌표 기반) Test App
  • 23. Android 용 게임 테스트 스크립트 (Java) wait_until("UI/Login/BG/Facebook", 10); driver.findElementByGameObjectName("UI/Login/BG/Facebook“).click(); wait_until(By.className("android.widget.ImageView“), 10); driver.findElementByGameObjectName("android.widget.ImageView“).click(); wait_until(”UI/PopupDialog/BG/CloseStyle/CloseButton“), 10); driver.findElementByGameObjectName(”UI/PopupDialog/BG/CloseStyle/CloseButton“).click(); wait_until("UI/Login/BG/Facebook", 10); driver.findElementByGameObjectName("UI/Login/BG/Facebook“).click(); wait_until(By.className("android.widget.ImageView“), 10); List<MobileElement> inputs = driver.findElementByGameObjectName("android.widget.ImageView“).click(); inputs.get(0).sendKeys(“userid@ncsoft.com"); driver.hideKeyboard(); inputs.get(1).sendKeys(“password1234"); driver.hideKeyboard(); wait_until(By.xpath("//android.widget.Button[@content-desc='로그인 ']"), 10); driver.findByXPath("//android.widget.Button[@content-desc='로그인 ']").click(); 새로 추가한 함수
  • 24. 남겨진 과제 게임 UI를 위한 추가 API 개발 • 클릭이나 스와이프 외에 다양한 UI 동작을 제어할 수 있는 API 추가 중 Appium 프로젝트와 머지 • 게임 테스트를 위해 확장한 코드를 Appium 프로젝트에 머지할 수 있도록 대응 • 블랙 박스 형태로만 테스트하고자 하는 Appium 컨셉과 맞지 않는 문제 다양한 게임 엔진 지원 • Unity3D 외에 UnrealEngine이나 Cocos2D와 같은 게임 엔진들을 지원하는 플러그 인의 개발
  • 25. CI와 테스트 연동 Code Commit Coding Build Release Pre-build Test Release Post-build Test • 정적 분석 Static Analysis • 유닛 테스트 • 기능 테스트 코드 • 추가되는 기능에 대응하는 테스트 시나리오 동시 작성 Test cases 작성 • 테스트 용 서버 및 클라이언트 자동 빌드 • 테스트 환경 자동 구성 • 시나리오 기반 테스트 코드를 실행 테스트 용 빌드 Emulator/Cloud test  기능/환경 테스트  SW 결함 검출 Test 수행 • 테스트 결과 자동 발송 • Build Release에 대한 판단 근거자료 Report 개발 Process Test Pipeline 코드 커버리지 분석 효과적인 테스트 자동화는 개발 파이프라인 중간부터 시작해야
  • 26. Q & A Twitter @nvil || @jongwonkim