52
Nagyméretű forráskódtárak inkrementális statikus analízise konzulensek: Szárnyas Gábor Dr. Ráth István 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, BSc

Nagyméretű forráskódtárak inkrementális statikus analízise

Embed Size (px)

Citation preview

Page 1: Nagyméretű forráskódtárak inkrementális statikus analízise

Nagyméretű forráskódtárakinkrementális statikus analízise

konzulensek: Szárnyas GáborDr. Ráth István

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, BSc

Page 2: Nagyméretű forráskódtárak inkrementális 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

2

Verziókezelés

Fordítás

Fejlesztés

Egység- és integrációs teszt

Page 3: Nagyméretű forráskódtárak inkrementális 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égez

– FI mellett vagy részeként alkalmazandó

– Kódmintaillesztést használunk

3

Verziókezelés

Fordítás

Fejlesztés

Egység- és integrációs teszt

Kódanalízis

Page 4: Nagyméretű forráskódtárak inkrementális statikus analízise

– A kódanalízis erőforrás- és időigényes folyamat

– Lassú, nem alkalmazható FI-szerű ütemezéssel

Megoldandó probléma

4

egységteszt

kódanalízis

☼ ☆☾☆

Page 5: Nagyméretű forráskódtárak inkrementális statikus analízise

– A kódanalízis erőforrás- és időigényes folyamat

– Lassú, nem alkalmazható FI-szerű ütemezéssel

– Átmeneti megoldás: tömbösítés

Megoldandó probléma

5

egységteszt

kódanalízis

☼ ☆☾☆

egységteszt

kódanalízis

Page 6: Nagyméretű forráskódtárak inkrementális statikus analízise

– A kódanalízis erőforrás- és időigényes folyamat

– 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

6

egységteszt

kódanalízis

☼ ☆☾☆

egységteszt

kódanalízis

Page 7: Nagyméretű forráskódtárak inkrementális statikus analízise

A bemutatott megoldás

–Inkrementális elvet alkalmazunk

A számított eredményt csak a későbbi

változás hatásával frissítjük.

–Projekt helyett fájl szintű feldolgozás

–Későbbi skálázhatóságot,

eloszthatóságot figyelembe véve terveztük

7

kódanalizátor

Δ2.-1.1.

Page 8: Nagyméretű forráskódtárak inkrementális statikus analízise

Architektúra áttekintés

8

Munkaterület Függőségigráf

Absztraktszintaxis gráf

Jólformáltságiszabályok

Lekérdezés futtatása Adatbázis

Main.java | ++----Dependency.jar | +++++-FIterator.java | ----Cparser.java | ++

Automatikusjólformáltsági

szabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

. jamoppdiscoverer ChangeProcessor.java CommandParser.java FileIterator.java iterators DepCollector.java FileDiscoverer.java InitIterator.java Main.java whitepages ConnectionMgr.java DependencyMgr.java pojo Dependency.jar

.jar

.java

Kiértékelési jelentés

<!><?>

<.>

JaMoPP

Verzió-kezelő

Page 9: Nagyméretű forráskódtárak inkrementális statikus analízise

Architektúra áttekintés

9

Munkaterület Függőségigráf

Absztraktszintaxis gráf

Jólformáltságiszabályok

Lekérdezés futtatása Adatbázis

Main.java | ++----Dependency.jar | +++++-FIterator.java | ----Cparser.java | ++

Automatikusjólformáltsági

szabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

. jamoppdiscoverer ChangeProcessor.java CommandParser.java FileIterator.java iterators DepCollector.java FileDiscoverer.java InitIterator.java Main.java whitepages ConnectionMgr.java DependencyMgr.java pojo Dependency.jar

.jar

.java

Kiértékelési jelentés

<!><?>

<.>

JaMoPP

Verzió-kezelő

Page 10: Nagyméretű forráskódtárak inkrementális statikus analízise

Architektúra áttekintés

10

Munkaterület Függőségigráf

Absztraktszintaxis gráf

Jólformáltságiszabályok

Lekérdezés futtatása Adatbázis

Main.java | ++----Dependency.jar | +++++-FIterator.java | ----Cparser.java | ++

Automatikusjólformáltsági

szabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

