PhD

Áttekintés

A PhD fokozatomat informatikából szereztem 2017-ben, pár nappal a 40. születésnapom előtt. Hosszú és rögös út vezetett a fokozat megszerzéséig. Először 1999 nyarán, az egyetemi harmadik évem végén kerültem kapcsolatba a tudományos világgal. Dr. Gyimóthy Tibor vezetésével alakult egy csapat, mely egy új algoritmust alkotott meg, és ennek csiszolásában vettem részt, negyed- és ötödéves egyetemistaként. A témában több cikk is született, részben olyanok, amelyekben a nevem társszerzőként szerepelt. Természetes folytatás lett volna a PhD tanulmányok megkezdése, de végül - leginkább anyagi okok miatt - úgy döntöttem, hogy nem vágok bele.

Eltelt bő 10 év, amikor megfogant bennem a gondolat, hogy jó lenne valahogyan mégis folytatni a megkezdett munkát. Erőt éreztem magamban, hogy tudnám ezt munka mellett is végezni. Felelevenítettem a régi kapcsolati szálakat, és Dr. Ferenc Rudolf látott bennem fantáziát. Formális képzésre nem iratkoztam be, és úgy vágtam bele a feladatba 2012 tavaszán, hogy az egyetem Szegeden volt, én Nagykőrösön laktam, a munkahelyem pedig Budapesten volt, amit ráadásul pont akkor váltottam. Skype-on tartottuk a kapcsolatot. A kis csapatnak Hegedűs Péter is állandó tagja volt.

Az új kezdet nehéz volt, számos cikkünket visszadobtak, végül két év elteltével jelent meg az első. Ezt követően viszont sorban jöttek az eredmények és a cikkek is, végül 2016-ra értünk oda, hogy a munkát kerek egésznek láttuk. Megírtam a tézist, ugyanis egyéni felkészülőként kész disszertációval kell jelentkezni. A doktori szigorlatra több hónapig készültem, majd a sikeres védést követően summa cum laude minősítésű oklevelet kaptam.

Lássuk, miről szól a !

Programszeletelés

A feladat a következő: határozzuk meg, egy adott program sorra mely más program sorok vannak hatással. Ez egy nagy kutatási terület, a témában több ezer cikk született. Számos módszer létezik, melyeket attól függően, hogy figyelembe vesznek-e futási idejű információt, két kategóriába oszthatunk: dinamikus és statikus szeletelő algoritmusok. A kezdeti dinamikus szeletelő algoritmusok nagy hátránya volt az, hogy a szükséges memóriaigény a megtett lépések száméval volt arányos, így csak a gyors lefutású programok szeletelésére volt alkalmas. A fent említett csapat megalkotott egy olyan módszert, ami ezt a problémát kiküszöbölte: előre számolásos módszerrel a memóriaigény arányos maradt az eredeti program memóriaigényével.

A módszer kezdeti formájában csak a leggyakoribb utasításokat tudta kezelni: értékadás, feltételkezelés, ciklus; a valós programozási nyelvekben szereplő minden apróságra nem tudtak kitérni. Itt kerültem képbe: a C programozási nyelvben előforduló nyelvi elemeket vettük górcső alá, és adtunk egy megvalósítást is. Személy szerint én az ugró utasítások kezelését dolgoztam ki, melyek a következők: goto, break, continue, switch…case…default.

A témában a lenyomatom az alábbi:

  • Beszédes Árpád, Gergely Tamás, Szabó Zsolt Mihály, Csirik János, Gyimóthy Tibor: Dynamic Slicing Method for Maintenance of Large C Programs (CSMR 2001). A cikk az eredeti algoritmus nagyméretű C programokra történő kiterjesztéséről szól. Ebben még nem voltam szerző, viszont ez volt az első olyan tudományos cikk, melyben szerepelt a nevem, mégpedig a végén, a köszönetnyilvánításban.
  • Faragó Csaba, Gergely Tamás: Handling the Unstructured Statements in the Forward Dynamic Slice Algorithm (SPLST 2001). A nem strukturált ugró utasítások kezeléséről szóló tanulmányt egy, a finnugor országokat felölelő nemzetközi konferencián adtam elő angolul.
  • Faragó Csaba, Gergely Tamás: Handling Pointers and Unstructured Statements in the Forward Computed Dynamic Slice Algorithm (Acta Cybernetica 2002). A fenti konferenciacikk kibővített tartalommal jelent meg folyóirat cikként. A cikk a C nyelvben előforduló mutatók kezelését is taglalja. Ez volt az első olyan PhD pontot érő cikk, melyen én voltam az első szerző.
  • Beszédes Árpád, Faragó Csaba, Szabó Zsolt Mihály, Csirik János, Gyimóthy Tibor: Union Slices for Program Maintenance (ICSM 2002). A statikus szelet túl nagy, egyetlen dinamikus lefutásra vonatkozó szelet viszont túl specifikus. A releváns szelet elméletben az összes lehetséges inputra való lefutással számolt szeletek uniója. A cikk ezt a témát taglalja, és a társszerzőim egy rangos nemzetközi konferencián adták elő. Mindez idáig ez a legtöbb hivatkozást kapott olyan cikk, melynek társszerzője vagyok.

