Automatiserad GUI-testning för Java EDA270 - Djupstudie. J. Assarsson D08, Lunds Tekniska Högskola dt08ja2@student.lth.se

Storlek: px
Starta visningen från sidan:

Download "Automatiserad GUI-testning för Java EDA270 - Djupstudie. J. Assarsson D08, Lunds Tekniska Högskola dt08ja2@student.lth.se"

Transkript

1 Automatiserad GUI-testning för Java EDA270 - Djupstudie J. Assarsson D08, Lunds Tekniska Högskola dt08ja2@student.lth.se 26 februari 2012

2 Abstract Den här rapporten är en del av en djupstudie i kursen Coaching av programvaruteam på LTH (Lunds tekniska högskola). Syftet med rapporten är att komma fram till om det nns något lämpligt verktyg för att skapa automatiska GUI-test (graska användargränssnitt) för kurser med programmeringsprojekt. Rapporten behandlar olika typer av testningstekniker för GUI. Fyra olika verktyg studeras närmare och utvärderas. Avslutningsvis testas verktyget UISpec4J i ett utvecklingsteam från en kurs med programmeringsprojekt.

3 Innehåll 1 Inledning 2 2 Bakgrund 2 3 Tekniker Capture & replay Modellbaserad Event-driven Verktyg jfcunit FEST-Swing UISpec4J SwingUnit Körtider GUI-testning i PVG-kursen Val av verktyg Tillämpning Slutsats 9 A Exempel 11 A.1 Exempel-GUI A.1.1 RegistrationGui.java A.2 jfcunit test A.3 FEST-Swing test A.4 UISpec4J test A.5 SwingUnit test A.5.1 TestRegistrationGui.java A.5.2 TestRegistrationGui.xml B UISpec4J patch 22 1

4 1 Inledning Precis som övriga delar av ett program måste testas, måste så även GUI (Graphical User Interface, på svenska: graskt användargränssnitt). I takt med att GUI har fått en allt mer central roll inom mjukvaruutveckling, har behovet av att kunna testa dem på ett eektivt sätt ökat. Inom agila utvecklingsmetoder är automatiserade enhetstest väldigt viktigt under utvecklingen, detta har bidragit till att intresset för automatiserad GUI-testning också ökat där [3] [5]. Denna djupstudie kommer behandla olika metoder för att skapa automatiska GUI-test. Den kommer även ta upp några olika tekniker som används för att utföra testen. Fokus kommer främst att ligga på olika verktyg för automatiserad GUI-testning, på deras för- och nackdelar. Jag kommer först att undersöka vilka verktyg som nns tillgängliga för GUI-testning för Java. Jag kommer även själv att försöka testa så många av verktygen som möjligt, för att kunna göra en bättre bedömning av dem. Min förhoppning är att jag ska hitta minst ett testverktyg som på ett enkelt och bra sätt gör det möjligt att skapa automatiserade GUItest, som skulle kunna användas i kurser med programmeringsprojekt. Slutligen kommer jag att presentera mina slutsatser av denna djupstudie. 2 Bakgrund Anledningen till denna djupstudie är att jag vill undersöka om det nns något lämpligt verktyg för att skapa automatiska GUI-test i PVG-projekten (programvaruutveckling i grupp). PVG är en projektkurs på LTH. Den är obligatorisk för alla studenter som går andra året på datateknik. Utvecklingsteam bildas av 8-10 stycken andra-års studenter (utvecklare) och coachas av 2 stycken studenter från kursen Coaching av programvaruteam. Syftet med kursen är att ge praktiska erfarenheter av hur man arbetar i ett agilt mjukvaruteam [12]. Projektet utförs utifrån XP (extremeprogramming) metoden. Det består av totalt 6 iterationer, där en iteration är en heldagslabb (8-17). Projektet går ut på att utveckla ett system för tidtagning för olika typer av endurotävlingar (en form av motorsport). Målet med kursen är inte att teamet ska klara av att implementera så mycket funktionalitet som möjligt, utan är att tillämpa de olika XP-praktikerna och att producera kod med hög kvalitet. Inom XP används automatiska enhetstest för att man på ett snabbt och smidigt sätt ska kunna försäkra sig om att den nya koden som läggs till inte förstör någon som tidigare implementerats [9]. Problemet är att GUI:t i många fall inte täcks av denna typ av test, istället testas det manuellt [10]. I ett större projekt är det orimligt att utföra manuell testning varje gång något nytt har implementerats, eftersom det är väldigt tidskrävande. Därför hade det varit önskvärt att kunna använda automatiserade test även för GUI:t. I PVG-projekten ska utvecklarna tillämpa TDD (test-driven-development), för alla delar förutom för GUI:t. Utvecklarna behöver inte använda automatiska test för att testa GUI:t, istället är det tillåtet att utföra testningen manuellt. Förmodligen är anledningen till detta att kursledningen anser att det är för tidskrävande och komplicerat för utvecklarna att skapa automatiska GUI-test. Oftast blir GUI:t inte så stort i projekten, så det går snabbt att testa det manuellt. Jag tycker dock att det kan vara lämpligt att utvecklarna även får lära sig att tillämpa TDD för GUI:t, förutsatt att de har tillgång till ett bra testverktyg. 2

5 3 Tekniker GUI-testning är ett relativt ungt forskningsområde. Att testa GUI automatiskt är mycket svårare än att testa vanlig kod automatiskt. Problemet är främst att interaktionen med GUI:t bygger på event (händelser) som användaren genererar, t.ex. att användaren klickar på ett visst ställe eller att användaren trycker på en viss tangent. Detta gör det svårare att skapa testen [5] [6]. Det nns era olika typer av tekniker och teorier om hur GUI kan testas. Jag har försökt göra en indelning av tre vanliga tekniker som används. När jag läst olika artiklar om ämnet har det ibland varit svårt att kategorisera en viss teknik, oftast är det kombinationer av olika tekniker. 3.1 Capture & replay Capture and replay [1] är som man hör på namnet att man spelar in (muspekarens rörelser, var man klickar samt knapptryckningar från tangentbordet) när man använder GUI:t och vid ett senare tillfälle kan man spela upp det igen. Detta kan man använda för att testa att GUI:t fortfarande beter sig på samma sätt som det gjorde när man spelade in. Tekniken kallas även bland annat Capture and playback [3] och Record/Playback [4] [5]. Det nns mängder av olika program för den här typen av testning. Oftast är verktygen oberoende av vad för typ av GUI som testat. Vissa av verktygen använder sparade bilder till att veriera att GUI:t beter sig som tänkt. Fördelen med denna typ av verktyg är att det går både snabbt och lätt att skapa testen. Nackdelen är att testprogrammet inte har någon uppfattning om GUI:t, den använder bara koordinater för att hitta rätt. Om GUI:ts utseende förändras eller om GUI:t ritas upp annorlunda på en annan dator måste testen skapas på nytt [2] [5]. 3.2 Modellbaserad Modellbaserad GUI-testning använder abstrakta modeller av GUI:t för att modellera GUI:ts beteende. För att skapa modellen studerar man olika event-öden som kan uppstå [11]. Modellen är en riktad graf där noderna representerar de olika tillstånden som GUI:t kan benna sig i, bågarna representerar olika event. Grafen kan ses som en tillståndsmaskin som ändrar tillstånd beroende på event. Modellen kan sen användas till att generera automatiska testscenarier [8]. Det optimala hade varit att kunna skapa modellerna automatiskt utifrån ett givet GUI. I dagsläget är detta inte möjligt, utan modellen måste skapas förhand. Det bedrivs en hel del forskning på området, vilket kan leda till att det i framtiden utvecklas bättre verktyg som använder denna typ av teknik [2] [8] [11]. 3.3 Event-driven I event-driven GUI-testning drar man nytta av att man känner till hur GUI komponenterna är uppbyggda och fungerar. Denna typ av testning kallas även Programmatic GUI testing [5]. För att komma åt komponenterna används en testrobot som kan identiera de olika komponenterna i ett GUI. Komponenter av samma typ behöver unika namn, för att roboten ska kunna skilja dem åt. När en komponent har hittats, kan roboten simulera användar-event på komponenten [6]. När testet skrivs bestämmer man vilken komponent som 3

