56
JavaScript forráskódtárak gráfalapú statikus analízise Stein Dániel Diplomatervezés 1., MSc Szárnyas Gábor (MIT), Lippai Ádám (Tresorit) Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Hibatűrő Rendszerek Kutatócsoport

JavaScript forráskódtárak gráfalapú statikus analízise

Embed Size (px)

Citation preview

JavaScript forráskódtárakgráfalapú statikus analízise

Stein DánielDiplomatervezés 1., MScSzárnyas Gábor (MIT), Lippai Ádám (Tresorit)

Budapesti Műszaki és Gazdaságtudományi EgyetemMéréstechnika és Információs Rendszerek Tanszék

Hibatűrő Rendszerek Kutatócsoport

„JavaScript forráskódtárak…”

2 2

– Nem csak weboldalak programozására

– Szerverek (node.js)

– Adatbázisok (Apache CouchDB)

– Cross-platform alkalmazások (Spotify, Atom, VSC)

„JavaScript forráskódtárak…”

2 3

– Nem csak weboldalak programozására

– Szerverek (node.js)

– Adatbázisok (Apache CouchDB)

– Cross-platform alkalmazások (Spotify, Atom, VSC)

– „Lightweight”, interpretált nyelv

„JavaScript forráskódtárak…”

2 4

– Nem csak weboldalak programozására

– Szerverek (node.js)

– Adatbázisok (Apache CouchDB)

– Cross-platform alkalmazások (Spotify, Atom, VSC)

– „Lightweight”, interpretált nyelv

– Prototípusalapú, nem tipizált, dinamikus

szkriptnyelv

„JavaScript forráskódtárak…”

2 5

– Nem csak weboldalak programozására

– Szerverek (node.js)

– Adatbázisok (Apache CouchDB)

– Cross-platform alkalmazások (Spotify, Atom, VSC)

– „Lightweight”, interpretált nyelv

– Prototípusalapú, nem tipizált, dinamikus

szkriptnyelv

– Több paradigmájú (OO, imperatív,

deklaratív)

„JavaScript forráskódtárak…”

2 6

ECMAScript 2015

3 7

– Majdnem egy éves specifikáció

– Nem teljesen támogatott

– Használatához transzformáció ajánlott

ECMAScript 2015

3 8

– Majdnem egy éves specifikáció

– Nem teljesen támogatott

– Használatához transzformáció ajánlott

– Fontosabb újítások:

– Modulok, modul-betöltők

– Osztályok

– Promise-ok

ECMAScript 2015

3 9

– Majdnem egy éves specifikáció

– Nem teljesen támogatott

– Használatához transzformáció ajánlott

– Fontosabb újítások:

– Modulok, modul-betöltők

– Osztályok

– Promise-ok

ECMAScript 2015

3 10

Az újítások miatt (megkötésekkel)könnyebb elemezni.

„… statikus analízise”

4 11

A forráskódanalízis segítségéveltények tárhatók fel a programmal kapcsolatban.

„… statikus analízise”

4 12

A forráskódanalízis segítségéveltények tárhatók fel a programmal kapcsolatban.

Az automatizált analízis technikák:

„… statikus analízise”

4 13

A forráskódanalízis segítségéveltények tárhatók fel a programmal kapcsolatban.

Az automatizált analízis technikák:

– Statikus analízis

– fordítás, futtatás nélkül

„… statikus analízise”

4 14

A forráskódanalízis segítségéveltények tárhatók fel a programmal kapcsolatban.

Az automatizált analízis technikák:

– Statikus analízis

– fordítás, futtatás nélkül

– Dinamikus analízis

– viselkedés vizsgálata futtatás során

„… statikus analízise”

4 15

A forráskódanalízis segítségéveltények tárhatók fel a programmal kapcsolatban.

Az automatizált analízis technikák:

– Statikus analízis

– fordítás, futtatás nélkül

– Dinamikus analízis

– viselkedés vizsgálata futtatás során

„… statikus analízise”

4 16

A statikus analízis lényege

– nem kívánt tulajdonságok,

– problémás részek felfedezése,

– amit a fordító nem talál meg

A forráskódanalízis segítségéveltények tárhatók fel a programmal kapcsolatban.

Az automatizált analízis technikák:

– Statikus analízis

– fordítás, futtatás nélkül

– Dinamikus analízis

– viselkedés vizsgálata futtatás során

„… statikus analízise”

4 17

A statikus analízis lényege

– nem kívánt tulajdonságok,

– problémás részek felfedezése,

– amit a fordító nem talál meg

JavaScript kódbázisok eseténnem bevett szokás.

Kódfeldolgozás lépései

5 18

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

5 19

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

5 20

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Utasítások sorozata adott nyelven formalizálva.

Kódfeldolgozás lépései

5 21

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Utasítások sorozata adott nyelven formalizálva.

var foo = 1 / 0;

Kódfeldolgozás lépései

6 22

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

6 23

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

A tokenek a legrövidebb, még jelentéssel rendelkező karaktersorozatok.

Kódfeldolgozás lépései

6 24

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

A tokenek a legrövidebb, még jelentéssel rendelkező karaktersorozatok.

var foo = 1 / 0;

Kódfeldolgozás lépései

6 25

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Token Token típus

var VAR (Keyword)

foo IDENTIFIER (Ident)

= ASSIGN (Punctuator)

1 NUMBER (NumericLiteral)

/ DIV (Punctuator)

0 NUMBER (NumericLiteral)

A tokenek a legrövidebb, még jelentéssel rendelkező karaktersorozatok.

var foo = 1 / 0;

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

7 26

Module

declaration

declarators

items

binding init

left right

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Abstract Syntax Tree (AST)

