120
Android Test Recording & Profiler (Cerberus 구축 이야기)

Android Test Recorder & Profiler 구축 이야기

Embed Size (px)

Citation preview

Page 1: Android  Test Recorder & Profiler 구축 이야기

Android Test Recording & Profiler

(Cerberus 구축 이야기)

Page 2: Android  Test Recorder & Profiler 구축 이야기

조재우����������� ������������������   노성현����������� ������������������   윤강호����������� ������������������   박종훈����������� ������������������  

손영수����������� ������������������   황학범����������� ������������������  

Page 3: Android  Test Recorder & Profiler 구축 이야기

PART����������� ������������������  1.����������� ������������������  ����������� ������������������  ����������� ������������������  우리는����������� ������������������  왜����������� ������������������  PROFILER를����������� ������������������  만들었나?����������� ������������������  

Page 4: Android  Test Recorder & Profiler 구축 이야기
Page 5: Android  Test Recorder & Profiler 구축 이야기

회사, 957, 31%

개인, 2125, 69%

무료 어플리케이션

회사, 734, 25%

개인, 2235, 75%

유료 어플리케이션

개인����������� ������������������  개발자:����������� ������������������  73%����������� ������������������  

Page 6: Android  Test Recorder & Profiler 구축 이야기

기획����������� ������������������  

개발����������� ������������������  QA����������� ������������������  

Startup����������� ������������������  에서����������� ������������������  상황����������� ������������������  (1인����������� ������������������  3역)����������� ������������������  

Page 7: Android  Test Recorder & Profiler 구축 이야기

대충����������� ������������������  만들고����������� ������������������  일단����������� ������������������  릴리즈!!!����������� ������������������  

Page 8: Android  Test Recorder & Profiler 구축 이야기

하지만����������� ������������������  그����������� ������������������  결과…⋯����������� ������������������  

Page 9: Android  Test Recorder & Profiler 구축 이야기
Page 10: Android  Test Recorder & Profiler 구축 이야기

출처 : http://offers2.compuware.com/rs/compuware/images/Mobile_App_Survey_Report.pdf

50%����������� ������������������  이상이����������� ������������������  앱이����������� ������������������  죽거나����������� ������������������  멈추거나����������� ������������������  느려지는����������� ������������������  문제를����������� ������������������  겪는다.����������� ������������������  

Page 11: Android  Test Recorder & Profiler 구축 이야기

앱을����������� ������������������  사용하지����������� ������������������  않겠다����������� ������������������  

경쟁사����������� ������������������  앱으로����������� ������������������  바꾸겠다����������� ������������������  

안좋은����������� ������������������  경험을����������� ������������������  다른����������� ������������������  사람들에게����������� ������������������  알리겠다����������� ������������������  

이����������� ������������������  회사����������� ������������������  제품을����������� ������������������  사지����������� ������������������  않겠다����������� ������������������  

별점을����������� ������������������  낮게����������� ������������������  주겠다����������� ������������������  

회사에����������� ������������������  대한����������� ������������������  전체적인����������� ������������������  인식이����������� ������������������  나빠졌다����������� ������������������  

그����������� ������������������  회사의����������� ������������������  사이트에����������� ������������������  들어가지����������� ������������������  않겠다����������� ������������������  

회사의����������� ������������������  고객서비스에����������� ������������������  컨택하겠다����������� ������������������  

회사의����������� ������������������  모바일����������� ������������������  웹서비스에����������� ������������������  접속한다����������� ������������������  

소셜미디어에����������� ������������������  알린다����������� ������������������  

아무것도����������� ������������������  하지����������� ������������������  않는다����������� ������������������  

Page 12: Android  Test Recorder & Profiler 구축 이야기

성능����������� ������������������  측정과����������� ������������������  테스트는����������� ������������������  이제����������� ������������������  필수����������� ������������������  ����������� ������������������  ����������� ������������������  

Page 13: Android  Test Recorder & Profiler 구축 이야기

안드로이드는…⋯…⋯����������� ������������������  

Page 14: Android  Test Recorder & Profiler 구축 이야기
Page 15: Android  Test Recorder & Profiler 구축 이야기
Page 16: Android  Test Recorder & Profiler 구축 이야기
Page 17: Android  Test Recorder & Profiler 구축 이야기

높은����������� ������������������  학습곡선이����������� ������������������  존재하여����������� ������������������  ����������� ������������������  

성능����������� ������������������  분석은����������� ������������������  고급����������� ������������������  개발자의����������� ������������������  영역����������� ������������������  

Page 18: Android  Test Recorder & Profiler 구축 이야기

그렇다면����������� ������������������   UI����������� ������������������  테스트는?����������� ������������������  

Page 19: Android  Test Recorder & Profiler 구축 이야기

한����������� ������������������  두개도����������� ������������������  아니고..����������� ������������������  

Page 20: Android  Test Recorder & Profiler 구축 이야기

윈드리버

자머

꿈틀거리는����������� ������������������  테스트����������� ������������������  시장..����������� ������������������  

Page 21: Android  Test Recorder & Profiler 구축 이야기

스크립트����������� ������������������  직접����������� ������������������  작성,����������� ������������������  ����������� ������������������  복잡한����������� ������������������  배포����������� ������������������  

Page 22: Android  Test Recorder & Profiler 구축 이야기

Manual����������� ������������������  Script����������� ������������������  ,����������� ������������������  Only����������� ������������������  Emulator,����������� ������������������  ����������� ������������������  Not����������� ������������������  Free����������� ������������������  ����������� ������������������  ����������� ������������������  

Page 23: Android  Test Recorder & Profiler 구축 이야기