. jamoppdiscoverer ChangeProcessor.java CommandParser.java FileIterator.java iterators DepCollector.java FileDiscoverer.java InitIterator.java Main.java whitepages ConnectionMgr.java DependencyMgr.java pojo Dependency.jar

.jar

.java

Kiértékelési jelentés

<!><?>

<.>

JaMoPP

Verzió-kezelő

Page 11: Nagyméretű forráskódtárak inkrementális statikus analízise

Architektúra áttekintés

11

Munkaterület Függőségigráf

Absztraktszintaxis gráf

Jólformáltságiszabályok

Lekérdezés futtatása Adatbázis

Main.java | ++----Dependency.jar | +++++-FIterator.java | ----Cparser.java | ++

Automatikusjólformáltsági

szabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

. jamoppdiscoverer ChangeProcessor.java CommandParser.java FileIterator.java iterators DepCollector.java FileDiscoverer.java InitIterator.java Main.java whitepages ConnectionMgr.java DependencyMgr.java pojo Dependency.jar

.jar

.java

Kiértékelési jelentés

<!><?>

<.>

JaMoPP

Verzió-kezelő

Page 12: Nagyméretű forráskódtárak inkrementális statikus analízise

Munkaterület

Main.java | ++----Dependency.jar | +++++-FIterator.java | ----Cparser.java | ++

. jamoppdiscoverer ChangeProcessor.java CommandParser.java FileIterator.java iterators DepCollector.java FileDiscoverer.java InitIterator.java Main.java whitepages ConnectionMgr.java DependencyMgr.java pojo Dependency.jar

Verzió-kezelő

Architektúra verziókövetés

–Verziókezelőre épül

– Követi a fájlok változását, illetve az elágazó fejlesztési ágakat

– Lekérdezhető a fájlok pillanatnyi állapota és a verziók közötti módosítások listája

–Munkaterület-központú

– Projekt forrása

– Függőségek forrása(amennyiben elérhető)

12

Page 13: Nagyméretű forráskódtárak inkrementális statikus analízise

Függőségigráf

Absztraktszintaxis gráf

.jar

.java

JaMoPP

Architektúra átalakítás

–Függőségi gráf

– Segédkomponens a későbbi feldolgozáshoz

– A gráf élei a Java függőségeknek megfeleltethetők

–Absztrakt szintaxis gráf

– A projektet modellé, majd azt gráffá alakítjuk

13

Page 14: Nagyméretű forráskódtárak inkrementális statikus analízise

Függőségigráf

Absztraktszintaxis gráf

.jar

.java

JaMoPP

Architektúra átalakítás

–Függőségi gráf

– Segédkomponens a későbbi feldolgozáshoz

– A gráf élei a Java függőségeknek megfeleltethetők

–Absztrakt szintaxis gráf

– A projektet modellé, majd azt gráffá alakítjuk

14

Minden fájlra leírók gyűjtése és tárolása:package, szükséges fordítási egységek, stb.

Minden további alrendszer számára elérhető információval szolgál

Page 15: Nagyméretű forráskódtárak inkrementális statikus analízise

Függőségigráf

Absztraktszintaxis gráf

.jar

.java

JaMoPP

Architektúra átalakítás

–Függőségi gráf

– Segédkomponens a későbbi feldolgozáshoz

– A gráf élei a Java függőségeknek megfeleltethetők

–Absztrakt szintaxis gráf

– A projektet modellé, majd azt gráffá alakítjuk

15

Page 16: Nagyméretű forráskódtárak inkrementális statikus analízise

Függőségigráf

Absztraktszintaxis gráf

.jar

.java

JaMoPP

Architektúra átalakítás

–Függőségi gráf

– Segédkomponens a későbbi feldolgozáshoz

– A gráf élei a Java függőségeknek megfeleltethetők

–Absztrakt szintaxis gráf

– A projektet modellé, majd azt gráffá alakítjuk

16

A forráskód struktúrájának gráf reprezentációja

Nem tartalmaz minden információt

Részgráfokból állítjuk elő a teljes gráfot

Page 17: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

17

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Page 18: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

18

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Gráfadatbázis

Technológiai választásunk: 4store

Elasztikusan skálázódik

Page 19: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

19

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Page 20: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

20

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Gráfmintaként (SPARQL nyelven) megfogalmazott kódminták

Lekérdezések végrehajtása(akár inkrementálisan)

