Szo$verfejlesztés Eclipse környezetben
Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék
Szo$verfejlesztés kérdései Nagy szo$verprojektek o Sok fejlesztő o Hosszú fejlesztési idő
Kezelni kell o Fejlesztési folyamat o Eszköztámogatás!
Eclipse Release Train Projektek szinkronizált kiadása o 2006 óta o Évente • 1 nagy kiadás (új feature) • 2 service release ( javítások)
Projektek száma 40,000
39
33 31,875
23
23,750 21
15,625
10
7,500 Callisto (3.2)
Europa (3.3)
Ganymede (3.4)
Galileo (3.5)
Helios (3.6)
Projektméret (MLOC) 30,0
24 22,5
18 17
15,0
7,5
6
0 Callisto (3.2)
Europa (3.3)
Ganymede (3.4)
Galileo (3.5)
Sok változat PlaUorm o Windows • Win32 32/64 bit • Early access WPF port is – pillanatnyilag nem fejlesz\k
o Linux • GTK 32/64 bit • GTK PPC/PPC64 bit • Mo\f
o Mac OSX • Carbon 32 bit • Cocoa 32/64 bit
Sok változat Csomagok o Java o Java EE o Plug-‐in developer o C/C++ o Modeling o PHP o…
Eclipse Release Train Sok projekt, bonyolult folyamat A rendszeres release komoly kihívás
“Shipping is hard, that’s why we do it 7 5mes a release.”
Az óra tema\kája Fejlesztési folyamatok Fejlesztési gyakorlatok Eclipse környéki tool támogatás
Fejlesztési folyamatok
Szo$ver fejlesztési folyamat Fejlesztési filozófia o Alapelvek o Megközelítés
Eszköztámogatás o Eszközök o Modellek o Tipikus gyakorla\ megvalósítások
Vízesés modell Folyamat szigorú lépéssorrenddel Alapfeltevés: o Előre megtervezhetünk minden fázist o Egy ellenőrzési fázis a végén
Ritkán használatos
Vízesés modell
Követelménye k
Tervezés
Megvalósítás
Ellenőrzés
Karbantartás
V modell Hasonló vízesés modellhez Alapfeltevés o Előre tervezünk o Ellenőrzés tervezési fázisokkal párba állítható
Beágyazol környezetben gyakran használják o Jól látható a különböző ellenőrzések helye
V-‐modell Követelmények
Specifikáció
Tervezés
Megvalósítás
Modul tesztelés
Integrációs tesztelés
Elfogadtatás
Agilis módszerek Alapfeltevés o Követelményeket nem lehet előre felmérni o Iteranv fejlesztés • Újabb követelmények későbbi fázisban
Többféle eljárás o Scrum o RUP (Ra\onal Unified Process) o EDP (Eclipse Development Process)
Eclipse Development Process 7 fázis (milestone-‐okkal elválasztva) o M5: API freeze o M6: Feature freeze o M7: Code freeze (RC fázis)
Szereplők o Project manager: o Commiler: belső fejlesztő o Contributor: külső hozzájáruló
Szellemi tulajdon védelme Nincs kiadás ellenőrzés nélkül o Contributor: Bugzilla-‐n keresztül commilál o Commiler: csinálhatja közvetlenül is • Ő felel a kód \sztaságáért • Kiadás elől ellenőrzés
Függő kódok ellenőrzése o Engedélyezni kell
Licensz: EPL o GPL-‐lel nem kompa\bilis!
Csoportmunka – Gyakori technikák Verziókezelés o Központosítol o Elosztol
Feladatlista kezelés o Hibák o Új funkciók
Csoportmunka – Gyakori technikák Ellenőrzések o Code review o Unit tesztelés o Formális ellenőrzések
Folytonos integráció (con\nous integra\on) o Integráció azonnal • Fordítás, felépítés • Tesztelés, analízis
Verziókezelő rendszerek
Verziókezelés Több változat ugyanabból a szo$verből o Windows XP, ill. különböző javítások, service packek o Eclipse kiadások
Nem csak szo$ver o Változáskövetés (Word) o Wikilapok
Szo$ver verziókezelés Alapvetően szöveges fájlokra o Különbségszámítás • Egyszerű • Fejlesztő számára érthető
o Akár parancssorból is
Lehet bináris fájlra, modellekre o Különbségszámítás • Bonyolultabb • Nehezen értelmezhető a különbség
o Gyakorla\lag csak támogatással
Szo$ver verziókezelő rendszerek Centralizált o Közös tároló szerveren o Lokálisan • Working copy • Szervert lehet lekérdezni
Elosztol o Nincs (nem kell) közös tárhely o Lokálisan • Teljes tároló • Offline munka!
Centralizált verziókezelő rendszerek Alapfogalom o Változat (revision, version)
Szerver: változatok sorozata Kliens: egy megjelölt változat Példák o CVS o SVN o Perforce
Verziószámok Minden változathoz azonosító o Tetszőleges, sorrendezhető érték • Szám • Verziószám (hierarchikus)
Centralizált verziókezelő rendszerek Repository
‘A’ felhasználó Projekt -‐Fájl1 -‐Fájl2
‘B’ felhasználó
Centralizált verziókezelő rendszerek share
‘A’ felhasználó Projekt -‐Fájl1 -‐Fájl2
Repository
‘B’ felhasználó
Centralizált verziókezelő rendszerek share
Repository Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó
Centralizált verziókezelő rendszerek Repository Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó
Centralizált verziókezelő rendszerek Repository
checkout
Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó
Centralizált verziókezelő rendszerek Repository
checkout
Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r1) >Fájl1 (r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository
commit
Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r1) >Fájl1 (r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository
commit
Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r2) r1) >Fájl1 ((r2) -‐Fájl1 r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r2) r1) >Fájl1 ((r2) -‐Fájl1 r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek update
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r1) -‐Fájl1 (r1) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r2) r1) >Fájl1 ((r2) -‐Fájl1 r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek update
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r2) r1) >Fájl1 ((r2) -‐Fájl1 r1) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository
commit
Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r1)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
Centralizált verziókezelő rendszerek Repository
commit
Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek update
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek update
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
Konfliktus
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek commit
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek commit
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Konfliktus
Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Update & merge
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Update & merge
Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r3) r1)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r3)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 (r3)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository
checkout
Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r3) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository
checkout
Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r4) -‐Fájl2 r1)
Centralizált verziókezelő rendszerek Repository Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘A’ felhasználó Projekt (r2) -‐Fájl1 (r2) -‐Fájl2 (r4)
‘B’ felhasználó Projekt (r2) -‐Fájl1 (r2) >Fájl2 ((r4) -‐Fájl2 r1)
Munkamenet Working copy frissítés (Update) Munka Változtatások elvégzése o Op\mista • Commit, és javítás, ha konfliktus van
o Pesszimista • Update, commit
Párhuzamos ágak Fejlesztés elágazik o Például kísérle\ fejlesztés • Ne befolyásolja a fő ágat
o Karbantartási változat
Elágazás életciklus: o Branch: új ág létrehozása o Commit: változások az ágban o Merge: Ágak egyesítése
Merge Az egyesítés nehéz o Változhat fájlok • Tartalma • Neve
o Konfliktusok • Sok commit • Nem egyértelmű, hogy pontosan mi okozza a konfliktust
Firefox: nincs merge!
Elosztol verziókezelő rendszerek Alapfogalom o Változtatás (changeset)
Egyenrangú szereplők (nincs szerver) o Szerverfunkcionalitást az egyik kliens vehe\ át o Változat: változtatások sorozata
Példák o Git o Mercurial (Hg) o Bazaar
Elosztol verziókezelő rendszerek Előnyök o Offline működés • Verziótörténet elérése • Több változtatás összeállítása
Hátrányok o Bonyolultabb struktúra együlműködéshez o Nincs egyértelmű szerver • Kiadásokhoz • Új felhasználóknak
Verziószám Nincs igazi verziószám o Párhuzamos fejlesztés!
Változtatások azonosítása o Helyele valamilyen hash kód
Szülő változat hashkódja explicit szerepel o Ez sorrendez!
Működés Lokális tárolóval o Commit/update, mint centralizált esetben
Másokkal o Pull: változások feltolása • Tároló tulajdonosa adja a jogosultságokat
o Push: távoli változások lekérése • Tetszőleges tároló megadható, nincs előre rögzítve!
Egyesítés Egyesítés egyszerűbb o Megkeressük az első közös őst o Mindkét ágon a változtatásokat összegyűjtjük o És mindet alkalmazzuk a közös ősre
Jóval megbízhatóbb, mint centralizált esetben
Centralizált vagy elosztol? Cégek o Többnyire centralizált
Nyílt forrású projektek o Egyre inkább elosztol
Git munkamenet
Git munkamenet
Tooling A legtöbb eszközhöz parancssori felület van CVS, SVN o Régóta vannak o Sokféle GUI
Elosztol rendszerek o GUI támogatás korlátozol
Ökölszabályok “Commit early, commit o$en” o Legyen mindenki számára elérhető az aktuális kép o Derüljön ki a párhuzamos munka
Egy commit – egy lényegi módosítás o Code review legkisebb egysége a commit o 2000 soros változáslista -‐> senki sem nézi át!
Ökölszabályok Ne csak a végső állapotot osszuk meg! o Sokáig tart a fejlesztés o Részleges implementáció a függő kód fejlesztéséhez • Interfész • Egyszerűsítel metódusok
o Visszajelzés
Ökölszabály Commit komment fontos o Két sor, hogy mi változol o Esetleg külső link (bug tracker)
Eclipse Team Support
Eclipse Team Support Verziókezelő rendszerek támogatása o Cél: workspace <-‐> tárolók közöƒ szinkronizáció o Általános keretrendszer • Tárolóspecifikus adapterek • Megvalósítandó funkciók (független a megvalósítástól) – Előzmény – Commit/Update –…
o Erre építeni lehet
Támogatol verziókezelő rendszerek CVS o Régi, kiforrol támogatás
SVN o Jól használható o Telepítés nehézkes lehet
Git o JGit és EGit projektek o Viszonylag új
Hg o MercurialEclipse – viszonylag új
Eclipse Team Support További lehetőségek o Erőforráskezelés • Verziókezelő fájljainak elrejtése a plug-‐inek elől • Származtatol erőforrások (derived)
o Szinkronizáció • Lehetőség helyi és távoli rendszer összevetésére • Hol van újabb? • Team Synchronize Perspec\ve
Eclipse Team Support Logikai modellintegráció o Workspace konzisztencia • Frissítés után ellenőrzés/fordítás
o Jelölők (Marker) • Frissítési állapot megjelenítése
o Szeman\kus összehasonlítás • Nem csak szöveges összehasonlítás • Compare Editor támogatás
UML Model Compare (RSA 7.5)
Java source compare
Team Synchronize
History View
Hibajegyek kezelése
Hibajegy kezelés Hibajegylista (issue \cket, bug \cket, stb.) o Egyfajta Todo list
Legegyszerűbb változat o Mindenkinek előre kiadjuk a feladatokat o Feladatkiosztás informálisan • Excel táblázat • Speciális formájú email
Formalizálható a feladatkiosztás
Feladatszerverek Fejlesztők és \cketek összerendelése o Adatbázis o Tipikusan webes felület
Gyakori eszközök o Bugzilla o Trac o Jira o…
Hibajegy Alapegység \cket o Egy hiba vagy új funkció leírása o Metaadat • • • • •
Határidő Felelős Prioritás Komponens azonosítás …
Jegy életciklus Állapotok (példa) o Létrehozva o Elfogadva o Lezárva • Javítva • Érvénytelen • Nem javítjuk
Testre szabható o Új elemek o Kötöl sorrend/jelentés
Bugzilla hibajegy életciklus
Hibajegyek Állapotváltás: o Felhasználói beavatkozás hatására
Lehetséges hibához hozzászólni o Kommunikáció o Állapotváltások indoklása
Csatolmányok o Patch, screenshot, stb.
Miért éri meg használni? Menedzsment o Nyomonkövethetőség • Funkciók állapota • Ki mivel foglalkozik
Felhasználó o Igénybejelentés o Nyomonkövethetőség
Fejlesztő o Segít az időbeosztásban o Feladatok, határidők, prioritások
Integráció verziókezelő rendszerekkel Commit és \cket összekapcsolás o Tickethez hozzálinkelni változatot/változtatást o Változás/változtatáshoz \cketet
Segí\ az állapot nyomonkövetését Példák o Trac-‐SVN o Google Code o…
Mylyn Projekt Ticketkezelés Eclipse környezetben
Mylyn Hibajegyek kezelése Eclipse-‐ben o Általános megoldás • Tetszőleges hibajegykezelőhöz csatolható • Connectorok
o Alapfogalmak • Repository: hibajegykezelő • Query: lekérdezés, eredménye jegyek listája • Task: egy hibajegy
Mylyn – Felhasználói felület View: taskok kezelése
Mylyn felhasználói felület Taszk editor
“Task-‐focused interface” Minden taszkhoz kontextus rendelhető o IDE integráció o Workspace elemek hozzárendelése a taszkhoz
Taszk ak\váció o Kontextushoz nem tartozó elemek szűrése • Navigatorból • Megnyitol editorokból
Taszk ak\válása
Taszk ak\válása
Kontextuskezelés Kontextus a \ckethez csatolható (szerver) o Megosztható fejlesztők közöl o Nagyon precíz állapotmentés • Később folytatható • Más, kapcsolódó taszkhoz is felhasználható
Fordítás és terjesztés
Build Meglepően összetel folyamat o Tényleges fordítás o Ellenőrzések • Sta\kus analízis • Tesztelés •…
o Csomagolás terjesztéshez • • • •
Tömörítés Leíró fájlok előállítása Digitális aláírás …
Eclipse PDE Build Fordítás Függőségek kezelése o Leíró fájlok o Függőségek explicit leírva
Target PlaUorm o Plug-‐inek egy halmaza, amit alapként használunk
Eclipse PDE Build Bővíthető (Builder/Nature) o Sta\kus analízis • FindBugs, PMD
o Kódolási snlus ellenőrzés • CheckStyle
o Kódmetrikák gyűjtése • Eclipse Metrics
Unit tesztelés Tesztek fulathatóak o Eredmény kiértékelésére van támogatás
Bővíthető o Kód fedés mérés -‐ EclEmma
Csomagolás Korlátozol támogatás o Nem egy-‐gombos megvalósítás o Update Site projekt
Eredmény megosztható Update Site-‐ként
Target PlaUorm Plug-‐inek csoportja o Fordításhoz
Saját plug-‐inek
• Elég a hivatkozol interfész
o Fulatáshoz • Kell teljes implementáció is
Kapcsolódó beállítások o PlaUorm o JVM verzió o…
Target plaUorm interfészek
Target plaUorm implementáció
Target PlaUorm szerkesztés
Plug-‐in források Telepítel Eclipse o Plug-‐in leírók felhasználása
Update site o Normál webszerverre felhúzol fájlok o +metaadat
Nyers plug-‐in fájlok o dropins mappa o Ezt a rendszer figyeli
Automa\kus fordítás és csomagolás
Con\nous integra\on Gyakori agilis technika Fejlesztések integrációja o Fordítás o Csomagolás o Tesztelés
Build server Eszköz, amely képes az automa\kus integrációra Cél: automa\kus működés Eszközök o Apache Con\nuum (Ant + Maven) o CruiseControl (Java, .NET, Ruby) o Hudson (Java)
Hudson Java servlet alapú eszköz o Tetszőleges Java alkalmazás szerver o Java beépítel szerver is!
Nem végez tényleges fordítást o Időzítés o Menedzselés
Beépülőkkel bővíthető Több különböző folyamatot tartalmazhat o Folyamatok közöl függőség
[email protected]
Munkafolyamat részei – 1. Trigger o Kiváltó esemény • • • • •
Idő (Nightly build) Verziókezelő rendszer változásai Kézi Függő folyamat Bővíthető
Munkafolyamat részei – 2. Build o Tényleges fordítási lépések o Beépítel támogatás • Ant • Shell script
o Bővíthető • Maven • Buckminster
Munkafolyamat részei – 3. Post-‐build o Befejező lépések • • • •
Csomagolás Publikálás Függő buildek indítása Értesítések
Jól használható De: o Erőforrásigényes o Felállítani nem egyszerű
Eclipse build előállítása (2010.03.) Forrás beszerzése
20 perc
Digitális aláírás
1 óra 14 perc
Director használata
20 perc
P2 repo-‐k előállítása
4 perc
Kiadások csomagolása
30 perc
Unit tesztelés
6 óra 40 perc
Eclipse plug-‐in fordítás
Plug-‐inek automa\kus fordítása Build lassú folyamat o Ne fusson minden a fejlesztő gépén o Build szerver
IDE grafikus felület nem használható
Build végrehajtó motorok Leggyakoribb eszközök o Make • C/C++ környékén
o Ant • Make file Javahoz, XML alapokon
o Maven • Egységes forrás letöltés és fordítás
Probléma…
OSGi függőségek kezelése Több különböző megoldás o Ant4Eclipse • PDE/Build teljes elkerülése
o Pax, Tycho • Maven felkészítése OSGi függőségekre
o Headless mód • PDE/Build Ant scripteket generál
Headless mód Fulatható Eclipse példány o GUI nélkül o Parancssori használat
Feltétel o Toolok megfelelő csomagolása • Core és gui plug-‐inek • Parancssori interfész
Segítség o OSGi konzol
Buckminster Komponens összeállítás Magas szintű eszköz o Meglevő eszközök felel fut • Ami Eclipse-‐ben fordítható, az Buckminsterrel is!
o Leírók segítsége • Eclipse plug-‐inekhez nagyrészt automa\kus • Egyébként szerkesztési támogatás
Felhasználás IDE támogatás o Leírók szerkesztése o Fulatás is
Headless mód Hudson támogatás
Buckminster Forrás beszerzés o Eclipse Team Support o Target PlaUorm
Fordítás – több eszköz segítségével o PDE/Build o Ant o Maven
Csomagolás o Target PlaUorm o P2 Update site
Buckminster komponensek Komponens o Egy egység o Műveletek értelmezhetőek rajta • Részben előre definiáltak – Pl. Update site készítés
• Bővíthetőek
Főbb leírók Erőforrás térkép (Resource map) o Plug-‐in források megadása
Komponens lekérdezés (Component Query) o Adatlekérés (Materializa\on)
Komponens leíró (Component Specifica\on) o Leírófájl komponensekhez
Resource map Források kijelölése o Update site o Eclipse telepítés o Workspace o Team Support: CVS/SVN/Git o Maven
Név alapján lehet választani
Resource map
Component query Adatlekérdezés o Mit kell megszerezni? o Azonosító + Resource map
Opcionális paraméterek o Forrás vagy bináris? o Branchek/tagek, stb. o Release/Nightly build repository
Component query
Akciók OSGi komponenseknél cél o Egyszerű fordítás (fájlrendszer) o P2 update site o Target PlaUorm o Workspace
Általános o Ant script
Buckminster és Hudson Hudson beépülő o Buckminster fogalomkészlet megjelenik Hudsonban o Azonosíthatóak szükséges elemek