*����������� ������������������  프로젝트의����������� ������������������  가치����������� ������������������  찾기����������� ������������������  

Page 24: Android  Test Recorder & Profiler 구축 이야기

비즈니스 모델 캔버스는 창업자들이 생각한 가설이고,

고객 개발은 창업자들이 생각해낸 해결책을 검증하기

보다는 창업자들이 가정한 문제가 진짜 고객의 문제인지 검증하는 것이다!

Steve Blank Lean Startup의 아버지 Customer Development Method 저자

Page 25: Android  Test Recorder & Profiler 구축 이야기

서드 파트 라이브러리 때문에 앱의 성능에 문제가 생기는 경우가 많다. 직접 개발한 코드가 아니기 때문에 동적으로 분석해서 문제를 해결할 수 밖 에 없는데 기존 분석 툴로는 정확한 정보를 얻기가 굉장히 힘들다.

기존에 DDMS를 이용해서 성능분석을 하지만 한 번에 볼 수 있는 차트가 부족하고 히스토리를 쉽게 남길 수가 없어서 이전 분석과 이후 분석에 대해서 비교가 쉽지 않다.

대부분 개발이 NDK로 이루어지는 상태이다. 미디어 프레임워크에 대한 성능 분석을 자바 레벨과 Native 레벨에서 모두 하고 싶지만 통합해서 쉽게 할 수 있는 방법이 현재 없는 상태인 것 같다.

너무 많은 툴들이 분산되어있고 빠르게 정리해서 볼 수가 없다.

기존 크래시 리포트는 배포 후 end 유저의 보고를 통해서만 알 수 있다. 스타트업의 경우 빠르게 배포 후 고쳐나가는 게 맞지만 배포 전에 적은 비용으로 미리 이러한 문제를 예측하고 해결할 수 있다면 좋을 것 같다.

알람 앱이 오작동하는 버그는 크래쉬가 아니기 때문에 잡을 수 없다. 미리 상황을 예측하거나 오작동할 때 end user의 앱 상태를 관찰할 수 있는 방법이 없다.

빠르게 앱 개발을 해야 하는 일정에서 배포 전에 전체적으로 앱의 퀄리티를 향상시킬 수 있는 방법이 있으면 좋겠다.

빠르게 앱 개발을 해야 하는 일정에서 배포 전에 전체적으로 앱의 퀄리티를 향상시킬 수 있는 방법이 있으면 좋겠다.

수����������� ������������������  많은����������� ������������������  인터뷰..����������� ������������������  

Page 26: Android  Test Recorder & Profiler 구축 이야기

알람몬����������� ������������������  인터뷰..����������� ������������������  

말랑스튜디오����������� ������������������  CEO����������� ������������������  김영호����������� ������������������  

3rd Party Library 때문에 앱의 성능에 문제가 생기는 경우가 많다. 직접 개발한 코드가 아니기 때문에 동적으로 분석해서 문제를 해결할 수 밖 에 없는데 기존 분석 툴로는 정확한 정보를 얻기가 굉장히 힘들다. ����������� ������������������  

Page 27: Android  Test Recorder & Profiler 구축 이야기

신재명����������� ������������������  

앱이 오작동하는 버그는 잡을 수 없다. 미리 상황을 예측하거나 오작동할 때 end user의 앱 상태를 관찰할 수 있는 방법이 없다.

Sleep����������� ������������������  If����������� ������������������  U����������� ������������������  Can����������� ������������������  인터뷰����������� ������������������  

Page 28: Android  Test Recorder & Profiler 구축 이야기

Customer����������� ������������������  ����������� ������������������  Validation����������� ������������������  

Customer����������� ������������������  ����������� ������������������  Discovery����������� ������������������  

Feedback����������� ������������������  

고객의����������� ������������������  

요구사항����������� ������������������  

테스트����������� ������������������  자동화와����������� ������������������  쉽게����������� ������������������  사용할����������� ������������������  수����������� ������������������  있는����������� ������������������  성능측정����������� ������������������  툴의����������� ������������������  부재����������� ������������������  

가치찾기����������� ������������������  워크샵����������� ������������������  

Page 29: Android  Test Recorder & Profiler 구축 이야기

가치 찾기 워크샵 진행

Page 30: Android  Test Recorder & Profiler 구축 이야기

1) Purpose & Goal 수립

Page 31: Android  Test Recorder & Profiler 구축 이야기

1) Purpose & Goal 수립

목적 목표

•  성능분석 솔루션 브랜드를 가지고 싶다

•  사용자의 느낌 – 실제 런칭 전에 사전문제를 점검

•  많은 개발자들이 App 개발, 배포 전 필수적으로 사용되는 Product가 되기를 희망

•  Android 성능 분석

•  다른 사람에게 도움이 되는 글 발표

•  런칭 후에 다른 사람들에게 피드백을 받고 싶다

Page 32: Android  Test Recorder & Profiler 구축 이야기

2) Why & Why not Buy?

사야 되는 이유와 사지 않는 이유를 각자 30개씩 적고 그룹화 한다

Page 33: Android  Test Recorder & Profiler 구축 이야기

3) Simple Value Proposition

Page 34: Android  Test Recorder & Profiler 구축 이야기

3) Simple Value Proposition

Value 성능이슈해결 개발 및 유지보수

비용 감소 학습비용 최소화

Offer

소스코드에서 메모리에 영향을 주는 부분을 체크하고 실시간 메모리 추적을 통해 메모리

누수를 측정한다

버전별 Test를 통해 해당 App의 Android 버전별 분석 결과를 알려준다

