Android  Test Recorder & Profiler 구축 이야기
Upcoming SlideShare
Loading in...5
×
 

Android Test Recorder & Profiler 구축 이야기

on

  • 2,800 views

안드로이드 프로파일러와 테스트 레코더를 직접 구현한 경험들을 공유하는 세션입니다.

안드로이드 프로파일러와 테스트 레코더를 직접 구현한 경험들을 공유하는 세션입니다.

Statistics

Views

Total Views
2,800
Views on SlideShare
1,499
Embed Views
1,301

Actions

Likes
5
Downloads
38
Comments
0

11 Embeds 1,301

http://arload.wordpress.com 1062
http://plus.url.google.com 73
http://www.hanrss.com 67
http://feedly.com 63
http://www.slideee.com 19
https://arload.wordpress.com 7
http://kimjstory.itmagnet.net 3
http://hannuri.tistory.com 3
https://www.google.co.kr 2
https://reader.aol.com 1
http://nigayo.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Android  Test Recorder & Profiler 구축 이야기 Android Test Recorder & Profiler 구축 이야기 Presentation Transcript

  • Android Test Recording & Profiler (Cerberus 구축 이야기)
  • 조재우
  •    노성현
  •    손영수
  •    윤강호
  •    황학범
  •    박종훈
  •   
  • PART
  •   1.
  •   
  •    
  •    우리는
  •   왜
  •   PROFILER를
  •   만들었나?
  •   
  • 개인
  •   개발자:
  •   73%
  •    무료 어플리케이션 유료 어플리케이션 회사, 734, 25% 회사, 957, 31% 개인, 2125, 69% 개인, 2235, 75%
  • Startup
  •   에서
  •   상황
  •   (1인
  •   3역)
  •    기획
  •    QA
  •    개발
  •   
  • 대충
  •   만들고
  •   일단
  •   릴리즈!!!
  •   
  • 하지만
  •   그
  •   결과…⋯
  •   
  • 50%
  •   이상이
  •   앱이
  •   죽거나
  •   멈추거나
  •    느려지는
  •   문제를
  •   겪는다.
  •    출처 : http://offers2.compuware.com/rs/compuware/images/Mobile_App_Survey_Report.pdf
  • 앱을
  •   사용하지
  •   않겠다
  •    경쟁사
  •   앱으로
  •   바꾸겠다
  •    안좋은
  •   경험을
  •   다른
  •   사람들에게
  •   알리겠다
  •    이
  •   회사
  •   제품을
  •   사지
  •   않겠다
  •    별점을
  •   낮게
  •   주겠다
  •    회사에
  •   대한
  •   전체적인
  •   인식이
  •   나빠졌다
  •    그
  •   회사의
  •   사이트에
  •   들어가지
  •   않겠다
  •    회사의
  •   고객서비스에
  •   컨택하겠다
  •    회사의
  •   모바일
  •   웹서비스에
  •   접속한다
  •    소셜미디어에
  •   알린다
  •    아무것도
  •   하지
  •   않는다
  •   
  • 성능
  •   측정과
  •   테스트는
  •   이제
  •   필수
  •   
  •   
  •   
  • 안드로이드는…⋯…⋯
  •   
  • 높은
  •   학습곡선이
  •   존재하여
  •    
  •    성능
  •   분석은
  •   고급
  •   개발자의
  •   영역
  •   
  • 그렇다면
  •    UI
  •   테스트는?
  •   
  • 한
  •   두개도
  •   아니고..
  •   
  • 꿈틀거리는
  •   테스트
  •   시장..
  •    자머 윈드리버
  • 스크립트
  •   직접
  •   작성,
  •   
  •   복잡한
  •   배포
  •   
  • Manual
  •   Script
  •   ,
  •   Only
  •   Emulator,
  •   
  •   Not
  •   Free
  •   
  •    
  •   
  • *
  •   프로젝트의
  •   가치
  •   찾기
  •   
  • 비즈니스 모델 캔버스는 창업자들이 생각한 가설이고, 고객 개발은 창업자들이 생각해낸 해결책을 검증하기 보다는 창업자들이 가정한 문제가 진짜 고객의 문 제인지 검증하는 것이다! Steve Blank Lean Startup의 아버지 Customer Development Method 저자
  • 수
  •   많은
  •   인터뷰..
  •    서드 파트 라이브러리 때문에 앱의 성 능에 문제가 생기는 경우가 많다. 직접 개발한 코드가 아니기 때문에 동적으로 분석해서 문제를 해결할 수 밖 에 없는 데 기존 분석 툴로는 정확한 정보를 얻 기가 굉장히 힘들다. 기존에 DDMS를 이용해서 성능분석을 하지만 한 번에 볼 수 있는 차트가 부족 하고 히스토리를 쉽게 남길 수가 없어 서 이전 분석과 이후 분석에 대해서 비 교가 쉽지 않다. 대부분 개발이 NDK로 이루어지는 상태 이다. 미디어 프레임워크에 대한 성능 분석을 자바 레벨과 Native 레벨에서 모 두 하고 싶지만 통합해서 쉽게 할 수 있 는 방법이 현재 없는 상태인 것 같다. 너무 많은 툴들이 분산되어있고 빠르게 정리해서 볼 수가 없다. 기존 크래시 리포트는 배포 후 end 유 저의 보고를 통해서만 알 수 있다. 스타 트업의 경우 빠르게 배포 후 고쳐나가 는 게 맞지만 배포 전에 적은 비용으로 미리 이러한 문제를 예측하고 해결할 수 있다면 좋을 것 같다. 알람 앱이 오작동하는 버그는 크래쉬가 아니기 때문에 잡을 수 없다. 미리 상황 을 예측하거나 오작동할 때 end user의 앱 상태를 관찰할 수 있는 방법이 없다. 빠르게 앱 개발을 해야 하는 일정에서 배포 전에 전체적으로 앱의 퀄리티를 향상시킬 수 있는 방법이 있으면 좋겠 다. 빠르게 앱 개발을 해야 하는 일정에서 배포 전에 전체적으로 앱의 퀄리티를 향상시킬 수 있는 방법이 있으면 좋겠 다.
  • 알람몬
  •   인터뷰..
  •    3rd Party Library 때문에 앱의 성능에 문제가 생 기는 경우가 많다. 직접 개발한 코드가 아니기 때문 에 동적으로 분석해서 문제를 해 결할 수 밖 에 없는데 기존 분석 툴로는 정확한 정보를 얻기가 굉 장히 힘들다. 
  •    말랑스튜디오
  •   CEO
  •    김영호
  •   
  • Sleep
  •   If
  •   U
  •   Can
  •   인터뷰
  •    앱이 오작동하는 버그는 잡을 수 없다. 미리 상황을 예측하거나 오작동할 때 end user의 앱 상태를 관찰할 수 있는 방법이 없다. 신재명
  •   
  • Customer
  •   
  •    Validation
  •    Feedback
  •    Customer
  •   
  •    Discovery
  •    고객의
  •    요구사항
  •    테스트
  •   자동화와
  •   쉽 게
  •   사용할
  •   수
  •   있는
  •    성능측정
  •   툴의
  •   부재
  •    가치찾기
  •   워크샵
  •   
  • 가치 찾기 워크샵 진행
  • 1) Purpose & Goal 수립
  • 1) Purpose & Goal 수립 목적 목표 •  성능분석 솔루션 브랜드를 가지 고 싶다 •  Android 성능 분석 •  사용자의 느낌 – 실제 런칭 전에 사전문제를 점검 •  다른 사람에게 도움이 되는 글 발 표 •  많은 개발자들이 App 개발, 배포 전 필수적으로 사용되는 Product 가 되기를 희망 •  런칭 후에 다른 사람들에게 피드 백을 받고 싶다
  • 2) Why & Why not Buy? 사야 되는 이유와 사지 않는 이유를 각자 30개씩 적고 그룹화 한다
  • 3) Simple Value Proposition
  • 3) Simple Value Proposition Offer 성능이슈해결 개발 및 유지보수 비용 감소 학습비용 최소화 소스코드에서 메모리에 영향을 주는 부분을 체크하고 실시간 메모리 추적을 통해 메모리 누수를 측정한다 Value 버전별 Test를 통해 해당 A pp의 Android 버전별 분석 결과를 알려준다 Android App의 성능에 악영 향을 끼치는 문제의 원인과 해결책을 보여주고 이에 기반한 App 등급을 보여준다 해당 App의 CPU사용률을 수치화하여 분석결과를 보여준 다 문제의 원인이 되는 소스 코드의 정확한 지점을 알 려준다 환경에 구애받지 않고 어디에 서든 사용할 수 있는 웹 기반이다 App이 컨텐츠(이미지, 동영상 등)를 처리하는 과정에서 발생 할 수 있는 문제를 찾아준다 내가 원하는 Test시나리오 를 만들고, 저장하고, 재사 용할 수 있다 부가적인 설정없이 클릭만으 로 처음쓰는 사람도 쉽게 사용 가능
  • 4) User Profiling을 통한 Opportunity도출
  • 작성한 페르소나 중 우선순위가 높은 페르소나를 선택하고 키워드를 그룹화
  • 5) Convergence
  • 5) Convergence Offer 웹에서 자동으로 설정파일을 만 들어주고 전체과정을 순서대로 따라할 수 있도록 함으로써 환경 에 구애받지 않고 설정과 학습곡 선을 줄여준다 소스코드에서 메모리에 영향을 주는 부분을 체크하고 실시간 메모리 추적을 통해 메모리 누수를 측 정한다 Value App이 예상치 못하게 종료되 거나 느려지는 원인을 조기에 찾아준다 정상적으로 동작하지 않는 버전이나 시나 리오를 찾아 그 원인과 해결책을 종류별로 그룹화하여 심각성이 높은 순서대로 보여 준다 버전별 Test를 통해 해당 App의 Android 버전별 분석 결과를 알려준다 환경에 구애받지 않고 어디에서 든 사용할 수 있는 웹 환경이다. 해당 App의 CPU사용률을 수 치화하여 분석결과를 보여준다 문제가 되는 소스코드의 정확한 위치와 해 결책을 종류별로 그룹화하여 심각성에 따라 우선순위를 부여하여 높은 순서대로 보여주고 이를 기반으로 App등급을 매겨준다 원하는 기능을 선택하면 자동으 로 이에 대한 완성된 설정파일을 제공함으로써 기존에 요구되던 복잡한 설정과정을 없앤다 내가 원하는 Test시나리오를 만들고, 저장하고, 재사용할 수 있다 포커싱과 따라하기 기능을 통해 전체 과정을 Step by Step으 로 따라가는 환경을 제공하여 학습곡선을 줄인다 App이 컨텐츠 (이미지, 동영상 등)를 처리하 는 과정에서 발생할 수 있는 문제를 찾아준다
  • Quality
  •   Gate는
  •   모바일
  •   앱
  •   개발팀에게
  •   
  •    VALUE
  •    성능에
  •   관한
  •   
  •   잠재적인
  •   오류 를
  •   
  •   조기에
  •   발견
  •    버전별,
  •   시나리오별
  •   테스트로 
  •   그
  •   원인과
  •   해결책을
  •   제공
  •    낮은
  •   
  •   학습곡선
  •    가치를
  •   제공하는데
  •    FEATURE
  •    메모리,
  •   CPU,
  •   네트워크,
  •   배 터리
  •   정보
  •   분석
  •    시나리오
  •   테스트
  •   레코딩으로
  •   
  •   
  •    테스트
  •   자동화
  •    우선순위
  •   별로
  •   
  •    등급을
  •   나눈
  •   시각화
  •    를
  •   통해
  •   이루어
  •   진다.
  •   
  • Customer
  •   
  •    Validation
  •    Feedback
  •    고객의
  •    요구사항
  •    버그의
  •   위험
  •   정도를
  •    판별
  •   할
  •   QA의
  •   부재
  •    QA
  •   Insight
  •    가치찾기
  •   워크샵
  •    UI개선
  •   필요
  •    Single
  •   Page
  •   Repo rt
  •    사용자
  •   스크린
  •   우선
  •    사용자
  •   메서드
  •   
  •    파서
  •   개발
  •    고객
  •   타겟팅
  •    액티비티
  •   기반
  •   
  •    필터링
  •    UI
  •   시안,
  •   기능
  •    사용자
  •   피드백
  •    최종
  •   
  •    사용자
  •   피드백
  •    Quality
  •   Gate만 의
  •   가치가
  •   있다
  •    Customer
  •   
  •    Discovery
  •   
  • 데모
  •   
  • 기존 프로파일링 솔루션의 문제 해결 위젯으로
  •   프로파일링
  •    한
  •   줄의
  •   API
  •   설정만으로
  •    프로파일링
  •   설정
  •    우선
  •   순위별로
  •   등급화된
  •    프로파일링
  •   결과
  •   확인
  •    높은
  •   접근성
  •   (웹)
  •    직관적인
  •   시각확
  •   
  • *
  •   대표적인
  •   안드로이드
  •   
  •    
  •   
  •   
  •   테스팅/
  •   프로파일링
  •   
  •   도구들
  •   
  • 대표적인 UI 테스트 툴 Monkey
  •   
  •    Runner
  •    UI
  •   
  •    Automator
  •    Robotium
  •   
  • 대표적인 UI 테스트 툴 Monkey
  •   
  •    Runner
  •    UI
  •   
  •    Automator
  •    Robotium
  •    지원
  •   버전
  •    All
  •    4.2↑
  •    All
  •    입력
  •   방법
  •    좌표
  •    이벤트
  •    이벤트
  •    JUnit
  •   지원
  •    X
  •    O
  •    O
  •   
  • 대표적인 PROFILING 툴 Procstats
  •    Top
  •    Traceview
  •    Systrace
  •    지원
  •   버전
  •    4.2↑
  •    All
  •    All
  •    4.1↑
  •    범위
  •    Device
  •   전체
  •    Device
  •   전체
  •    1
  •   App
  •    인스턴스
  •   
  •    1
  •   App
  •    인스턴스
  •    대상
  •    실행중인
  •   전체
  •    앱,
  •   서비스의
  •    메모리
  •   사용량, 
  •   실행시간
  •    출력
  •   포맷
  •    text
  •    Dalvik
  •   내부의
  •    함수/클래스별
  •    컴포넌트별
  •   CP 매모리
  •   상태
  •    CPU
  •   실행시간
  •    U
  •   실행시간
  •    text
  •    text,
  •   tree,
  •   tim eline
  •    timeline
  •   
  • Procstats
  •    각
  •   서비스에
  •   대한
  •   메모리
  •   사용량,
  •   실행시간
  •   
  • TOP
  •    상태정보:
  •   heap,
  •   objects,
  •   sql..
  •   
  • Traceview
  •    함수,
  •   클래스별
  •   CPU
  •   실행시간
  •   
  • Systrace
  •    컴포넌트별
  •   CPU
  •   실행시간
  •   
  • 대표적인 PROFILING 툴 Procstats
  •    Top
  •    Traceview
  •    Systrace
  •    지원
  •   버전
  •    4.2↑
  •    All
  •    All
  •    4.1↑
  •    범위
  •    Device
  •   전체
  •    Device
  •   전체
  •    1
  •   App
  •    인스턴스
  •   
  •    1
  •   App
  •    인스턴스
  •    대상
  •    실행중인
  •   전체
  •    앱,
  •   서비스의
  •    메모리
  •   사용량, 
  •   실행시간
  •    출력
  •   포맷
  •    text
  •    Dalvik
  •   내부의
  •    함수/클래스별
  •    컴포넌트별
  •   CP 매모리
  •   상태
  •    CPU
  •   실행시간
  •    U
  •   실행시간
  •    text
  •    text,
  •   tree,
  •   tim eline
  •    timeline
  •   
  • PART
  •   2.
  •    PROFILING의
  •   필요성
  •    
  •   
  • 기능적
  •   오류
  •   
  • 환경적 오류 Out
  •   of
  •   Memory
  •    솔루션
  •   :
  •   Profiler
  •    Low
  •   Battery
  •    Network
  •    100%
  •   CPU
  •   Usage
  •   
  •   
  • 자주
  •   만나는
  •   환경적
  •   에러
  •   이야기.
  •    Out
  •   Of
  •   Memory
  •   
  • Dalvik
  •   is
  •   Isolation
  •   model
  •    App
  •   
  •    Memory
  •    App
  •    Memory
  •    App
  •    Memory
  •    DALVIK
  •    App
  •    Memory
  •    App
  •    Memory
  •   
  • 프로세스당 메모리 한계 Heap Allocated
  • Bitmap & Android Memory 참조만 Java Heap, 비트맵 객체는 Native Heap에 존재 Lower 참조와 비트맵 객체 모두 Java Heap 에 존재 Higher
  • Honeycomb 이전에는 Memory Control 을 위해 Recycle() 호출로 Native Heap 영역 해제
  • Honeycomb 이후로는 Memory Control 을 위해 Java Heap Memory Control 해야 한다.
  • 직접적으로
  •   메모리
  •   제어
  •   할
  •   수
  •   없다.
  •   
  • Garbage
  •   Collector
  •    힙(heap)
  •   내의
  •   객체
  •   중에서
  •   
  •    
  •    
  •   가비지(garbage)를
  •   찾아낸다
  •    
  •    
  •    찾아낸
  •   가비지를
  •   처리해서
  •    
  •   힙의
  •   메모리를
  •   회수한다.
  •   
  • Java
  •   가비지
  •   컬렉터는
  •   Garbage를
  •   찾기
  •   위해
  •    
  •    Reachability
  •   개념
  •   사용
  •   
  • Reachable
  •    -
  •   객체에
  •   유효한
  •   참조
  •    Unreachable
  •    객체에
  •   유효한
  •   참조가
  •   없을
  •   때,
  •   
  •    가비지로
  •   간주되어
  •   수집
  •   대상이
  •   된다.
  •   
  • Reachable
  •   Object
  •    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
  •   
  • Weakly
  •   Reachable
  •   Object
  •   
  • Strong
  •   Reference
  •    Object
  •   obj
  •   =
  •   new
  •   Object();
  •    일반적인
  •   객체
  •   =
  •   Out
  •   of
  •   Memory
  •   위험이
  •   있음
  •   
  • Soft
  •   Reference
  •    SoftReference
  •   sr
  •   =
  •   
  •    new
  •   SoftReference(new
  •   Object());
  •    
  •    메모리
  •   여유
  •   기준에
  •   따라
  •   가비지
  •   컬렉션
  •   대상
  •   
  • Weak
  •   Reference
  •    WeakReference
  •   wr
  •   =
  •   
  •    new
  •   WeakReference(new
  •   Object());
  •    가비지
  •   컬렉션이
  •   일어날
  •   때
  •   바로
  •   회수
  •   
  •   
  • Phantom
  •   Reference
  •    ReferenceQueue<Object>
  •   rq
  •   =
  •   
  •    new
  •   ReferenceQueue<Object>();
  •    
  •    PhantomReference<Object>
  •   pr
  •   =
  •   
  •    new
  •   PhantomReference<Object>(new
  •   Object(),
  •   rq);
  •    객체의
  •   파이널라이즈
  •   시점을
  •   알고
  •   
  •    객체의
  •   클린업
  •   동작을
  •   수행할
  •   필요가
  •   있을
  •   때
  •   
  • Strong
  •   
  •    vs Weak
  •   
  • Strong Reference Code
  • Heap size 140 Out Of Memory !! 120 100 80 Strong Weak 60 40 20 0 Time
  • Weak Reference Code
  • Heap size 140 120 100 80 Strong Weak 60 40 20 0 Time
  • Heap size 140 120 100 80 Strong Weak 60 40 20 0 Time
  • PART
  •   3.
  •   
  •    
  •    오픈소스로
  •   
  •    테스트
  •   자동화
  •   개발하기
  •   
  • 로보티움 Test를 통 한 자동화 테스트
  • 사용자의
  •   모션을
  •   어떻게
  •   레코딩
  •   할까? 화면
  •   파편화를
  •   극복
  •    
  •    귀찮은
  •   UI
  •   테스트를
  •   자동화
  •   
  • Quality Gate Client Server
  •    Client
  •   Architecture
  •    Data
  •   Marshaller/
  •    UnMashaller
  •    profiler
  •   interface
  •   
  •    <<wrapper
  •   façade>>
  •    User
  •   Program
  •    Scenario
  •    Robotium
  •   Runner
  •    User
  •   Motion
  •    Collector
  •    Motion
  •   Listener
  •    Injector
  •    [범례]
  •    Profiler
  •    Profiling
  •   
  •    Widget
  •    Battery
  •   Data
  •    Collector
  •    
  •   Heap
  •   Analyser
  •    component
  •    infrastructure
  •    External
  •   system
  •    Profiling
  •   Status
  •    
  •   Manager
  •    Network
  •   Data
  •    Collector
  •    CPU
  •   Tracer
  •    Function
  •   call
  •    JSON
  •   
  • 모션수집 방법 리스너에 모션을 수집하는 코드를 삽입 모션 수집 코드 사용자 리스너 코드
  • 모션수집 코드의 예 btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } });
  • 모션수집 코드의 예 btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { motionCollection(v, "onClick"); } }); 수집코드를 리스너에 삽입
  • 모든 리스너에 수집 코드를 삽입하는 일은 불편하고 귀찮은이용 Aspect Oriented Programming를 일!
  • Aspect Oriented Programming 기본 컨셉
  • Aspect Oriented Programming 어떠한 코드 시점 이전,이후에 자동으로 코드를 삽입해 준다. 공통 로직 A Weaving 코드 시점 -  -  -  -  -  공통 로직 B 메소드 호출 필드 접근 예외처리 생성자 호출 초기화
  • AOP를 사용하기 전 위젯 리스너 모션수집 Widget1 Listener1 MotionCollect1 Widget2 Listener2 MotionCollect2 Widget3 Listener3 MotionCollect3
  • AOP를 사용한 후 위젯 리스너 모션수집 Widget1 Widget2 Widget3 onClickListener MotionCollectAop
  • AOP의 Key = BCI Byte Code Instrumentation란? Java Byte Code에 직접 수정을 가해 로직을 추가하는 기 술
  • 공통 로직 A Weaving 코드 시점 -  -  -  -  -  공통 로직 B 메소드 호출 필드 접근 예외처리 생성자 호출 초기화
  • Aop를 이용한 자동 코드 삽입 시나리오 수집 로직 Weaving 리스너 메소드 호출 시점
  • 컴파일로 보는 Weaving시점 Compile Time Weaving java class Class Loading Weaving Runtime Weaving JVM Compile Time Weaving java class dex apk Dalvik Java ByteCode가 아닌 Dalvik Code를 사 용
  • AspectJ
  •   
  •    Compile
  •   Time
  •   Weaving
  •   라이브러리
  •   
  • AOP의 용어 Pointcut 공통 로직 A 코드 시점 -  -  -  -  -  공통 로직 B 메소드 호출 필드 접근 예외처리 생성자 호출 초기화
  • AOP의 용어 공통 로직 A 코드 시점 선처리 후처리 공통 로직 B -  -  -  -  -  메소드 호출 필드 접근 예외처리 생성자 호출 초기화
  • AOP의 용어 공통 로직 A 코드 시점 선처리(Before) JoinPoint 후처리(After) 공통 로직 B -  -  -  -  -  메소드 호출 필드 접근 예외처리 생성자 호출 초기화
  • 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");
  •    }
  •   
  • 위젯 리스너 모션수집 Widget1 JoinPoint:Before Widget2 onClickListener PointCut Widget3 MotionCollectAo p
  • 모든
  •   클릭이벤트를
  •   수집하는
  •   
  •    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");
  •    
  •   
  •    }
  •   
  • 수집된
  •   정보와
  •   Robotium을
  •   
  •    이용하여
  •   UI테스트
  •   진행
  •    Robotium
  •   
  • PART4.
  •   
  •    우리의
  •   비전!!
  •   
  • 1단계
  •   프로젝트
  •    
  •    인원:
  •   3명
  •    
  •    기간:
  •   5개월
  •   
  • 2단계
  •   프로젝트
  •    
  •    인원:
  •   3명
  •    (1명
  •   교체)
  •    
  •    기간:
  •   7개월
  •    진행중
  •   
  • 보다
  •   도움이
  •   되는
  •   정보를
  •   제공하려면?
  •    편의성은?
  •   지표는?
  •   시각화는?
  •   
  • Hprof
  •   힙
  •   덤프
  •   분석
  •    무거운 덤프 분석이 항상 필요한가? 일단 다른 지표로 대체, 향후 보완
  • Hprof
  •   힙
  •   덤프
  •   분석
  •    힙
  •   덤프
  •   분석은
  •   어떻게
  •   해야
  •   하는가?
  •    성능
  •   분석
  •   전문가
  •   자문
  •    김성조
  •   
  •    현)
  •   LG
  •   CNS
  •    전)
  •   제니퍼소프트
  •   CTO
  •   
  • Battery
  •   사용량
  •   모니터링
  •    Powertutor
  •   사용했으나
  •    부하가
  •   많이
  •   걸려
  •   제거
  •    …⋯대안
  •   모색중
  •   
  • VISUALIZATION
  •   
  • 안드로이드
  •   앱
  •   개발에
  •   있어
  •   필수적인
  •   도구-서비스
  •   !!
  •   
  • 월간 마이크로소프트웨어 (총 3편, 1~3월호)
  • chjw102@gmail.com
  •    shtjdgus1090@gmail.com
  •    yoonkangho@gmail.com
  •    
  •