6 ett visst event ska verka på. På så sätt blir denna typ av test mer exibelt och kan anpassas efterhand som GUI:t utvecklas, till skillnad mot t.ex. capture and replay tekniken [5]. Eftersom testet inte agerar blint utan vet vilken komponent som ska användas, kommer testet kunna hantera att GUI:t förändras eller att det inte ritas upp på exakt samma sätt på olika datorer. 4 Verktyg Verktygen är den centrala delen av den här rapporten. I detta kapitlet kommer jag presentera fyra olika testverktyg som jag provat. Följande egenskaper anser jag vara viktiga för att ett verktyg ska vara lämpligt att använda i PVG-projekten: Kompatibelt med Java-swing Kunna köras med JUnit Inte kräver allt för många steg för att få det att fungera Kunna användas med TDD Jag sökte efter olika verktyg och valde ut de fyra som jag trodde var mest lämpade för att användas i PVG-projekten. Gemensamt för alla de fyra utvalda verktygen är att de är event-drivna, de är Java-baserade, de kan användas för att testa Swing GUI och att de kan köras med JUnit. Jag valde att inte testa några Capture and replay verktyg eftersom det då inte är möjligt att tillämpa TDD, samt att jag anser att dessa inte är lämpade för projekt där GUI:t förändras ofta. Jag försökte även hitta lämpliga modellbaserade testverktyg, men hade svårt för att hitta några. Ett av dem jag hittade var GUITAR [17]. Det saknade dock två av de eftersökta egenskaperna. Att det inte kunde användas med JUnit, samt att det krävdes en hel del jobb både för att få det att fungera och för att skapa test. För att kunna göra en bedömning testade jag de utvalda verktygen. I slutet av detta kapitlet har jag gjort en sammanställning av körtiderna för de olika verktygen när de används för att testa ett exempel-gui. 4.1 jfcunit jfcunit är ett Java-baserat ramverk som utökar JUnit [13]. För att kunna använda det krävs att man använder JUnit 3.7 eller högre samt Jakarta RegExp 1.2 eller högre. För att installera jfcunit laddar man ner den senaste versionen av jfcunit.jar samt den senaste versionen av JakartaRegExp.jar och inkluderar dessa i sitt projekt. Alternativt laddar man ner jfcunit som en plugin till Eclipse. För vidare instruktioner se jfcunits hemsida [13]. Testens struktur är ungefär den samma som för vanliga JUnit-test. JUnit 4.x notationer som ignoreras, istället anger man att en metod är ett test genom att börja metodnamnet med test, för att skapa en before-metod måste metoden heta setup. Detta är samma struktur som används i JUnit 3.x. Annars är det inga större skillnader mellan hur testen skrivs i jfcunit jämfört med JUnit. Utvecklarna kommer känna igen strukturen och bör därför snabbt förstå hur testen är uppbyggda. 4

7 För att komma åt de olika komponenterna i GUI:t används en NamedCompnentFinder, som hittar namngivna JCompnoent-objekt i GUI:t. När man hittat de komponenter man vill använda, använder man en Helper för att skicka event till komponenten [13]. Därför krävs det att komponenterna man testar har unika namn, samt att man vet vad för typ av JComponent det är. Om man tillämpar TDD, medför detta att man måste bestämma vilken typ av komponenter som ska användas när man skriver testet. Detta kan vara en nackdel eftersom implementation blir på så sätt begränsad av testet. När testen körs visas GUI:t som vanligt, fast all interaktion styrs automatiskt. Det har både sina för- och nackdelar. Fördelarna är att det är lätt att se vad som händer när testet körs. Nackdelarna är att utvecklaren kan påverka testets utfall om hon använder datorn samtidigt som testet körs. Muspekaren styrs dock inte, till skillnad från t.ex. FEST-Swing och SwingUnit. Detta göra att testet inte påverkas av att man yttar muspekaren samtidigt som testet körs. Att köra testen tar en denitivt märkbar tid (se kapitel 4.5). Fördelar JUnit baserat Testen liknar vanliga JUnit-test Man ser när testen körs Nackdelar Möjligheten att påverka testen när de körs Långsamt 4.2 FEST-Swing FEST (Fixtures for Easy Software Testing) är ett Java-baserat testramverk som är kompatibelt med TestNG och JUnit [14]. FEST består av era moduler. En av dessa moduler är FEST-Swing, som är gjord för att testa Swing baserad GUI. För att kunna använda FEST-Swing krävs Java 1.5 eller senare. För att installera FEST-Swing laddar man ner den senaste versionen av fest-swing-x.x.zip, packar upp fest-swing-x.x.jar, fest-assert-x.x.jar, fest-reflection-x.x.jar, fest-util-x.x.jar samt jcip-annotations-x.x.jar och inkluderar dessa i sitt projekt (x.x byts ut mot versionsnumret). Strukturen för testen är samma som för vanliga JUnit-test. Det är notationen som avgör ifall testet ska köras som ett JUnit-test eller som ett TestNG-test. För att testen ska köras som ett JUnit-test använder man samma notationer som för vanliga JUnit-test, vill man däremot använda TestNG används andra notationer [14]. Utvecklarna kommer därför snabbt känna igen sig och förstå hur testen är uppbyggda. För att testen ska fungera, krävs det att komponenter av samma typ har unika namn. Komponenterna som man får ut är av speciella Fixture-typer [6]. Detta medför att implementationen inte är låst till att använda en specik JComponent, vilket t.ex. jfcunit kräver. När testen körs så visas GUI:t som vanligt. All interaktion styrs automatiskt, även muspekaren styrs automatiskt. Det är dock möjligt att röra muspekaren samtidigt som test körs, då kan testet börja interagera med annat än GUI:t som man testar. Som jag skrev tidigare är det både positivt och negativt att GUI:t visas när testet körs. Fördelen är att man ser vad som händer när testet körs. Nackdelen är att man inte kan använda datorn samtidigt. Att köra igenom ett test tar en del tid (se kapitel 4.5). 5