A témával részt vettem az Országos Tudományos Diákköri Konferencián 2001-ben Egerben, ebből készült a diplomamunkám, és néhány ún. technical report is készült.

Verziótörténeti elemzés

A második témának első ránézésre nincs sok köze az elsőhöz, közelebbről megnézve viszont meg lehet találni a szálakat. Előzmények! A programszeleteléshez elkészült egy C elemző CAN néven, mely idővel, immáron C++ elemzőként a Columbus nevet kapta, és önálló, (tudományos értelemben) igen sikeres termék vált belőle. Később az elemző Java változata is is elkészült. Ezekre az elemzőkre épült a karbantarthatóság kiszámolására készült eszköz, amely az elemző által kinyert adatokat hasonlította össze egy minta adatbázis hasonló értékeivel, ezáltal számszerűsítve azt, hogy a vizsgált kód karbantarthatósága a mintához képest jobb vagy rosszabb. Az elemzéseket számos szoftver minden elérhető verzióján végrehajtották, ami által kialakult egy karbantarthatósági trendvonal. Ugyanakkor rendelkezésre állt a verziókövető rendszerekben az egyes változtatások adatai: mikor, ki, mit módosított a rendszeren.

Nagyjából ezen a ponton kerültem képbe. Az összegyűjtött adatokból szerettünk volna információt kinyerni, egészen pontosan azt, hogy vannak-e olyan, a verziótörténetből kiolvasható egyértelmű minták, melyek hatással vannak akár pozitív, akár negatív értelemben a karbantarthatóságra. Az elemzéseket az R statisztikai program segítségével hajtottam végre. Számos cikk született a témában, melynek szerzője vagy társszerzője voltam:

  • Hegedűs Péter, Bakota Tibor, Ladányi Gergely, Faragó Csaba, Ferenc Rudolf: A Drill-Down Approach for Measuring Maintainability at Source Code Element Level (SQM 2013). A tanulmányban bemutatott módszer segítségével az egyes forráskód elemek (függvények, osztályok, vagy akár teljes csomagok) karbantarthatóságra gyakorolt viszonylagos hatását lehet meghatározni. A témában ekkor még csak érintőlegesen vettem részt
  • Faragó Csaba, Hegedűs Péter, Végh Ádám Zoltán, Ferenc Rudolf: Connection Between Version Control Operations and Quality Change of the Source Code (Acta Cybernetica 2014). Ez a cikk hozta el az áttörést: számos sikertelen próbálkozás, hibás koncepció után végre sikerült bemutatni azt, hogy van kapcsolat a verziókövető műveleteknek a karbantarthatósággal. A tanulmány folyóirat cikként jelen meg.
  • Faragó Csaba, Hegedűs Péter, Ferenc Rudolf: The Impact of Version Control Operations on the Quality Change of the Source Code (ICCSA 2014). Ebben a cikkben részletesen megvizsgáltuk az egyes verziókövető műveleteket, és azt kaptuk eredményül, hogy a módosítások nagyobb részt rontják azt, mint az új kód hozzáadása. Ez volt az első olyan cikk, melyet klasszikus felállásban, hárman írtunk. Összesen három ilyen cikk született.
  • Faragó Csaba: Variance of Source Code Quality Change Caused by Version Control Operations (CSCS 2014). A tanulmány azt elemzi, hogy az egyes verziókövető műveleteknek milyen a karbantarthatóság varianciájára gyakorolt hatása. Ennek a gyakorlati jelentősége a következő: az átlag vagy medián elfedi a szórást, nagy javulást viszont akkor tudunk leginkább elérni, ha a nagy romlásokat kiküszöböljük. A kiterjesztett összefolgaló megállapítása az, hogy a hozzáadásnak és a törlésnek sokkal nagyobb a varianciája mint a módosításnak. Az eredményt egy szegedi PhD konferencián adtam elő angolul.
  • Faragó Csaba: Variance of Source Code Quality Change Caused by Version Control Operations (Acta Cybernetica 2015). Ez a fenti 2 oldalas kiterjesztett összefoglalóból készült folyóirat cikk, egyúttal az első egy szerzős, PhD pontot érő cikk volt.
  • Faragó Csaba: Visualization of Univariate Data for Comparison (AMI 2015). A fenti eredmények táblázatos formába öntése viszonylag egyszerű feladat volt, viszont nem találtam olyan módszert, amellyel az adatokból látványos diagramokat lehetett volna alkotni. Két olyan módszert dolgoztam ki, mellyel látványosan be lehet mutatni két adathalmaz közötti értékbeli és varianciabeli eltérést, és ezt egy önálló folyóirat cikként publikáltam.
  • Faragó Csaba: Case Study for the vudc R Package (AMI 2016). A fenti adatvizualizációs módszer alkalmazása a fő kutatási terület adataira, és az addig csak számszerű adatokkal publikált eredmények vizuális bemutatása. (Ezt a cikket a disszertáció leadását követően fogadták el.)
  • Faragó Csaba, Hegedűs Péter, Ferenc Rudolf: Code Ownership: Impact on Maintainability. (ICCSA 2015). A tanulmány azt vizsgálja, hogy a fejlesztők száma (tehát hogy egy adott komponensen hány fejlesztő dolgozott az idők folyamán) mennyire befolyásolja a karbantarthatóságot. Gyenge, de létező kapcsolatot találtunk a fejlesztők nagy száma és a karbantarthatóság romlása között.
  • Faragó Csaba, Hegedűs Péter, Ferenc Rudolf: Cumulative Code Churn: Impact on Maintainability (SCAM 2015). A cikkben azt vizsgáltuk, hogy a múltbeli módosítások mennyire befolyásolják azt, hogy az aktuális változásnak milyen hatása van a karbantarthatóságra. Valószínűleg ez volt a legjelentősebb eredményünk: azt kaptuk, hogy a múltban gyakrabban módosított forrásfájl aktuális módosítása nagyobb eséllyel ront a karbantarthatóságon mint az, melyet ritkábban módosítottak. Mindegyik vizsgált rendszerben erős kapcsolatot állapítottunk meg. Egyúttal a megjelenés szempontjából is ez volt az első szerzős cikkeim közül a legjelentősebb: egy rangos nemzetközi konferencián adtam elő az eredményeket Brémában.
  • Faragó Csaba, Hegedűs Péter, Ladányi Gergely, Ferenc Rudolf: Impact of Version History Metrics on Maintainability (ASEA 2015). Ebben a cikkben forrásfájl szinten hajtottuk végre az elemzést. Definiáltunk néhány verziótörténeti metrikát a kód módosítás intenzitás, a kód tulajdonlás és a kód öregedés szempontjából, és ezeket hasonlítottuk össze a relatív karbantarthatósági indexszel, valamint a verzió kiadását követő ismert hibák számával. Eredményül ezzel a módszerrel is megkaptuk, hogy a túl sok módosítás és a túl sok fejlesztő rossz hatással van a karbantarthatóságra, valamint az öregedés rossz hatását is kimutattuk: a korábban hozzáadott és a később módosított kód nagyobb eséllyel volt nehezebben karbantartható és tartalmazott később hibát az újabb, ill. régebben módosított fájlokhoz képest.
  • Faragó Csaba, Hegedűs Péter: Developer Focus: Lack of Impact on Maintainability (ICCSA 2018). A témát megvizsgáltuk a fejlesztői oldalról is. Azt feltételeztük, hogy a fókuszált programozóknak, tehát azok, akik csak egy területtel foglalkoznak, jobb a hatása a karbantarthatóságra azoknál, akik a rendszer számos részéhez hozzányúlnak. Számos módon próbálkoztunk ennek igazolásával, de még a közelébe sem kerültünk, így jó eséllyel nincs ilyen kapcsolat. A témát egy negatív eredmény publikálásával zártuk le.

Disszertáció

A disszertációt 2016 első felében írtam, angol nyelven. Ez 3 tézispontot tartalmaz:

  1. az ugró utasítások kezelése a dinamikus programszeletelésben,
  2. a verziókövető műveletek és a karbantarthatóság kapcsolata,
  3. a verziókövető metrikák és a karbantarthatóság kapcsolata.

A disszertáció címe: Maintainability of Source Code and its Connection to Version Control History Metrics. 15 oldalas, füzetszerű összefoglaló is készült, melyek szintén letölthető:

A disszertációval kapcsolatos, nyilvánosan elérhető adatok (ahonnan a disszertáció szintén letölthető):

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License