Android App의 성능에 악영향을 끼치는 문제의 원인과 해결책을 보여주고 이에

기반한 App 등급을 보여준다

해당 App의 CPU사용률을 수치화하여 분석결과를 보여준

문제의 원인이 되는 소스코드의 정확한 지점을 알

려준다

환경에 구애받지 않고 어디에서든 사용할 수 있는

웹 기반이다

App이 컨텐츠(이미지, 동영상 등)를 처리하는 과정에서 발생할 수 있는 문제를 찾아준다

내가 원하는 Test시나리오를 만들고, 저장하고, 재사

용할 수 있다

부가적인 설정없이 클릭만으로 처음쓰는 사람도 쉽게 사용 가능

Page 35: Android  Test Recorder & Profiler 구축 이야기

4) User Profiling을 통한 Opportunity도출

Page 36: Android  Test Recorder & Profiler 구축 이야기

작성한 페르소나 중 우선순위가 높은 페르소나를 선택하고

키워드를 그룹화

Page 37: Android  Test Recorder & Profiler 구축 이야기

5) Convergence

Page 38: Android  Test Recorder & Profiler 구축 이야기

5) Convergence

Value App이 예상치 못하게 종료되거나 느려지는 원인을 조기에

찾아준다

정상적으로 동작하지 않는 버전이나 시나리오를 찾아 그 원인과 해결책을 종류별로 그룹화하여 심각성이 높은 순서대로 보여

준다

웹에서 자동으로 설정파일을 만들어주고 전체과정을 순서대로 따라할 수 있도록 함으로써 환경에 구애받지 않고 설정과 학습곡

선을 줄여준다

Offer

소스코드에서 메모리에 영향을 주는 부분을

체크하고 실시간 메모리 추적을 통해 메모리 누수를 측

정한다

버전별 Test를 통해 해당 App의 Android 버전별 분석 결과를 알려준다

환경에 구애받지 않고 어디에서든 사용할 수 있는 웹 환경이다.

해당 App의 CPU사용률을 수치화하여 분석결과를

보여준다

문제가 되는 소스코드의 정확한 위치와 해결책을 종류별로 그룹화하여

심각성에 따라 우선순위를 부여하여 높은 순서대로 보여주고 이를 기반으로

App등급을 매겨준다

원하는 기능을 선택하면 자동으로 이에 대한 완성된 설정파일을

제공함으로써 기존에 요구되던 복잡한 설정과정을

없앤다

App이 컨텐츠 (이미지, 동영상 등)를 처리하는 과정에서 발생할 수 있는

문제를 찾아준다

내가 원하는 Test시나리오를 만들고, 저장하고, 재사용할 수 있다

포커싱과 따라하기 기능을 통해 전체 과정을 Step by Step으

로 따라가는 환경을 제공하여 학습곡선을 줄인다

Page 39: Android  Test Recorder & Profiler 구축 이야기

Quality����������� ������������������  Gate는����������� ������������������  모바일����������� ������������������  앱����������� ������������������  개발팀에게����������� ������������������  ����������� ������������������  

가치를����������� ������������������  제공하는데����������� ������������������  

를����������� ������������������  통해����������� ������������������  이루어����������� ������������������  진다.����������� ������������������  

VALUE����������� ������������������  

FEATURE����������� ������������������  

성능에����������� ������������������  관한����������� ������������������  ����������� ������������������  잠재적인����������� ������������������  오류를����������� ������������������  ����������� ������������������  조기에����������� ������������������  발견����������� ������������������  

버전별,����������� ������������������  시나리오별����������� ������������������  테스트로����������� ������������������  그����������� ������������������  원인과����������� ������������������  해결책을����������� ������������������  제공����������� ������������������   낮은����������� ������������������  ����������� ������������������  학습곡선����������� ������������������  

메모리,����������� ������������������  CPU,����������� ������������������  네트워크,����������� ������������������  배터리����������� ������������������  정보����������� ������������������  분석����������� ������������������  

시나리오����������� ������������������  테스트����������� ������������������  레코딩으로����������� ������������������  ����������� ������������������  ����������� ������������������  테스트����������� ������������������  자동화����������� ������������������  

우선순위����������� ������������������  별로����������� ������������������  ����������� ������������������  등급을����������� ������������������  나눈����������� ������������������  시각화����������� ������������������  

Page 40: Android  Test Recorder & Profiler 구축 이야기

UI����������� ������������������  시안,����������� ������������������  기능����������� ������������������  

사용자����������� ������������������  피드백����������� ������������������  

UI개선����������� ������������������  필요����������� ������������������  

Customer����������� ������������������  ����������� ������������������  Validation����������� ������������������  

Customer����������� ������������������  ����������� ������������������  Discovery����������� ������������������  

Feedback����������� ������������������  

고객의����������� ������������������  

요구사항����������� ������������������  

버그의����������� ������������������  위험����������� ������������������  정도를����������� ������������������  판별����������� ������������������  할����������� ������������������  QA의����������� ������������������  부재����������� ������������������  

QA����������� ������������������  Insight����������� ������������������  

가치찾기����������� ������������������  워크샵����������� ������������������  

사용자����������� ������������������  스크린����������� ������������������  우선����������� ������������������  

Single����������� ������������������  Page����������� ������������������  Report����������� ������������������  

사용자����������� ������������������  메서드����������� ������������������  ����������� ������������������  파서����������� ������������������  개발����������� ������������������  

고객����������� ������������������  타겟팅����������� ������������������  액티비티����������� ������������������  기반����������� ������������������  ����������� ������������������  

필터링����������� ������������������  