Jelentés előállítása (vagy frissítése)

Page 21: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

21

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Gráfmintaként (SPARQL nyelven) megfogalmazott kódminták

Lekérdezések végrehajtása(akár inkrementálisan)

Jelentés előállítása (vagy frissítése)

ASG-n értelmezett minta

Informális specifikáció

Page 22: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

22

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Gráfmintaként (SPARQL nyelven) megfogalmazott kódminták

Lekérdezések végrehajtása(akár inkrementálisan)

Jelentés előállítása (vagy frissítése)

Page 23: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

23

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Visszajelzés a felhasználónak

Felsorolja a szabályokat megszegő kódrészleteket

Gráfmintaként (SPARQL nyelven) megfogalmazott kódminták

Lekérdezések végrehajtása(akár inkrementálisan)

Jelentés előállítása (vagy frissítése)

Page 24: Nagyméretű forráskódtárak inkrementális statikus analízise

Jólformáltságiszabályok

Lekérdezés futtatása AdatbázisAutomatikus

jólformáltságiszabály kiértékelés

Kézi futtatásés kiértékelés

Automatikustöbbszörözés és elosztás

Kiértékelési jelentés

<!><?>

<.>

Architektúra modellfeldolgozás

Felhasználói ki-és bemenet

24

Felhasználói bemenet kiértékelése és kimenet

előállítása

Adattárolás és lekérdezés-végrehajtás

Gráfmintaként (SPARQL nyelven) megfogalmazott kódminták

Lekérdezések végrehajtása(akár inkrementálisan)

Jelentés előállítása (vagy frissítése)

Page 25: Nagyméretű forráskódtárak inkrementális statikus analízise

Példa forráskód

public static String toMonth(int month) {switch (month) {

case 1: return "January";case 2: return "February";case 3: return "March";case 4: return "April";case 5: return "May";case 6: return "June";case 7: return "July";case 8: return "August";case 9: return "September";case 10: return "October";case 11: return "November";case 12: return "December";default: return "Invalid month";

}}

25Bemeneti forráskód (részlet) Kódmodell (részlet)

Page 26: Nagyméretű forráskódtárak inkrementális statikus analízise

Példa forráskód

public static String toMonth(int month) {switch (month) {

case 1: return "January";case 2: return "February";case 3: return "March";case 4: return "April";case 5: return "May";case 6: return "June";case 7: return "July";case 8: return "August";case 9: return "September";case 10: return "October";case 11: return "November";case 12: return "December";default: return "Invalid month";

}}

26Bemeneti forráskód (részlet) Kódmodell (részlet)

Page 27: Nagyméretű forráskódtárak inkrementális statikus analízise

Példa forráskód

public static String toMonth(int month) {switch (month) {

case 1: return "January";case 2: return "February";case 3: return "March";case 4: return "April";case 5: return "May";case 6: return "June";case 7: return "July";case 8: return "August";case 9: return "September";case 10: return "October";case 11: return "November";case 12: return "December";default: return "Invalid month";

}}

27Bemeneti forráskód (részlet) Kódmodell (részlet)

Page 28: Nagyméretű forráskódtárak inkrementális statikus analízise

Példa forráskód

public static String toMonth(int month) {switch (month) {

case 1: return "January";case 2: return "February";case 3: return "March";case 4: return "April";case 5: return "May";case 6: return "June";case 7: return "July";case 8: return "August";case 9: return "September";case 10: return "October";case 11: return "November";case 12: return "December";default: return "Invalid month";

}}

28Bemeneti forráskód (részlet) Kódmodell (részlet)

Page 29: Nagyméretű forráskódtárak inkrementális statikus analízise

Példa forráskód

public static String toMonth(int month) {switch (month) {

case 1: return "January";case 2: return "February";case 3: return "March";case 4: return "April";case 5: return "May";case 6: return "June";case 7: return "July";case 8: return "August";case 9: return "September";case 10: return "October";case 11: return "November";case 12: return "December";default: return "Invalid month";

}}

29Bemeneti forráskód (részlet) Kódmodell (részlet)

Page 30: Nagyméretű forráskódtárak inkrementális statikus analízise

switch:Switch

...january

:NormalSwitchCase

december

:NormalSwitchCase

#//Switch/cases

#//Switch/variablemonth

:IdentifierReference

Példa gráfminta

