automated concolic testing of smartphone apps

47
of Smartphone Apps Saswat Anand Stanford Univ. Mayur Naik Georgia Tech. Hongseok Yang Univ. of Oxford Mary Jean Harrol Georgia Tech.

Upload: katoka

Post on 25-Feb-2016

79 views

Category:

Documents


0 download

DESCRIPTION

Automated Concolic Testing of Smartphone Apps. Saswat Anand Stanford Univ . Mayur Naik Georgia Tech . Hongseok Yang Univ. of Oxford. Mary Jean Harrold Georgia Tech. Motivation. Motivation. Problems with Smartphone Apps. Problem. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Automated  Concolic Testing  of  Smartphone  Apps

Automated Concolic Testing

of Smartphone Apps

Saswat AnandStanford Univ.

Mayur NaikGeorgia Tech.

Hongseok YangUniv. of Oxford

Mary Jean HarroldGeorgia Tech.

Page 2: Automated  Concolic Testing  of  Smartphone  Apps

Motivation

Page 3: Automated  Concolic Testing  of  Smartphone  Apps

Motivation

Problems with Smartphone Apps

Page 4: Automated  Concolic Testing  of  Smartphone  Apps

Automatically generate test inputs for bounded exhaustive testing of

smartphone apps

Problem

Page 5: Automated  Concolic Testing  of  Smartphone  Apps

Test Inputs for Apps• Whole-program testing• Test input is a sequence of events e1, e2…,

en

• Types of events: a tap on the screen, change in geo-location, arrival of a SMS message, etc.

Page 6: Automated  Concolic Testing  of  Smartphone  Apps

Bounded Exhaustive Testing of Apps

S, the set of all event sequences* s.t. each sequence

takes a unique path

*of bounded-length

Set of covered

branchesGoal: cover

these

Page 7: Automated  Concolic Testing  of  Smartphone  Apps

1. Generate individual events2. Generate sequences of events

Two subproblems

Page 8: Automated  Concolic Testing  of  Smartphone  Apps

Generating Individual Events• An event is associated with data

o X & Y coordinates of a tap evento geo-location of a change-in-geo-location evento content of an incoming SMS evento etc.

• Data determine which program path is taken

Challenge: Generate the “right” data for events

Page 9: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

Play Pause

Stop Eject

Rewind Skip

Page 10: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

public void onClick(View target) { if (target == play) startService(new Intent(ACTION_PLAY)); else if (target == pause) startService(new Intent(ACTION_PAUSE)); else if (target == skip) startService(new Intent(ACTION_SKIP)); else if (target == rewind) startService(new Intent(ACTION_REWIND)); else if (target == stop) startService(new Intent(ACTION_STOP)); else if (target == eject) showUrlDialog();}

tap(136, 351)

Page 11: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

public void onClick(View target) { if (target == play) startService(new Intent(ACTION_PLAY)); else if (target == pause) startService(new Intent(ACTION_PAUSE)); else if (target == skip) startService(new Intent(ACTION_SKIP)); else if (target == rewind) startService(new Intent(ACTION_REWIND)); else if (target == stop) startService(new Intent(ACTION_STOP)); else if (target == eject) showUrlDialog();}

tap(248, 351)

Page 12: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

public void onClick(View target) { if (target == play) startService(new Intent(ACTION_PLAY)); else if (target == pause) startService(new Intent(ACTION_PAUSE)); else if (target == skip) startService(new Intent(ACTION_SKIP)); else if (target == rewind) startService(new Intent(ACTION_REWIND)); else if (target == stop) startService(new Intent(ACTION_STOP)); else if (target == eject) showUrlDialog();}

tap(360, 351)

Page 13: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

public void onClick(View target) { if (target == play) startService(new Intent(ACTION_PLAY)); else if (target == pause) startService(new Intent(ACTION_PAUSE)); else if (target == skip) startService(new Intent(ACTION_SKIP)); else if (target == rewind) startService(new Intent(ACTION_REWIND)); else if (target == stop) startService(new Intent(ACTION_STOP)); else if (target == eject) showUrlDialog();}

tap(24, 351)

Page 14: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

