90
Forráskódtárak gráfalapú statikus analízise Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Hibatűrő Rendszerek Kutatócsoport Stein Dániel

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

Embed Size (px)

Citation preview

Page 1: Forráskódtárak gráfalapú statikus analízise

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

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

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

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

5

Apple,https://blog.codecentric.de/en/2014/02/curly-braces/

Page 6: Forráskódtárak gráfalapú statikus analízise

5

Apple,https://blog.codecentric.de/en/2014/02/curly-braces/

Page 7: Forráskódtárak gráfalapú statikus analízise

5

hupsz

Apple,https://blog.codecentric.de/en/2014/02/curly-braces/

Page 8: Forráskódtárak gráfalapú statikus analízise

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

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

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

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

– 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

– 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

– 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AST vs ASG

15

Page 38: Forráskódtárak gráfalapú statikus analízise

AST vs ASG

15

Page 39: Forráskódtárak gráfalapú statikus analízise

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

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

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

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

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

Folyamat áttekintés

17

Page 45: Forráskódtárak gráfalapú statikus analízise

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

É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

Észrevételek MERGE

25

3 1

Page 81: Forráskódtárak gráfalapú statikus analízise

É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

É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

Észrevételek if-then-else

27

Page 84: Forráskódtárak gráfalapú statikus analízise

Észrevételek if-then-else

28∞ vs 15 sec

Page 85: Forráskódtárak gráfalapú statikus analízise

Észrevételek if-then-else

28∞ vs 15 sec

Page 86: Forráskódtárak gráfalapú statikus analízise

É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

É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

É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

Ö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

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