30

sw: Switch

sc: DefaultSwitchCase

cases

Default ág nélküli switch-eket kereső gráfminta

Absztrakt szintaxis gráf (részlet) Gráfminta-illeszkedési találatok:

Page 31: Nagyméretű forráskódtárak inkrementális statikus analízise

switch:Switch

...january

:NormalSwitchCase

december

:NormalSwitchCase

#//Switch/cases

#//Switch/variablemonth

:IdentifierReference

Példa gráfminta

31

sw: Switch

sc: DefaultSwitchCase

cases

Default ág nélküli switch-eket kereső gráfminta

Absztrakt szintaxis gráf (részlet) Gráfminta-illeszkedési találatok: switch :Switch

Page 32: Nagyméretű forráskódtárak inkrementális statikus analízise

switch:Switch

...january

:NormalSwitchCase

december

:NormalSwitchCase

default

:DefaultSwitchCase

#//Switch/cases

#//Switch/variablemonth

:IdentifierReference

Példa gráfminta

32

sw: Switch

sc: DefaultSwitchCase

cases

Default ág nélküli switch-eket kereső gráfminta

Absztrakt szintaxis gráf (részlet) Gráfminta-illeszkedési találatok: switch :Switch

Page 33: Nagyméretű forráskódtárak inkrementális statikus analízise

switch:Switch

...january

:NormalSwitchCase

december

:NormalSwitchCase

default

:DefaultSwitchCase

#//Switch/cases

#//Switch/variablemonth

:IdentifierReference

Példa gráfminta

33

sw: Switch

sc: DefaultSwitchCase

cases

Default ág nélküli switch-eket kereső gráfminta

Absztrakt szintaxis gráf (részlet) Gráfminta-illeszkedési találatok:

Page 34: Nagyméretű forráskódtárak inkrementális statikus analízise

Mérési kiértékelés

–Kiértékelő teljesítménymérés

– Az egyes fázisok egymáshoz viszonyított futási idejét vizsgáljuk

– Különböző méretű, nyílt forráskódú projekteken végezzük el az analízist

– Alap (teljes projekt) és módosítás inkrementális feldolgozását mérjük

–Mérési környezet: publikus felhő, elosztott adatbázissal

34

Forrás projekt Kódsorok száma Fájlok száma

Physhun 4 227 53

Java DjVu 41 497 69

Xalan 338 316 907

Page 35: Nagyméretű forráskódtárak inkrementális statikus analízise

92.18

425.79

2 378.25

1

10

100

1000

Physhun

4 227 / 35

Java DjVu

41 497 / 69

Xalan

338 316 / 907

Teljes

feld

olg

ozá

si id

ő [

s]

(FG

, A

SG

, m

enté

s, l

ekér

dez

és)

Projektek

forrás sorok száma / fájlok száma

Mérési eredmények

35

Page 36: Nagyméretű forráskódtárak inkrementális statikus analízise

92.18

425.79

2 378.25

1

10

100

1000

Physhun

4 227 / 35

Java DjVu

41 497 / 69

Xalan

338 316 / 907

Teljes

feld

olg

ozá

si id

ő [

s]

(FG

, A

SG

, m

enté

s, l

ekér

dez

és)

Projektek

forrás sorok száma / fájlok száma

Mérési eredmények

36

Page 37: Nagyméretű forráskódtárak inkrementális statikus analízise

1 555

345 951

27 535

213

966

23 354 27 870

201

100

1000

10000

100000

1000000

10000000

Függőségi gráf

építése

Absztrakt szintaxisgráf

összeállítása

Modell

tárolása

Lekérdezések

futtatása

Fázi

s fu

tási

id

eje

[m

s]

Első, teljes futtatás

Módosítás inkrementális feldolgozásaNagyságrendi

különbség

Mérési eredmények inkrementális

37

Page 38: Nagyméretű forráskódtárak inkrementális statikus analízise

1 555

345 951

27 535

213

966

23 354 27 870

201

100

1000

10000

100000

1000000

10000000

Függőségi gráf

építése

Absztrakt szintaxisgráf

összeállítása

Modell

tárolása

Lekérdezések

futtatása

Fázi

s fu

tási

id

eje

[m

s]

Első, teljes futtatás

Módosítás inkrementális feldolgozásaNagyságrendi