최종����������� ������������������  ����������� ������������������  

사용자����������� ������������������  피드백����������� ������������������  

Quality����������� ������������������  Gate만의����������� ������������������  가치가����������� ������������������  있다����������� ������������������  

Page 41: Android  Test Recorder & Profiler 구축 이야기

데모����������� ������������������  

Page 42: Android  Test Recorder & Profiler 구축 이야기

기존 프로파일링 솔루션의 문제 해결

한����������� ������������������  줄의����������� ������������������  API����������� ������������������  설정만으로����������� ������������������  프로파일링����������� ������������������  설정����������� ������������������  

위젯으로����������� ������������������  프로파일링����������� ������������������   우선����������� ������������������  순위별로����������� ������������������  등급화된����������� ������������������  프로파일링����������� ������������������  결과����������� ������������������  확인����������� ������������������  

높은����������� ������������������  접근성����������� ������������������  (웹)����������� ������������������  직관적인����������� ������������������  시각확����������� ������������������  

Page 43: Android  Test Recorder & Profiler 구축 이야기

*����������� ������������������  대표적인����������� ������������������  안드로이드����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  테스팅/����������� ������������������  프로파일링����������� ������������������  ����������� ������������������  도구들����������� ������������������  

Page 44: Android  Test Recorder & Profiler 구축 이야기

대표적인 UI 테스트 툴

Monkey����������� ������������������  ����������� ������������������  Runner����������� ������������������  

UI����������� ������������������  ����������� ������������������  Automator����������� ������������������  

Robotium����������� ������������������  

Page 45: Android  Test Recorder & Profiler 구축 이야기

대표적인 UI 테스트 툴

Monkey����������� ������������������  ����������� ������������������  Runner����������� ������������������  

UI����������� ������������������  ����������� ������������������  Automator����������� ������������������  

Robotium����������� ������������������  

지원����������� ������������������  버전����������� ������������������   All����������� ������������������   4.2↑����������� ������������������   All����������� ������������������  

입력����������� ������������������  방법����������� ������������������   좌표����������� ������������������   이벤트����������� ������������������   이벤트����������� ������������������  

JUnit����������� ������������������  지원����������� ������������������   X����������� ������������������   O����������� ������������������   O����������� ������������������  

Page 46: Android  Test Recorder & Profiler 구축 이야기

대표적인 PROFILING 툴

Procstats����������� ������������������   Top����������� ������������������   Traceview����������� ������������������   Systrace����������� ������������������  

지원����������� ������������������  버전����������� ������������������   4.2↑����������� ������������������   All����������� ������������������   All����������� ������������������   4.1↑����������� ������������������  

범위����������� ������������������   Device����������� ������������������  전체����������� ������������������   Device����������� ������������������  전체����������� ������������������  1����������� ������������������  App����������� ������������������  인스턴스����������� ������������������  ����������� ������������������  

1����������� ������������������  App����������� ������������������  인스턴스����������� ������������������  

대상����������� ������������������  

실행중인����������� ������������������  전체����������� ������������������  앱,����������� ������������������  서비스의����������� ������������������  메모리����������� ������������������  사용량,

����������� ������������������  실행시간����������� ������������������  

Dalvik����������� ������������������  내부의����������� ������������������  매모리����������� ������������������  상태����������� ������������������  

함수/클래스별����������� ������������������  CPU����������� ������������������  실행시간����������� ������������������  

컴포넌트별����������� ������������������  CPU����������� ������������������  실행시간����������� ������������������  

출력����������� ������������������  포맷����������� ������������������   text����������� ������������������   text����������� ������������������  text,����������� ������������������  tree,����������� ������������������  tim

eline����������� ������������������  timeline����������� ������������������  

Page 47: Android  Test Recorder & Profiler 구축 이야기

Procstats����������� ������������������  각����������� ������������������  서비스에����������� ������������������  대한����������� ������������������  메모리����������� ������������������  사용량,����������� ������������������  실행시간����������� ������������������  

Page 48: Android  Test Recorder & Profiler 구축 이야기

TOP����������� ������������������  상태정보:����������� ������������������  heap,����������� ������������������  objects,����������� ������������������  sql..����������� ������������������  

Page 49: Android  Test Recorder & Profiler 구축 이야기

Traceview����������� ������������������  함수,����������� ������������������  클래스별����������� ������������������  CPU����������� ������������������  실행시간����������� ������������������  

Page 50: Android  Test Recorder & Profiler 구축 이야기

Systrace����������� ������������������  컴포넌트별����������� ������������������  CPU����������� ������������������  실행시간����������� ������������������  

Page 51: Android  Test Recorder & Profiler 구축 이야기

대표적인 PROFILING 툴

Procstats����������� ������������������   Top����������� ������������������   Traceview����������� ������������������   Systrace����������� ������������������  

지원����������� ������������������  버전����������� ������������������   4.2↑����������� ������������������   All����������� ������������������   All����������� ������������������   4.1↑����������� ������������������  

범위����������� ������������������   Device����������� ������������������  전체����������� ������������������   Device����������� ������������������  전체����������� ������������������  1����������� ������������������  App����������� ������������������  인스턴스����������� ������������������  ����������� ������������������  

1����������� ������������������  App����������� ������������������  인스턴스����������� ������������������  

대상����������� ������������������  

실행중인����������� ������������������  전체����������� ������������������  앱,����������� ������������������  서비스의����������� ������������������  메모리����������� ������������������  사용량,

����������� ������������������  실행시간����������� ������������������  

Dalvik����������� ������������������  내부의����������� ������������������  매모리����������� ������������������  상태����������� ������������������  