8 Fördelar JUnit kompatiblet Testen liknar vanliga JUnit-test Man ser när testen körs Nackdelar Möjligheten att påverka testen när de körs Testen kan påverka annat än enbart GUI:t som ska testas Långsamt Uppdelat i fem olika jar-ler 4.3 UISpec4J UISpec4J är kompatibelt med JUnit och TestNG [15]. UISpec4J är väldigt lätt att installera, det enda man behöver göra är att ladda ner den senaste versionen av UISpec4J.jar och inkluderar len till sitt projekt. Du behöver inte själv ange ifall du använder JUnit eller TestNG, detta upptäcker UISpec4J automatiskt. Strukturen för testen är väldigt lik vanliga JUnit-test. JUnit 4.x notationer som ignoreras. För att ange att en metod är ett test måste metodnamnet börja med test, för att skapa en before-metod måste metoden heta setup. Detta är samma struktur som används i JUnit 3.x. Därför bör utvecklarna snabbt förstår hur testen är uppbyggda. För att kunna skilja på komponenterna namnger man dem [15]. När man hämtar ut en komponent från GUI:t så blir den inkapslad i en speciell UISpec4J-typ, detta påminner väldigt mycket om hur Fixtures i FEST-Swing fungerar. Detta gör att implementationen inte blir lika låst till att använda en specik JComponent, till skillnad från t.ex. jfcunit. Detta är det enda verktyget av de jag testat som inte visade GUI:t när testen kördes. Detta gör att användaren inte kan påverka testet. En annan fördel med detta är att testen körs väldigt snabbt, likt vanliga JUnit-test. Det nns dock nackdelar med att GUI:t inte visas när testen körs. Det kan i många fall vara en fördel att kunna se vad testet gör, framförallt när man håller på att skriva testen eller om man är osäker på att testet beter sig som man tänkt. Ett annat problem som också uppstår på grund av att GUI:t inte visas är att det inte är möjligt att testa om rätt komponent har fokus. Fördelar JUnit kompatibelt Testen liknar vanliga JUnit-test Snabbt Nackdelar Måste patchas för att kunna användas med OpenJDK (se bilaga B) GUI:t visas inte när testen körs 6

9 4.4 SwingUnit SwingUnit installeras genom att man laddar ner den senaste versionen av swingunit.jar och inkluderar len till sitt projekt. För att kunna köra testen måste man även ladda ner eller skapa en speciell l, TestSetting.properties, och lägga den i projektets rotkatalog. TestSetting.properties innehåller inställningar för hur testverktyget ska fungera t.ex. väntetiden från att ett nytt fönster skapats tills testet ska börja interagera med fönstret. Testen skrivs i XML. I XML-len anges test som scenarier, varje scenario består av en sekvens av interaktioner på GUI:t. I det riktiga testet (testet som kan startas av JUnit) skapar man ett EventPlayer-objekt, till det anger man vilket scenario man vill spela upp [16]. När ett scenario spelas upp, körs scenariots sekvens av interaktioner på GUI:t. Dokumentationen för projektet och framför allt för hur man skriver test har jag inte lyckats hitta på annat sätt än i SwingUnits repositorium på För övrigt verkar det inte nnas någon form av aktivitet kring projektet längre, varken i form av utveckling eller forum. Jag tror att utvecklarna i PVG-kursen skulle tycka att det var väldigt ovant att skriva test i XML-format. Detta i kombination med att det är svårt att hitta dokumentation mm, gör att jag tycker att SwingUnit är direkt olämpligt att använda i PVG-kursen. GUI:t visas när testen körs. Muspekaren och textinmatning styrs automatiskt. Om utvecklaren yttar musen samtidigt som testet körs, kan det leda till att testet börjar interagera med annat än GUI:t som ska testas. På samma sätt sker textinmatningen där muspekaren klickar, vilket kan leda till oönskade situationer. Fördelar JUnit baserart Man ser när testen körs Nackdelar Testen skrivs i XML Möjligheten att påverka testen när de körs Testen kan påverka annat än enbart GUI:t som ska testas Långsamt Dålig dokumentation 4.5 Körtider Eftersom det var stor skillnad mellan körtiderna för de olika testverktygen, tyckte jag att det kunde vara intressant att titta närmare på detta. Jag skapade ett exempel-gui. GUI:t är ett exempel på hur ett tidigt GUI i PVG-projektet kan se ut. Sen försökte jag skapa så likvärdiga tester som möjligt för de fyra olika verktygen. Exempel-GUI:t med tillhörande tester nns samlade i bilaga A. Observera att exemplen enbart är till för demonstrationssyfte och bör inte användas som exempel för hur man skriver bra GUI-tester eller GUI. Jag körde igenom varje test 20 gånger och beräknade en genomsnittstid för en körning. Alla test kördes på samma dator med samma program och inställningar. Syftet med resultatet är inte att ge några exakta siror för hur lång tid det tar att köra ett test, det är mer till för att ge en liten förståelse för tidsskillnaderna mellan de olika testverktygen. 7

10 Eftersom antalet test i mitt exempel är lågt, kan resultatet vara något missvisande. För att göra testsekvenserna mer verklighetstrogna samt för att kunna jämföra de tidigare resultaten mot något, fyrdubblade jag antalet test. Observera att testen inte körs fyra gånger i rad, utan den första uppsättningen test kopierades och sen klistrades tre kopior av den in i samma testl. På samma sätt som tidigare körde jag testen 20 gånger och beräknade genomsnittstiden. Resultatet nner du i tabellen nedan. Omgång jfcunit FEST-Swing UISpec4J SwingUnit Normal 5.294s 3.456s 0.145s 7.329s Fyrdubbelt s s 0.204s s Från tabellen kan man se att när antalet test fyrdubblades, ökades körtiderna ungefär med en faktor 4, för alla testverktyg förutom UISpec4J. För UISpec4J ökade körtiden ungefär med en faktor 1.4. Skillnaden var att testet fortfarande kördes väldigt snabbt (på under 1s). Anledningen att körtiden inte ökade linjärt, tror jag beror på att den tiden som ett nytt testfall medför är förhållandevis liten jämfört mot en konstant tid för att initiera testet. Framförallt i större projekt kan det vara viktigt att ha körtiden i åtanke då man väljer ett testverktyg. 5 GUI-testning i PVG-kursen 5.1 Val av verktyg Jag använde resultatet från förra kapitlet som underlag för att göra en bedömning av om något av verktygen är lämpade för att användas i PVG-projekten. Jag anser att SwingUnit har era egenskaper som gör det mindre lämpligt att använda i PVG-projekten. Framförallt tycker jag att det är för stor skillnad mellan att skriva testen i XML istället för att skriva dem som vanliga JUnit-test. Dokumentationen och dess åtkomst kan också orsaka problem. Något som jag tycker är direkt negativt med SwingUnit är att det är möjligt att påverka utfallet av ett test, när det körs och att testet till och med kan påverka annat än GUI:t som man testar. FEST-Swing är väl dokumenterat, men kräver att man lägger till inte mindre än fem stycken jar-ler. När man väl har inkluderat alla jar-lerna är det bara att börja skriva test. Det går både snabbt och lätt att skriva testen. Det nns dock en nackdel, nämligen att muspekaren styrs av testen. Detta kan leda till testet börjar interagera med annat än GUI:t som ska testas. FEST-Swing skulle mycket väl kunna vara lämpligt att använda för GUI-testning i PVG-projekten. jfcunit fungerar väldigt bra. Det går snabbt att installera och man kan komma igång med att skriva testen direkt. Den enda direkta nackdelen som jag kan komma på är att man måste specicera vilken typ av JComponent en komponent är. Jag tror att jfcunit kan vara lämpligt att använda för GUI-testning i PVG-projekten. UISpec4J fungerar också väldigt bra. Det går snabbt att installera och det är väldigt lätt att förstå hur testen är uppbyggda. Det är väldokumenterat och det går att hitta många exempel på hur verktyget kan användas. På samma sätt som i FEST-Swing behöver man inte ange vilken JComponent-typ som en viss komponent ska ha. Det enda negativa jag kan se med UISpec4J är att GUI:t inte visas när testet körs. Detta kan göra det svårt att få 8