különbség

Mérési eredmények inkrementális

38

-85%

Page 39: Nagyméretű forráskódtárak inkrementális statikus analízise

4.09 8.42

4.35

2.14

28.36

52.19

375.04

1 10 100 1000

FindBugs

PMD

Checkstyle

Columbus

inkr. ISAaC

ISAaC

Teljes futási idő [s]

Fordítás

Analízis

Mérési eredmények összehasonlítva

39

Page 40: Nagyméretű forráskódtárak inkrementális statikus analízise

Összefoglalás

– Szabványos formátumok és cserélhető komponensek

– Java forráskód átalakítása RDF gráffá, akár elosztott megközelítéssel

– Az elkészített gráf inkrementális frissítése is megoldott

– Moduláris, bővíthető és skálázható

inkrementális statikus analízis

keretrendszert készítettem

– Java forrást RDF gráffá alakító

segédeszközt implementáltam

– Benchmark funkciókkal bővítettem

a keretrendszert és méréseket

végeztem

40

Újszerű megközelítés az inkrementális statikus analízishez:

Page 41: Nagyméretű forráskódtárak inkrementális statikus analízise

Továbbfejlesztési lehetőségek

– Inkrementális analízis INCQUERY-D használatával

– Feldolgozás granularitásának javítása minden fázisban

– Keretrendszer elosztottá tétele

41

Átalakítás és perzisztálás

Munkaterület beállítása

Függőségek felderítése

Lekérdezések futtatása

Szerver 1

Szerver 2

Szerver 3

Szerver 4

Szerver 1

Szerver 2

Szerver 3

Szerver 4

Szerver 1

Szerver 2

Szerver 3

Szerver 4

Sz. 1

Sz. 2

Sz. 3

Sz. 4

Á P

Á P

Á P

Á P

L1 L2

L3

L4 L5

L6

Page 42: Nagyméretű forráskódtárak inkrementális statikus analízise

Összefoglalás

– Szabványos formátumok és cserélhető komponensek

– Java forráskód átalakítása RDF gráffá, akár elosztott megközelítéssel

– Az elkészített gráf inkrementális frissítése is megoldott

A dolgozat eredményei a MONDO EU-FP7 kutatási projekthez kapcsolódnak, annak egyik demonstrátorát képezik.

42

Újszerű megközelítés az inkrementális statikus analízishez:

Page 43: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

A dolgozat említi, hogy a JaMoPP Java 5 támogatása az újabb verziójú Java kódok elemzését nem teszi lehetővé. Van lehetőség ennek a komponensnek a lecserélésére? Milyen alternatív megoldásokat vizsgált meg?

– Réteges az architektúra, a komponens cserélhető, de jobb jelölt nincs jelenleg nincs.

– A metamodell bővíthető, de sok munka lenne. Az újabb verziójú kódot is feldolgozza, de nem hibamentesen.

– Alternatívák:

– MoDisco (projekt szintű feldolgozás, de átalakítható)

– Columbus (zárt forráskódú, viszont JaMoPP-hoz jobban hasonlít)43

Page 44: Nagyméretű forráskódtárak inkrementális statikus analízise

Többször említésre kerül az adatbázis alapú tárolás által lehetővé tett elosztott ellenőrzés lehetősége. Milyen tényezőket érdemes egy ilyen megoldásnak a teljesítménybeli és pénzügyi hatékonyságágának megtervezéséhez figyelembe venni?

– Használt tárterület

– A forráskód XMI modellje ~2-5×.

– Az RDF sorosítás ~4-10×.

– Az adatbázis viszont tömörítheti a sokszor ismétlődő szövegrészleteket (pl. URI, attribútum).

– Elérési sebesség

– Több adatbázis szerver gyorsíthatja az olvasást, keresést (de ez nem lassú).

– Az írási és szinkronizációs sebesség viszont csökkenhet.

Bírálói kérdések

44

Page 45: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

A már létező ellenőrző eszközökhöz nagy számú szabály áll rendelkezésre. Milyen csoportokra lehetne osztani ezeket a szabályokat az esetleges migráció megtervezésekor technológia és bonyolultság szerint? Esetleg minden szabály átírása egyértelmű? Mekkora feladatot jelentene pl. a PMD-hez rendelkezésre álló szabályok átírása?

