Programok Statikus és Dinamikus Analízise
|
|
- Tivadar Mészáros
- 8 évvel ezelőtt
- Látták:
Átírás
1 Ph.D. értekezés tézisei Programok Statikus és Dinamikus Analízise Gergely Tamás Témavezet Dr. Gyimóthy Tibor Informatika Doktori Iskola Szegedi Tudományegyetem Informatikai Tanszékcsoport 2010
2
3 Bevezetés A disszertáció témája a program analízis programelemek közötti relációk meghatározása. A szoftver életciklusában sokféle célra felhasználható, például teszteset szelekcióra, nyomkövetésre, hibakeresésre, programmegértésre, visszatervezésre vagy változás kiterjesztésre. A programok analízise egy nagy és szerteágazó kutatási terület, de bizonyos szempontok szerint számos területét meg lehet különböztetni egymástól. Ilyen szempont a részletesség és az, hogy a módszer statikus vagy dinamikus. A részletesség adja meg, hogy a relációt magas szint programelemek (például eljárások, metódusok, osztályok) vagy alacsony szint elemek (tipikusan forráskódú vagy gépi kódú utasítások) között deniáljuk. A statikus analízis csak statikusan (azaz a program futtatása nélkül) elérhet információkra hagyatkozhat, míg a dinamikus analízis felhasználhat a program futása során gy jtött információt is. A hatásanalízis egy magas szint analízis, ami f ként statikus technikákat használ, míg a programszeletelés egy alacsony szint analízis statikus és dinamikus alkalmazásokkal. A disszertációban a programanalízisnek ezzel a két területtel foglalkoztunk. Nevezetesen, a statikus és dinamikus hatásanalízis illetve dinamikus szeletelés kutatásában elért eredményeinket mutatjuk be. Eredményeinket öt tézisben foglaltuk össze. I/1. SEA/SEB relációk deníciója. I/2. DFC metrika deníciója, meghatározása és kiértékelése. II/1. d:u alapú szeletel algoritmusok meghatározása. II/2. d:u alapú szeletel algoritmusok implementációja. II/3. d:u alapú szeletel algoritmusok kiértékelése. I. Magas szint analízis Számos, a szoftver fejl déséhez kapcsolódó szoftverfejlesztési tevékenység során csak a rendszer bizonyos részeit kell egyszerre vizsgálni, és ez az érdekes rész b vül illetve változik a fejlesztési folyamat el rehaladása során. Vagyis, az inkrementális változásokon alapuló szoftver életciklusban [20] a rendszerben eszközölt változás hatásait kell meghatározni, amit aztán változás-kiterjesztésre, regressziós tesztelésre és egyebekre lehet felhasználni. Ezen tevékenységek kulcsa az elemek szomszédainak meghatározása. Az ilyen szomszédság meghatározása jelent sen eltér lehet attól függ en, hogy milyen területen alkalmazzuk. Változás kiterjesztéshez például egy nagyon egyszer technika az, amikor egy iterációs lépésben egy osztálynak csak a t le direkt módon függ szomszéd osztályait (az osztály-diagram szer kapcsolatok alapján) vizsgáljuk meg. Hasonlóképpen, regressziós tesztelésnél egy egyszer, mégis hatékony technika a tesztelési t zfal [26, 27], ami csak azon tesztesetek újrafuttatását jelenti, amik a megváltozott rész közvetlen (vagy közeli) függ ségeit hajtják végre. A hatásanalízis [11] célja a szoftverfejlesztés és -karbantartás különböz tevékenységeinek segítése a változások által érintett elemek meghatározása által. Ez rendszerint programelemek közötti különféle relációk meghatározásán keresztül történik. Különböz megközelítések léteznek a hatásanalízist segít, magasabb szint szoftverelemek közötti relációk meghatározására [4]. A legtöbb általános hatásanalízis módszer statikus, mint például Rajlich vagy Ren és társaik munkái [20, 21]. A legegyszer bb statikus módszerek a hívási gráfot vagy valamilyen más könny súlyú függ séget használnak, ami pontatlan vagy nem biztonságos eredményhez vezet (pl. [28]). Lehet pontos és biztonságos módszereket és eredményeket is 1
4 találni (például a statikus programszeletelést), de ezen módszerek számításigénye túl magasnak bizonyult [14, 24] a hatásanalízishez. Az eljárás szint hatáshalmazokat számító módszereinket Apiwattanapong és társainak [3] a dinamikus Execute After (EA) relációja motiválta. Apiwattanapong és társai egy nagyon egyszer megközelítést használtak ami nagyjából a következ : a program adott futásai alapján egy f függvény potenciálisan hatással van minden olyan metódusra ami bármely említett futás során valamikor utána lett végrehajtva, ami azt jelenti, hogy minden g függvény, amit az f után hajtunk végre része lesz az f hatáshalmazának. Ez egy biztonságos módszer vagyis egyetlen egy függ séget sem fog kihagyni, de pontatlan is. Viszont pusztán a függvényhívási információkra támaszkodva lehetetlennek látszik egy ennél pontosabb, de mégis biztonságos módszer megadása. I/1. SEA/SEB relációk deníciója A komponensek közötti kapcsolatok egy része explicit, mint például objektumorientált rendszerekben az örökl dés, kompozíció, asszociáció, stb. Ezek a függ ségek tipikusan meg is jelennek a kódjában explicit hivatkozás formájában. Az explicit függ ségek mellett azonban léteznek másfajta függ ségek is; ezeket rejtett függ ségeknek 1 nevezzük. Yu és Rajlich [28] vizsgált egyébként expliciten nem kapcsolódó komponensek között létez adatfolyamokon keresztül közvetített rejtett függ ségeket. Mi egy alternatív módszert ajánlottunk a programkomponensek közötti explicit és rejtett függ ségek meghatározására a Static Execute After (SEA) és Static Execute Before (SEB) relációk deniálásával. A SEA a statikus párja az Apiwattanapong és társai által bevezetett Execute After relációnak [3]. Azt mondjuk, hogy (f, g) SEA akkor és csak akkor, ha g valamely része lefuthat f valamely része után a program valamely végrehajtása esetén. A SEA reláció egy lényeges tulajdonsága, hogy biztonságos de pontatlan. Formálisan a SEA/SEB relációk három (nem diszjunkt) rész-relációra bonthatók: ahol SEA = SEA call SEA seq SEA ret, (f, g) SEA call (f, g) SEA seq (f, g) SEA ret def def def f hívja g-t, h: el ször h hívja f-et, majd miután f visszatért h-ba, h hívja g-t, f visszatér g-be, ahol mind a hívja, mind a visszatér tranzitíven értend. Hasonlóképpen deniáltuk a Static Execute Before SEB relációt is: SEB = SEB call SEB seq SEB ret. A SEA reláció kiszámításához szükség van a program megfelel ábrázolására. A hagyományos hívási gráf (Call Graph) [22]) erre nem alkalmas, ugyanis az eljáráson belüli eljáráshívások sorrendjér l semmilyen információt nem tartalmaz. Másrészt viszont az interprocedurális vezérlési folyam gráf (ICFG Interprocedural Control Flow Graph ) [19] túl sok információt tartalmaz, így a használata túlságosan drága. Szükség van tehát egy saját reprezentációra. 1 Megjegyezzük, hogy ezek általában csak hatásanalízis el tt rejtettek, egy részletesebb szeletelés ezek nagy részét is képes lenne a megtalálni. 2
5 e() { if(...) { f(); } g(); } f() { while(...) { h(); g(); } } g() { if(...) { f(); } else { while(...) { h(); if(...) { f(); } } h(); } } h() { } e f g h 1. ábra. Példa: ICCFG El ször deniáltunk egy intraprocedurális komponens vezérlési folyam gráfot (CCFG Component Control Flow Graph), amelyben csak az eljáráshívás szempontjából fontos pontokat és éleket tartjuk számon. Minden egyes CCFG egy eljárást reprezentál, és tartalmaz egy belépési pontot (entry node) és számos komponens pontot (component node) vezérlési folyam élekkel (control ow edges) összekötve. Továbbá, az er sen összefügg részgráfokat egyetlen pontba nyomjuk össze; azaz ha két hívási hely kölcsönösen elérhet egymásból vezérlési éleken keresztül, akkor hozzájuk ugyanaz a komponens pont tartozik. Az interprocedurális komponens vezérlési folyam gráf (ICCFG Interprocedural Component Control Flow Graph) az egész rendszert reprezentálja oly módon, hogy minden eljáráshoz tartalmaz egy-egy CCFG-t, amiket hívási élekkel (call edges) kötünk össze a többi CCFG-vel. Az ICCFG-ben egy c komponens pontból akkor és csak akkor mutat hívási él egy m eljárás belépési pontjára, ha a c pont által reprezentált hívási helyek valamelyike meghívja az m eljárást. Az 1. ábrán egy példa ICCFG látható. Saját eredmények A SEA/SEB relációk deníciója, illetve a számításukhoz használt ICCFG meghatározása szerz társaimmal közös eredmény. Az elért eredményeket a [9] cikkben publikáltuk. I/2. DFC metrika deníciója, meghatározása és kiértékelése A változás kiterjesztésben és regressziós tesztelésben használt hatáshalmaz számító technikák közül a hatékonyság érdekében nagyon sok csak közelít módszer. Egy lehet ség a pontosság javítására a dinamikus analízis használata a statikus helyett. A dinamikus EA reláció szintén egyszer és hatékony, de túlságosan konzervatív és így pontatlan. A nomításának ötlete azon a benyomáson alapszik, hogy minél közelebb van egy f függvény végrehajtása egy g függvény végrehajtásához a program valamely futása során, annál valószín bb, hogy függenek egymástól. Miel tt megadnánk a formális deníciót, bevezetjük a dinamikus hívási fa (dynamic call tree) fogalmát. Ez egy gyökeres fa rendezett élekkel, ahol az f függvénnyel címkézett p pont az f függvény egy meghívott példányát jelöli, és egy p q él az f-nek a p példányából történ g hívást reprezentál annak q példányába, ahol a q címkéje g. Szintén használni fogjuk az f g hívási lánc fogalmát, ami egy útvonal p és q pontok között, ahol a p és q rendre f és g függvényekkel címkézett pontok, és amire igaz, hogy a fa gyökerét l p-ig tartó 3
6 útvonal prexe a fa gyökerét l q-ig tartó útvonalnak. Most megadjuk az Execute After reláció egy d indirekciós szint szerinti kiterjesztését. Formálisan: (f, g) EA (d) call (f, g) EA (d) ret (f, g) EA (d) seq def def def d hosszúságú f g hívási lánc, d hosszúságú g f hívási lánc, h függvény, amire: d r hosszúságú h f és d c hosszúságú h g hívási lánc egyetlen közös (h címkéj ) ponttal a hívási fában, ahol f el bb van meghívva, mint g, és d = d r + d c 1. Ezek kombinációjával kapjuk azt az EA (d) relációt, amelyik maximálisan d mérték indirekciót engedélyez, formálisan: (f, g) EA (d) def d d : (f, g) EA (d ) call EA(d ) ret EA (d ) seq. Az Execute Before reláció (EB (d) ) a szimmetria alapján bármely d értékre egyszer en a két metódus szerepének felcserélésével számolható: (f, g) EB (d) def (g, f) EA (d), és a fenti két reláció kombinálásával megkaphatjuk az Execute Round (ER (d) ) relációt is a következ képpen: d : ER (d) = EB (d) EA (d). Meggyelhet, hogy a mi deníciónk speciális esete, az EA ( ) megfelel az Apiwattanapong és társai által megadott Execute After reláció deníciójának, míg ER ( ) a végrehajtott metódusok közötti teljes relációt (teljes gráfot) jelöli. Természetesen, ha egy d érték elegend két metódus Execute Round relációval való összekapcsolásához, akkor ezt a két függvényt az ER minden ennél magasabb d érték esetén is összekapcsolja. A Dynamic Function Coupling (DFC) metrika tehát minden f, g metóduspárra azt a legalacsonyabb d értéket határozza meg, amelyre a két metódus ER (d) relációban van: { min{d (f, g) ER DFC (f, g) = (d) } ha létezik ilyen d, különben. Látható, hogy DFC (f, g) = DFC (g, f) és DFC (f, f) = 0 igaz lesz bármely két f és g metódusra. 2 A fentiek alapján egy rögzített d értékre, a változott metódusok C halmazával számolt dinamikus változás hatáshalmaz a következ : Algoritmusok ImpactSet (d) (C) = {g f C : (f, g) ER (d) }. Bemutattunk három, belépési (function entry) és visszatérési (function return) eseményeket tartalmazó végrehajtási nyomon dolgozó algoritmust. 2 A tradicionális mértékekkel ellentétben itt a kisebb érték jelenti az er sebb kapcsolatot. 4
7 Az els egy globális rekurzív algoritmus, ami a DFC értékét számolja ki minden függvénypárra legrosszabb esetben O(t n 2 ) id - és O(n m) tárigénnyel, ahol n a függvények száma, m a hívási fa magassága, t pedig a végrehajtási nyom hossza. A második egy igényvezérelt algoritmus a hatáshalmaz számításra egy paraméterként kapott d indirekciós értékkel. Ennek a legrosszabb esetben O(t n) a számítási és O(n m) a tárhely komplexitása. A harmadik algoritmus is egy igényvezérelt algoritmus a hatáshalmaz számításra de rögzített d = 1 indirekciós értékkel. Ennek O(t n) az id - és O(n m) a tárigénye a legrosszabb esetben. Ez olyannak látszik, mint az el z algoritmusé. De míg az átlagos esetben nem sokat javul a legrosszabb esethez képest, addig ennek az id - és tárigénye majdnem O(t) és O(n + m)-re csökken. Mérések Elvégeztünk néhány kísérletet. Három nyílt forráskódú Java programon mértük a relációk és rész-relációk pontosságát és teljességét. Ezeket az értékeket a programszeletelés eredményét pontosnak tekintve mértük. A megállapításaink összegzésére, megadjuk a mérések el tt felvetett kérdésekre a válaszokat: 1. Igaz-e, hogy két függvény közötti alacsony DFC érték nagyobb valószín séggel jelent kapcsolatot kettejük között? Igen. Leginkább az 1-es és 2-es DFC értékek jelentenek nagyobb valószín séget, mint a magasabb indirekciós szintek. 2. A hívási rész-reláció önmagában és a szekvenciális rész-relációval együtt milyen mértékben tükrözi a valós csatolásokat? Magas indirekciós szintnél a hívási rész-reláció nem sokat tartalmaz a valódi csatolásokból (csak körülbelül 20%-it talál meg). Ez azt jelenti, hogy a csatolások javát a szekvenciális rész-reláció fedi le, tehát az egyszer csak hívás alapú algoritmusok nem kielégít ek. 3. Mi az a d érték, aminél a relációk teljessége már megfelel, és mennyi ekkor a pontosságuk? A mérések alapján a teljesség viszonylag hamar, méréseink szerint 515 lépés alatt és nagyjából egyenletesen fut fel 100% közelébe. A pontosság viszont sokkal drasztikusabban csökken, gyakorlatilag 1-2 lépésen belül megközelíti (felülr l) az eredeti EA reláció pontosságát. 4. Milyen d értéket használjunk, ha a pontosság a fontos, és ilyenkor milyen a teljesség? A legjobb pontosságot d = 1 vagy d = 2 esetén kapjuk. A teljesség viszont ekkor még nagyon alacsony, 20% körül mozog. 5. Az eredeti EA relációhoz képest mekkora hatáshalmaz méret csökkenéssel számolhatunk? A legalacsonyabb 1-es érték esetén a hatáshalmazok mérete 1315%-a a biztonságos módszerének, míg 2-es szinten ez 2535%. Saját eredmények A DCF metrika deníciója és kiszámításának elve, valamint a metrika mérésekkel történ kiértékelése szerz társaimmal közös eredmény. A DFC metrikát és a metrikán alapuló hatáshalmazokat számító algoritmusok kidolgozása saját eredmény. Az elért eredményeket a [6] cikkben publikáltuk. 5
8 II. Alacsony szint analízis A programszeletelés egyszerre hasonlít és különbözik a hatásanalízist l. Hasonlít, mert mindkett nek ugyanaz a célja: programelemek közötti relációk felderítése. Mégis különbözik, hiszen alacsony szint és pontos relációkat ad, de sokkal nagyobb számításigénnyel. Id vel sok programszeletelési módszerek lett kidolgozva [24, 25]. A módszerek jelent s része programelemek (változók, utasítások, címek, predikátumok, stb.) közötti különféle (adat és vezérlési) függ ségek alapján számol szeleteket. Részletes statikus szeletel módszerekb l sok publikáció született. Például Horwitz és társai [14] rendszerfügg ségi gráf ( System Dependence Graph SDG) alapú munkája szolgált számos további implementáció és javítás kiindulópontjaként. Az alapvet dinamikus szeletel módszerek többféle elvre épülnek, mint például Korel és Laski [17, 18], Agrawal és társai [1, 2] illetve Kamkar és társai [16] módszerei. Az Agrawal és Horgan [2] által publikált tradicionális dinamikus függ ség alapú módszer dinamikus függ ségi gráfokat (Dynamic Dependence Graph DDG) használ, ami minden egyes utasítás minden egyes el fordulásához (minden akcióhoz ) egy külön csúcsot rendel, az élek pedig a program egy konkrét futása során keletkez dinamikus függ ségeket reprezentálják. A dinamikus szelet kiszámítása ezen a gráfon a kritérium csúcsából elérhet összes csúcs megtalálását jelenti. Meglep en kevés publikáció jelent meg viszont, ami a dinamikus szeletelés gyakorlati oldalával foglalkozna és részletes algoritmusokat adna. Ennek egyik oka lehet, hogy programok dinamikus analízise számos okból kifolyólag egy eredend en nehéz probléma, amik közül az egyik legjelent sebb a program futása során keletkez nagyszámú esemény. Az alap dinamikus szeletel algoritmusok legtöbbjének problémát okoz a nagy input kezelése. A DDG méretét például a végrehajtási nyom elemeinek száma határozza meg, ami korlátlan. Gyimóthy Tibor, Forgács Gábor és Beszédes Árpád elkészített egy olyan hátramutató szeleteket számító dinamikus algoritmust, amely a végrehajtási történet egyszeri végigjárásával az összes lehetséges dinamikus kritériumra kiszámolja a megfelel szeleteket [13]. Ez alapján Beszédes Árpád kidolgozott egy algoritmust egyetlen szelet kiszámítására [5]. Az algoritmusok az egyes utasítások reprezentálására úgynevezett d : U (deníció-használat) párokat használnak. Bár az eredeti algoritmusok csak egy nagyon egyszer programozási nyelvet támogatnak, viszonylag alacsony tárigényük miatt alkalmasak nagyméret programok szeletelésére is. II/1. d:u alapú szeletel algoritmusok meghatározása A Beszédes Árpád és szerz társai által kidolgozott két algoritmus alapján nyilvánvalóvá vált, hogy ugyanezzel a reprezentációval többféle gráfmentes dinamikus szeletel algoritmus is megalkotható. Ezért azután meghatároztuk a fentebb említett algoritmusok néhány jellemz jét, és meghatároztuk a lehetséges értékeiket, azután megvizsgáltuk ezek kombinációit. Három jellemz t találtunk: Szeletek iránya. A két alapvet szeletelési irány az el remutató és a hátramutató szeletelés. Az el remutató szeletelés esetén azokra a programpontokra vagyunk kíváncsiak, amelyek a szeletelési kritérium által meghatározott ponton kiszámított értékeket a program futása során kés bb (akár áttételesen is) felhasználják. Egy hátramutató szelet azokból az utasításokból áll, amik hatással lehetnek egy adott programponton kiszámított értékre. Globális vagy igényvezérelt. A tradicionális megközelítés szerint egyszerre egy kritériumunk van, és az ehhez tartozó egyetlen szeletet számítjuk ki. Ezt nevezzük igényvezérelt szeletelésnek. Lehet ség van viszont arra, hogy a végrehajtási történet egyszeri 6
9 feldolgozásával egyszerre több (akár az összes lehetséges) szeletet kiszámoljunk. Ebben az esetben globális szeletelésr l beszélünk. Feldolgozás iránya. A végrehajtási nyomot szintén kétféleképpen dolgozhatjuk fel. Az el refelé haladó feldolgozás a természetes irány, hiszen a végrehajtási történet ilyen módon keletkezik. Néha csak ez a fajta feldolgozási irány valósítható meg. Ugyanakkor el fordulnak olyan szituációk, amikor a hátrafelé haladó feldolgozás is alkalmazható és hatékonyabb, mint a másik irány. Ez összesen nyolc lehet ség, ami közül néhány hasznos algoritmust ad, ugyanakkor vannak értelmetlen kombinációk is. A lehet ségeket az 1. táblázatban foglaltuk össze. Globális/Igényvezérelt Szeletelés iránya Feldolgozás iránya Hasznosság Igényvezérelt hátramutató visszafelé praktikus Igényvezérelt hátramutató el refelé értelmetlen Igényvezérelt el remutató visszafelé értelmetlen Igényvezérelt el remutató el refelé praktikus Globális hátramutató visszafelé párhuzamos Globális hátramutató el refelé praktikus Globális el remutató visszafelé praktikus Globális el remutató el refelé párhuzamos 1. táblázat. Dinamikus szeletel algoritmusok áttekintése Dinamikus szeleteket igényvezérelt módon számolni azt jelenti, hogy a dinamikus szeletet a program egy adott futása és egy adott kritériumra számoljuk. Bejárjuk a végrehajtási utat a kritériumban meghatározott akciótól kezdve, és a d : U reprezentáció segítségével követjük a dinamikus függ ségeket a szeletelés irányától függ en hátrafelé az els végrehajtott utasítás irányába vagy el re a nyom vége felé. Így összesen két igényvezérelt dinamikus szeletel algoritmust kapunk. A szeleteket igényvezérelt módon ellentétes szeletelési és feldolgozási iránnyal számítani értelmetlen. Ez gyakorlatilag egy globális algoritmust eredményezne, mert az összes érintett akcióhoz tartozó szeletet meg kellene tartani amíg a végrehajtási nyomban el nem érjük a kritérium akcióját. Számos alkalmazásban a program egy adott futásának több szeletére is szükségünk lehet egyszerre. Ez vezet az ötlethez, hogy a végrehajtási nyom egyszeri feldolgozásával egyszerre több dinamikus szeletet is kiszámoljunk. A sok szelet kiszámítása lehetséges igényvezérelt algoritmusok párhuzamos futtatásával: el remutató szeleteket el rehaladó feldolgozással, hátramutató szeleteket visszafelé haladó feldolgozással számolva. Ugyanakkor ez a megközelítés nem túl praktikus, mivel az adatstruktúrákat (és a szeleteket) az végrehajtási nyom teljes feldolgozása alatt karban kell tartani minden dinamikus kritériumhoz. Szerencsére lehetséges sokkal praktikusabb globális algoritmusok megalkotása is, amikben nem kell a teljes szeleteket tárolni a végrehajtási nyom feldolgozása alatt, elég csak a program változóihoz tartozó függ ségi halmazokat. Ezek a függ ségi halmazok utasítás sorszámokat tárolnak, megadva ezzel az adott pont adott változóinak aktuális függ ségeit. Ezeket a halmazokat a d : U információkból számítjuk, és minden végrehajtási lépésben frissítjük. Így pusztán ezen halmazok aktuális értékei segítségével képesek vagyunk az összes kritériumhoz kiszámolni a dinamikus szeleteket. Érdekes tulajdonsága ennek a megközelítésnek, hogy az említett halmazok a nyom fordított (szeletelési iránnyal ellentétes) irányú feldolgozásával kaphatóak meg. 7
10 DDG ekvivalencia Ahhoz, hogy megmutassuk, hogy az általunk használt d : U alapú algoritmus ugyanazokat a szeleteket számolja mint a DDG alapú algoritmus, el ször a két reprezentáció ekvivalenciáját kell megmutatnunk. Legyenek a program utasításai az i {1,..., I} értékekkel azonosítva. Adott ugyanannak a programnak a PDG (Procedure Dependency Graph, az SDG egy alkotóeleme) és d : U reprezentációja. Deníció szerint: in PDG in d : U P i d i : U i P i P k vezérlési függ ségi él d i predikátum változó U k P i P k adatfügg ségi él = d i U k Ezek alapján viszont megmutatható, hogy akkor és csak akkor létezik P i j P k l él a DDG gráfban, ha d i U k és a d i változót az l lépés el tt utoljára deniáló akció i j (LD(d i, l) = i j ). Igényvezérelt algoritmusok esetén az eredmény ekvivalenciáját úgy mutattuk meg, hogy a leírt algoritmust ekvivalens átalakításokkal egy gráfszínezési algoritmussá alakítottuk. Ez egy adott kiindulópontból az élek mentén elérhet gráfpontokat színezte be. A színezett pontokhoz tartozó utasítások pont a DDG-b l el állított szeletet alkotják. Annak bizonyítására, hogy a globális algoritmusok is a DDG alapú szeleteléssel kapott szeleteket számolják ki teljes indukciót alkalmaztunk. Kezdetben az algoritmusok által használt halmazok üresek, ami az els akció feldolgozása el tt triviálisan megfelel az üres szeleteknek. Majd feltettük, hogy az i j akciót feldolgozó iteráció kezdetén a halmazok a DDG-ben a megfelel helyekr l elérhet utasításokat vagy akciókat tartalmazzák. Végül az algoritmusokról megmutattuk, hogy ha a feltevéseink igazak az i j feldolgozása el tt, akkor utána is igazak lesznek. Saját eredmények Az algoritmusok osztályozása, négy új algoritmus (igényvezérelt el remutató el rehaladó feldolgozással, globális el remutató el rehaladó és fordított feldolgozással, globális visszamutató fordított feldolgozással) meghatározása és kidolgozása szerz társaimmal közös eredmény. Az algoritmusok DDG algoritmussal való ekvivalenciájának igazolásában a saját hozzájárulásom a meghatározó. Az eredményeket a [7] cikkben és az ezt kiegészít [8] jelentésben publikáltuk. II/2. d:u alapú szeletel algoritmusok implementációja A dinamikus szeletel algoritmusainkat C és Java nyelvekre implementáltuk. Valódi C programok szeletelése során számos problémát kellett megoldani, mint például a mutatók, függvényhívások és ugró utasítások kezelése. Els ként átalakítottuk a d : U reprezentációt a C nyelv igényeinek megfelel en. C programok esetén a d : U reprezentáció d : U elemek sorozatát tartalmazza: i. (d 1 : U 1 ), (d 2 : U 2 ),.... A sorozat elemeinek sorrendje fontos, ez pedig a részkifejezések végrehajtási sorrendje. A végrehajtási utat szintén módosítottuk. Hozzáadtunk pár technikai adatot, mint például a memóriacímeket, blokk belépési/kilépési eseményeket, függvény hívási/visszatérési eseményeket, stb. Ezt a kiterjesztett EH -t TRACE-nek hívjuk. A TRACE-t a program instrumentálásával (utasítások beszúrása), majd az instrumentált verzió futtatásával kapjuk. 8
11 A mutatók kezelését minden változó (amelyiknél ez lehetséges) memóriacímre konvertálásával oldottuk meg. Így az algoritmus futása során egy másik, úgynevezett dinamikus d : U felépítésére lesz szükség. Ez a dinamikus d : U tartalmazza a memóriacímeket, amiken az algoritmus dolgozik. Mutatók kezelése Egy változó címe a hatókörén belül nem változik, így miután meghatároztuk, akárhányszor használható. De egy mutató értékét minden egyes felhasználás alkalmával le kell kérdeznünk, hiszen bármikor megváltozhat. Ezért az instrumentált program kiírja ezeket a címeket a TRACE-be a remember() (változókhoz) és dump() (mutatókhoz) függvények segítségével: int x, *p; int x, *p; remember("x", &x, sizeof(int)); remember("p", &p, sizeof(int*)); 1. x=1; x=1; 2. p=&x; p=&x; 3. *p=2; *dump("ptr1", p,, sizeof(int))=2; 4. print(x); print(x); A program statikus és dinamikusan feloldott d : U reprezentációja és a 4. sorhoz számított szelet feltéve, hogy az x és p változók címei 01 és 02 a következ : line def : U SE akció def : U SE Szelet 1 x : : 2 p : : 3 P T R1 : {p} : {02} {2} 4 OUT : {x} 4 4 OUT : {01} {2, 3} A C nyelvben a tömbök és a mutatók gyakorlatilag ugyanazok, és a konverzió egyikr l a másikra meglehet sen egyszer. Egy t tömb i-ik elemét t[i]-ként írjuk, de kifejezhet *(t+i) alakban mutatóként is. Így ha egy tömb valamelyik elemére hivatkozunk, azt a d : U-ban mutatóként kezeljük, és így kiírjuk a címét. A struktúrák mez inek struktúrán belüli címe (oszet) statikus id ben meghatározható, de ebb l az információból dinamikus címeket el állítani meglehet sen komplikált lenne. Ehelyett a struktúrák mez it is inkább eleve mutatókként kezeljük. Ezáltal a struktúramez elérést is visszavezettük a mutatók kezelésére. A struktúrákat magukat nem konvertáljuk, azokat általános változóként kezeljük: De a memóriacím önmagában nem írja le pontosan a változót. Egy struktúra és els mez jének címe például ugyanaz, de egy új érték hozzárendelése a teljes struktúrához a mez in keresztüli függ ségeket indukál. Ezért a remember() és dump() függvények a memóriaméretet is rögzítik. Algoritmus A C programokat szeletel módszerünk a következ képpen m ködik. El ször elemezzük és instrumentáljuk a programot, és el állítjuk a statikus d : U reprezentációját. Azután az instrumentált programot lefordítjuk és futtatjuk, aminek eredménye a TRACE. Végül a dinamikus szeletelési algoritmust futtatjuk az el z leg felépített d : U reprezentáció és a TRACE segítségével. A TRACE feldolgozása és a változók memóriacímekké konvertálása érdekében az algoritmusok TRACE kezel ciklusa a következ képpen módosul. A TRACE aktuális elemének típusa alapján a következ tevékenységeket kell elvégezni. 9
12 függvény belépési esemény: Az aktuális d : U elem feldolgozását felfüggesztjük, a pozíciót pedig egy verembe mentjük. függvény kilépési esemény: A feldolgozás a verem tetején elmentett d : U pozícióban folytatódik. A pozíciót kivesszük a veremb l. EH elem: Az aktuális akció az EH elem által meghatározott akció, a végrehajtás ennek els d : U elemével folytatódik. egyéb: Ez alapján a feloldatlan hivatkozásokat fordítsuk le memóriacímre. A statikus d : U változókat a típusuk alapján oldjuk fel a dinamikus d : U-ban: Skaláris változók. A deklarációtól kezdve a hatókörükön belül állandó címük van. A címük a C program veremm ködésének szimulálásával (címeket és blokk belépési/kilépési eseményeket használva) feloldható. A dinamikus d : U az így kapott címet használja. Dereferencia változók. Jelölésük P T Rn, ahol n egy globális számláló az összes dereferenciához. A TRACE-ben található információk alapján közvetlenül feloldható. Predikátum változók. Az ilyen változókat P n-nel jelöljük, ahol n a megfelel predikátum utasítás sorszáma. A dinamikus d : U-ban a program függvényhívási vermének mélységével kiegészítjük, elkerülend a rekurzív hívásból ered ütközéseket. Kimeneti változók. A jelölése OU T n, ahol n szintén utasítás-sorszámot jelöl. Deníció szerint a kimeneti változó egy olyan ál-változó, amit azokra a helyekre generálunk, ahol az U halmazt használjuk ugyan, de semmilyen más változó nem kap értéket U-ból. A dinamikus d : U-ban változatlanok maradnak. Függvényhívás argumentum változó. Jelölésük ARG(f, n), ahol f a függvény neve n pedig az argumentum sorszáma. Egy argumentum változót a függvényhívás helyén deniálunk és a függvény belépési pontján használunk. A dinamikus d : U-ban változatlanok maradnak. Függvényhívás visszatérési változó. Ezeket RET (f)-fel jelöljük, ahol f a függvény neve. Egy ilyen változót a függvény kilépési pontján deniálunk és a függvény hívásának helyén használunk. A dinamikus d : U-ban változatlanok maradnak. Ezután, ha az aktuális d : U elem feldolgozható (pl. nincs benne fel nem oldott változó), akkor feldolgozzuk. Saját eredmények Az algoritmusok C nyelv programokat szeletel változatának kidolgozása és implementációja során a változók kezelését, azaz a forráskódban látható hivatkozások és a futás közbeni memóriacímek összerendelésének problémáját oldottam meg. Az eredményeket a [10] és [12] cikkekben publikáltuk. II/3. d:u alapú szeletel algoritmusok kiértékelése Kétféle kiértékelést végeztünk. El ször, elemeztük a hat szeletel algoritmusunk komplexitását, és összehasonlítottuk a DDG alapú algoritmuséval. Másodszor, különféle méréseket végeztünk a C és Java implementációkkal. 10
13 id Algoritmus maximum átlag Igényvezérelt hátramutató J V log(j) J + DEP log(j) Igényvezérelt el remutató J V J Praktikus algoritmusok J I V log(i) J DS log(ds) Párhuzamos algoritmusok J 2 (log(i) + V log(j)) J DEP log(ds DEP) Egy DDG szelet J V DEP DDG építése és egy szelet J V J + DEP Összes szelet DDG-vel J 2 V J DEP 2. táblázat. Dinamikus szeletel algoritmusok számítási komplexitása tárhely Algoritmus maximum átlag Igényvezérelt hátramutató J J Igényvezérelt el remutató V V DEF Praktikus algoritmusok V I V DEF DS Párhuzamos algoritmusok J (I + V ) J DS + V DEF DEP DDG J V J 3. táblázat. Dinamikus szeletel algoritmusok tárigény komplexitása Komplexitás Amikor az id és tárigényt taglaljuk, kifejezetten az algoritmusok lényegi részére koncentrálunk. Nem értjük bele például a végrehajtási nyom beolvasását és tárolását, vagy program statikus reprezentációjának felépítését és tárolását. Kihagyjuk a konkrét megvalósításokhoz szükséges módosításokat is. A hat d : U alapú és a DDG alapú algoritmus legrosszabb és átlagos id - és tárigényére vonatkozó számításainkat a 2. és a 3. táblázatokban foglaltuk össze. A használt jelölések: a végrehajtási történet hossza J; a program utasításainak darabszáma I; a program változójának száma V ; a futás során valóban deniált változók száma V DEF ; DS az átlagos szeletméret; DEP a DDG egy pontjából egy adott irányban elérhet pontok átlagos száma. (DS az I-vel áll kapcsolatban, míg DEP pedig a J-vel.) Az igényvezérelt algoritmusoknál feltüntetett értékek egyetlen szelet kiszámítására vonatkoznak, míg a praktikus és párhuzamos algoritmusoknál az összes lehetséges szeletre. Átlagos esetben az igényvezérelt algoritmusaink hatékonyabban lehetnek a DDG algoritmusnál, mert egyszeri bejárással meg is határozzák a szeletet, ehhez nem kell külön lépés, mint a DDG-nél. Ráadásul egyszerre mindig csak korlátozott mennyiség dinamikus függ séget tárolnak a memóriában, így tárigényük is alacsonyabb (nem csak az el remutató algoritmusnál, ahol ez V DEF J miatt nyilvánvaló). A praktikus algoritmusaink átlagos id igénye nem kifejezetten jobb vagy rosszabb, mint a DDG algoritmusé. Mivel DS a program méretével arányos így korlátos, DEP viszont az EH méretével arányos tehát potenciálisan korlátlan, megfelel en nagy végrehajtási nyom esetén a d : U alapú algoritmus t nik használhatóbbnak. Az algoritmusaink O(V DEF DS) átlagos tárigénye (gyelembe véve, hogy valós alkalmazásokban a V DEF értéke inkább V, mint J függvénye) praktikusabb mint a DDG O(J) tárigénye. A párhuzamos algoritmusaink viszont mind id - mind tárigény tekintetében nyilvánvalóan rosszabbak mint a DDG alapú algoritmus. 11
14 Mérések a C implementációval A C nyelv implementációval végzett mérések célja els sorban az algoritmusok gyakorlati használhatóságának igazolása volt. A praktikus és igényvezérelt hátramutató szeleteket számító algoritmus C nyelv implementációját öt kisebb programon mértük: bcdd, unzoo, bzip, bc és less. A mérések során a tesztprogramok különböz tulajdonságait, és az algoritmusok komplexitásban megjelen jellemz it rögzítettük. Megállapításaink a következ k voltak: A mérések során nem találtunk kapcsolatot a szeletméret és a végrehajtási nyom hossza között. A statikus (programkódban jelenlév ) és dinamikus (futás közben foglalt) változók számának korrelációja viszonylag magas, Az eredmények alapján a program változóinak memóriacímre cserélése nem okoz a változók számának megtöbbszöröz déséb l adódó problémát. A gyakorlati használhatóság miatt fontos, hogy a halmazok mérete és a halmazm veletek száma vajon milyen viszonyban áll a program illetve a végrehajtási nyom méretével. A maximális halmazméretek és a lépésenkénti halmazm veletek átlagos száma többékevésbé a programmérettel együtt változott. Megállapítottuk továbbá, hogy az egyes futások során a halmazok maximális mérete nem n tt szignikánsan a nyom feldolgozásának el rehaladtával. Az igényvezérelt algoritmus esetén a hosszabb végrehajtási nyomból nem következett az algoritmus iterációs számának növekedése. Az igényvezérelt algoritmus f ciklusának iterációs számát befolyásoló halmaz mérete nagymértékben a szeletek méretével korrelált. Összességében tehát elmondhatjuk, hogy az algoritmusok futásidejét meghatározó tényez knek (dinamikus változók száma, halmazm veletek száma) leginkább statikus összetev ik vannak, és az igényvezérelt hátramutató algoritmus lépésszáma jóval az EH mérete alatt van. Mérések a Java implementációval A Java implementációval végzett méréseink leginkább a különféleképpen el állított szeletek méretére vonatkoztak, nevezetesen a statikus, dinamikus és uniós szeletek viszonyára. A statikus szeletek el állításához az Indus [15] nev Java statikus szeletel eszközt használtuk. A mérésekhez összesen öt kis Java programot használtunk (RayTracer, JSubtitles, NanoXML/DumpXML, java2html és dynjava) körülbelül 100 tesztesettel programonként. A futáshosszak statisztikái a a 4. táblázatban láthatók. Megállapításaink a következ k voltak: Végrehajtott utasítások Program minimuma maximuma RayTracer JSubtitles NanoXML java2html dynjava táblázat. Végrehajtott utasítások 12
15 Az uniós szeletek jóval kisebbek, mint a statikus társaik. Az el remutató uniós szeletek mérete kisebb, mint a hátramutató szeleteké. Sokkal több kis szelet található az el remutató szeletek között, de a maximális méretek nagyjából megegyeznek a hátramutató szeletek maximális értékeivel. Az uniós szelet el állítása során a szeletméretek és a lefedettség között számított korreláció értéke 0.89 és 0.96 között mozgott. Ez jó, mert a lefedettség mértéke pontosan mérhet, és ezzel a végleges szeletméret becsülhet. Fontosabb eredmény tehát, hogy az uniós szelet mérete jóval a statikus szelet mérete alatt van, illetve, hogy a növekedése (az újabb dinamikus szeletek hozzáadásával) er teljesen korrelál az utasítás lefedettség növekedéssel. Saját eredmények Az elméleti algoritmusok elvi kiértékelése saját eredmény, melyet összefoglaló jelleggel a [7] cikkben, részletesebben a [8] jelentésben publikáltuk. A C nyelv implementáció kiértékelése közös eredmény, amit a [10], [12] cikkekben és [8] jelentésben publikáltunk. A Java nyelv implementációval történt mérések kiértékelése szintén közös eredmény, mely az [23] cikkben lett publikálva. Köszönetnyilvánítás Az értekezés olyan eredményeket foglal össze, melyek teljes megvalósítása csapatmunka eredménye volt. Néhol ugyan világos határok húzódtak az egyes résztvev k munkái között, de az eredmények külön-külön nehezen értelmezhet k. Köszönet témavezet mnek Gyimóthy Tibornak az útmutatásért, szerz társaimnak Beszédes Árpádnak, Faragó Csabának, Tóth Gabriellának, Jász Juditnak, Fischer Ferencnek, Szabó Zsoltnak, Szegedi Attilának, Faragó Szabolcsnak, Václav Rajlichnak, Csirik Jánosnak, és munkatársaimnak Havasi Ferencnek, Kiss Ákosnak, Vidács Lászlónak, Siket Istvánnak, Ferenc Rudolfnak és azoknak, akiket név szerint nem említettem a közös munkáért. Külön köszönet jár családomnak, feleségemnek, gyermekeimnek és szüleimnek türelmükért és támogatásukért. Hivatkozások [1] Hiralal Agrawal. Towards Automatic Debugging of Computer Programs. PhD thesis, Purdue University, [2] Hiralal Agrawal and Joseph R. Horgan. Dynamic program slicing. In Proceedings of the ACM SIGPLAN'90 Conference on Programming Language Design and Implementation, number 6 in SIGPLAN Notices, pages , White Plains, New York, June [3] Taweesup Apiwattanapong, Alessandro Orso, and Mary Jean Harrold. Ecient and precise dynamic impact analysis using execute-after sequences. In Proceedings of the 27th International Conference on Software Engineering (ICSE'05), pages , May [4] Robert S. Arnold. Software Change Impact Analysis. IEEE Computer Society Press, Los Alamitos, CA, USA,
16 [5] Árpád Beszédes. Forráskód Analízis és Szeletelés a Programmegértés támogatásához. PhD thesis, Szegedi Tudományegyetem, Matematika- és Számítástudományok Doktori Iskola, Szeged, November [6] Árpád Beszédes, Tamás Gergely, Szabolcs Faragó, Tibor Gyimóthy, and Ferenc Fischer. The dynamic function coupling metric and its use in software evolution. In Proceedings of the 11th European Conference on Software Maintenance and Reengineering (CSMR 2007), pages IEEE Computer Society, March 2123, [7] Árpád Beszédes, Tamás Gergely, and Tibor Gyimóthy. Graph-less dynamic dependencebased dynamic slicing algorithms. In Proceedings of the Sixth IEEE International Workshop on Source Code Analysis and Manipulation (SCAM 2006), pages IEEE Computer Society, September 2729, [8] Árpád Beszédes, Tamás Gergely, and Tibor Gyimóthy. Investigation of graph-less dynamic program slicing algorithms. Technical report, University of Szeged, [9] Árpád Beszédes, Tamás Gergely, Judit Jász, Gabriella Tóth, Tibor Gyimóthy, and Václav Rajlich. Computation of static execute after relation with applications to software maintenance. In Proceedings of the 23rd IEEE International Conference on Software Maintenance (ICSM 2007), pages IEEE Computer Society, October 25, [10] Árpád Beszédes, Tamás Gergely, Zsolt Mihály Szabó, János Csirik, and Tibor Gyimóthy. Dynamic slicing method for maintenance of large C programs. In Proceedings of the 5th European Conference on Software Maintenance and Reengineering (CSMR 2001), pages IEEE Computer Society, March 1416, Best paper of the conference. [11] Shawn A. Bohner and Robert S. Arnold, editors. Software Change Impact Analysis. IEEE Computer Society Press, [12] Csaba Faragó and Tamás Gergely. Handling pointers and unstructured statements in the forward computed dynamic slice algorithm. Acta Cybernetica, 15:489508, [13] Tibor Gyimóthy, Árpád Beszédes, and István Forgács. An ecient relevant slicing method for debugging. In Proceedings of the Joint 7th European Software Engineering Conference and 7th ACM SIGSOFT International Symposium on the Foundations of Software Engineering (ESEC/FSE'99), number 1687 in Lecture Notes in Computer Science, pages Springer-Verlag, September [14] Susan Horwitz, Thomas Reps, and David Binkley. Interprocedural slicing using dependence graphs. ACM Transactions on Programming Languages and Systems, 12(1):2661, [15] Indus project: Java program slicer and static analyses tools. [16] Mariam Kamkar, Nahid Shahmehri, and Peter Fritzson. Interprocedural dynamic slicing. In Proceedings of the 4th International Conference on Programming Language Implementation and Logic Programming (PLILP'92), volume 631 of Lecture Notes in Computer Science, pages Springer-Verlag, [17] Bogdan Korel and Janusz W. Laski. Dynamic program slicing. Information Processing Letters, 29(3):155163, October
17 [18] Bogdan Korel and Janusz W. Laski. Dynamic slicing in computer programs. The Journal of Systems and Software, 13(3):187195, [19] William Landi and Barbara G. Ryder. Pointer-induced aliasing: a problem taxonomy. In POPL '91: Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pages ACM Press, January [20] Václav Rajlich and Prashant Gosavi. Incremental change in object-oriented programming. IEEE Software, 21(4):6269, [21] Xiaoxia Ren, Fenil Shah, Frank Tip, Barbara Ryder, and Ophelia Chesley. Chianti: A tool for change impact analysis of Java programs. In Object-Oriented Programming Systems, Languages, and Applications (OOPSLA'04), pages , October [22] B. G. Ryder. Constructing the Call Graph of a Program. IEEE Transactions on Software Engineering, SE-5(3):216226, May [23] Attila Szegedi, Tamás Gergely, Árpád Beszédes, Tibor Gyimóthy, and Gabriella Tóth. Verifying the concept of union slices on Java programs. In Proceedings of the 11th European Conference on Software Maintenance and Reengineering (CSMR 2007), pages IEEE Computer Society, March 2123, [24] Frank Tip. A survey of program slicing techniques. Journal of Programming Languages, 3(3):121189, September [25] Mark Weiser. Program slicing. IEEE Transactions on Software Engineering, SE- 10(4):352357, [26] Lee White and Khalil Abdullah. A rewall approach for the regression testing of objectoriented software. In 10th International Software Quality Week (QW'97), page 27, May [27] Lee White, Khaled Jaber, and Brian Robinson. Utilization of extended rewall for object-oriented regression testing. In Proceedings of the 21st IEEE International Conference on Software Maintenance (ICSM'05), pages , September [28] Zhifeng Yu and Václav Rajlich. Hidden dependencies in program comprehension and change propagation. In Proceedings of the 9th International Workshop on Program Comprehension (IWPC'01), pages , May
18
19
20
21
22
23
24
25
26
27
28
Szoftver karbantartási lépések ellenőrzése
Szoftverellenőrzési technikák (vimim148) Szoftver karbantartási lépések ellenőrzése Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék http://www.inf.mit.bme.hu/
Szoftver értékelés és karbantartás
Szoftver értékelés és karbantartás Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék http://www.mit.bme.hu/~majzik/ Emlékeztető: Biztonsági követelmények
Szoftver karbantartás
Szoftver karbantartás Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék http://www.mit.bme.hu/~majzik/ Áttekintés Követelményspecifikálás Architektúra
és annak kapcsolata Faragó Csaba Dr. Ferenc Rudolf Informatika Doktori Iskola Szoftverfejlesztés Tanszék Szegedi Tudományegyetem Szeged, 2016
Forráskód karbantarthatóság és annak kapcsolata verziókövető történeti metrikákkal Faragó Csaba Szoftverfejlesztés Tanszék Szegedi Tudományegyetem Szeged, 2016 Témavezető: Dr. Ferenc Rudolf Ph.D. értekezés
Általános algoritmustervezési módszerek
Általános algoritmustervezési módszerek Ebben a részben arra mutatunk példát, hogy miként használhatóak olyan általános algoritmustervezési módszerek mint a dinamikus programozás és a korlátozás és szétválasztás
Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r
Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 11. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja
Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t
Ellenőrző kérdések 2. Kis dolgozat kérdései 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t 37. Ha t szintű indexet használunk,
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r
Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért
Adatszerkezetek és algoritmusok
2009. november 13. Ismétlés El z órai anyagok áttekintése Ismétlés Specikáció Típusok, kifejezések, m veletek, adatok ábrázolása, típusabsztakció Vezérlési szerkezetek Függvények, paraméterátadás, rekurziók
Verifikáció és validáció Általános bevezető
Verifikáció és validáció Általános bevezető Általános Verifikáció és validáció verification and validation - V&V: ellenőrző és elemző folyamatok amelyek biztosítják, hogy a szoftver megfelel a specifikációjának
Zárójelentés szakmai beszámolója
Zárójelentés szakmai beszámolója A pályázat címe: Hatékony rendszer-szintű hatásanalízis módszerek és alkalmazásuk a szoftverfejlesztés folyamatában Sorszám: OTKA K-73688 Szeged, 2012. május A kutatás
A félév során előkerülő témakörök
A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok
Kutatás-fejlesztés a Szoftverfejlesztés Tanszéken
UNIVERSITY OF SZEGED Kutatás-fejlesztés a Szoftverfejlesztés Tanszéken Gyimóthy Tibor Years of experience -8-3 -1 Mission: Project-based Education Student Senior Developer Developer Expert Implementation
Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30.
Online algoritmusok Algoritmusok és bonyolultságuk Horváth Bálint 2018. március 30. Horváth Bálint Online algoritmusok 2018. március 30. 1 / 28 Motiváció Gyakran el fordul, hogy a bemenetet csak részenként
Objektum orientált kiterjesztés A+ programozási nyelvhez
Szegedi Tudományegyetem Informatikai Tanszékcsoport Objektum orientált kiterjesztés A+ programozási nyelvhez Diplomamunka terve Készítette: Bátori Csaba programtervező matematikus hallgató Témavezető:
Szoftver-mérés. Szoftver metrikák. Szoftver mérés
Szoftver-mérés Szoftver metrikák Szoftver mérés Szoftver jellemz! megadása numerikus értékkel Technikák, termékek, folyamatok objektív összehasonlítása Mér! szoftverek, programok CASE eszközök Kevés szabványos
ICT ÉS BP RENDSZEREK HATÉKONY TELJESÍTMÉNY SZIMULÁCIÓJA DR. MUKA LÁSZLÓ
ICT ÉS BP RENDSZEREK HATÉKONY TELJESÍTMÉNY SZIMULÁCIÓJA DR. MUKA LÁSZLÓ 1 TARTALOM 1.1 A MODELLEZÉS ÉS SZIMULÁCIÓ META-SZINTŰ HATÉKONYSÁGÁNAK JAVÍTÁSA A. Az SMM definiálása, a Jackson Keys módszer kiterjesztése
2. Visszalépéses stratégia
2. Visszalépéses stratégia A visszalépéses keres rendszer olyan KR, amely globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai:
Kétdimenziós mesterséges festési eljárások. Hatások és alkalmazások
Pannon Egyetem Informatikai Tudományok Doktori Iskola Tézisfüzet Kétdimenziós mesterséges festési eljárások. Hatások és alkalmazások Kovács Levente Képfeldolgozás és Neuroszámítógépek Tanszék Témavezet
Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 4. előadás Procedurális programozás: iteratív és rekurzív alprogramok Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
Programrendszerek tanúsítása szoftverminőség mérése
SZEGEDI TUDOMÁNYEGYETEM Programrendszerek tanúsítása szoftverminőség mérése Dr. Gyimóthy Tibor Dr. Ferenc Rudolf Szoftverminőség biztosítás Fő cél: az üzemelő IT rendszerekben csökkenteni a hibák számát
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2015. ősz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2015.
Adatszerkezetek és algoritmusok
2010. január 8. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció Láncolt lista Lassú
Relációk. 1. Descartes-szorzat. 2. Relációk
Relációk Descartes-szorzat. Relációk szorzata, inverze. Relációk tulajdonságai. Ekvivalenciareláció, osztályozás. Részbenrendezés, Hasse-diagram. 1. Descartes-szorzat 1. Deníció. Tetsz leges két a, b objektum
Szoftverminőségbiztosítás
NGB_IN003_1 SZE 2014-15/2 (10) Szoftverminőségbiztosítás Struktúra alapú (white-box) technikák A struktúrális tesztelés Implementációs részletek figyelembevétele Tesztelési célok -> lefedettség Implicit
Mi is volt ez? és hogy is volt ez?
Mi is volt ez? és hogy is volt ez? El zmények: 60-as évek kutatási iránya: matematikai logika a programfejlesztésben 70-es évek, francia és angol kutatók: logikai programozás, Prolog nyelv 1975: Szeredi
Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán
Keresés Rendezés Feladat Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán 2016. november 7. Farkas B., Fiala
Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.
Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán
Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)
Szimuláció RICHARD M. KARP és AVI WIGDERSON A Fast Parallel Algorithm for the Maximal Independent Set Problem című cikke alapján (Készítette: Domoszlai László) 1. Bevezetés A következőkben megadott algoritmus
Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]
Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.
Fókuszált fénynyalábok keresztpolarizációs jelenségei
Fókuszált fénynyalábok keresztpolarizációs jelenségei K házi-kis Ambrus, Klebniczki József Kecskeméti F iskola GAMF Kar Matematika és Fizika Tanszék, 6000 Kecskemét, Izsáki út 10. Véges transzverzális
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.
Diszkrét matematika 1. középszint
Diszkrét matematika 1. középszint 2017. sz 1. Diszkrét matematika 1. középszint 3. el adás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján Komputeralgebra
15. A VERSENYRENDEZÉS
15. A VERSENYRENDEZÉS A versenyrendezés (tournament sort) a maximum-kiválasztó rendezések közé tartozik, ugyanis az elemek közül újra és újra kiválasztja (eltávolítja és kiírja) a legnagyobbat. Az eljárás
Előrenéző és paraméter tanuló algoritmusok on-line klaszterezési problémákra
Szegedi Tudományegyetem Számítógépes Algoritmusok és Mesterséges Intelligencia Tanszék Dr. Németh Tamás Előrenéző és paraméter tanuló algoritmusok on-line klaszterezési problémákra SZTE TTIK, Móra Kollégium,
Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:
Gráfok, definíciók Irányítatlan gráf: G = (V,E), ahol E rendezetlen (a,b),a,b V párok halmaza. Irányított gráf: G = (V,E) E rendezett (a,b) párok halmaza; E V V. Címkézett (súlyozott) gráf: G = (V,E,C)
Gyakori elemhalmazok kinyerése
Gyakori elemhalmazok kinyerése Balambér Dávid Budapesti M szaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Számítástudomány szakirány 2011 március 11. Balambér Dávid (BME) Gyakori
Ellátási lánc optimalizálás P-gráf módszertan alkalmazásával mennyiségi és min ségi paraméterek gyelembevételével
Ellátási lánc optimalizálás P-gráf módszertan alkalmazásával mennyiségi és min ségi paraméterek gyelembevételével Pekárdy Milán, Baumgartner János, Süle Zoltán Pannon Egyetem, Veszprém XXXII. Magyar Operációkutatási
Gyors neutronok detektálási technikái
Gyors neutronok detektálási technikái Részecske-, mag- és asztrofizikai laboratórium Hegedüs Dávid, Kincses Dániel, Rozgonyi Kristóf ELTE TTK Fizikus MSc I. Mérés ideje: 2016. május Mérésvezet : Horváth
Programozás I gyakorlat
Programozás I. - 9. gyakorlat Sztringkezelés, mutatók Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Rendszer- és Számítástudományi Tanszék Utolsó frissítés: November 2, 2009 1 tar@dcs.vein.hu Tar
Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.
Algoritmuselmélet Legrövidebb utak, Bellmann-Ford, Dijkstra Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 3. előadás Katona Gyula Y. (BME
Kódverifikáció gépi tanulással
Kódverifikáció gépi tanulással Szoftver verifikáció és validáció kiselőadás Hidasi Balázs 2013. 12. 12. Áttekintés Gépi tanuló módszerek áttekintése Kódverifikáció Motiváció Néhány megközelítés Fault Invariant
A KUTATÁS EREDMÉNYEI ZÁRÓJELENTÉS 2004-2006.
ÖNELLENŐRZÉS ÉS FUTÁSIDEJŰ VERIFIKÁCIÓ SZÁMÍTÓGÉPES PROGRAMOKBAN OTKA T-046527 A KUTATÁS EREDMÉNYEI ZÁRÓJELENTÉS 2004-2006. Témavezető: dr. Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem
MEDDŐHÁNYÓK ÉS ZAGYTÁROZÓK KIHORDÁSI
Mikoviny Sámuel Földtudományi Doktori Iskola A doktori iskola vezetője: Dr. h.c. mult. Dr. Kovács Ferenc egyetemi tanár, a MTA rendes tagja MEDDŐHÁNYÓK ÉS ZAGYTÁROZÓK KIHORDÁSI TULAJDONSÁGAINAK VIZSGÁLATA,
Algoritmizálás, adatmodellezés tanítása 6. előadás
Algoritmizálás, adatmodellezés tanítása 6. előadás Tesztelési módszerek statikus tesztelés kódellenőrzés szintaktikus ellenőrzés szemantikus ellenőrzés dinamikus tesztelés fekete doboz módszerek fehér
Miskolci Egyetem GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR. Osztályozási fák, durva halmazok és alkalmazásaik. PhD értekezés
Miskolci Egyetem GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR Osztályozási fák, durva halmazok és alkalmazásaik PhD értekezés Készítette: Veres Laura okleveles matematikus-informatikus Hatvany József Informatikai
26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA
26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA Az előző két fejezetben tárgyalt feladat általánosításaként a gráfban található összes csúcspárra szeretnénk meghatározni a legkisebb költségű utat. A probléma
30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK
30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá
Szoftverminőségbiztosítás
NGB_IN003_1 SZE 2014-15/2 (8) Szoftverminőségbiztosítás Szoftvertesztelési folyamat (folyt.) Szoftvertesztelési ráfordítások (Perry 1995) Tesztelésre fordítódik a projekt költségvetés 24%-a a projekt menedzsment
HALMAZELMÉLET feladatsor 1.
HALMAZELMÉLET feladatsor 1. Egy (H,, ) algebrai struktúra háló, ha (H, ) és (H, ) kommutatív félcsoport, és teljesül az ún. elnyelési tulajdonság: A, B H: A (A B) = A, A (A B) = A. A (H,, ) háló korlátos,
22. GRÁFOK ÁBRÁZOLÁSA
22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is
Szakmai zárójelentés
Szakmai zárójelentés A csoporttechnológia (Group Technology = GT) elvi és módszertani alapjaihoz, valamint a kapcsolódó módszerek informatikai alkalmazásaihoz kötődő kutatómunkával a Miskolci Egyetem Alkalmazott
A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).
BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - szeptember Informatika írásbeli A versenyzők figyelmébe: 1. Minden tömböt 1-től kezdődően indexelünk. 2. A rácstesztekre (A rész)
Komplex számok. Komplex számok és alakjaik, számolás komplex számokkal.
Komplex számok Komplex számok és alakjaik, számolás komplex számokkal. 1. Komplex számok A komplex számokra a valós számok kiterjesztéseként van szükség. Ugyanis már középiskolában el kerülnek olyan másodfokú
Algoritmusok és adatszerkezetek gyakorlat 07
Algoritmusok és adatszerkezetek gyakorlat 0 Keresőfák Fák Fa: összefüggő, körmentes gráf, melyre igaz, hogy: - (Általában) egy gyökér csúcsa van, melynek 0 vagy több részfája van - Pontosan egy út vezet
Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20
Teljesítmény Mérés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés 2013 1 / 20 Tartalomjegyzék 1 Bevezetés 2 Visual Studio Kód metrikák Performance Explorer Tóth Zsolt
0,424 0,576. f) P (X 2 = 3) g) P (X 3 = 1) h) P (X 4 = 1 vagy 2 X 2 = 2) i) P (X 7 = 3, X 4 = 1, X 2 = 2 X 0 = 2) j) P (X 7 = 3, X 4 = 1, X 2 = 2)
Legyen adott a P átmenetvalószín ség mátrix és a ϕ 0 kezdeti eloszlás Kérdés, hogy miként lehetne meghatározni az egyes állapotokban való tartózkodás valószín ségét az n-edik lépés múlva Deniáljuk az n-lépéses
Diszkrét matematika 2. estis képzés
Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 10. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék
Véletlen sorozatok ellenőrzésének módszerei. dolgozat
Eötvös Loránd Tudományegyetem Informatikai Kar Komputeralgebra Tanszék Véletlen sorozatok ellenőrzésének módszerei dolgozat Témavezető: Dr. Iványi Antal Miklós egyetemi tanár Készítette: Potempski Dániel
Algoritmusok helyességének bizonyítása. A Floyd-módszer
Algoritmusok helyességének bizonyítása A Floyd-módszer Algoritmusok végrehajtása Egy A algoritmus esetében a változókat három változótípusról beszélhetünk, melyeket az X, Y és Z vektorokba csoportosítjuk
A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása
A fordítóprogramok szerkezete Forrásprogram Forrás-kezelő (source handler) Kódoptimalizálás Fordítóprogramok előadás (A,C,T szakirány) Lexikális elemző (scanner) Szintaktikus elemző (parser) Szemantikus
1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007
Hálózatok II 2007 1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok 1 Az előadáshoz Előadás: Szerda 17:00 18:30 Gyakorlat: nincs Vizsga írásbeli Honlap: http://people.inf.elte.hu/lukovszki/courses/g/07nwii
Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }
Funkcionális és logikai programozás { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem } http://www.ms.sapientia.ro/~mgyongyi ` 1 Jelenlét: Követelmények, osztályozás Az első 4 előadáson
Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik
Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.
Nagyságrendek Kiegészítő anyag az Algoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: Algoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 018. február 1. Az O, Ω, Θ jelölések Az algoritmusok
Programozási nyelvek Java
statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály
Osztott algoritmusok
Osztott algoritmusok A benzinkutas példa szimulációja Müller Csaba 2010. december 4. 1. Bevezetés Első lépésben talán kezdjük a probléma ismertetésével. Adott két n hosszúságú bináris sorozat (s 1, s 2
2. Visszalépéses keresés
2. Visszalépéses keresés Visszalépéses keresés A visszalépéses keresés egy olyan KR, amely globális munkaterülete: egy út a startcsúcsból az aktuális csúcsba (az útról leágazó még ki nem próbált élekkel
Rekurzió. Dr. Iványi Péter
Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(
Programozás I. - 11. gyakorlat
Programozás I. - 11. gyakorlat Struktúrák, gyakorlás Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Rendszer- és Számítástudományi Tanszék Utolsó frissítés: November 16, 2009 1 tar@dcs.vein.hu Tar
A szoftver tesztelés alapjai
Szoftverellenőrzési technikák A szoftver tesztelés alapjai Micskei Zoltán, Majzik István http://www.inf.mit.bme.hu/ 1 Hol tartunk a félévi anyagban? Követelményspecifikáció ellenőrzése Ellenőrzések a tervezési
A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:
A Formális nyelvek vizsga teljesítése a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: 1. Öt kis kérdés megválaszolása egyenként 6 pontért, melyet minimum 12
C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.
C memóriakezelés Ez a kis segédanyag az adatszerkezetek órán használt eszközök megértését hivatott elősegíteni. A teljesség igénye nélkül kerül bemutatásra a mutató típus és a dinamikus memóriakezelés.
értékel függvény: rátermettségi függvény (tness function)
Genetikus algoritmusok globális optimalizálás sok lehetséges megoldás közül keressük a legjobbat értékel függvény: rátermettségi függvény (tness function) populáció kiválasztjuk a legrátermettebb egyedeket
GráfRajz fejlesztői dokumentáció
GráfRajz Követelmények: A GráfRajz gráfokat jelenít meg grafikus eszközökkel. A gráfot többféleképpen lehet a programba betölteni. A program a gráfokat egyedi fájl szerkezetben tárolja. A fájlokból betölthetőek
Specifikáció alapú teszttervezési módszerek
Szoftverellenőrzési technikák Specifikáció alapú teszttervezési módszerek Majzik István, Micskei Zoltán http://www.inf.mit.bme.hu/ 1 Klasszikus tesztelési feladat A tesztelendő program beolvas 3 egész
Specifikáció alapú teszttervezési módszerek
Szoftverellenőrzési technikák Specifikáció alapú teszttervezési módszerek Majzik István, Micskei Zoltán http://www.inf.mit.bme.hu/ 1 Klasszikus tesztelési feladat A tesztelendő program beolvas 3 egész
8. gyakorlat Pointerek, dinamikus memóriakezelés
8. gyakorlat Pointerek, dinamikus memóriakezelés Házi ellenőrzés Egy számtani sorozat első két tagja A1 és A2. Számítsa ki a sorozat N- dik tagját! (f0051) Egy mértani sorozat első két tagja A1 és A2.
Sztöchiometriai egyenletrendszerek minimális számú aktív változót tartalmazó megoldásainak meghatározása a P-gráf módszertan alkalmazásával
Sztöchiometriai egyenletrendszerek minimális számú aktív változót tartalmazó megoldásainak meghatározása a P-gráf módszertan alkalmazásával * Pannon Egyetem, M szaki Informatikai Kar, Számítástudomány
SCILAB programcsomag segítségével
Felhasználói függvények de niálása és függvények 3D ábrázolása SCILAB programcsomag segítségével 1. Felhasználói függvények de niálása A Scilab programcsomag rengeteg matematikai függvényt biztosít a számítások
Fordítás Kódoptimalizálás
Fordítás Kódoptimalizálás Kód visszafejtés. Izsó Tamás 2016. október 20. Izsó Tamás Fordítás Kódoptimalizálás / 1 Aktív változók Angol irodalomban a Live Variables kifejezést használják, míg az azt felhasználó
Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája
Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból
2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).
1. fejezet AWK 1.1. Szűrési feladatok 1. Készítsen awk szkriptet, ami kiírja egy állomány leghosszabb szavát. 2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét,
Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása
Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző
A Markowitz modell: kvadratikus programozás
A Markowitz modell: kvadratikus programozás Harry Markowitz 1990-ben kapott Közgazdasági Nobel díjat a portfolió optimalizálási modelljéért. Ld. http://en.wikipedia.org/wiki/harry_markowitz Ennek a legegyszer
Interfészek. PPT 2007/2008 tavasz.
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált
Programozás alapjai. 10. előadás
10. előadás Wagner György Általános Informatikai Tanszék Pointerek, dinamikus memóriakezelés A PC-s Pascal (is) az IBM PC memóriáját 4 fő részre osztja: kódszegmens adatszegmens stackszegmens heap Alapja:
Amortizációs költségelemzés
Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük
Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.
Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0,
Matematika B/1. Tartalomjegyzék. 1. Célkit zések. 2. Általános követelmények. 3. Rövid leírás. 4. Oktatási módszer. Biró Zsolt. 1.
Matematika B/1 Biró Zsolt Tartalomjegyzék 1. Célkit zések 1 2. Általános követelmények 1 3. Rövid leírás 1 4. Oktatási módszer 1 5. Követelmények, pótlások 2 6. Program (el adás) 2 7. Program (gyakorlat)
Függvények július 13. f(x) = 1 x+x 2 f() = 1 ()+() 2 f(f(x)) = 1 (1 x+x 2 )+(1 x+x 2 ) 2 Rendezés után kapjuk, hogy:
Függvények 015. július 1. 1. Feladat: Határozza meg a következ összetett függvényeket! f(x) = cos x + x g(x) = x f(g(x)) =? g(f(x)) =? Megoldás: Összetett függvény el állításához a küls függvényben a független
V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus
V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus 1 Az előadás tartalma A GI helye az informatikában Az előadás tartalmának magyarázata A
A C programozási nyelv III. Pointerek és tömbök.
A C programozási nyelv III. Pointerek és tömbök. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv III. (Pointerek, tömbök) CBEV3 / 1 Mutató (pointer) fogalma A mutató olyan változó,
Chomsky-féle hierarchia
http://www.cs.ubbcluj.ro/~kasa/formalis.html Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezet ), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.
Már megismert fogalmak áttekintése
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak
értékel függvény: rátermettségi függvény (tness function)
Genetikus algoritmusok globális optimalizálás sok lehetséges megoldás közül keressük a legjobbat értékel függvény: rátermettségi függvény (tness function) populáció kiválasztjuk a legrátermettebb egyedeket
Fibonacci számok. Dinamikus programozással
Fibonacci számok Fibonacci 1202-ben vetette fel a kérdést: hány nyúlpár születik n év múlva, ha feltételezzük, hogy az első hónapban csak egyetlen újszülött nyúl-pár van; minden nyúlpár, amikor szaporodik
1. A k-szerver probléma
1. A k-szerver probléma Az egyik legismertebb on-line probléma a k-szerver probléma. A probléma általános deníciójának megadásához szükség van a metrikus tér fogalmára. Egy (M, d) párost, ahol M a metrikus
Dr. Kulcsár Gyula. Virtuális vállalat félév. Projektütemezés. Virtuális vállalat félév 5. gyakorlat Dr.
Projektütemezés Virtuális vállalat 06-07. félév 5. gyakorlat Dr. Kulcsár Gyula Projektütemezési feladat megoldása Projekt: Projektütemezés Egy nagy, összetett, általában egyedi igény alapján előállítandó
SZTE Nyílt Forrású Szoftverfejlesztő és Minősítő Kompetencia Központ
UNIVERSITY OF SZEGED SZTE Nyílt Forrású Szoftverfejlesztő és Minősítő Kompetencia Központ Gyimóthy Tibor és Ferenc Rudolf Szegedi Tudományegyetem Szoftverfejlesztés Tanszék Szoftverfejlesztés Tanszék Több