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.

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 of Automated Concolic Testing of Smartphone Apps

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