Download - Forráskódtárak gráfalapú statikus analízise
![Page 1: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/1.jpg)
Forráskódtárak gráfalapústatikus analízise
Budapesti Műszaki és Gazdaságtudományi EgyetemMéréstechnika és Információs Rendszerek Tanszék
Hibatűrő Rendszerek Kutatócsoport
Stein Dániel
![Page 2: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/2.jpg)
Projekt résztvevői
2
Lucz Tamás Soma– Honfi Dávid– Vörös András
Stein Dániel– Szárnyas Gábor Lippai Ádám
![Page 3: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/3.jpg)
Tartalom
1. Problémakör
2. Eszközök
3. Felhasználási lehetőségek
4. Neo4j tanulságok, példák
3
![Page 4: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/4.jpg)
Folytonos integráció (FI)
Continuous Integration (CI) – Több fejlesztő együttműködése
– Integrációs problémák megelőzése
– Például
– Jenkins
– Hudson
– Travis CI
4
Verziókezelés
Fordítás
Fejlesztés
Egység- és integrációs teszt
![Page 5: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/5.jpg)
5
Apple,https://blog.codecentric.de/en/2014/02/curly-braces/
![Page 6: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/6.jpg)
5
Apple,https://blog.codecentric.de/en/2014/02/curly-braces/
![Page 7: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/7.jpg)
5
hupsz
Apple,https://blog.codecentric.de/en/2014/02/curly-braces/
![Page 8: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/8.jpg)
Statikus analízis
– Nincs szükség a program fordítására és futtatására
– Alaki és strukturális jellegű szabályellenőrzést végzünk
– FI mellett vagy részeként alkalmazandó
– Egy lehetséges módja a kódanalízis, kódmintaillesztés
6
Verziókezelés
Fordítás
Fejlesztés
Egység- és integrációs teszt
Kódanalízis
![Page 9: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/9.jpg)
Statikus analízis
– Nincs szükség a program fordítására és futtatására
– Alaki és strukturális jellegű szabályellenőrzést végzünk
– FI mellett vagy részeként alkalmazandó
– Egy lehetséges módja a kódanalízis, kódmintaillesztés
6
Verziókezelés
Fordítás
Fejlesztés
Egység- és integrációs teszt
Kódanalízis
![Page 10: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/10.jpg)
Statikus analízis
– Nincs szükség a program fordítására és futtatására
– Alaki és strukturális jellegű szabályellenőrzést végzünk
– FI mellett vagy részeként alkalmazandó
– Egy lehetséges módja a kódanalízis, kódmintaillesztés
6
Verziókezelés
Fordítás
Fejlesztés
Egység- és integrációs teszt
Kódanalízis
– Java
– FindBugs
– PMD
– CheckStyle
![Page 11: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/11.jpg)
Statikus analízis
– Nincs szükség a program fordítására és futtatására
– Alaki és strukturális jellegű szabályellenőrzést végzünk
– FI mellett vagy részeként alkalmazandó
– Egy lehetséges módja a kódanalízis, kódmintaillesztés
6
Verziókezelés
Fordítás
Fejlesztés
Egység- és integrációs teszt
Kódanalízis
– Java
– FindBugs
– PMD
– CheckStyle
– JavaScript
– ESLint
– Facebook Infer, Flow
– Tern
– TAJS
![Page 12: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/12.jpg)
– A kódanalízis időigényes folyamat
– Nagy projektekre (100k+ LOC) lassú, nem
alkalmazható FI-szerű ütemezéssel
Megoldandó probléma
7
egységteszt
kódanalízis
☼ ☆☾☆
![Page 13: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/13.jpg)
– A kódanalízis időigényes folyamat
– Nagy projektekre (100k+ LOC) lassú, nem
alkalmazható FI-szerű ütemezéssel
– Átmeneti megoldás: tömbösítés
Megoldandó probléma
7
egységteszt
kódanalízis
☼ ☆☾☆
egységteszt
kódanalízis
![Page 14: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/14.jpg)
– A kódanalízis időigényes folyamat
– Nagy projektekre (100k+ LOC) lassú, nem
alkalmazható FI-szerű ütemezéssel
– Átmeneti megoldás: tömbösítés
Minél hamarabb,
minél gyorsabban
eredményt kell adni.
Megoldandó probléma
7
egységteszt
kódanalízis
☼ ☆☾☆
egységteszt
kódanalízis
![Page 15: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/15.jpg)
Megoldandó probléma
– Memóriakorlátba ütközhetünk...
– globális szabályok
– a struktúrát memóriában tárolva(in-memory megközelítés)
– nagy méretű kódbázisok ellenőrzésekor.
– Inkrementalitás hiánya
– Kötegelt feldolgozás
– Kisebb módosítás is teljes feldolgozást indukál
8
![Page 16: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/16.jpg)
A bemutatott megoldás
– Inkrementalitás elvét alkalmazzuk– Kötegelt feldolgozás helyett
– A módosítás hatásával frissítjük az eredményt
– A memóriában egyszerre csak a minimálisan szükséges részleteket tároljuk
9
kódanalizátor
Δ2.-1.1.
![Page 17: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/17.jpg)
VCS Workspace Abstact SyntaxTree
Abstract SemanticGraph
Well-formednessRules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
AutomaticWell-formedness
Rule Evaluation
Manual Executionand Data Extraction
Querying and Transformation
.
discoverer
ChangeProcessor.js
CommandParser.js
FileIterator.js
iterators
DepCollector.js
FileDiscoverer.js
InitIterator.js
Main.js
whitepages
ConnectionMgr.js
DependencyMgr.js
neo4jValidation Report
<!><?>
<.>
Module
declaration
declarators
items
binding init
left right
Architektúra áttekintés
10
![Page 18: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/18.jpg)
VCS Workspace Abstact SyntaxTree
Abstract SemanticGraph
Well-formednessRules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
AutomaticWell-formedness
Rule Evaluation
Manual Executionand Data Extraction
Querying and Transformation
.
discoverer
ChangeProcessor.js
CommandParser.js
FileIterator.js
iterators
DepCollector.js
FileDiscoverer.js
InitIterator.js
Main.js
whitepages
ConnectionMgr.js
DependencyMgr.js
neo4jValidation Report
<!><?>
<.>
Module
declaration
declarators
items
binding init
left right
Architektúra áttekintés
10
![Page 19: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/19.jpg)
VCS Workspace Abstact SyntaxTree
Abstract SemanticGraph
Well-formednessRules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
AutomaticWell-formedness
Rule Evaluation
Manual Executionand Data Extraction
Querying and Transformation
.
discoverer
ChangeProcessor.js
CommandParser.js
FileIterator.js
iterators
DepCollector.js
FileDiscoverer.js
InitIterator.js
Main.js
whitepages
ConnectionMgr.js
DependencyMgr.js
neo4jValidation Report
<!><?>
<.>
Module
declaration
declarators
items
binding init
left right
Architektúra áttekintés
10
![Page 20: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/20.jpg)
VCS Workspace Abstact SyntaxTree
Abstract SemanticGraph
Well-formednessRules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
AutomaticWell-formedness
Rule Evaluation
Manual Executionand Data Extraction
Querying and Transformation
.
discoverer
ChangeProcessor.js
CommandParser.js
FileIterator.js
iterators
DepCollector.js
FileDiscoverer.js
InitIterator.js
Main.js
whitepages
ConnectionMgr.js
DependencyMgr.js
neo4jValidation Report
<!><?>
<.>
Module
declaration
declarators
items
binding init
left right
Architektúra áttekintés
10
![Page 21: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/21.jpg)
Kódfeldolgozás lépései
21
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
![Page 22: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/22.jpg)
Kódfeldolgozás lépései
22
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
![Page 23: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/23.jpg)
Kódfeldolgozás lépései
23
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Utasítások sorozata
adott nyelven formalizálva.
![Page 24: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/24.jpg)
Kódfeldolgozás lépései
24
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Utasítások sorozata
adott nyelven formalizálva.
![Page 25: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/25.jpg)
Kódfeldolgozás lépései
25
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
![Page 26: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/26.jpg)
Kódfeldolgozás lépései
26
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
token – a legrövidebb, még jelentéssel rendelkező karaktersorozat
![Page 27: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/27.jpg)
Kódfeldolgozás lépései
27
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
token – a legrövidebb, még jelentéssel rendelkező karaktersorozat
![Page 28: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/28.jpg)
Kódfeldolgozás lépései
28
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Token Token típus
VAR (Keyword)
IDENTIFIER (Ident)
ASSIGN (Punctuator)
NUMBER (NumericLiteral)
DIV (Punctuator)
NUMBER (NumericLiteral)
token – a legrövidebb, még jelentéssel rendelkező karaktersorozat
![Page 29: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/29.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
13
Module
VariableDeclarationStatement
VariableDeclaration
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LiteralNumericExpressionvalue = 1.0
LiteralNumericExpressionvalue = 0.0
declaration
declarators
items
binding init
left right
![Page 30: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/30.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
13
Abstract Syntax Tree (AST)
– A tokenek sorozatának
– nyelvtani struktúrájának
– fa reprezentációja.
Module
VariableDeclarationStatement
VariableDeclaration
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LiteralNumericExpressionvalue = 1.0
LiteralNumericExpressionvalue = 0.0
declaration
declarators
items
binding init
left right
![Page 31: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/31.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
13
Module
VariableDeclarationStatement
VariableDeclaration
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LiteralNumericExpressionvalue = 1.0
LiteralNumericExpressionvalue = 0.0
declaration
declarators
items
binding init
left right
![Page 32: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/32.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
14
Module
declaration
declarators
items
binding init
left right
![Page 33: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/33.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
14
Module
declaration
declarators
items
binding init
left right
![Page 34: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/34.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
14
Module
declaration
declarators
items
binding init
left right
GlobalScope
variables
references
children
declarations
node
astNode
![Page 35: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/35.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépéseiAbstract 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.
14
Module
declaration
declarators
items
binding init
left right
GlobalScope
variables
references
children
declarations
node
astNode
![Page 36: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/36.jpg)
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Kódfeldolgozás lépései
14
Module
declaration
declarators
items
binding init
left right
GlobalScope
variables
references
children
declarations
node
astNode
![Page 37: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/37.jpg)
AST vs ASG
15
![Page 38: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/38.jpg)
AST vs ASG
15
![Page 39: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/39.jpg)
Gráfmintaillesztés
16
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LNExpressionvalue = 1.0
LNExpressionvalue = 0.0
![Page 40: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/40.jpg)
Gráfmintaillesztés
– Gráfminta
– Deklaratív,
– gráfszerű formalizmus
– feltételek kifejezésére.
16
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LNExpressionvalue = 1.0
LNExpressionvalue = 0.0
![Page 41: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/41.jpg)
Gráfmintaillesztés
– Gráfminta
– Deklaratív,
– gráfszerű formalizmus
– feltételek kifejezésére.
16
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LNExpressionvalue = 1.0
LNExpressionvalue = 0.0
binding be
right
![Page 42: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/42.jpg)
Gráfmintaillesztés
– Gráfminta
– Deklaratív,
– gráfszerű formalizmus
– feltételek kifejezésére.
16
VariableDeclarator
BindingIdentifiername = `foo`
BinaryExpressionoperator = `Div`
LNExpressionvalue = 1.0
LNExpressionvalue = 0.0
binding be
right
![Page 43: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/43.jpg)
Gráfmintaillesztés
– Gráfminta
– Deklaratív,
– gráfszerű formalizmus
– feltételek kifejezésére.
16
BindingIdentifiername = `foo`
Gráfminta lekérdezésCyphernyelvennullával történő osztás keresésére
binding
Mintaillesztéseredménye
![Page 44: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/44.jpg)
Folyamat áttekintés
17
![Page 45: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/45.jpg)
Folyamat áttekintés
17
központiverziókezelő
rendszer
fejlesztőimunkaállomás
Git, Visual StudioCode
![Page 46: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/46.jpg)
Folyamat áttekintés
17
központiverziókezelő
rendszer
fejlesztőimunkaállomás
tokenizer
forráskód
tokenek
AST
ASG
parser
scope analyzer
Git, Visual StudioCode ShapeSecurityShift
![Page 47: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/47.jpg)
Folyamat áttekintés
17
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
![Page 48: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/48.jpg)
Folyamat áttekintés
17
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
![Page 49: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/49.jpg)
Folyamat áttekintés
17
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
![Page 50: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/50.jpg)
Folyamat áttekintés
17
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
![Page 51: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/51.jpg)
Felhasználás statikus analízis
– Lokális hibaminták keresése(linter hibák)
– nélküli
keresése
– Többször változtatott
– Nem használt változó
– Globális lekérdezések
– Elérhetetlen kódrészlet
– Keretrendszer
– Tetszőlegesen bővíthető
– Cégszintű szabályok
– Egyszerűbben használható(nem visitor mintás megoldás)
18
![Page 52: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/52.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
![Page 53: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/53.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
![Page 54: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/54.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
![Page 55: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/55.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
if
![Page 56: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/56.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
if feltétel
![Page 57: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/57.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
utasítás utasítás
if feltétel
![Page 58: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/58.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
utasítás utasítás
if
utasítás
feltétel
![Page 59: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/59.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
utasítás utasítás
hiba
if
utasítás
feltétel
![Page 60: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/60.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
utasítás utasítás
utasítás
hiba
if
utasítás
feltétel
![Page 61: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/61.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
utasítás utasítás
utasítás
hiba
if
utasítás
feltétel
![Page 62: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/62.jpg)
Felhasználás transzformáció
Control Flow Graph (CFG)
– A program futása során
– elérhető összes utasítássorozat
– gráf reprezentációja.
19
utasítás
utasítás
utasítás utasítás
utasítás
hiba
if
kész
utasítás
feltétel
![Page 63: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/63.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 64: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/64.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 65: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/65.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 66: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/66.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 67: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/67.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 68: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/68.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 69: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/69.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 70: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/70.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 71: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/71.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 72: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/72.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 73: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/73.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 74: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/74.jpg)
hiba
Felhasználás tesztgenerálás
– Lefutási esetek vizsgálata
– Megadott feltételek mellett
– elérhető az adott utasítás?
– Melyik a legrövidebb út oda?
– Teszt paraméterek előállítása
20
utasítás
utasítás
utasítás utasítás
utasítás
if
kész
feltétel
utasítás
![Page 75: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/75.jpg)
Felhasználás típusanalízis
– Dinamikus nyelvek támogatása
– Python
– JavaScript / ECMAScript
21
![Page 76: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/76.jpg)
Felhasználás típusanalízis
– Dinamikus nyelvek támogatása
– Python
– JavaScript / ECMAScript
21
http://marijnhaverbeke.nl/blog/tern.html
![Page 77: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/77.jpg)
Felhasználás impakt analízis
– A folytonos integrációhoz igazodva
– Különböző branch-ek kezelése
– Branch-en belüli változások követése
– Fájlszintű inkrementális kiértékelés
– Fejlesztők számára differenciális visszajelzés
22
![Page 78: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/78.jpg)
Miért Neo4j?+++
– Gyors prototipizálás
– Tranzakciók támogatása
– Fejlett tooling
--
– Nem skálázható
– Csak diszk-alapú működés
23
![Page 79: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/79.jpg)
Észrevételek MERGE
– MATCH or CREATE
– Kényelmi szempontból nagyszerű
– Cserébe drága
– Lehetséges megoldások:
– MERGE-ök ritkítása
– Lekérdezések szétszedése
– Létrehozás, ha még nincs
– MERGE helyett MATCH
– Megelőzés
– Adatok felvételekor előkészítés
24
![Page 80: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/80.jpg)
Észrevételek MERGE
25
3 1
![Page 81: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/81.jpg)
Észrevételek if-then-else
– Nincs rá Cypher nyelvi elem
– Trükközéssel oldható meg
– Naggggggyon lassú
– Megoldás:
– Két kisebb, diszjunkt eset
26
![Page 82: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/82.jpg)
Észrevételek if-then-else
– Nincs rá Cypher nyelvi elem
– Trükközéssel oldható meg
– Naggggggyon lassú
– Megoldás:
– Két kisebb, diszjunkt eset
26
![Page 83: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/83.jpg)
Észrevételek if-then-else
27
![Page 84: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/84.jpg)
Észrevételek if-then-else
28∞ vs 15 sec
![Page 85: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/85.jpg)
Észrevételek if-then-else
28∞ vs 15 sec
![Page 86: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/86.jpg)
Észrevételek elérhetőség
– A korlátozás nélküli tranzitív
lezárt nem gyors
– A mintázatra illeszkedő
tranzitív lezárt trükközéssel
megoldható
29
A B
*
![Page 87: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/87.jpg)
Észrevételek elérhetőség
– A korlátozás nélküli tranzitív
lezárt nem gyors
– A mintázatra illeszkedő
tranzitív lezárt trükközéssel
megoldható
29
A B
*
![Page 88: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/88.jpg)
Észrevételek elérhetőség
– A korlátozás nélküli tranzitív
lezárt nem gyors
– A mintázatra illeszkedő
tranzitív lezárt trükközéssel
megoldható
29
A B
*
![Page 89: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/89.jpg)
Összefoglalás
– Forráskódelemző keretrendszer
– Globális hibaminták keresése
– Közel valós idejű visszajelzés
– Típusanalízis
– Tesztgenerálás
– Megközelítés dinamikus és nem dinamikus nyelvekhez
– Neo4j-t használva
– Tárolás
– Transzformáció
– Verziókezelés
– Mintaillesztés
– Metaadat-tár
30
![Page 90: Forráskódtárak gráfalapú statikus analízise](https://reader031.vdocuments.pub/reader031/viewer/2022030309/58f1c7691a28aba0588b45d1/html5/thumbnails/90.jpg)
Köszönetnyilvánítás
– Dr. Ráth István Zoltán
– Ujhelyi Zoltán
– Izsó Benedek
MTA-BME LendületKiberfizikiai RendszerekKutatócsoport
31