11 exakt koll på vad som händer när testet körs. Jag tror att UISpec4J kan vara lämpligt att använda för GUI-testning i PVG-projekten. Sammanfattningsvis är det bara SwingUnit som jag direkt kan utesluta som lämpligt att använda i PVG-projekten. De andra tre har alla sina för- och nackdelar. Helst av allt hade jag velat att samma utvecklingsteam skulle testa alla tre verktygen, för att sen ge deras åsikt om dem. Eftersom det skulle ta för mycket fokus från utvecklarna att sitta och testa alla tre verktygen ck jag nöja mig med att välja ut ett av verktygen som de skulle testa. Sen tidigare har jag erfarenheter av jfcunit. Det största missnöjet med jfcunit har varit att det tar väldigt lång tid att köra testen (i förhållande till vanliga JUnit-test). Eftersom PVG-kursen går ut på att utvecklarna ska tillämpa testdriven utveckling, där de ska köra enhetstesten ofta, blir det jobbigt att vänta upp emot en minut (eller mer) på att testen ska köra klart. Detta kan leda till att utvecklarna inte kör GUI-testen eller än värre att de inte köra några test överhuvudtaget. Kombinationen med att ha GUI-test som tar lång tid att köra och att utvecklarna i PVGprojekten i många fall har problem med att sköta testdisciplinen, tror jag kan leda till ännu sämre testdisciplin. Därför valde jag att teamet som jag vara coach för skulle testa att använda UISpec4J. 5.2 Tillämpning Som jag skrev i det föregående kapitlet valde jag att det teamet som jag var coach i skulle prova att använda UISpec4J i deras projekt. Det var en utvecklare i teamet som ck GUI-testning som spike (hemuppgift). Uppgiften var att undersöka hur man kan använda UISpec4J och skriva några test för det bentliga GUI:t. Jag gav honom inga hjälpmedel förutom en länk till hemsidan för UISpec4J. Utvecklaren gjorde några test inför iterationen. Han tyckte varken det var svårt att installera eller att skriva test för UISpec4J. Det uppstod dock problem när testen skulle köras på skolans studentdatorer (Ubuntu 11.04, OpenJDK och Eclipse 3.6.1). Problemet är att OpenJDK använder ett annat awt-toolkit. Inställningen är hårdkodad i UISpec4J, därför måste man ändra i källkoden för UISpec4J (se bilaga B). Jag räknar inte med att problemet är något som många PVGstudenter skulle lösa snabbt och lätt. Får de däremot en tydlig beskrivning på hur man löser problemet, tror jag inte att det är några svårigheter för dem att åtgärda det. Alternativt kan utvecklarna förses med en färdigpatchad jar-l med lösningen. Utvecklarna har skrivit några GUI-test under iterationerna. De som skrivit testen har inte stött på några problem. Dock har inte alla utvecklarna i teamet provat på att skriva GUItest. 6 Slutsats Sammanfattningsvis kan jag konstatera att testa GUI är denitivt mer komplicerat än att testa vanlig kod. Det nns dock en del bra verktyg för ändamålet, men de har alla sina för- och nackdelar. Jag hade gärna sett att det fanns något testverktyg där det var möjligt att välja ifall GUI:t skulle visas när det testades eller inte. Jag tror att UISpec4J skulle kunna fungera väldigt bra att använda i PVG-projekten. Även för testdriven utveckling av GUI:t. Jag hade dock behövt mer tid och er team som testat verktyget för att kunna komma fram till ett säkrare resultat. 9

12 Referenser [1] Andrea Adamoli, Dmitrijs Zaparanuks, Milan Jovic, and Matthias Hauswirth. Automated gui performance testing. Software Quality Journal, 19(4):801839, [2] Pekka Aho, Nadja Menz, Tomi Räty, and Ina Schieferdecker. Automated java gui modeling for model-based testing purposes. In ITNG, pages , [3] Malte Finsterwalder. Conference, Automating acceptance tests for gui applications in an extreme programming environment, [4] Atif Memon. Gui testing: Pitfalls and process. IEEE Computer, 35(8):8788, [5] Alex Ruiz and Yvonne Wang Price. Test-driven gui development with testng and abbot. IEEE Software, 11(3):5157, [6] Alex Ruiz and Yvonne Wang Price. Gui testing made easy. IEEE Software, 24:99103, [7] 29th International Conference on Software Engineering (ICSE 2007), Minneapolis, MN, USA, May 20-26, IEEE Computer Society, [8] Xun Yuan and Atif M. Memon. Using gui run-time state as feedback to generate test cases. In ICSE [7], pages [9] Chromatic. Book, Extreme programming pocket guide. O'Reilly, pages 25-29, [10] A. Memon, I. Banerjee, and A. Nagarajan. Conference, GUI Ripping: Reverse Engineering of Graphical User Interfaces for Testing. 10th Working Conference on Reverse Engineering (WCRE 2003), Victoria, Canada, November 13-16, IEEE Computer Society, pages , [11] Fevzi Belli, Mutlu Beyazt, and Nevin Güler. Event-Based GUI Testing and Reliability Assessment Techniques - An Experimental Insight and Preliminary Results. Conferance 2011 Fourth International Conference on Software Testing, Verication and Validation Workshops, 2011 [12] Kursplaner 2011/2012 EDA260, ( ), [Online] [13] jfcunit User Documentation, ( ), [Online] [14] fest - Fixtures for Easy Software Testing, ( ), [Online] [15] UISpec4J Java/Swing GUI Testing Made Simple!, ( ), [Online] [16] Swingunit, ( ), [Online] [17] GUITAR Home Page, ( ), [Online] 10

13 A Exempel A.1 Exempel-GUI Figur 1: Bild på exempel GUI:t A.1.1 RegistrationGui.java import java.awt.borderlayout; import java.awt.event.*; import java.text.simpledateformat; import java.util.date; import javax.swing.*; public class RegistrationGui extends JFrame { private JTextField startnumbertextfield; private JTextArea latestregistrationstextarea; private JButton registrationbutton; public RegistrationGui() { super(); initcomponents(); this.pack(); this.setvisible(true); private void initcomponents() { JPanel toppanel = new JPanel(); toppanel.setlayout(new BorderLayout()); registrationbutton = new JButton("Registrera"); registrationbutton.setname("registrationbutton"); registrationbutton.addactionlistener(new ActionListener() public void actionperformed(actionevent arg0) { register(); ); startnumbertextfield = new JTextField(5); 11

14 startnumbertextfield.setname("startnumbertextfield"); toppanel.add(startnumbertextfield, BorderLayout.CENTER); toppanel.add(registrationbutton, BorderLayout.EAST); latestregistrationstextarea = new JTextArea(); latestregistrationstextarea.setname("latestregistrationstextarea"); latestregistrationstextarea.setrows(5); latestregistrationstextarea.seteditable(false); this.add(toppanel, BorderLayout.NORTH); this.add(latestregistrationstextarea, BorderLayout.CENTER); private void register() { if (!startnumbertextfield.gettext().equals("")) { try { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); latestregistrationstextarea.settext(integer.parseint(startnumbertextfield.gettext()) + "; " + sdf.format(new Date()) + "\n" + latestregistrationstextarea.gettext()); catch (NumberFormatException e) { startnumbertextfield.settext(""); A.2 jfcunit test import java.awt.event.keyevent; import javax.swing.*; import junit.extensions.jfcunit.*; import junit.extensions.jfcunit.eventdata.*; import junit.extensions.jfcunit.finder.namedcomponentfinder; public class TestRegistrationGui extends JFCTestCase { private NamedComponentFinder namefinder; private RegistrationGui gui; private JTextField startnumbertextfield; private JTextArea latestregistrationstextarea; private JButton registrationbutton; public TestRegistrationGui(String name) { super(name); public void setup() { sethelper(new JFCTestHelper()); gui = new RegistrationGui(); namefinder = new NamedComponentFinder(JComponent.class, ""); 12

15 flushawt(); namefinder.setname("startnumbertextfield"); startnumbertextfield = (JTextField) namefinder.find(gui, 0); namefinder.setname("latestregistrationstextarea"); latestregistrationstextarea = (JTextArea) namefinder.find(gui, 0); namefinder.setname("registrationbutton"); registrationbutton = (JButton) namefinder.find(gui, 0); public void testsingleregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_1)); gethelper().enterclickandleave( new MouseEventData(this, registrationbutton)); "A registration should be added to the latestregistrationtextarea", "1", latestregistrationstextarea.gettext().split(";")[0]); "The startnumbertextfield should be empty after a registration", "", startnumbertextfield.gettext()); public void testemptyregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); "The startnumbertextfield should be empty", "", startnumbertextfield.gettext()); gethelper().enterclickandleave( new MouseEventData(this, registrationbutton)); "The latestregistrationtextarea should still be empty", "", latestregistrationstextarea.gettext()); public void testinvalidregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_A)); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_B)); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_C)); "The startnumbertextfield should contain the typed string", "abc", startnumbertextfield.gettext()); 13