함수/클래스별����������� ������������������  CPU����������� ������������������  실행시간����������� ������������������  

컴포넌트별����������� ������������������  CPU����������� ������������������  실행시간����������� ������������������  

출력����������� ������������������  포맷����������� ������������������   text����������� ������������������   text����������� ������������������  text,����������� ������������������  tree,����������� ������������������  tim

eline����������� ������������������  timeline����������� ������������������  

Page 52: Android  Test Recorder & Profiler 구축 이야기

PART����������� ������������������  2.����������� ������������������  PROFILING의����������� ������������������  필요성����������� ������������������  ����������� ������������������  

Page 53: Android  Test Recorder & Profiler 구축 이야기

기능적����������� ������������������  오류����������� ������������������  

Page 54: Android  Test Recorder & Profiler 구축 이야기

환경적 오류

Out����������� ������������������  of����������� ������������������  Memory����������� ������������������  

100%����������� ������������������  CPU����������� ������������������  Usage����������� ������������������  ����������� ������������������  

Network����������� ������������������  

Low����������� ������������������  Battery����������� ������������������  솔루션����������� ������������������  :����������� ������������������  Profiler����������� ������������������  

Page 55: Android  Test Recorder & Profiler 구축 이야기

자주����������� ������������������  만나는����������� ������������������  환경적����������� ������������������  에러����������� ������������������  이야기.����������� ������������������  

Out����������� ������������������  Of����������� ������������������  Memory����������� ������������������  

Page 56: Android  Test Recorder & Profiler 구축 이야기

App����������� ������������������  ����������� ������������������  Memory����������� ������������������  

App����������� ������������������  Memory����������� ������������������  

App����������� ������������������  Memory����������� ������������������  

App����������� ������������������  Memory����������� ������������������  

App����������� ������������������  Memory����������� ������������������  

Dalvik����������� ������������������  is����������� ������������������  Isolation����������� ������������������  model����������� ������������������  

DALVIK����������� ������������������  

Page 57: Android  Test Recorder & Profiler 구축 이야기

프로세스당 메모리 한계

Heap Allocated

Page 58: Android  Test Recorder & Profiler 구축 이야기

Bitmap & Android Memory

참조만 Java Heap,

비트맵 객체는

Native Heap에 존재

참조와 비트맵 객체

모두 Java Heap 에 존재

Lower Higher

Page 59: Android  Test Recorder & Profiler 구축 이야기

Honeycomb 이전에는

Memory Control 을 위해 Recycle() 호출로

Native Heap 영역 해제

Page 60: Android  Test Recorder & Profiler 구축 이야기

Honeycomb 이후로는

Memory Control 을 위해 Java Heap Memory Control

해야 한다.

Page 61: Android  Test Recorder & Profiler 구축 이야기

직접적으로����������� ������������������  메모리����������� ������������������  제어����������� ������������������  할����������� ������������������  수����������� ������������������  없다.����������� ������������������  

Page 62: Android  Test Recorder & Profiler 구축 이야기

Garbage����������� ������������������  Collector����������� ������������������  

힙(heap)����������� ������������������  내의����������� ������������������  객체����������� ������������������  중에서����������� ������������������  ����������� ������������������  

����������� ������������������   ����������� ������������������  가비지(garbage)를����������� ������������������  찾아낸다����������� ������������������  

����������� ������������������  

����������� ������������������  

찾아낸����������� ������������������  가비지를����������� ������������������  처리해서����������� ������������������  

����������� ������������������  힙의����������� ������������������  메모리를����������� ������������������  회수한다.����������� ������������������  

Page 63: Android  Test Recorder & Profiler 구축 이야기

Java����������� ������������������  가비지����������� ������������������  컬렉터는����������� ������������������  Garbage를����������� ������������������  찾기����������� ������������������  위해����������� ������������������  

����������� ������������������  Reachability����������� ������������������  개념����������� ������������������  사용����������� ������������������  

Page 64: Android  Test Recorder & Profiler 구축 이야기

Reachable����������� ������������������  -����������� ������������������  객체에����������� ������������������  유효한����������� ������������������  참조����������� ������������������  

Unreachable����������� ������������������  객체에����������� ������������������  유효한����������� ������������������  참조가����������� ������������������  없을����������� ������������������  때,����������� ������������������  ����������� ������������������  가비지로����������� ������������������  간주되어����������� ������������������  수집����������� ������������������  대상이����������� ������������������  된다.����������� ������������������  

Page 65: Android  Test Recorder & Profiler 구축 이야기
Page 66: Android  Test Recorder & Profiler 구축 이야기
Page 67: Android  Test Recorder & Profiler 구축 이야기

Strongly����������� ������������������  Reachable����������� ������������������  Object����������� ������������������  

Softly����������� ������������������  Reachable����������� ������������������  Object����������� ������������������  

Weakly����������� ������������������  Reachable����������� ������������������  Object����������� ������������������  

Phantomly����������� ������������������  Reachable����������� ������������������  Object����������� ������������������  

Un����������� ������������������  Reacahable����������� ������������������  

Object����������� ������������������  

가비지����������� ������������������  ����������� ������������������  컬렉션����������� ������������������  대상이����������� ������������������  ����������� ������������������  되는����������� ������������������  시점����������� ������������������  

����������� ������������������  회수����������� ������������������  X����������� ������������������   메모리가����������� ������������������  ����������� ������������������  부족할����������� ������������������  때����������� ������������������  

가비지����������� ������������������  ����������� ������������������  컬렉션이����������� ������������������  ����������� ������������������  일어날����������� ������������������  때����������� ������������������  

