1 Fejlett Programozási Technikák 2. 15/5
Fejlett Programozási Technológiák 2. 2 Közhírré tétetik Március 10.-én tól TIK I. Előadó MS RoadShow ASP.NET XML Web Szolgáltatások … Ingyenes részvétel Regisztrálni célszerű a: px px
Fejlett Programozási Technológiák 2. 3 Az előző előadás tartalma: Újdonságok az 1.5-ös Java-ban Generics Metaadatok Új ciklus Enum kezelés Statikus import Hibakezelés Egyszerű kivételek Kivétel elfogása Saját kivételek gyártása Bármely kivétel elfogása Finally Többszálúság Motiváció Szálkezelés alapjai Megosztott erőforrások kezelése Szál állapotok Együttműködés szálak között
Fejlett Programozási Technológiák 2. 4 Források
Fejlett Programozási Technológiák 2. 5 A mai előadás tartalma: CVS Miért van rá szükségünk? Használata Címkézés Ágak kezelése JUnit Tesztelés TestCase TestSuit Log4J Miért nem println()? Log Log4J Ant
Fejlett Programozási Technológiák 2. 6 CVS: Probléma Nagy kód Csoportmunka Verzió követés Open Source Folyamatos javítás diff, patch Probléma ki mit miért csinált Hogyan lehet egy régebbi javítást visszavonni Hogyan lehet egy régebbi verziót elővarázsolni?
Fejlett Programozási Technológiák 2. 7 Megoldás RCS Fájl centrikus Lock-modify-unlock Nincs hálózat támogatás CVS Könyvtár szintű Hálózat támogatás Intelligens összefűzés Copy-Modify-Merge Microsoft VSS BitTorrent CelarCase …
Fejlett Programozási Technológiák 2. 8 Concurent Versions System Az Open Source fejlesztés alapja Elosztott, lazán koordinált fejlesztés Alapjai: Először script gyűjtemény az RCS-hez diff (a különbség két szöveg fájl között) patch ( a diff által megállapított különbséget adja hozzá az adott fájlhoz) A különbségeket tárolja Könyvtár kezelés, több könyvtárat is összefoghatunk egy néven (projekt) Naplózás Alapvetően zárolásmentes Minden felhasználó egyenrangú
Fejlett Programozási Technológiák 2. 9 CVS Működőképes kódot tölt fel mindenki Mindenki frissítheti a saját munkaváltozatát Amennyiben többen ugyanazt a részt módosították a CVS értesíti a résztvevőket a konfliktusról Fontosabb fogalmak: Check out Commit Conflict Log message Repository Revision Update Working copy
Fejlett Programozási Technológiák Hogyan használjuk A leggyakrabban használt ciklus: checkout - munkapéldány modify – Dolgozunk rajta update – Frissítjük a munkapéldányunkat (itt lehet konfliktus) commit – Elküldjük a módosításokat egy log üzenettel együtt (itt lehet konfliktus) Általában a CVS-ben lévő projektet működőképes állapotban szokták tartani, tehát a fejlesztő csak akkor töltheti fel a saját munkáját, ha az a működőképességet nem rontja
Fejlett Programozási Technológiák Parancsok cvs [globális kapcsolók] parancs [lokális kapcsolók] cvs –Q update –p Meg kell adnunk a CVS tár elérési útvonalát Helyi gépen: cvs –d /usr/local/cvs update Távoli gépen: cvs -d szeged.hu:/usr/local/cvs login HOME környezeti változó -.cvspass
Fejlett Programozási Technológiák Kapcsolódás CVS-hez pserver – titkosítatlan jelszó ext – külső programot használ (rsh, ssh,… – CVS_RSH = ssh), bármilyen program lehet amely képes a távoli gépen azonosításra és parancs futtatásra kserver – kerberos 4-es azonosítás gserver – GSSAPI (kerberos 5, …), Windows- nál ezt célszerű használni
Fejlett Programozási Technológiák Új projekt létrehozása cvs – d /usr/local/cvs/test init cvs import –m ”log msg” projname vendortag releasetag cvs checkout projname cvs add –m ”log msg” filename … cvs commit –m ”log msg”
Fejlett Programozási Technológiák Konfliktusok jelölése #include void main () { printf ("Hello, world!\n"); <<<<<<< hello.c printf ("this change will conflict\n"); ======= printf ("between hello and goodbye\n"); >>>>>>> 1.3 printf ("Goodbye, world!\n"); }
Fejlett Programozási Technológiák Módosítások visszavonása X, Y együtt fejlesztenek Y feltölti az 1.3-as verziót X erről nem tud és feltölti az 1.4-es verziót X szeretné megtartani a saját változtatásait és kiiktatni Y változtatásait cvs update –j 1.4 –j 1.3 cvs update cvs ci –m ”visszavont verzio”
Fejlett Programozási Technológiák Megjelölések (Tagging), Dátumok Minden fájlnak külön módosítás számlálója van Ezek külön-külön vannak kezelve, növelve attól függően melyik fájlt mikor módosították Projekteknél szeretünk közös verziót, dátumot használni Pl.: kérem a 3-as mérföldkövet, kérem a múlt hétvégi verziót Megoldás: Lekérés dátum szerint: cvs –q update –D ” :59:59 GMT” Tag hozzáfűzés cvs -q tag Release_1_1_0 Lekérés: cvs checkout –r Release_1_1_0 myproj
Fejlett Programozási Technológiák Ágak (Branches) Lehetőséget ad a párhuzamos fejlesztése: Instabil kód Egy mérföldkőhöz javítás utólag, nem akarjuk az egész fő vonalon azonnal végigvinni Ha majd elég stabil a fő ág akkor össze lehet fésülni (merging)
Fejlett Programozási Technológiák Kommunikáció A CVS értesítheti a fejlesztőket a projekt alakulásáról Az eddigi megoldás n darab szeparált homokozó Ki, mikor, mely részen dolgozik? Pl.: Szóljatok ha hozzányúltok a kódomhoz! Figyelők (watches) cvs watch add x.c – a fejlesztő megmondja, hogy mely fájlok érdekelik cvs edit – ha módosítani akarja akkor jeleznie kell (read only egyébként) cvs unedit Értesítést kaphatnak -ben, …
Fejlett Programozási Technológiák Speciális karakterek Speciális karaktereket is használhatunk a kódban $Author$ $Date$ $Revision$ … A CVS behelyettesíti az értékét
Fejlett Programozási Technológiák Tesztelés Java erősen típusos nyelv Futás közbeni típus, … ellenőrzés Funkcionalitás? Gyakran változó specifikáció Hogyan lehetünk biztosak benne, hogy módosításaink nem visznek újabb hibákat a kódba? White box tesztek Automatikus tesztelés?
Fejlett Programozási Technológiák JUnit Kód átírás Előbb a tesztet írjuk meg (extrém programozás) Hogyan teszteljünk komponenseket? Main metódusok ? Hogyan döntjük el nagy mennyiségű tesztnél, hogy sikeres/sikertelen volt? A Main hozzáfér a private, protected tagokhoz Nehéz áttekinteni a kimenetet Az eredményeket össze kellene gyűjteni A láthatóság sérül xUnit keretrendszer NUnit HttpUnit DBUnit Cactus
Fejlett Programozási Technológiák JUnit Test interfész run metódus TestSuite Csoportosító A tesztelésnél megadhatom, hogy melyik csomagot futatom
Fejlett Programozási Technológiák JUnit használata import junit.framework.TestCase; public class SimpleTest extends TestCase { public SimpleTest (String name) { super(name); } public void testSomething() { assertTrue(4 == (2 * 2)); } Futtatása parancssorból, grafikus felületről test szóval kezdődő metódusokat tudjuk futtatni Inicializálásra a setUp() metódust kell felülírni Takarításra a tearDown() metódust kell felülírni Tesztetk csoportosítása TestSuite()
Fejlett Programozási Technológiák Vizsgálatok assertEquals(expected, actual) assertEquals(String message, expected, actual) assertNull(Object object), assertNull(String message, Object object) assertNotNull(Object object), assertNotNull(String message, Object) assertSame(Object expected, Object actual), assertSame(String message, Object expected, Object actual) assertTrue(boolean condition), assertTrue(String message, boolean condition) fail(), fail(String message)
Fejlett Programozási Technológiák Test Case futtatás setUp() test kezdetű metódus tearDown() Újra ez minden test kezdetű metódusra
Fejlett Programozási Technológiák Test Suite public static Test suite() { TestSuite suite= new TestSuite(); suite.addTest( new MoneyTest("money equals") { protected void runTest() { testEquals(); } } ); suite.addTest( new MoneyTest("simple add") { protected void runTest() { testSimpleAdd(); } } ); return suite; } public static void main(String args[]) { junit.textui.TestRunner.run(suite()); }
Fejlett Programozási Technológiák Naplózás, Log, Log4J Hibakeresés, monitorozás Különböző kimenetek Különböző kategóriák Különböző formátumok println()? java.utils.log Log4J
Fejlett Programozási Technológiák Log Elemei: LogRecord Handler Filter Formatter
Fejlett Programozási Technológiák ANT make, gnumake, nmake, jam OS specifikusak „Szabad” szöveg alapúak ANT XML alapú konfigurációs fájl Java programok gyűjteménye melyek a megfelelő Task interfészt megvalósítják Platform független
Fejlett Programozási Technológiák Példa simple example build file
Fejlett Programozási Technológiák FileSet Minták segítségével tudunk fájlokat megadni FileList – fájl lista PatternSet – minta lista
Fejlett Programozási Technológiák Példa
Fejlett Programozási Technológiák Érdekesebb parancsok Ant – másik ANT indtítása Copydir – egész könyvtár másolása Cvs – CVS kezelése Exec – egy rendszer program lefuttatása Get – az adott URL-ről letölti a fájlt Javadoc/Javadoc2 – legyártja a dokumentációt Tstamp - DSTAMP, TSTAMP, and TODAY
Fejlett Programozási Technológiák Bevált tehnikák Description – projecthelp használata jikes használata
Fejlett Programozási Technológiák ANT alap elemek Ant AntCall AntStructure Apply/ExecOn Available Basename BuildNumber BUnzip2 BZip2 Checksum Chmod Concat Condition Supported conditions Copy Copydir Copyfile Cvs CvsChangeLog Sequential SignJar Sleep Sql Style Subant Sync Tar Taskdef Tempfile Touch TStamp Typedef Unjar Untar Unwar Unzip Uptodate Waitfor War WhichResource XmlProperty Xslt Zip CvsVersion CVSPass CvsTagDiff Defaultexcludes Delete Deltree Dependset Dirname Ear Echo Exec Fail Filter FixCRLF GenKey Get GUnzip GZip Import Input Jar Java Javac Javadoc/Javadoc2 LoadFile LoadProperties Mail MacroDef Manifest Mkdir Move Parallel Patch PathConvert PreSetDef Property Record Rename Replace Rmic
Fejlett Programozási Technológiák Opcionális elemek NET Tasks ANTLR Attrib Cab Chgrp Chown Clearcase Tasks Continuus/Synergy Tasks Depend EJB Tasks Echoproperties FTP IContract Image Jarlib-available Jarlib-display Jarlib-manifest Jarlib-resolve JavaCC Javah JspC JDepend JJDoc JJTree Jlink JProbe Coverage JUnit JUnitReport Metamata Metrics Metamata Audit Mim MParse Native2Ascii NetRexxC Perforce Tasks PropertyFile Pvcs RenameExtensions ReplaceRegExp RExec Rpm ServerDeploy Setproxy Scp Script Scriptdef Sound SourceOffSite Splash Sshexec Starteam Tasks Stylebook Symlink Telnet Test Translate Visual Age for Java Tasks Microsoft Visual SourceSafe Tasks Weblogic JSP Compiler XmlValidate
Fejlett Programozási Technológiák A mai előadás tartalma: CVS Miért van rá szükségünk? Használata Címkézés Ágak kezelése JUnit Tesztelés TestCase TestSuit Log4J Miért nem println()? Log Log4J Ant
Fejlett Programozási Technológiák A következő előadás tartalma JFC és Swing Múlt Felépítés Java Bean Felső szintű konténerek Középső szintű konténerek Elemek Eseménykezelés Rajzolás
Fejlett Programozási Technológiák Közhírré tétetik Március 10.-én tól TIK I. Előadó MS RoadShow ASP.NET XML Web Szolgáltatások … Ingyenes részvétel Regisztrálni célszerű a: px px