16 gethelper().enterclickandleave( new MouseEventData(this, registrationbutton)); "The latestregistrationtextarea should still be empty", "", latestregistrationstextarea.gettext()); "The startnumbertextfield should be cleared", "", latestregistrationstextarea.gettext()); public void testmultipleregistrations() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_1)); gethelper().enterclickandleave( new MouseEventData(this, registrationbutton)); "A registration should be added to the top off the latestregistrationtextarea", "1", latestregistrationstextarea.gettext().split(";")[0]); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_2)); gethelper().enterclickandleave( new MouseEventData(this, registrationbutton)); "A registration should be added to the top off the latestregistrationtextarea", "2", latestregistrationstextarea.gettext().split(";")[0]); gethelper().sendkeyaction( new KeyEventData(this, startnumbertextfield, KeyEvent.VK_3)); gethelper().enterclickandleave( new MouseEventData(this, registrationbutton)); String[] split = latestregistrationstextarea.gettext().split("; \n"); "The top row off the startnumbertextfield should contain the latest registration", "3", split[0]); "The middle row off the startnumbertextfield should contain the second registration", "2", split[2]); "The bottom row off the startnumbertextfield should contain the first registration", "1", split[4]); A.3 FEST-Swing test import static org.junit.assert.*; import java.awt.event.keyevent; import org.fest.swing.core.keypressinfo; import org.fest.swing.edt.*; import org.fest.swing.fixture.*; 14

17 import org.junit.*; public class TestRegistrationGui { private FrameFixture window; private JTextComponentFixture startnumbertextfield; private JTextComponentFixture latestregistrationstextarea; private JButtonFixture public static void setuponce() { public void setup() { RegistrationGui frame = GuiActionRunner.execute(new GuiQuery<RegistrationGui>() { protected RegistrationGui executeinedt() { return new RegistrationGui(); ); window = new FrameFixture(frame); window.show(); startnumbertextfield = window.textbox("startnumbertextfield"); latestregistrationstextarea = window.textbox("latestregistrationstextarea"); registrationbutton = public void testsingleregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.text()); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_1)); registrationbutton.click(); "A registration should be added to the latestregistrationtextarea", "1", latestregistrationstextarea.text().split(";")[0]); "The startnumbertextfield should be empty after a registration", "", public void testemptyregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.text()); "The startnumbertextfield should be empty", "", startnumbertextfield.text()); registrationbutton.click(); 15

18 "The latestregistrationtextarea should still be empty", "", public void testinvalidregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.text()); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_a)); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_b)); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_c)); "The startnumbertextfield should contain the typed string", "abc", startnumbertextfield.text()); registrationbutton.click(); "The latestregistrationtextarea should still be empty", "", latestregistrationstextarea.text()); "The startnumbertextfield should be cleared", "", public void testmultipleregistrations() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.text()); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_1)); registrationbutton.click(); "A registration should be added to the top off the latestregistrationtextarea", "1", latestregistrationstextarea.text().split(";")[0]); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_2)); registrationbutton.click(); "A registration should be added to the top off the latestregistrationtextarea", "2", latestregistrationstextarea.text().split(";")[0]); startnumbertextfield.pressandreleasekey(keypressinfo.keycode(keyevent.vk_3)); registrationbutton.click(); String[] split = latestregistrationstextarea.text().split("; \n"); "The top row off the startnumbertextfield should contain the latest registration", "3", split[0]); 16

19 "The middle row off the startnumbertextfield should contain the second registration", "2", split[2]); "The bottom row off the startnumbertextfield should contain the first registration", "1", public void teardown() { window.cleanup(); A.4 UISpec4J test import org.uispec4j.*; import org.uispec4j.interception.windowinterceptor; public class TestRegistrationGui extends UISpecTestCase { static { UISpec4J.init(); private Window window; private TextBox startnumbertextfield; private TextBox latestregistrationstextarea; private Button registrationbutton; public void setup() throws Exception { window = WindowInterceptor.run(new Trigger() { public void run() { new RegistrationGui(); ); startnumbertextfield = window.gettextbox("startnumbertextfield"); latestregistrationstextarea = window.gettextbox("latestregistrationstextarea"); registrationbutton = window.getbutton("registrationbutton"); public void testsingleregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); startnumbertextfield.typekey(key.d1); registrationbutton.click(); "A registration should be added to the latestregistrationtextarea", "1", latestregistrationstextarea.gettext().split(";")[0]); "The startnumbertextfield should be empty after a registration", "", startnumbertextfield.gettext()); 17

20 public void testemptyregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); "The startnumbertextfield should be empty", "", startnumbertextfield.gettext()); registrationbutton.click(); "The latestregistrationtextarea should still be empty", "", latestregistrationstextarea.gettext()); public void testinvalidregistration() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); startnumbertextfield.typekey(key.a); startnumbertextfield.typekey(key.b); startnumbertextfield.typekey(key.c); "The startnumbertextfield should contain the typed string", "abc", startnumbertextfield.gettext()); registrationbutton.click(); "The latestregistrationtextarea should still be empty", "", latestregistrationstextarea.gettext()); "The startnumbertextfield should be cleared", "", latestregistrationstextarea.gettext()); public void testmultipleregistrations() { "The latestregistrationtextarea should be empty", "", latestregistrationstextarea.gettext()); startnumbertextfield.typekey(key.d1); registrationbutton.click(); "A registration should be added to the top off the latestregistrationtextarea", "1", latestregistrationstextarea.gettext().split(";")[0]); startnumbertextfield.typekey(key.d2); registrationbutton.click(); "A registration should be added to the top off the latestregistrationtextarea", "2", latestregistrationstextarea.gettext().split(";")[0]); startnumbertextfield.typekey(key.d3); registrationbutton.click(); String[] split = latestregistrationstextarea.gettext().split("; \n"); "The top row off the startnumbertextfield should contain the latest registration", "3", split[0]); 18