회수����������� ������������������  X,����������� ������������������  Finalize����������� ������������������  ����������� ������������������  이후����������� ������������������  

회수����������� ������������������  o����������� ������������������  

Reference����������� ������������������   Strong����������� ������������������  ����������� ������������������  Reference����������� ������������������  

Soft����������� ������������������  ����������� ������������������  Reference만����������� ������������������  

통과����������� ������������������  

Weak����������� ������������������  ����������� ������������������  Reference만����������� ������������������  

통과����������� ������������������  

Phantom����������� ������������������  ����������� ������������������  Reference만����������� ������������������  ����������� ������������������  

통과����������� ������������������  

X����������� ������������������  

Reachable����������� ������������������  Object����������� ������������������  

Page 68: Android  Test Recorder & Profiler 구축 이야기

Weakly����������� ������������������  Reachable����������� ������������������  Object����������� ������������������  

Page 69: Android  Test Recorder & Profiler 구축 이야기

Strong����������� ������������������  Reference����������� ������������������  

Object����������� ������������������  obj����������� ������������������  =����������� ������������������  new����������� ������������������  Object();����������� ������������������  

일반적인����������� ������������������  객체����������� ������������������  =����������� ������������������  Out����������� ������������������  of����������� ������������������  Memory����������� ������������������  위험이����������� ������������������  있음����������� ������������������  

Page 70: Android  Test Recorder & Profiler 구축 이야기

Soft����������� ������������������  Reference����������� ������������������  

SoftReference����������� ������������������  sr����������� ������������������  =����������� ������������������  ����������� ������������������  new����������� ������������������  SoftReference(new����������� ������������������  Object());����������� ������������������  

����������� ������������������  메모리����������� ������������������  여유����������� ������������������  기준에����������� ������������������  따라����������� ������������������  가비지����������� ������������������  컬렉션����������� ������������������  대상����������� ������������������  

Page 71: Android  Test Recorder & Profiler 구축 이야기

Weak����������� ������������������  Reference����������� ������������������  

WeakReference����������� ������������������  wr����������� ������������������  =����������� ������������������  ����������� ������������������  new����������� ������������������  WeakReference(new����������� ������������������  Object());����������� ������������������  

가비지����������� ������������������  컬렉션이����������� ������������������  일어날����������� ������������������  때����������� ������������������  바로����������� ������������������  회수����������� ������������������  ����������� ������������������  

Page 72: Android  Test Recorder & Profiler 구축 이야기

Phantom����������� ������������������  Reference����������� ������������������  

ReferenceQueue<Object>����������� ������������������  rq����������� ������������������  =����������� ������������������  ����������� ������������������  new����������� ������������������  ReferenceQueue<Object>();����������� ������������������  

����������� ������������������  PhantomReference<Object>����������� ������������������  pr����������� ������������������  =����������� ������������������  ����������� ������������������  

new����������� ������������������  PhantomReference<Object>(new����������� ������������������  Object(),����������� ������������������  rq);����������� ������������������  

객체의����������� ������������������  파이널라이즈����������� ������������������  시점을����������� ������������������  알고����������� ������������������  ����������� ������������������  객체의����������� ������������������  클린업����������� ������������������  동작을����������� ������������������  수행할����������� ������������������  필요가����������� ������������������  있을����������� ������������������  때����������� ������������������  

Page 73: Android  Test Recorder & Profiler 구축 이야기

Strong����������� ������������������  ����������� ������������������  vs Weak����������� ������������������  

Page 74: Android  Test Recorder & Profiler 구축 이야기

Strong Reference Code

Page 75: Android  Test Recorder & Profiler 구축 이야기

0

20

40

60

80

100

120

140

Strong

Weak

Out Of Memory !!

Heap size

Time

Page 76: Android  Test Recorder & Profiler 구축 이야기

Weak Reference Code

Page 77: Android  Test Recorder & Profiler 구축 이야기

0

20

40

60

80

100

120

140

Strong

Weak

Heap size

Time

Page 78: Android  Test Recorder & Profiler 구축 이야기

0

20

40

60

80

100

120

140

Strong

Weak

Heap size

Time

Page 79: Android  Test Recorder & Profiler 구축 이야기

PART����������� ������������������  3.����������� ������������������  ����������� ������������������  ����������� ������������������  오픈소스로����������� ������������������  ����������� ������������������  테스트����������� ������������������  자동화����������� ������������������  개발하기����������� ������������������  

Page 80: Android  Test Recorder & Profiler 구축 이야기
Page 81: Android  Test Recorder & Profiler 구축 이야기
Page 82: Android  Test Recorder & Profiler 구축 이야기

로보티움 Test를 통한

자동화 테스트

Page 83: Android  Test Recorder & Profiler 구축 이야기
Page 84: Android  Test Recorder & Profiler 구축 이야기

화면����������� ������������������  파편화를����������� ������������������  극복����������� ������������������  

����������� ������������������  

귀찮은����������� ������������������  UI����������� ������������������  테스트를����������� ������������������  자동화����������� ������������������  

사용자의����������� ������������������  모션을����������� ������������������  어떻게����������� ������������������  레코딩����������� ������������������  할까?

Page 85: Android  Test Recorder & Profiler 구축 이야기

Client����������� ������������������  Architecture����������� ������������������  Quality Gate Client

Data����������� ������������������  Marshaller/����������� ������������������  UnMashaller����������� ������������������  

profiler����������� ������������������  interface����������� ������������������  ����������� ������������������  <<wrapper����������� ������������������  façade>>����������� ������������������  

Server����������� ������������������   User����������� ������������������  Program����������� ������������������  

component����������� ������������������  

External����������� ������������������  system����������� ������������������  

Function����������� ������������������  call����������� ������������������  

JSON����������� ������������������  

[범례]����������� ������������������  

infrastructure����������� ������������������  

Robotium����������� ������������������  Runner����������� ������������������  

Scenario����������� ������������������  

Motion����������� ������������������  Listener����������� ������������������  Injector����������� ������������������  

Battery����������� ������������������  Data����������� ������������������  Collector����������� ������������������  

Profiling����������� ������������������  Status����������� ������������������  ����������� ������������������  Manager����������� ������������������  

Profiling����������� ������������������  ����������� ������������������  Widget����������� ������������������  

Network����������� ������������������  Data����������� ������������������  Collector����������� ������������������  

Profiler����������� ������������������  

����������� ������������������  Heap����������� ������������������  Analyser����������� ������������������  

CPU����������� ������������������  Tracer����������� ������������������  

User����������� ������������������  Motion����������� ������������������  Collector����������� ������������������  

Page 86: Android  Test Recorder & Profiler 구축 이야기

모션수집 방법

리스너에 모션을 수집하는 코드를 삽입

사용자 리스너 코드

모션 수집 코드

Page 87: Android  Test Recorder & Profiler 구축 이야기

모션수집 코드의 예

btn1.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) {

}

});

Page 88: Android  Test Recorder & Profiler 구축 이야기

모션수집 코드의 예

btn1.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) {

}

});

motionCollection(v, "onClick");

수집코드를 리스너에 삽입

Page 89: Android  Test Recorder & Profiler 구축 이야기

모든 리스너에 수집 코드를 삽입하는 일은 불편하고 귀찮은 일! Aspect Oriented Programming를 이용

Page 90: Android  Test Recorder & Profiler 구축 이야기

Aspect Oriented Programming 기본 컨셉

Page 91: Android  Test Recorder & Profiler 구축 이야기

Aspect Oriented Programming

코드 시점

-  메소드 호출 -  필드 접근 -  예외처리 -  생성자 호출 -  초기화

어떠한 코드 시점 이전,이후에 자동으로 코드를 삽입해 준다.

공통 로직 A

공통 로직 B

Weaving

Page 92: Android  Test Recorder & Profiler 구축 이야기

Widget1

Widget2

Widget3

Listener1

Listener2

Listener3

MotionCollect1

MotionCollect2

MotionCollect3

위젯 리스너

AOP를 사용하기 전 모션수집

Page 93: Android  Test Recorder & Profiler 구축 이야기

Widget1

Widget2

Widget3

onClickListener MotionCollectAop

위젯 리스너

AOP를 사용한 후 모션수집

Page 94: Android  Test Recorder & Profiler 구축 이야기

AOP의 Key = BCI

Byte Code Instrumentation란? Java Byte Code에 직접 수정을 가해 로직을 추가하는 기

Page 95: Android  Test Recorder & Profiler 구축 이야기

코드 시점

-  메소드 호출 -  필드 접근 -  예외처리 -  생성자 호출 -  초기화

공통 로직 A

공통 로직 B

Weaving

Page 96: Android  Test Recorder & Profiler 구축 이야기

리스너 메소드 호출 시점

시나리오 수집 로직

Aop를 이용한 자동 코드 삽입

Weaving

Page 97: Android  Test Recorder & Profiler 구축 이야기

컴파일로 보는 Weaving시점

java class dex apk

Java ByteCode가 아닌 Dalvik Code를 사용

java class JVM

Compile Time Weaving Class Loading Weaving

Runtime Weaving

Dalvik

Compile Time Weaving

Page 98: Android  Test Recorder & Profiler 구축 이야기

AspectJ����������� ������������������  ����������� ������������������  Compile����������� ������������������  Time����������� ������������������  Weaving����������� ������������������  라이브러리����������� ������������������  

Page 99: Android  Test Recorder & Profiler 구축 이야기

AOP의 용어

코드 시점

-  메소드 호출 -  필드 접근 -  예외처리 -  생성자 호출 -  초기화

공통 로직 A

공통 로직 B

Pointcut

Page 100: Android  Test Recorder & Profiler 구축 이야기

AOP의 용어

코드 시점

-  메소드 호출 -  필드 접근 -  예외처리 -  생성자 호출 -  초기화

공통 로직 A

공통 로직 B

선처리

후처리

Page 101: Android  Test Recorder & Profiler 구축 이야기

AOP의 용어

코드 시점

-  메소드 호출 -  필드 접근 -  예외처리 -  생성자 호출 -  초기화

공통 로직 A

공통 로직 B

선처리(Before)

후처리(After)

JoinPoint

Page 102: Android  Test Recorder & Profiler 구축 이야기

AspectJ를����������� ������������������  이용한����������� ������������������  HelloWorld����������� ������������������  

public����������� ������������������  class����������� ������������������  HelloWorld����������� ������������������  {����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  public����������� ������������������  void����������� ������������������  sayHello()����������� ������������������  {����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  System.out.print("Hello");����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  } ����������� ������������������  ����������� ������������������  }����������� ������������������  

pointcut����������� ������������������  sayHello()����������� ������������������  :����������� ������������������  ����������� ������������������  execution(*����������� ������������������  HelloWorld.sayHello());����������� ������������������  

����������� ������������������  ����������� ������������������  before()����������� ������������������  :����������� ������������������  sayHello()����������� ������������������  {����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  System.out.print("say����������� ������������������  ");����������� ������������������  }����������� ������������������  ����������� ������������������  after()����������� ������������������  :����������� ������������������  sayHello()����������� ������������������  {����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  System.out.println("����������� ������������������  world");����������� ������������������  }����������� ������������������  