public void onClick(View target) { if (target == play) startService(new Intent(ACTION_PLAY)); else if (target == pause) startService(new Intent(ACTION_PAUSE)); else if (target == skip) startService(new Intent(ACTION_SKIP)); else if (target == rewind) startService(new Intent(ACTION_REWIND)); else if (target == stop) startService(new Intent(ACTION_STOP)); else if (target == eject) showUrlDialog();}tap(136, 493)

Page 15: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

public void onClick(View target) { if (target == play) startService(new Intent(ACTION_PLAY)); else if (target == pause) startService(new Intent(ACTION_PAUSE)); else if (target == skip) startService(new Intent(ACTION_SKIP)); else if (target == rewind) startService(new Intent(ACTION_REWIND)); else if (target == stop) startService(new Intent(ACTION_STOP)); else if (target == eject) showUrlDialog();}tap(305, 544)

Page 16: Automated  Concolic Testing  of  Smartphone  Apps

Existing alternatives• Random Testing

oCannot perform systematic/exhaustive testing

• Platform-specific tools (e.g., hierarchy viewer in Android)oLimited to GUI EventsoCannot handle third-party GUI widgets

Generating Individual Events

Page 17: Automated  Concolic Testing  of  Smartphone  Apps

Generating Individual Events

Our solutionUse concolic execution to generate data

associated with events

Page 18: Automated  Concolic Testing  of  Smartphone  Apps

FT

FT

tap(int x, int y){1 if (x>2 && x<4){2 if (y>1 && y<3)3 W1_clicked();4 else5 W2_clicked();6 }else7 W3_clicked(); }

Generating Individual Tap Events

1

72

3 5

x>2 && x<4

y>1 && y<3

Page 19: Automated  Concolic Testing  of  Smartphone  Apps

Generating Individual Tap Events

tap(1, 5)

FT

FT1

72

3 5

x>2 && x<4

y>1 && y<3

Page 20: Automated  Concolic Testing  of  Smartphone  Apps

Generating Individual Tap Events

tap(1, 5)

F1 !(x>2 && x<4)

W3_clicked()

FT

FT1

72

3 5

x>2 && x<4

y>1 && y<3

(x>2 && x<4)

tap(3, 5)

Page 21: Automated  Concolic Testing  of  Smartphone  Apps

(x>2 && x<4)

Generating Individual Tap Events

tap(1, 5)

T1 (x>2 && x<4)F2 !(y>1 && y<3) W2_clicked()

tap(3, 5)

FT

FT1

72

3 5

x>2 && x<4

y>1 && y<3

(x>2 && x<4)(y>1 && y<3)

tap(3, 2)

Page 22: Automated  Concolic Testing  of  Smartphone  Apps

Generating Individual Tap Events

tap(1, 5)

(x>2 && x<4)(y>1 && y<3)

tap(3, 5) tap(3, 2)

T1 (x>2 && x<4)T2 (y>1 && y<3) W1_clicked()

FT

FT1

72

3 5

x>2 && x<4

y>1 && y<3

Page 23: Automated  Concolic Testing  of  Smartphone  Apps

Example: Music Player App

❖ ❖❖

❖ ❖

❖❖ ❖

Page 24: Automated  Concolic Testing  of  Smartphone  Apps

1. Generate individual events2. Generate sequences of events

Two subproblems

Page 25: Automated  Concolic Testing  of  Smartphone  Apps

Generating Sequences of EventsConcatenate individual events generated by concolic execution.

Page 26: Automated  Concolic Testing  of  Smartphone  Apps

Baseline Algorithm

Set of covered

branches

S, Set of all event sequences s.t. each sequence takes a

unique pathBaseline

algorithm

Goal: cover these

Page 27: Automated  Concolic Testing  of  Smartphone  Apps

Number of sequences generated for Music Player app by baseline algorithm

Baseline Algorithm Suffers from Path Explosion

1 2 3 40

5000

10000

15000

20000

25000

Page 28: Automated  Concolic Testing  of  Smartphone  Apps

ACTEve Algorithm

ACTEve: Automated Concolic Testing of Event-driven programs

Page 29: Automated  Concolic Testing  of  Smartphone  Apps

ACTEve Algorithm

Set of covered

branches

R s.t. R S⊆

S, Set of all event sequences s.t. each sequence takes a

unique pathBaseline

algorithm

