html · 2020. 3. 11. · (test2, click, test3, click) new relationship 14. js files normalized cfg...

42

Upload: others

Post on 19-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event
Page 2: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

2

Page 3: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

HTML

head body

title h1 p

Page Title My FirstHeading

My first paragraph.

3

Page 4: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

HTML

head body

title h1 p

Page Title My FirstHeading

My first paragraph.

4

Page 5: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

5

event1

event2

event2

event1

Page 6: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

7

Affect?

event1

event2

Page 7: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

8

event1

event2

Affect?

a.onclick = function ( ) {

x = true;

};

b.onclick = function ( ) {

if (x) {

stmt1;

} else {

stmt2;

}

};

Data & Control Dependency

Page 8: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

8

event1

event2

Affect?

a.onclick = function ( ) {

x = true;

};

a.onclick = function ( ) {

b.onclick = test1;

};

function test1 ( ) {

}b.onclick = function ( ) {

if (x) {

stmt1;

} else {

stmt2;

}

};

Data & Control Dependency DOM modification dependency

Page 9: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

9

Page 10: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM-event

Dependency

Relationship

9

Page 11: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

10

Page 12: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

test1 test3

10

Page 13: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

test1 test3

test2 test2

10

Page 14: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

test1 test3

test2 test2

test2 test3

10

Page 15: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

test1 test3

test2 test2

test2 test3

10

Page 16: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

test1 test3

test2 test2

test2 test3

10

Page 17: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

16 dependencies

vs

3 dependencies

21,523,359 iterations

vs

60 iterations

11

Page 18: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

JS files Normalized CFGDatalog

Facts

Datalog

Rules

JS_WALA

Z3 fixed-point

engine

DOM-event

Dependency

Dom-event Dependency Analysis

Artemis (modified)

More efficient !!!Web application

12

Page 19: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

JS files Normalized CFGDatalog

Facts

Datalog

Rules

JS_WALA

Z3 fixed-point

engine

DOM-event

Dependency

Dom-event Dependency Analysis

Artemis (modified)

More efficient !!!Web application

12

Page 20: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

13

HTML/JavaScript code Datalog facts

Datalog rules

DOM-event

Dependency relation

Datalog

Engine

[Whaley & Lam, 2004]

[Livshits & Lam, 2005]

Page 21: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

13

Declarative language for deductive databases

[Ullman 1989]

Facts

parent (bill, mary)

parent (mary, john)

Rules

ancestor (X, Y) ← parent (X, Y)

ancestor (X, Y) ← parent (X, Z), ancestor (Z, Y)

New relationship: ancestor (bill, john)

Page 22: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

test2 test3

14

Page 23: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

14

Page 24: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

14

Page 25: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

14

Page 26: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

14

Page 27: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

DOM-MODIFY (b, click, functionB)

14

Page 28: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

DOM-MODIFY (b, click, functionB)

New Relationship

14

Page 29: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

DOM-MODIFY (b, click, functionB)

New Relationship

DATA-DEP (30, 13)

Rule:

READ (var1, stmt1) & WRITE (var1, stmt2) =>

DATA-DEP (stmt2, stmt1)

14

Page 30: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Rule:

STMT (stmt1, func1) & STMT (stmt2, func2) &

DATA-DEP (stmt1, stmt2)

=> FUNC-DEP (func1, func2)

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

DOM-MODIFY (b, click, functionB)

DATA-DEP (30, 13)

FUNC-DEP (functionB,

makeSomeNoise)

New Relationship

14

Page 31: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Rule

DOM-MODIFY (v1, e1, func1) & DOM-MODIFY

(v2, e2, func2) & FUNC-DEP (func1, func2)

=> DOM-TEMP-DEP (v1, e1, v2, e2)

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

DOM-MODIFY (b, click, functionB)

DATA-DEP (30, 13)

FUNC-DEP (functionB,

makeSomeNoise)

DOM-TEMP-DEP

(b, click, c, click)

New Relationship

14

Page 32: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Rule:

DOM-TEMP-DEP (v1, e1, v2, e2)

& DOM (v1, d1) & DOM (v2, d2)

=> DOM-DEP (d1, e1, d2, e2)

DOM (b, test2)

test2 test3

DOM (c, test3)

READ (x, 13)

STMT (13, makeSomeNoise)

DOM-MODIFY (c, click, makeSomeNoise)

WRITE (x, 30)

STMT (30, functionB)

DOM-MODIFY (b, click, functionB)

DATA-DEP (30, 13)

FUNC-DEP (functionB,

makeSomeNoise)

DOM-TEMP-DEP

(b, click, c, click)

DOM-DEP

(test2, click, test3, click)

New Relationship

14

Page 33: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

JS files Normalized CFGDatalog

Facts

Datalog

Rules

JS_WALA

Z3 fixed-point

engine

DOM-event

Dependency

Dom-event dependency Analysis

Artemis (modified)

More efficient !!!Web application

15

Page 34: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Run it!

Pick one

Generate new sequences

Adds them to the worklist

e1

e2

e3

e4

e1-e1e1-e2e1-e3e1-e4

e1-e1e1-e2e1-e3e1-e4

Each iteration

16

Page 35: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Pick one

Generate new sequences

Adds them to the worklist

e1

e2

e3

e4

e2-e1e2-e2e2-e3e2-e4

e1-e1e1-e2e1-e3e1-e4

Each iteration

16

Page 36: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Run it!

Pick one

Generate new sequences

Filter them with

dependency

information

e1

e2

e3

e4

e1-e1e1-e2e1-e3e1-e4

e1-e3e1-e4

Each iteration

17

DOM dependency

information

(e1->e3, e1->e4)

Page 37: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Run it!

Pick one

Generate new sequences

Filter them with

dependency

information

e1

e2

e3

e4

e1-e1e1-e2e1-e3e1-e4

e1-e3e1-e4

Each iteration

17

DOM dependency

information

(e1->e3, e1->e4)

Page 38: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

18

Summary

Num. of Benchmarks 21

Total LOC 18,599 lines

Maximum Deps. 3,898

Calculated Deps. 2,120

Constraints 50,246

Analysis time 50.11 s

↓46%

Page 39: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

19

60%

80%

100 200 300 400 500

Artemis Artemis + Jsdep

branch coverage w.r.t. the number of iterations

Page 40: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

20

branch coverage after testing for 10 mins

65%

70%

75%

80%

85%

Artemis Artemis + Jsdep

Page 41: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

21

Proposed a static analysis method for computing

“DOM-event dependency”

Leveraged results of the static analysis to improve

Artemis (web testing tool)

Demonstrated the significant performance

improvements

Page 42: HTML · 2020. 3. 11. · (test2, click, test3, click) New Relationship 14. JS files Normalized CFG Datalog Facts Datalog Rules JS_WALA Z3 fixed-point engine DOM-event Dependency Dom-event

Thank you!

https://github.com/sch8906

22