Page 103: Android  Test Recorder & Profiler 구축 이야기

Widget1

Widget2

Widget3

onClickListener MotionCollectAo

p

위젯 리스너 모션수집

PointCut

JoinPoint:Before

Page 104: Android  Test Recorder & Profiler 구축 이야기

모든����������� ������������������  클릭이벤트를����������� ������������������  수집하는����������� ������������������  ����������� ������������������  Aspect����������� ������������������  ����������� ������������������  코드����������� ������������������  ����������� ������������������  

//����������� ������������������  모든����������� ������������������  onClick메소드로����������� ������������������  부터����������� ������������������  ����������� ������������������  View를����������� ������������������  파라미터로����������� ������������������  받는����������� ������������������  Pointcut����������� ������������������  

pointcut����������� ������������������  onClickAop(View����������� ������������������  v)����������� ������������������  :����������� ������������������  execution(*����������� ������������������  *.onClick(..))����������� ������������������  &&����������� ������������������  args(v);����������� ������������������  ����������� ������������������  ����������� ������������������  

//����������� ������������������  onClickAop가����������� ������������������  실행되기����������� ������������������  전이라는����������� ������������������  Joinpoint를����������� ������������������  정의����������� ������������������  before(View����������� ������������������  v)����������� ������������������  :����������� ������������������  onClickAop(v)����������� ������������������  {����������� ������������������  

����������� ������������������  ����������� ������������������  ����������� ������������������  //����������� ������������������  insert����������� ������������������  your����������� ������������������  code...����������� ������������������  

����������� ������������������  

����������� ������������������  motionCollection(v,����������� ������������������  "onClick");����������� ������������������  ����������� ������������������  ����������� ������������������  

}����������� ������������������  

Page 105: Android  Test Recorder & Profiler 구축 이야기

수집된����������� ������������������  정보와����������� ������������������  Robotium을����������� ������������������  ����������� ������������������  이용하여����������� ������������������  UI테스트����������� ������������������  진행����������� ������������������  

Robotium����������� ������������������  

Page 106: Android  Test Recorder & Profiler 구축 이야기

PART4.����������� ������������������  ����������� ������������������  우리의����������� ������������������  비전!!����������� ������������������  

Page 107: Android  Test Recorder & Profiler 구축 이야기

1단계����������� ������������������  프로젝트����������� ������������������  ����������� ������������������  인원:����������� ������������������  3명����������� ������������������  ����������� ������������������  기간:����������� ������������������  5개월����������� ������������������  

Page 108: Android  Test Recorder & Profiler 구축 이야기
Page 109: Android  Test Recorder & Profiler 구축 이야기
Page 110: Android  Test Recorder & Profiler 구축 이야기
Page 111: Android  Test Recorder & Profiler 구축 이야기
Page 112: Android  Test Recorder & Profiler 구축 이야기

2단계����������� ������������������  프로젝트����������� ������������������  ����������� ������������������  인원:����������� ������������������  3명����������� ������������������  (1명����������� ������������������  교체)����������� ������������������  

����������� ������������������  기간:����������� ������������������  7개월����������� ������������������  진행중����������� ������������������  

Page 113: Android  Test Recorder & Profiler 구축 이야기

보다����������� ������������������  도움이����������� ������������������  되는����������� ������������������  정보를����������� ������������������  제공하려면?����������� ������������������  

편의성은?����������� ������������������  지표는?����������� ������������������  시각화는?����������� ������������������  

Page 114: Android  Test Recorder & Profiler 구축 이야기

Hprof����������� ������������������  힙����������� ������������������  덤프����������� ������������������  분석����������� ������������������  

무거운 덤프 분석이 항상 필요한가?

일단 다른 지표로 대체, 향후 보완

Page 115: Android  Test Recorder & Profiler 구축 이야기

힙����������� ������������������  덤프����������� ������������������  분석은����������� ������������������  어떻게����������� ������������������  해야����������� ������������������  하는가?����������� ������������������  

Hprof����������� ������������������  힙����������� ������������������  덤프����������� ������������������  분석����������� ������������������  

김성조����������� ������������������  ����������� ������������������  현)����������� ������������������  LG����������� ������������������  CNS����������� ������������������  전)����������� ������������������  제니퍼소프트����������� ������������������  CTO����������� ������������������  

성능����������� ������������������  분석����������� ������������������  전문가����������� ������������������  자문����������� ������������������  

Page 116: Android  Test Recorder & Profiler 구축 이야기

Battery����������� ������������������  사용량����������� ������������������  모니터링����������� ������������������  

Powertutor����������� ������������������  사용했으나����������� ������������������  

부하가����������� ������������������  많이����������� ������������������  걸려����������� ������������������  제거����������� ������������������  

…⋯대안����������� ������������������  모색중����������� ������������������  

Page 117: Android  Test Recorder & Profiler 구축 이야기

VISUALIZATION����������� ������������������  

Page 118: Android  Test Recorder & Profiler 구축 이야기

안드로이드����������� ������������������  앱����������� ������������������  개발에����������� ������������������  있어����������� ������������������  필수적인����������� ������������������  도구-서비스����������� ������������������  !!����������� ������������������  

Page 119: Android  Test Recorder & Profiler 구축 이야기

월간 마이크로소프트웨어

(총 3편, 1~3월호)

Page 120: Android  Test Recorder & Profiler 구축 이야기

[email protected]����������� ������������������  [email protected]����������� ������������������  [email protected]����������� ������������������  ����������� ������������������