– A tokenek sorozatának

– nyelvtani struktúrájának

– fa reprezentációja.

Kódfeldolgozás lépései

7 27

Module

declaration

declarators

items

binding init

left right

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

7 28

Module

declaration

declarators

items

binding init

left right

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

8 29

Module

declaration

declarators

items

binding init

left right

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

8 30

Module

declaration

declarators

items

binding init

left right

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

8 31

Module

declaration

declarators

items

binding init

left right

GlobalScope

variables

references

children

declarations

node

astNode

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Abstract Semantic Graph (ASG)

– Gráf, nem feltétlenül fa.

– Szintaktikai struktúramellett szemantikaiinformációt is hordoz.

– Tartalmazkeresztéleket →

– A részkifejezésekakár közösek is lehetnek.

Kódfeldolgozás lépései

8 32

Module

declaration

declarators

items

binding init

left right

GlobalScope

variables

references

children

declarations

node

astNode

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Kódfeldolgozás lépései

8 33

Module

declaration

declarators

items

binding init

left right

GlobalScope

variables

references

children

declarations

node

astNode

Gráfmintaillesztés

9 34

binding init

left right

Gráfmintaillesztés

9 35

binding init

left right

Gráfminta

– Deklaratív,

– gráfszerű formalizmus

– feltételek kifejezésére.

Gráfmintaillesztés

9 36

binding init

left right

Gráfminta

– Deklaratív,

– gráfszerű formalizmus

– feltételek kifejezésére.

MATCH (binding:BindingIdentifier)

<-[:binding]-()-->

(be:BinaryExpression)

-[:right]->(right:LNExpression)

Gráfmintaillesztés

9 37

binding init

left right

Gráfminta

– Deklaratív,

– gráfszerű formalizmus

– feltételek kifejezésére.

MATCH (binding:BindingIdentifier)

<-[:binding]-()-->

(be:BinaryExpression)

-[:right]->(right:LNExpression)

WHERE be.operator = `Div`

AND right.value = 0.0

Gráfmintaillesztés

9 38

Gráfminta

– Deklaratív,

– gráfszerű formalizmus

– feltételek kifejezésére.

Gráfminta lekérdezésCyphernyelvennullával történő osztás keresésére

MATCH (binding:BindingIdentifier)

<-[:binding]-()-->

(be:BinaryExpression)

-[:right]->(right:LNExpression)

WHERE be.operator = `Div`

AND right.value = 0.0

RETURN binding

Mintaillesztéseredménye

Folyamat áttekintés

10 39

Folyamat áttekintés

10 40

központiverziókezelő

rendszer

fejlesztőimunkaállomás

Git, Visual StudioCode

Folyamat áttekintés

10 41

központiverziókezelő

rendszer

fejlesztőimunkaállomás

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Git, Visual StudioCode ShapeSecurityShift

Folyamat áttekintés

10 42

központiverziókezelő

rendszer

transzformációfejlesztői

munkaállomás

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

Git, Visual StudioCode ShapeSecurityShift Java, Cypher

Folyamat áttekintés

10 43

központiverziókezelő

rendszer

transzformációfejlesztői

munkaállomás

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

gráfadatbázis

Git, Visual StudioCode ShapeSecurityShift Java, Cypher Neo4J

Folyamat áttekintés

10 44

központiverziókezelő

rendszer

transzformációfejlesztői

munkaállomás

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

feldolgozás

gráfadatbázis

Git, Visual StudioCode ShapeSecurityShift Java, Cypher Neo4J

Folyamat áttekintés

10 45

központiverziókezelő

rendszer

transzformációfejlesztői

munkaállomás

tokenizer

forráskód

tokenek

AST

ASG

parser

scope analyzer

feldolgozás

gráfadatbázis

Git, Visual StudioCode ShapeSecurityShift Java, Cypher Neo4J

– …

DEMO

11 46

– …

DEMO

11 47

– …

DEMO

Dead Code Search

– a kódbázis egészében nem használt

– export-on keresztül nem kiajánlott

– függvénydeklarációk

11 48

– …

DEMO

Dead Code Search

– a kódbázis egészében nem használt

– export-on keresztül nem kiajánlott

– függvénydeklarációk

Visual Studio Code integráció

– figyelmeztetések

– módosítás esetén újraellenőrzés

11 49

Összefoglalva

12 50

Összefoglalva

12 51

– Irodalomkutatás

– JS parserek

– Típuskövetkeztetők

– Gráf adatbázisok

Összefoglalva

12 52

– Irodalomkutatás

– JS parserek

– Típuskövetkeztetők

– Gráf adatbázisok

– Nyílt forráskódú projekthez járultam hozzá

Összefoglalva

12 53

– Irodalomkutatás

– JS parserek

– Típuskövetkeztetők

– Gráf adatbázisok

– Nyílt forráskódú projekthez járultam hozzá

– Elkészítettem egy prototípust

– Átalakítás, tárolás gráf adatbázisban

– Részgráfok összekapcsolása

– Nem használt függvények keresése

– IDE integráció

– Alap szintű típuskövetkeztető rendszer kezdetei

További feladatok

13 54

További feladatok

13 55

– Irodalomkutatás

– Típuskövetkeztetők elméleti hátterével mélyebb ismertség

– Statikus analízishez minták gyűjtése

További feladatok

13 56

– Irodalomkutatás

– Típuskövetkeztetők elméleti hátterével mélyebb ismertség

– Statikus analízishez minták gyűjtése

– Prototípus finomítása

– Export/import rendszer javítása

– IDE integráció javítása

– Típuskövetkeztető rendszer bővítése szabályokkal, felkészítés függvényekre