21 "The middle row off the startnumbertextfield should contain the second registration", "2", split[2]); "The bottom row off the startnumbertextfield should contain the first registration", "1", split[4]); A.5 SwingUnit test A.5.1 TestRegistrationGui.java Observera att man måste ändra skyddsnivån för attributet latestregistrationstextarea i RegistrationGui, för att testetklassen ska komma åt det. import java.awt.*; import javax.swing.*; import swingunit.extensions.extendedroboteventfactory; import swingunit.framework.*; import junit.framework.testcase; public class TestRegistrationGui extends TestCase { private Scenario scenario; private RobotEventFactory roboteventfactory = new ExtendedRobotEventFactory(); private FinderMethodSet methodset = new FinderMethodSet(); private Robot robot; private RegistrationGui gui; protected void setup() throws Exception { Runnable r = new Runnable() { public void run() { gui = new RegistrationGui(); ; SwingUtilities.invokeAndWait(r); robot = new Robot(); TestUtility.waitForCalm(); String filepath = "TestRegistrationGui.xml"; scenario = new Scenario(robotEventFactory, methodset); scenario.read(filepath); /* * Note: I had to change the protection of the latestregistrationstextarea * attribute in RegistrationGui to be able to do the assertions. */ public void testsingleregistration() throws ExecuteException { EventPlayer player = new EventPlayer(scenario); player.run(robot, "testsingleregistration"); 19

22 "A registration should be added to the latestregistrationtextarea", "1", gui.latestregistrationstextarea.gettext().split(";")[0]); public void testemptyregistration() throws IllegalStateException, IllegalArgumentException, ExecuteException { EventPlayer player = new EventPlayer(scenario); player.run(robot, "testemptyregistration"); public void testinvalidregistration() throws IllegalStateException, IllegalArgumentException, ExecuteException { EventPlayer player = new EventPlayer(scenario); player.run(robot, "testinvalidregistration"); /* * Note: I had to change the protection of the latestregistrationstextarea * attribute in RegistrationGui to be able to do the assertions. */ public void testmultipleregistrations() throws IllegalStateException, IllegalArgumentException, ExecuteException { EventPlayer player = new EventPlayer(scenario); player.run(robot, "testmultipleregistrations"); String[] split = gui.latestregistrationstextarea.gettext().split("; \n"); "The top row off the startnumbertextfield should contain the latest registration", "3", split[0]); "The middle row off the startnumbertextfield should contain the second registration", "2", split[2]); "The bottom row off the startnumbertextfield should contain the first registration", "1", split[4]); protected void teardown() throws Exception { // Terminate application. Runnable r = new Runnable() { public void run() { if (gui!= null) { gui.setvisible(false); ; SwingUtilities.invokeAndWait(r); gui = null; scenario = null; robot = null; 20

23 A.5.2 TestRegistrationGui.xml <?xml version="1.0" encoding="utf-8"?> <document componentfinder="a_couple_of_class_and_name_is_equal" windowfinder="class_is_equal_strictly" windowclass="registrationgui"> <!-- *** Unit test scenario for RegistrationGui *** --> <scenario name="testsingleregistration"> <Verify property="text" expected="" name="latestregistrationstextarea" componentclass="jtextarea" windowclass="registrationgui"/> <Click name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <TypeText text="1"/> <Click componentclass="jbutton" name="registrationbutton" windowclass="registrationgui"/> <Verify property="text" expected="" name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> </scenario> <scenario name="testemptyregistration"> <Verify property="text" expected="" name="latestregistrationstextarea" componentclass="jtextarea" windowclass="registrationgui"/> <Verify property="text" expected="" name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <Click componentclass="jbutton" name="registrationbutton" windowclass="registrationgui"/> <Verify property="text" expected="" name="latestregistrationstextarea" componentclass="jtextarea" windowclass="registrationgui"/> </scenario> <scenario name="testinvalidregistration"> <Verify property="text" expected="" name="latestregistrationstextarea" componentclass="jtextarea" windowclass="registrationgui"/> <Click name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <TypeText text="abc"/> <Verify property="text" expected="abc" name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <Click componentclass="jbutton" name="registrationbutton" windowclass="registrationgui"/> <Verify property="text" expected="" name="latestregistrationstextarea" componentclass="jtextarea" windowclass="registrationgui"/> <Verify property="text" expected="" name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> </scenario> <scenario name="testmultipleregistrations"> 21

24 <Verify property="text" expected="" name="latestregistrationstextarea" componentclass="jtextarea" windowclass="registrationgui"/> <Click name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <TypeText text="1"/> <Click componentclass="jbutton" name="registrationbutton" windowclass="registrationgui"/> <Click name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <TypeText text="2"/> <Click componentclass="jbutton" name="registrationbutton" windowclass="registrationgui"/> <Click name="startnumbertextfield" componentclass="jtextfield" windowclass="registrationgui"/> <TypeText text="3"/> <Click componentclass="jbutton" name="registrationbutton" windowclass="registrationgui"/> </scenario> </document> B UISpec4J patch Följande ändring måste göras i len org.uispec4j.uispec4j.java för att UISpec4J ska fungera tillsammans med OpenJDK: if ("Linux".equalsIgnoreCase(System.getProperty("os.name"))) { System.setProperty("awt.toolkit", "sun.awt.motif.mtoolkit"); ska ändras till if ("Linux".equalsIgnoreCase(System.getProperty("os.name"))) { System.setProperty("awt.toolkit", "sun.awt.x11.xtoolkit"); 22

Testramverk och Model based testing med java i praktiken

Testramverk och Model based testing med java i praktiken WHITE PAPER MODEL BASED TESTING Testramverk och Model based testing med java i praktiken Prolore AB Page 1 (6) Web: www.prolore.se Målet med artikeln Den här artikeln syftar till att praktiskt visa hur

Läs mer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Grafiskt användargränssnitt, Swing Layout och komponenter Göra

Läs mer

Testning av användargränssnitt

Testning av användargränssnitt Testning av användargränssnitt Författare: Christian Holmgren Sanna Mauritzon Datum: 2011-02-28 Sammandrag Rapporten är ämnad att ge en överblick över området att testa grafiska användargränssnitt. Detta

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015 Objektorienterad Programkonstruktion Föreläsning 3 9 nov 2015 Kursnämnd Namn kommer... UML: Klassdiagram UML: Relationer Ärver från superklass Implementerar gränssnitt Dubbelriktad eller oriktad relation

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 18 Igår: Genomgång av dugga Rekursion Idag och på måndag: Om essän Lite, lite teori om konstanter Grafiska användargränssnitt Grundläggande

Läs mer

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3 Johan Eliasson JUnit Junit Unit Testing Unit testing för java Används för att testa att metoder/klasser beter sig som det var tänkt Många IDE:er tex Eclipse har inbyggt stöd för detta. JUnit 3 Vi skriver

Läs mer

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing Föreläsning 15 (16) Introduktion till Swing Historik (java.awt) JDK 1.0 AWT (Abstract Window Toolkit) Paket för gränssnittsprogrammering Har en del nackdelar: Använder s.k. native code Stödjer endast komponenter

Läs mer

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015 LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015 Testning med JUnit 1 Inledning JUnit är ett ramverk för enhetstestning av Javakod. Det är utvecklat

Läs mer

MVC-mönstret. model-view-control i Swing

MVC-mönstret. model-view-control i Swing MVC-mönstret model-view-control i Swing MVC Tanken bakom MVC (model view control) är att separera uppgifter i ett program från varandra. Model - Den data som behandlas View - Hur användargränssnittet ser

Läs mer

Java-concept och Swing. Swing low, sweet chariot

Java-concept och Swing. Swing low, sweet chariot Java-concept och Swing Swing low, sweet chariot Javas Swing-API En del av Javas standard-api API - application programming interface Ett klassbibiliotek som följer med Java Är designat med många OO-concept

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

Institutionen för datavetenskap HT 1 2007/2008. Testning med JUnit

Institutionen för datavetenskap HT 1 2007/2008. Testning med JUnit LUNDS TEKNISKA HÖGSKOLA EDA690 Algoritmer och datastrukturer Institutionen för datavetenskap HT 1 2007/2008 Enhetstestning Testning med JUnit När man implementerat en klass måste man, innan den kan användas,

Läs mer

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik Fortsättningskurs i programmering F 5 GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 1 Abstract Window Toolkit Paket för hantering av grafik dvs skapa grafisk användargränssnitt java.awt

Läs mer

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius ITK:P1 Att implementera en spelidé i Java DSV Peter Mozelius import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Lektion4 extends JFrame implements ActionListener { final int

Läs mer

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se 1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik

Läs mer

Versionshantering. Jan Erik Moström

Versionshantering. Jan Erik Moström Versionshantering Jan Erik Moström Johan Eliasson Versionssystem Gjorda för att användas av en eller flera personer på en eller flera platser, exempelvis: För en ensam användare som jobbar med ett projekt

Läs mer

Automatiserad testning av GUI

Automatiserad testning av GUI Automatiserad testning av GUI Mehmet Fatih Cicek (ada10mci@student.lu.se) Farhad Johari (ada10fjo@student.lu.se) 4/3 2014 Abstrakt Den här rapporten är en del av kursen Coaching av programvaruteam (EDA270)

Läs mer

Verktyget FindBugs. Djupstudie i kursen EDA 270 Coachning av programvaruteam. Christofer Bach dt05cb6 Daniel Nilsson dt05dn4. Lunds Tekniska Högskola

Verktyget FindBugs. Djupstudie i kursen EDA 270 Coachning av programvaruteam. Christofer Bach dt05cb6 Daniel Nilsson dt05dn4. Lunds Tekniska Högskola Verktyget FindBugs Djupstudie i kursen EDA 270 Coachning av programvaruteam Christofer Bach dt05cb6 Daniel Nilsson dt05dn4 Lunds Tekniska Högskola 15 feb 08 1. Sammanfattning Denna djupstudie kommer att

Läs mer

Malmö högskola 2007/2008 Teknik och samhälle

Malmö högskola 2007/2008 Teknik och samhälle Laboration Gui Avsikten med denna laboration är att du ska träna på att bygga grafiska användargränssnitt. Spara dina resultat i paketet laborationgui. Längst bak i laborationen finns fullständiga lösningar

Läs mer

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Föreläsnings 11 - GUI, Händelsestyrda program, MVC Föreläsnings 11 - GUI, Händelsestyrda program, MVC Josef Svenningsson Tisdag 20/11 Boken Denna föreläsning går igenom följande sektioner i boken: 10.1 och 10.2 11.1 Notera att kapitel 11 inte finns i boken

Läs mer

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 3: Händelsestyrda program och användargränssnitt (2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september

Läs mer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :

Läs mer

PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 DSV SU/KTH sid 1 (6) PROG2 VT13 PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst

Läs mer

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur

Läs mer

Mer om grafiska komponenter. Händelsestyrda program

Mer om grafiska komponenter. Händelsestyrda program Layout Managers TDA143 I1 Programmerade system Föreläsning 14 (OH-bilder 10) Mer om grafiska komponenter. Händelsestyrda program Utplaceringen av komponenter i en behållare styrs med en Layout Manager.

Läs mer

PROGRAMMERINGSTEKNIK TIN212

PROGRAMMERINGSTEKNIK TIN212 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Robin Adams Göteborg 8 June 2018 PROGRAMMERINGSTEKNIK TIN212 Dag: Fredag Datum:

Läs mer

Laboration 10 - Eclipse

Laboration 10 - Eclipse Laboration 10 - Eclipse Avsikten med laborationen är att du ska träna på att använda paket, att du ska packa några klassfiler i en jar-fil och slutligen använda innehållet i en jar-fil från en annan klass

Läs mer

ID1004 Laboration 3, 5-6 November 2012

ID1004 Laboration 3, 5-6 November 2012 18-okt-2012/FK ID1004 Laboration 3, 5-6 November 2012 Labben bör göras individuellt. Beräknad tid ca 2 timmar. Instruktionen antar att labben utförs i datasal, med hjälp av den integrerade utvecklingsmiljön

Läs mer

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004 Lösningsförslag Programmeringsmetodik, KV: Java och OOP 17 januari 2004 Examinator: Johan Karlsson Skrivtid: 9-15 Hjälpmedel: En av följande böcker: Barnes & Kölling: Objects First With Java a practical

Läs mer

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser? Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Testplanering, test-first, testverktyg

Testplanering, test-first, testverktyg Testplanering, test-first, testverktyg Mats Skoglund Department of Computer and Systems Sciences Stockholm University/Royal Institute of Technology Stockholm, Sweden 12 mars 2007 Mats Skoglund Page 1(33)

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Fredagen 13 januari 2012, 14.00 18.00. Jourhavande lärare: Björn von Sydow, tel 0722/391401. Inga hjälpmedel. Lösningar

Läs mer

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack 725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den

Läs mer

JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat:

JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat: JUnit 4 - användning Grunderna Henrik Bergström DSV SU/KTH org.junit org.junit.test Innehåller bland annat: Test Assert Obs! Inte ett paket annotation som berättar att den efterföljande metoden är ett

Läs mer

Tentamen Programmering fortsättningskurs DIT950

Tentamen Programmering fortsättningskurs DIT950 Tentamen Programmering fortsättningskurs Datum: 2015-03-17 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 G: 24-43 VG: 44-60 (max 60) Lärare:. Någon besöker ca 10.00

Läs mer

PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 DSV SU/KTH sid 1 (6) PROG2 PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http. 2I1073 Lektion 2 Servlets, säkerhet, och filhantering KTH-MI Peter Mozelius import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Lektion2a extends HttpServlet { public void

Läs mer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

TENTAMEN. Kurs: Applikationsutveckling i Java 5DV135. Ansvarig lärare: Johan Eliasson. HT12 Datum: Tid: kl

TENTAMEN. Kurs: Applikationsutveckling i Java 5DV135. Ansvarig lärare: Johan Eliasson. HT12 Datum: Tid: kl UMEÅ UNIVERSITET Institutionen för Datavetenskap 13-04-04 TENTAMEN Kurs: Applikationsutveckling i Java 5DV135 Ansvarig lärare: Johan Eliasson HT12 Datum: 13-04-04 Tid: kl 9.00-13.00 Namn: Personnummer:

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max 30p i denna halvtentamen Hjälpmedel:

Läs mer

Lösningar för tenta 3 DAT043,

Lösningar för tenta 3 DAT043, Lösningar för tenta 3 DAT043, 2018-08-22. Uppgift 1 class Person{ public String förnamn; public String efternamn; public int ålder; private double längd; private double vikt; public Person(String förnamn,

Läs mer

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions Testdriven utveckling Magnus Jonsson Siemens Medical Solutions 2 Soarian Stort projekt, ca 400 personer i projektet Distribuerad utveckling i USA, Indien och Sverige Web baserat lösning med admin client

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F16:1 OOP Objekt-orienterad programmering Föreläsning 16 Grafiska användargränssnitt, GUI Ytor Komponenter Layout-managers Lyssnare GUI - Graphical User Interface OOP F16:2 Man skapar en yta (ett fönster)

Läs mer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00 Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Repetition: Arv En subklass ärver alla variabler och metoder från sin superklass.

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Lektion Händelsehanterare

Lektion Händelsehanterare Lektion Händelsehanterare Händelsehanterare kallas även lyssnare. En lyssnare har som uppgift att ta hand om olika händelser som kan inträffa. För att lyssnaren skall reagera på händelser måste den registreras

Läs mer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25 Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if

Läs mer

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: 2:a september 200, klockan 8:30-12:30. Plats: V Ansvarig lärare: Katarina Blom, tel 772 10 0. Läraren besöker tentamen kl 9:30

Läs mer

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel Lösningar till Fiktiv Tentamen på kursen 2D4135 Objektorienterad programmering, design och analys med Java vt2004 Teoridel T1) (4p) Förklara kort följande grundläggande begrepp inom objektorienterad programmering:

Läs mer

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Denna laboration är frivillig och syftar till att låta dig lära mer om grafik i java. Labben är ganska grundlig och går igenom vad du skall

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Projekt 2 XL. Observer-mönstret

Projekt 2 XL. Observer-mönstret Projekt 2 XL Objektorienterad modellering och diskreta strukturer Inför nästa projekt Lennart Andersson Reviderad 2011 10 24 2011 OMD 2011 F15-1 Schema designmöten OMD 2011 F15-2 Observer-mönstret 2 och

Läs mer

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt namn, personnummer och e-postadress på försättsbladet. Skriv rent dina svar.

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25 Lösningar till tentamen i EDAF25 1 juni 2017 Lösning 1 Se figur 1. Figure 1: Tillståndsdiagram espressomaskin Lösning 2 (a) Kompositmönstret (b) Se figur 2 (c) Se figur 3 : Square : Drawing : Group : Circle

Läs mer

Laboration 15 Grafiskt användargränssnitt

Laboration 15 Grafiskt användargränssnitt Laboration 15 Grafiskt användargränssnitt Avsikten med denna laboration är att du ska träna på att skriva program som använder grafiskt användargränssnitt, dvs program som använder grafiska komponenter

Läs mer

Lab5 för prgmedcl04 Grafik

Lab5 för prgmedcl04 Grafik Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna

Läs mer

Föreläsning 15: Repetition DVGA02

Föreläsning 15: Repetition DVGA02 Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras

Läs mer

Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer

Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer Testning 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer Testning ü Testningens huvudsakliga syfte är att reducera risker. ü Osäkerhetsfaktorer inom utvecklingen av ny programvara kan få ett projekt

Läs mer

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1 Grundläggande programmering DVG A08 & ISG A04 Allmän information Grupp C och D slås ihop Schemat är ändrat Kurs i programmering utan förkunskaper Hjälp oss med detta Lita inte på era klasskamrater De ställer

Läs mer

SI-pass 4. Johan Brook och Jesper Persson. 25 september 2012. Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

SI-pass 4. Johan Brook och Jesper Persson. 25 september 2012. Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. SI-pass 4 Johan Brook och Jesper Persson 25 september 2012 1. Sant eller falskt? Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. Interfaces i Java kan innehålla privata

Läs mer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Inledning Arv är ett begrepp som är tätt förknippat med objektorientering. Principerna bakom arv är grundade i högst vardagliga relationer mellan olika

Läs mer

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/3 2014 Innehåll Kursöversikt Javarepetition/Javaintroduktion UML - klassdiagram-introduktion i anslutning till Java-exemplen Kursmål,

Läs mer

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Tentamen FYTA11 Javaprogrammering Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna! Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja

Läs mer

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes Vad kännetecknar en god klass F12 Nested & En odelad, väldefinierad abstraktion Uppgiften kan beskrivas kort och tydlig Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat

Läs mer

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag Föreläsning 12 Föreläsning 12 Rörliga figurer Klassen Timer Undantag Något om applets Rörliga appletsfigurer Klassen Timer Undantag Något om applets Klassen javax.swing.timer I Swing finns en klass Timer

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Detta lösningsförslag är skrivet i stor hast, så det är möjligt att det innehåller en del slarvfel jag ber i så fall om ursäkt för

Läs mer

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg 1. a) Figure 1 2015 06 04 GeometryApp GraphicalApp

Läs mer

Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot KUNGLIGA TEKNISKA HÖGSKOLAN Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot Josef Karlsson Malik 2015-09- 02 jkmalik@kth.se Introduktionskurs i datateknik (II0310) Sammanfattning

Läs mer

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP.

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP. Laboration 1 Översikt 1. Att komma igång med laborationsmiljön a. installera Aptana Studio 3 b. Installera EasyPHP 2. Testa lite programmering a. Testa enkla uppgifter b. Testa automatiskt 3. Skapa inloggningsformulär

Läs mer

Testautomatisering. BDD, RSpec

Testautomatisering. BDD, RSpec Testautomatisering BDD, FM: Snabbutvärdering, lab BDD Idag Lab2 - Snabbutvärdering 1. Hur många timmar har du lagt? 2. Hur många ytterligare timmar kommer du lägga? 3. Svårighet: För Lätt / Lagom / För

Läs mer

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Verktyg och Utvecklingsmiljö. Jochim von Hacht Verktyg och Utvecklingsmiljö Jochim von Hacht Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg Editorer Kompilatorer Avlusare (debugger) Versionhantering (kommer i projektkurs)

Läs mer

Visuell GUI Testning

Visuell GUI Testning Visuell GUI Testning Vad är ett Graphical User Interface (GUI)? Icke-animerat GUI Animerat GUI Nuläget System- och acceptanstestning är dyrt! Manuellt Långsamt Enformigt Svårt att replikera exakt Nödvändigt

Läs mer

Lösningsförslag till tentamen

Lösningsförslag till tentamen Uppgift 1 a) Sant. b) Sant. c) Sant. Lösningsförslag till tentamen 170818 d) Falskt. IPv6 anger en IP-adress med 132 bitar. e) Falskt. Spoofing åsyftar användning av förfalskad eller lånad identitet på

Läs mer

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser Vettigt att lära sig dem utantill - Tror inte det -... men det kan vara bra att ha en liten överblick över vad som finns - Idag (och med fortsättning

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack

Läs mer

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid: Tentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-17, TDA540 Dag: 2018-01-13, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar: Alex

Läs mer

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material. TDA 545: Objektorienterad programmering Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material. Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag En quiz! tinyurl.com/tda545quiz

Läs mer

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser" Vettigt att lära sig dem utantill" - Tror inte det" -... men det kan vara bra att ha en liten överblick över vad som finns" - Idag (och med

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

725G61 - Laboration 8 Ett enkelt GUI. Sahand Sadjadee och Johan Falkenjack

725G61 - Laboration 8 Ett enkelt GUI. Sahand Sadjadee och Johan Falkenjack 725G61 - Laboration 8 Ett enkelt GUI Sahand Sadjadee och Johan Falkenjack December 20, 2013 1 Inledning I de tidigare labbarna har ni fått lära er grundläggande programmering och objektorientering samt

Läs mer

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 10. ADT:er och datastrukturer Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng

Läs mer

Laboration 24 Databasen MySQL och java

Laboration 24 Databasen MySQL och java Laboration 24 Databasen MySQL och java Avsikten med denna laboration är att du ska hämta information ur en eller flera tabeller och visa resultatet i en JTable-komponent. Du ska ändra innehållet i tabellen

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer