8. 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
9. 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
10. 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
11. 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
12. – 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
☼ ☆☾☆
13. – 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
14. – 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
15. 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
16. 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.
17. VCS Workspace Abstact Syntax
Tree
Abstract Semantic
Graph
Well-formedness
Rules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
Automatic
Well-formedness
Rule Evaluation
Manual Execution
and 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
18. VCS Workspace Abstact Syntax
Tree
Abstract Semantic
Graph
Well-formedness
Rules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
Automatic
Well-formedness
Rule Evaluation
Manual Execution
and 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
19. VCS Workspace Abstact Syntax
Tree
Abstract Semantic
Graph
Well-formedness
Rules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
Automatic
Well-formedness
Rule Evaluation
Manual Execution
and 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
20. VCS Workspace Abstact Syntax
Tree
Abstract Semantic
Graph
Well-formedness
Rules
Query Execution Database
Main.js | ++----
Dependency.js | +++++-
FIterator.js | ----
Parser.js | ++
Automatic
Well-formedness
Rule Evaluation
Manual Execution
and 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
56. 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
57. 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
58. 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
59. 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
60. 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
61. 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
62. 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
63. 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
64. 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
65. 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
66. 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
67. 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
68. 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
69. 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
70. 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
71. 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
72. 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
73. 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
74. 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
77. 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
78. 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
79. É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
86. É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
*
87. É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
*
88. É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
*
89. Ö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
90. Köszönetnyilvánítás
– Dr. Ráth István Zoltán
– Ujhelyi Zoltán
– Izsó Benedek
MTA-BME Lendület
Kiberfizikiai Rendszerek
Kutatócsoport
31