View
38
Download
0
Category
Preview:
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
– 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
– 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.
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 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 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 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 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
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 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 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
Recommended