ACTEve algorithm

Goal: cover these

ACTEve is relatively sound

Page 30: Automated  Concolic Testing  of  Smartphone  Apps

Path Subsumption

¿ γ ,C>¿Maps memory location to values (symbolic or concrete)

Path constraint

Program state in concolic execution

Page 31: Automated  Concolic Testing  of  Smartphone  Apps

Program entry

Path Path

¿ γ1 ,𝐶1>¿ ¿ γ2 ,𝐶2>¿

subsumes

Path SubsumptionNote - memory map – path constraint

Page 32: Automated  Concolic Testing  of  Smartphone  Apps

Program entry

Path Path

¿ γ1 ,𝐶1>¿ ¿ γ2 ,𝐶2>¿

subsumes

Path SubsumptionNote - memory map – path constraint

- Don’t generate test corresponding to any path that is an extension of - Only generate tests corresponding to paths that are extension of

Page 33: Automated  Concolic Testing  of  Smartphone  Apps

• Checking path subsumption is very expensive in generalo Constraint implication checkoMatching memory map

• But, path subsumption can be checked cheaply in special caseso Read-only eventso Events whose mutual ordering does not mattero etc.

Path Subsumption

Page 34: Automated  Concolic Testing  of  Smartphone  Apps

event is does not write to any memory location.

Read-only EventsProgram Entry

corresponds to

corresponds to

Path executed for event sequence

is subsumed by q

Page 35: Automated  Concolic Testing  of  Smartphone  Apps

❖❖ ❖❖❖

❖ ❖❖

Read-only Events

Read-only events are represented as ❖

Page 36: Automated  Concolic Testing  of  Smartphone  Apps

ACTEve System Architecture

Page 37: Automated  Concolic Testing  of  Smartphone  Apps

Empirical Study

• Apply ACTEve and baseline algorithmso event sequences of length up to 4o 16 concurrently running emulators o time budget of 12 hours

• Measured three metricso running timeo number of feasible pathso number of satisfiability checks

Page 38: Automated  Concolic Testing  of  Smartphone  Apps

Empirical Results

Page 39: Automated  Concolic Testing  of  Smartphone  Apps

Future Work

Widget Explosion

Page 40: Automated  Concolic Testing  of  Smartphone  Apps

1. Concolic execution to generate individual events

2. ACTEve: an efficient algorithm for bounded exhaustive testing of event-driven programs o Requires only a small fraction (5-36%) of time

compared to baseline algorithm

3. Implementation for Android

Main Contributions

Page 41: Automated  Concolic Testing  of  Smartphone  Apps

Backup slides

Page 42: Automated  Concolic Testing  of  Smartphone  Apps

¿ γ 1 ,𝐶1>¿

¿ γ 2 ,𝐶1∧𝐶 ′>¿

1. because does not write to any memory location.

Read-only EventsProgram Entry

corresponds to event sequence

corresponds to in

Path executed for input event sequence

Page 43: Automated  Concolic Testing  of  Smartphone  Apps

Output of Android’s “Hierarchy Viewer” tool

A Solution: Use Platform-specific Knowlege

Page 44: Automated  Concolic Testing  of  Smartphone  Apps

A Solution: Use Platform-specific Knowlege

void onTouchEvent(MotionEvent e) { int rawX = (int) e.getX(); int rawY = (int) e.getY(); int x = (rawX – MARGIN) / SIZE; int y = (rawY – MARGIN) / SIZE; if (x >= 0 && x < 3 && y >= 0 & y < 3) { int cell = x + 3 * y; … }

Output of Android’s “Hierarchy Viewer” tool

Page 45: Automated  Concolic Testing  of  Smartphone  Apps

Program Entry

Path

{is feasible} {is feasible}

Path

Program Entry

Covered branches

Covered branches

same program location

Path Subsumption

Page 46: Automated  Concolic Testing  of  Smartphone  Apps

Program Entry

Path

{is feasible} {is feasible}

Path

Program Entry

Covered branches

Covered branches

same program location

if we explore all paths that extends , then no need to explore any path that extends because no additional branch coverage will be obtained.

Path Subsumption

Page 47: Automated  Concolic Testing  of  Smartphone  Apps

Path constraint when PAUSE button is tapped on

Example: Music Player App