– A mintaalapú megközelítés (PMD) könnyebben átírható. A metamodellekkülönbsége miatt kézzel kell feldolgozni, de JDT AST-szerű mindkét metamodell.

– Az IncQuery-D használatával bonyolultabb lekérdezések (pl. count) megvalósítható, nem csak mintaillesztés.

– Csoportra példa:sorrend alapú minta (nem az utolsó case a default), ami RDF esetén nehezebben megoldható. 45

Page 46: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

A forráskódban fellelhető hibákon kívül nagy projekteknél komoly problémát jelent, ha egy adott library-nek több verziója is jelen van futás közben. Ezt a build rendszerek, pl. Maven, Gradle, explicit kizárásokkal, felülírásokkal és további “trükkökkel” próbálják orvosolni. Volna lehetőség ilyen jellegű problémák kimutatására a keretrendszer kiterjesztésével? Milyen módon lehetne ezt implementálni?

– A keretrendszer nem pont erre lett kialakítva, a classpath kezdetleges.

– Library függésével, függőségi és hatásanalízissel Csikós Donát foglalkozott, az ő munkáját lehetne követni.

– Több library kezelése megoldható a keretrendszer paraméterezésével és a projektek verziókezelt mentésével. Ehhez átdolgozott mentési stratégia szükséges.

46

Page 47: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

Hogyan hasonlítható össze a készített ISAaC rendszer egy olyan rendszerrel hatékonyság szempontjából, amely egy meglévő statikus kódanalizátort futtat a megváltozott fájlokon (és ezek függőségi lezártján)?

– FindBugs és PMD analizátorok integrálása a benchmark rendszerbe

– Találatok ellenőrzése

– Vagy nem használjuk fel a változások listáját (teljes futtatás)

– Vagy a modosítás függőségi lezártján futtatjuk az ellenőrzést

– Befolyásolhatja a mérés hűségét, hogy a lezárt alatt ugyanazt érti-e a másik szoftver fejlesztője, mint a mi megoldásunkban

47

Page 48: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

Jelenlegi granularitás a fájl, mint egység, ami jóval nagyobb lehet, mint a "changeset". Mi a praktikusan elérhető legkisebb granularitás?

– JaMoPP esetén a feldolgozás fájlonként történik, ennél kisebb egység nem vizsgálható.

– Azonban hatásanalízis használatával a szükséges feldolgozandó fájlok száma csökkenthető.

– Modellösszehasonlító használatával AST node szintig levihető a granularitás.

48

Page 49: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

Kb. mennyi, az inkrementális mivoltából fakadó extra tárhelyet használ a rendszer a példában szereplő projektek esetén?

– Az inkrementális feldolgozáshoz csak a módosítás előtti szerializált részgráfot tároljuk el.

– Egy fájlhoz tehát legfeljebb a gráf formátumban tárolt modell méretének kétszerese szükséges.

– A szövegesen tárolt gráf tömöríthető.

49

Page 50: Nagyméretű forráskódtárak inkrementális statikus analízise

Bírálói kérdések

Mi szükséges a Java mellett más nyelvek támogatásához?

– A JaMoPP-hoz hasonló parser, ami képes a Java forrásból programmatikusan feldolgozható példánymodellt készíteni.

– Szükséges, hogy a fájlok közti hivatkozás részenként sorosíthatólegyen, egyértelmű, hierarchikus azonosítókkal.

projects://ISAaC/src/Teszt.java#//@statements.0/@...

50

Page 51: Nagyméretű forráskódtárak inkrementális statikus analízise

1.49 1.95

11.42

81.8

395.6

2 110.8

8.73

28.01

255.79

1

10

100

1000

Physhun

4 227

Java DjVu

41 497

Xalan

338 316

Szü

kség

es

idő

[s]

Függőségi gráf építése

Absztrakt szintaxisgráf összeállítása

Modell tárolása

Mérési eredmények

51

Page 52: Nagyméretű forráskódtárak inkrementális statikus analízise

1.49 1.95 11.42

81.79

395.61

2 110.82

8.73

28.01

255.79

0

500

1000

1500

2000

2500

Physhun

4 227

Java DjVu

41 497

Xalan

338 316

Tim

e [

s]

Persisting the ASG

Transforming the Code into an ASG

Building the Dependency Graph

Mérési eredmények

52