Automatiserad testning av GUI

Storlek: px
Starta visningen från sidan:

Download "Automatiserad testning av GUI"

Transkript

1 Automatiserad testning av GUI Mehmet Fatih Cicek Farhad Johari 4/ Abstrakt Den här rapporten är en del av kursen Coaching av programvaruteam (EDA270) som ges på Lunds Tekniska Högskola. Rapporten innerhåller en genomgång av olika metoder som finns för att automatisera tester för ett användargränssnitt (GUI). Detta anser vi vara viktigt eftersom användargränssnittet är det första en användare kommer i kontakt med, och denna bör i högsta grad vara felfri. Manuell testning är tyvärr inte tillräcklig för att upptäcka alla (eventuella) defekter, och därför uppstår en önskan för automation. GUI testerna som utvecklas täcker funktionalitet i användargränssnitt som utvecklas av studenter på LTH. Studenterna ingår i team om 8 10 personer, och projektet de utvecklar är ett registrerings och sorteringsprogram till en Enduro tävling. Efter avslutat projekt följer en utvärdering om studenternas inställning till automatiserad GUI testning och huruvida detta är anpassat till projektet de utvecklar. Noterbart är att arbetsmetoden för projektet är extreme Programming (xp). 1

2 Innehållsförteckning Abstrakt Innehållsförteckning 1. Introduktion 2. Metoder 2.1 Manuell testning 2.2 Monkey testing 2.3 Capture and Replay 2.4 Event driven testing 3. Krav 4. Verktyg 4.1 jfcunit 4.2 FEST 4.3 Abbot 5. Analys 5.1 Praktiskt tillämpning 5.2 Utvärdering 6. Referenser 7. Appendix 2

3 1. Introduktion Projektet som utvecklarna tar fram programmeras under agila arbetsförhållanden, där test driven utveckling och automatiserade enhetstester har en stor och viktig roll. Detta innebär att all kod som utvecklas måste testas på förhand. Tyvärr inkluderas koden för användargränssnitten inte bland dessa enhetstester, och det kan ses som ett problem. Om man inte automatiserar GUI tester ökar risken för oupptäckta defekter, vilket man vill undvika i största möjliga grad. Detta beror på att man kan förbise fel, av misstag, när utfallet av tester verifieras manuellt [1]. Det är trotsallt via ett användargränssnitt en potentiell kund interagerar med programmet, och dennas intryck skall inte missdrabbas av ett oupptäckt problem. Dessutom kan man dra ner på tiden det tar för att testa ett användargränssnitt drastiskt om man övergår från manuell till automatiskt GUI testning. Det rapporteras att 52 timmars manuell testning av ett användargränssnitt endast tog tre timmar efter automation för ett projekt [2]. Detta är förstås proportionellt med användargränssnittets storlek, men ger en bra bild på hur effektiv automatiserad GUI testning kan vara. Dessutom rapporterar ADP (Automated Data Processing) att man har lyckats spara upp till 60% av tiden det tog för manuell testning med automatiska GUI tester [2]. Studier visar också att antalet buggar som påträffas med verktyg som stödjer automatiska GUI tester ökar mellan 10% till 50% [2]. Dessa exempel visar att automation kan bli en stor fördel i projekt där användargränssnittet är central och omfattande. Vårt mål är att introducera minst ett verktyg till teamet som kan användas för att producera automatiska GUI tester. Utveckling av dessa tester kommer framförallt att ske i samband med hemuppgifter som vi delar ut. Teamet kommer att komma i kontakt med verktyg halvvägs igenom projektet, och hur många verktyg som introduceras beror mycket på hur arbetet ligger till. Vi kommer inte stressa studenterna till att testa så många verktyg som möjligt, utan vårt mål är att de skall få en känsla av effekterna och hur viktigt det kan vara med GUI tester i ett riktigt projekt. Vi föredrar hellre utförliga GUI tester med ett verktyg än halvgjorda GUI tester med flera verktyg. Rapporten tar upp olika metoder för GUI tesning som finns beskrivet i sektion 2. Sektion 3 går igenom kraven vi ställer på verktygen som kan användas i projektet. Sektion 4 beskriver möjliga verktyg som kan användas i projektet, med för och nackdelar, och detta efterföljs av en analysdel där vi reflekterar över det som gick bra och mindre bra. Vi bifogar även de implementerade testfallen för användargränssnittet i ett appendix som finns längst bak i rapporten. 3

4 2. Metoder Det finns olika metoder för att testa ett användargränssnitt och alla metoder har både sina fördelar och nackdelar. Denna här sektionen går igenom några olika metoder, och motiverar varför vi väljer att utnyttja en viss metod för projektet som utvecklas. 2.1 Manuell testning Manuell testning är den enklaste formen av GUI testning. Man testar att användargränssnittet beter sig som förväntad genom att utföra några tester som producerar ett resultat. Resultatet kan lätt verifieras med förväntningarna och eventuella felaktigheter kan antecknas. Det krävs endast att testaren har kunskap om hur programmet är tänkt att fungera, dvs kunskap på domän och applikationsnivå [3] och oftast finns en checklista till hands som avser vad som behöver testas. Den här formen av testning är lönsam om användargränssnittet är litet, för då tar det inte mycket tid att testa allt som behöver testas. Men sådan är inte alltid fallet. Studier visar att 45 60% av all kod utgörs av användargränssnittet, och därför lyfts vikten av automatiserade GUI tester fram [4]. I vår arbetsmiljö måste alla enhetstester köras varje gång ett par utför en commit, dvs lägger upp produktionsklar kod på vårt gemensamma repositorie. Dessa tester omfattar inte användargränssnitten, och därför måste den testas manuellt. Eftersom vi jobbar med continuous integration och snabba releases i baby steps kan detta bli jobbigt med tiden. Vår förhoppning är att introducera ett verktyg som kan förenkla detta arbete genom automatiserade GUI tester. Huruvida det blir lönsamt i vårt fall diskuteras vid slutet av projektet. 2.2 Monkey testing Monkey testning är en mycket särskild typ av testning. Idén bygger på att stresstesta ett användargränssnitt för att hitta defekter. Verktyg som baseras på Monkey testing känner generellt sätt inte till användargränssnittet, och genererar slumpmässiga händelser automatiskt på GUI:t för att få applikationen att krascha eller bete sig på ett udda/oförväntat sätt, och kan upptäcka konstiga defekter som man vanligtvis missar. Ett bra exempel på en bugg som har hittats med denna metod berör den tyska versionen av Windows kalkylatorn på Windows Vista. Om man till exempel försöker dividera 57 med 0 framgår det i kalkylatorn av sådan division inte är möjlig. Om man därefter kallar på den interna hjälpen i kalkylatorn visas 100 i displayen, vilket visar att applikationen beter sig på ett oförväntat sätt [5]. Sådana typer av defekter är omöjliga att hitta med andra former av testning, och är möjligt här eftersom många olika sekvenser av input genereras till användargränssnittet. Statistikmässigt anger även Microsoft att de vid flertalet tillfällen har funnit 10 20% av sina buggar genom utnyttjandet utav denna typen av testning [5]. Det finns två olika kategorier av monkeys som används, nämligen smart och dumb monkeys. Skillnaden 4

5 på dessa är att en smart monkey känner till hur användargränssnittet ser ut medan en dumb monkey inte gör det. Detta gör att smart monkeys kan generera specifika händelser anpassat till användargränssnittet (därav namnet smart ), medan dumb monkeys genererar slumpmässiga händelser. Principen bygger dock fortfarande på samma grundidé Denna typ av testning används ofta som komplement till andra testningsmetoder. Det är vanligt att en dumb monkey utnyttjas i flera dagar innan lansering av ett program, för att försäkra dess utvecklare om att programmet inte kraschar eller beter sig udda. Projektet som studenterna tar fram har en specifik story som handlar om stresstestning. Om den här storyn blir aktuell och vid mån av tid kan man introducera ett lämpligt verktyg, men i allt annat fall kommer Monkey testing att undvikas. Monkey testing känns inte särkilt anpassat till agila projekt, under tiden projektet tas fram. Studenterna kan inte stresstesta användargränssnitten efter varje update och commit för att se om de fortfarande fungerar, detta är inte hållbart och effektivt. Dessutom är det inte säkert att samma fel produceras om igen, vilket kan vara viktigt när man vill hitta källan till defekten. Vi anser att denna metod har större effekt och slagkraft då den används på ett mycket större användargränssnitt, vid slutskedet av ett projekt. Vi anser även att utnyttjandet av bara denna metod för att GUI testning är väldigt bristfällig, och istället bör utvecklarna kombinera denna metod med någon annan metod för att testa gränssnitt till fullo. 2.3 Capture and Replay Capture and Replay är en automatiserad form av GUI testning där testaren skapar testen på samma vis som vid manuell testning, med undantaget att testen inte behöver utföras manuellt vid varje regressionstest [6]. Detta är möjligt eftersom testverktyget som används vid sådana test spelar in användarens interaktioner, i form av mus och tangntbordstryckningar/rörelser, med användargränssnittet och sparar detta som ett script [7, 8, 9]. När man vill testa GUI:t vid ett senare tillfälle kan verktyget återuppspela inspelningen, det vill säga scriptet, och verifiera resultatet med det som förväntas. Scriptet som spelas in har annorlunda språk och syntax, beroende på vilket testverktyg som används. Även om denna metod har en rätt så självklar tillvägagångssätt finns det två skilda varianter av Capture & Replay [7]. Dessa är nästintill identiska, med undantag från hur de spelar in GUI interaktionerna, vilket resulterar i att varje variant har sina egna fördelar och brister. En variant består av att GUI:t spelas in genom att man samlar in Bitmap värden för den grafiska representationen av GUI:t [7, 9]. Denna variant av Capture & Replay begränsar testprocessens stabilitet eftersom minsta ändring i användargränssnittets utseende resulterar i att testen fallerar. Med ändring i utseende avses att designen omformas på så sätt att GUI komponenter ändrar färg, storlek eller position. Alternativet till att spela in Bitmap värden är att spara undan referenser till GUI komponeneterna, på så sätt innebär inspelningen att man håller reda på komponenternas aktuella egenskaper/tillstånd [9]. Detta alternativ har inte den tidigare begränsningen för designändringar eftersom komponenterna inte längre detekteras visuellt utan testverktyget känner igen dessa antingen via deras typer och/eller namn. Detta ställer förstås ett krav på utvecklaren, nämligen att ge lämpliga namn till komponenterna. Ytterligare begränsas testdrivna utveckligsprocesser eftersom man redan i testfallen måste bestämma vilken typ av 5

6 komponenter som ska testas. Denna begränsning har däremot minskats i vissa testverktyg genom att man har skapat en egen komponent hierarki som möjliggör för verktyget att tolka flera komponenttyper som en typ. Vi kommer inte att introducera verktyg som baseras på Capture & Replay, av den enkla anledningen att designförändringar, som är vanligt återkommande, inte skall få GUI testerna att fallera. Eftersom en kund ofta ändrar sig känner vi inte att denna metod är särskilt anpassat till vårt projekt, och studenterna skall inte behöva göra om GUI tester efter hand som användargränssnitten ändras. Detta lär återspegla studenternas syn på GUI testning på ett negativt sätt, vilket vi vill undvika. Dessutom är studenterna andraårselever som endast har programmerat i Java och Eclipse. Vi vill hålla oss till detta, och inte introducera script med annorlunda syntax. 2.4 Event-driven testing Användargränssnitt drivs av händelser, vi förväntar oss en viss funktionalitet när man trycker på en knapp eller meny med uppdatering av respektive komponent. Av denna skäl bör GUI testerna generera likadana händelser för att simulera en verklig upplevelse. Resultatet av händelserna kan sedan jämföras med förväntningarna man har på dem. Event driven testning är just den här typen av testning, där man skickar händelser till en viss komponent på användargränssnittet och jämför resultatet. För att detta skall vara möjligt måste man kunna identifiera komponenterna i ett användargränssnitt så att rätt händelse kan genereras för rätt komponent [10]. För detta ändåmål finns det flera verktyg tillgodo, mer än detta i kommande sektion. Det viktigaste är att man namnger sina komponenter så att dessa kan kommas åt vid testerna. Därav måste komponenterna även ha unika namn, för att skilja dem åt. Enhetstester testar enskilda klasser och dess funktioner, men faktum råder att grafiska komponenter består av fler än en klass, och det blir betydligt svårare att testa dem på enhetsnivå [10]. Därför lämpar sig GUI tester på en funktionell nivå där man kan verifiera att systemet uppför sig som förväntad från en användares synvinkel [10]. Det som är positivt med event driven testning är att testerna är oberende användargränssnittets utseeende, till skillnad från Capture and Replay s vanligaste alternativ. Om en knapp flyttas ett par pixel till höger fallerar inte testerna på grund av det. Dessutom brukar dessa tester skrivas som traditionella enhetstester, vilket är positiv då de flesta programmerare har erfarenhet kring det. Vi anser denna metod vara mest lämpligast för vårt projekt på grund av naturen i ett användargränssnitt. En användare genererar händelser på ett användargränssnitt i form av knapp och tangentbordstryckningar, och därför känns det lämpligast om vi kan återskapa sådana fall i våra tester, för att göra dem så verklighetsbaserade som möjligt. 6

7 3. Krav Vi ställer en del krav på de verktyg som kan tänkas användas i vårt projekt för att generera GUI tester. Dessa krav är nödvändiga, och är utgångspunkten för våra val av verktyg. Verktygen som kan tänkas användas måste vara gratis för att kunna appliceras i vårt projekt. Vi har ingen budget som många andra företag för det här syftet. Det måste gå att integrera verktyget i Eclipse. I datorerna som projektet utvecklas på används Eclipse som IDE och därav följer det här kravet. Små förändringar på projektets användargränssnitt inte skall få testen att fallera. Detta eftersom projektet är i ständig förändring, och användargränssnitten ändras med tiden. Detta bör inte påverka testerna som har skrivits, och få dem att fallera. Designförändringar får alltså inte påverka testerna. Verktygen måste stödja Java eftersom studenterna programmerar i Java. Användargränssnitten består av Swing/AWT komponenter som är Java bibliotek. Verktygen bör utnyttja sig av JUnit Framework. Det här kravet följer eftersom många enhetstester utvecklas med JUnit under projektets gång, och det är smidigt om studenterna kan utveckla GUI testerna på liknande sätt. Det måste finnas stöd för TDD. Detta är till exempel möjligt om komponenterna går att identifiera. Annars är det omöjligt att generera händelser på diverse komponenter, och därmed omöjligt att skriva testfall som kan simulera verkliga händelser. Verktygen skall vara lätta att lära sig för att minimera den tid det tar att skriva testmetoder. Denna egenskap är väldigt viktigt för detta projekt då utvecklarna har en begränsad tid till sitt förfogande och därav vill vi spendera så lite tid som möjligt på inlärningsfasen. Verktyg blir mycket mer lättlärda genom att exempelvis erbjuda en bra och komplett dokumentation. Enkel installation är även plus i kanten. 7

8 4. Verktyg Vi har plockat fram några kandidater som kan tänkas användas i vårt projekt. För varje verktyg följer en kort beskrivning om hur de fungerar och vi lyfter även upp några för och nackdelar. Eftersom vi har brist på tid och studenterna också har annat som de måste lägga fokus på kan vi tyvärr inte applicera alla verktygen på vårt projekt. Vår önskan hade varit att testa de populäraste verktygen för att kunna göra en rättvis bedömning om vilket verktyg som passar vårt projekt bäst, men vi vill att studenterna först och främst koncentrerar sig på deras huvudsakliga fokus. 4.1 jfcunit jfcunit är ett verktyg som utvidgar JUnit och tillåter utvecklare att skriva testfall för Java Swing baserade applikationer [11]. Verktyget kan installeras som en gratis plug in till Eclipse eller via två jar filer som laddas in till projektets buildpath. Dessa är jfcunit.jar och jakarta regexp 1.2.jar. Eftersom verktyget baseras på JUnit är det viktigt att man använder JUnit 3.7 eller en högre version som är kompatibel med Eclipse. Efter det är det fritt fram att börja använda verktyget. Den senaste versionen av jfcunit är 2.08 och gavs ut Verktyget har tyvärr inte uppdaterats sen dess, och det kanske förklarar varför det är svårt att hitta bra exempel och tutorials på nätet. jfcunit har stöd för att lokalisera GUI komponenter (med förutsättning att alla har unika namn) och kan därefter generera diverse händelser på dessa. Detta kan vara allt från att klicka på en knapp till att mata in text i textfält. Detta är möjligt med verktygets specifika klasser NamedComponentFinder och TestHelper. Nedan följer en figur som sammanfattar hur detta går till. Användergränssnittet som skall testas har en knapp regbtn som NamedComponentFinder lokaliserar. Därefter genererar man en knapptryckning genom att avfyra en händelse med metoden enterclickandleave. För vidare exempel, se [12]. jfcunit har även stöd för Capture and Replay [11] och skripten sparas i XML format. Verktyget har Java dokumentation på klasser och metoder på den officiella hemsidan som utvecklare kan behöva utnyttja, samt några exempel på hur verktyget kan användas. Den relativt dåliga dokumentationen och bristande exempel täcks upp av verktygets enkla sätt att skriva testfall. Man utnyttjar notationer från JUnit som Test, setup, teardown osv. vilket vi anser vara positivt. Verktyget är helt klart en kanditat för projektet, trots bristfällig dokumentation. 8

9 4.2 FEST FEST är en samling moduler som står för Fixtures for Easy Software Testning och kan användas med både JUnit och TestNG [13, 14]. Modulen som användas i samband med Java Swing applikationer heter FEST Swing och kan laddas ner från projektets hemsida [15]. Till skillnad från jfcunit är FEST Swing bättre dokumenterat och hyfsat enkel att lära sig. FEST Swing kräver att man använder Java SE 5.0 eller senare [13] och uppdaterades senast Modulen består av flera jar filer, och vilka som bör användas i ett projekt förklaras här. Modulen utnyttjar AWT Robot för att generera användarinput [16]. AWT Robot kan generera olika typer av händelser, precis som en vanlig användare, och gör att testfallen blir så verklighetstrogna som möjligt. Med andra ord är FEST Swing ett verktyg som stödjer typen Event driven testning, precis som jfcunit. FEST Swing kan lokalisera komponenter via namn, typ eller annan kriterium. Därav är det viktigt att man namnger sina komponenter i användargränssnittet med unika namn så att dessa går att hitta. Under testen kan man se användargränssnittet simuleras viseullt vilket är positivt då man kan verifiera att testerna utför det som man tänkt sig. Nackdelen är att man inte kan använda datorn samtidigt som testerna körs. Detta är i och för sig inte en stor begränsning för FEST eller GUI testning generellt sätt, eftersom man vanligtvis inte använder datorn till annat under tiden testerna exekveras. Det finns olika alternativ att välja bland när man skriver testfall med FEST Swing. Man kan antigen jobba direkt med FEST Robot, eller med något som kallas för Fixtures. Fixtures förser specifika metoder för att simulera händelser på GUI komponenter och har stöd för att verifiera dessas tillstånd [17]. Det finns en Fixture per varje Swing komponent och har samma namn som komponenten med tillägget Fixture. Kod som skrivs med Fixtures blir självförklarande och detta är klart positivt. FEST känns på förhand som ett bra val av verktyg. 4.3 Abbot Abbot, som står för A better bot, är ett framework för att skapa automatiska tester till Javas GUI komponenter. Det är ett opensource verktyg, precis som de tidigare verktygen, och finns att ladda ner gratis. Den senaste versionen av verktyget (release 1.2) släpptes Verktygen kommer tillsammans med en editor Costello som har stöd för Capture and Replay [18]. Det som är intressant för vår del är att kunna skriva testerna genom programmering, precis som vanliga enhetstester. Detta stödjer Abbot genom att utnyttja JUnit [19]. Abbot är hyfsat väldokumenterat. ComponentFinder är klassen som utvecklare använder för att lokalisera olika GUI komponenter, och som det märks har alla verktyg vi har beskrivit tagit samma tillvägagångssätt för att lösa problemet med identifiering av olika komponenter. För nybörjare finns det Quick Start, User Guide, Examples och Tutorials sektionerna till hands på verktygets officiella hemsida. Dessutom kan man få en överblick över hur strukturen är uppbyggt i Overview. Eftersom testerna kan skrivas med 9

10 JUnit kan man använda jämförelsemetoderna som JUnit stödjer (assertequals, assertfalse etc) och detta kan komma väl till hand för att verifiera ett tillstånd. Precis som övriga verktyg installeras Abbot genom att lägga till en jar fil i det aktuella projektets buildpath. 5. Analys Analysdelen är uppdelad i två delar. Först beskriver vi hur vi gick tillväga för att introducera verktyg, och hur GUI testerna implementerades. Sedan tar vi upp feedback från studenterna och avgör huruvida GUI tester är anpassat för PVG projektet. 5.1 Praktiskt tillämpning Verktyg för GUI testning som stödjer den event drivna metoden introducerades för första gången som hemuppgift inför iteration 3 för en student. Vi var tyvärr inte precisa med vilka verkyg som skulle undersökas, och detta bidrog till att studenten mer eller mindre misslyckades med att producera färdiga tester för användargränssnitten. Under planeringsmötet bestämdes att FEST och Abbot skulle undersökas, men gick sedan över till jfcunit och UISpec4J. Oklarheten berodde lite på oss, eftersom vi inte riktigt visste vilket verktyg som borde introduceras. UISpec4J saknar grafisk representation, så man kan visuellt inte se vad som testas. Studenten tog fram ett litet kodskelett med ovanstående verktyg, men det var inget som vi kunde utnyttja direkt i vårt projekt. För att undvika samma problem förberedde vi nästa student som fick som hemuppgift att undersöka ett nytt verktyg (jfcunit). Förberedelsen inkluderade manual med exempel på färdiga tester. Dessutom skapade vi ett riktigt testfall för registreringsgränssnittet som studenten kunde utgå från. Dessa förberedelser fick en positiv inverkan, och studenten lyckades skapa flera testfall anpassade till vårt projekt. Dessutom prioriterade kunden in en egen story om GUI testning under iteration 4. Detta gjorde att studenten fick ytterligare tillfälle att fortsätta skriva GUI testerna. Anledningen till att vi introducerade jfcunit var att verkyget är enkelt att använda, och man förstår sig på exemplen som finns utan ansträngning, trots dålig dokumentation. Den färdiga manualen för jfcunit, som har sammanställts av två tidigare coacher, var ännu en anledning till vårt val av verkyg. Efter det misslyckade fallet ville vi introducera ett verktyg med snabb inlärning, som snabbt kan ge resultat, och med förutsättningarna som fanns var jfcunit ett givet val. Under iteration 4 noterade vi noterade hur kodtäckningen ändrades när alla GUI tester föll på plats. Nedan följder två bilder från iteration 4 (kl 10.30) som visar andelen kod som testas före och efter GUI testen. Notera att sorteringsgränssnittet inte var testat när dessa skärmdumpar togs, men även det testades senare under iterationen (bland annat under de 2h som kunden prioriterade). 10

11 Code coverage innan GUI testerna har körts. Code coverage efter GUI testerna har körts. Vi får betydligt mer kod testad i projektet, och det kan bidra till enklare identifiering av eventuella fel i systemet. GUI testen visades upp för kunden, och han var nöjd och imponerad över resultatet vilket vi finner positivt. Vi tror att den visuella feedbacken man får med jfcunit kan ha en stor påverkan i detta. Vi upplevde något som kan ses som ett problem med jfcunit, nämligen att GUI testerna inte förblev helt automatiska till en början. Detta beror på att både registrerings och sorteringsgränssnittet anropar på externa fönster (för att öppna/spara filer), som man inte lyckades hantera. Detta lyckades man lösa för registreringsprogrammet genom att införa en flagga som avgör om sökvägen till en viss fil, i samband med öppna/spara, skall vara dynamisk eller statisk. Man körde på samma koncept med statiska sökväg för vissa filer till sorteringsprogrammet, men att få allt automatiskt var lite omständigare då sorteringsgränssnittet anropade på fler externa fönster. Detta ser vi som en stor begränsning, och sådana justeringar skall inte behövas för att få testerna att köras utan interaktion med användaren. De flesta av ovanstående problem kunde ha undvikits med en konfigurationsfil (story 25), men kunden valde att inte prioritera det. Under femte planeringsmötet fick en student som hemuppgift att undersöka FEST Swing, och skriva testfall för vårt projekt med verktyget. Tanken var att kunna göra en jämförelse mellan två olika verktyg, och se ifall det ena är med lämpad än det andra för vårt projekt. Tyvärr drabbades studenten av ett slags virus, och kunde inte påbörja sin hemuppgift. Dessutom fick vi ingen betald tid under iteration 5 för GUI testning, så därför fick vi inget gjort den här veckan. Inför sista iterationen hade vi som mål att få story 9 (varvlopp) fullbordat, då den hade stökat till det 11

12 ordentligt sedan iteration 2. Eftersom vi hade en release framför oss valde vi att inte introducera ett nytt verktyg. En av studenterna som hade hållt på med GUI testning gjorde klart sin hemuppgift relativt snabbt, och ville gärna få annat arbete som kunde gynna teamet. Detta såg vi som ett ypperligt tillfälle för att optimera GUI testerna för sorteringsprogrammet (som vid det här laget inte var helt automatiska). Studenten tog sig an uppgiften, och under iterationen sågs det till att alla GUI tester blev helt automatiska. Innan release 3 skickades iväg kollade vi på kodtäckningen och den visade sig ligga på 93%, vilket är väldigt högt. Main metoderna var också testade, vilket är lite onödigt, och om man exkluderade dem från testerna hamnade kodtäckningen på 91.9%. Tyvärr innehåll projektet en del tester som inte gick igenom på grund av story 9 som inte helt var på plats (tidsbegränsning saknades). Även om testerna fallerade täcktes vissa delar av koden, men teamet bestämde sig för att ignorera dessa tester (@Ignore i JUnit)och då sjönk kodtäckningen till 84.5% (vilket fortfarande är högt). Nedan kan man se två figurer som visar kodtäckningen på releasen som skickades iväg den sista iterationen. Som det syns höjdes kodtäckningen ganska mycket av våra GUI tester. Det fanns fortfarande rum för förbättringar, men på grund av tidsbrist hann vi inte implementera det. Code coverage innan GUI testerna har körts. Code coverage efter GUI testerna har körts. 5.2 Utvärdering Vi frågade teamet hur ofta de testade användargränssnitten (innan GUI testerna) när ny funktionalitet lades till i systemet, och vi möttes av det förväntade svaret; i princip aldrig. Alla var eniga om att det egentligen borde testas då enhetstesterna inte täckte användargränssnitten, men ingen orkade riktigt göra det. Till deras försvar hörde argument som Det tar för lång tid, Det funkar säkert osv. Vi ställde samma fråga efter den sista releasen, och märkte att många fler testade användargränssnitten. Till en 12

13 början var testerna semi automatiska, och det bidrog till att man inte körde dem efter ett tag, men så fort allt sköttes automatiskt märktes det att användningen av GUI testerna ökade. Detta bekräftade även teamet, och konstaterade att man sparar en hel del tid med automatiska tester. Vårt projekt bestod av två användargränssnitt. Sorteringsprogrammet var egentligen tänkt att vara terminalbaserad, men teamet övergick till ett grafisk användargränssnitt efter diskussion med kunden. Detta gav oss ännu en anledning till att introducera GUI verktyg då vi fick mer GUI baserad kod än det tänkta fallet. Eftersom vi hade mer att testa kunde studenterna ut mer av GUI testerna, och verkligen se effekterna. Alla fick tyvärr inte chansen till att implementera dessa tester, då vi inte hade tillräckligt med tid. Vi lyckades inte heller introducera ett annat verktyg (förutom jfcunit) av samma anledning, men målet var att de skulle få en känsla av effekterna och hur viktigt det kan vara med GUI tester i ett riktigt projekt, och av feedbacken vi fick kan man konstatera att vi lyckades med detta. Först och främst kommenterade studenterna på hur fräck testerna såg ut. De uppskattade att få jobba utöver det vanliga, där man kan få visuell feedback och se om man har gjort rätt eller fel. Att testerna skrevs som vanliga JUnit tester förenklade testskrivandet en hel del, enligt de involverade studenterna. Paketindelningen som användes i projektet gjorde så att användargränssnitten och logiken bakom gick att testa separat (MVC modellen), vilket kan också ses som en förenklande faktor. Tyvärr var datorerna väldigt söliga, och det påverkade hur ofta teamet var villiga till att köra testerna efter ett tag. Vi frågade specifikt vad de tyckte om jfcunit, och feedbacken vi fick av de två studerande som hade jobbat med verktyget var att det var enkelt att skriva testfall, inte alls svårt att sätta sig in i verktyget (trots dålig dokumentation), men ansågs även vara bristfällig då det var väldigt svårt att hantera externa fönster som inte tillhörde användargränssnitten. Detta gick att lösa med flaggor i programmet, men ansågs inte vara en särskild snygg lösning. Överlag var studenterna nöjda med GUI testerna, och väldigt positiva till att dessa tester ökade kodtäckningen i projektet. De rekommenderade övriga team att implementera automatiska GUI tester efter deras positiva erfarenheter. Från feedbacken vi fick konstaterades att studenterna nöjda över resultatet, och det gör att automatiska GUI tester känns applicerbart för PVG projektet. Det beror också på att teamet lyckades göra de semi automatiska testerna helt automatiska. Vi visade upp de automatiska testerna för kunden, och han var helt klart imponerad och såg hela vår investering lönsamt. För honom var stabilitet viktigt, och han ansåg våra tester uppfylla hans stabilitetskrav. Därmed fick vi fram något som både studenterna och kunden var nöjd över, vilket gör oss som coacher väldigt glada. Vi kan rekommendera GUI testning och verktyget jfcunit till övriga team, men vill påpeka att man inte bör göra det på kostnad av annan fokus som studenterna har. Det bör istället göras under hemuppgifter, och där kunden faktiskt betalar efter en överenskommelse. 13

14 6. Referenser [1] M. Finsterwalder, Automating Acceptance Tests for GUI Applications in an Extreme Programming Environment, University of Hamburg, Germany. In Proceedings of the 2nd International Conference on Extreme Programming and Flexible Processes in Software Engineering. [2] Kanglin Li,Mengqi Wu. Effective GUI Testing Automation: Developing an Automated GUI Testing Tool, ISBN: [3] Alessandro Marchetto & Fondazione Bruno Kessler IRST Seminar Gui based Testning [4] A. M. Memon, A comprehensive framework for testing graphical user interfaces. PhD thesis, University of Pittsburgh, [5] B. Hofer and B. Peischl and F. Wotawa, GUI Savvy End to End Testing with Smart Monkeys, Technische Universitat Graz, Austria. IEEE Digital Object Identifier /IWAST [6] Atif M. Memon and Bao N. Nguyen, Advances in Automated Model Based System Testing of Software Applications with a GUI Front End [7] Borjesson, E. and Feldt, R., Automated System Testing Using Visual GUI Testing Tools: A Comparative Study in Industry. IEEE Digital Object Identifier /ICST [8] Ruiz, A and Price, Y.W., Test Driven GUI Development with TestNG and Abbot. IEEE Digital Object Identifier /MS [9] Emil Alégroth, Robert Feldt and Lisa Ryrholm, Visual GUI testing in practice: challenges, problems and limitations. Digital Objevt Identifier /s [10] Alex Ruiz and Yvonne Wang Price. Gui testing made easy. In Proceedings of the Testing: Academic & Industrial Conference. Digital Object Identifier /TAIC.PART [11] jfcunit User Documentation. (Senast uppdaterad: 31/12/2004, Senast visad: 3/3/2014) 14

15 [12] JFCUnit Overview summer/ pdf [13] FEST Swing Module. (Senast uppdaterad: Okänt, Senast visad 3/3/2014) [14] FEST Swing Module. (Senast uppdaterad: 28/8/2010, Senast visad: 3/3/2010) [15] Fixtures for Easy Software Testing. (Senast uppdaterad: 28/2/2011, Senast visad: 3/3/2014) [16] FEST Swing Module. (Senast uppdaterad: Okänt, Senast visad 3/3/2014) [17] FEST Swing Module. (Senast uppdaterad: Okänt, Senast visad 3/3/2014) [18] Abbot Java GUI Test Framework. (Senast uppdaterad: 30/12/2011, Senast visad 3/3/2014) [19] Abbot API specification. summary.html#overview_description (Senast uppdaterad: 2008, Senast visad 3/3/2014) 15

16 7. Appendix Här bifogas användargränssnitten som utvecklarna har tagit fram samt de GUI test som har skrivits och går igenom. Tanken är att vem som helst skall kunna kopiera in dessa till Eclipse (eller annan IDE) och köra dem lokalt. RegistrationGUI (Detta är användargränssnittet som sköter registrering av förare). Main metoden som startar programmet finns i en seperat klass. packager.gui; importjava.awt.borderlayout; importjava.awt.color; importjava.awt.font; importjava.awt.gridlayout; importjavax.swing.boxlayout; importjavax.swing.jbutton; importjavax.swing.jframe; importjavax.swing.jlabel; importjavax.swing.jpanel; importjavax.swing.jscrollpane; importjavax.swing.jtextarea; importjavax.swing.jtextfield; importjavax.swing.swingconstants; importr.controller.enteractionlistener; importr.controller.regallbuttonlistener; importr.controller.regbuttonlistener; importr.model.timeregisterhandler; 16

17 importcommons.savefilechooser; publicclassregistrationguiextendsjframe{ privatestaticfinallongserialversionuid=1l; privatejtextfieldregisterfield; privatejtextarearecentreg; /** * ContentoftheregistrationGui. * *@paramistest * theguiisusedinatestcase. */ publicregistrationgui(booleanistest){ Stringpath=""; if(istest){ path=system.getproperty("user.home") +"/registerresults.txt"; else{ path=newsavefilechooser().getpath(""); if(path==null){ System.exit(0); setbounds(100, 100, 520, 300); setdefaultcloseoperation(jframe.exit_on_close); JPanelregisterPanel=newJPanel(); registerpanel.setbackground(color.white); getcontentpane().add(registerpanel, BorderLayout.NORTH); registerpanel.setlayout(newboxlayout(registerpanel, BoxLayout.X_AXIS)); JPanelpanel=newJPanel(); registerpanel.add(panel); panel.setlayout(newborderlayout(0, 0)); JLabellblStartnumber=newJLabel("Startnummer:"); lblstartnumber.sethorizontalalignment(swingconstants.center); panel.add(lblstartnumber, BorderLayout.NORTH); lblstartnumber.setbackground(color.white); lblstartnumber.setfont(newfont("dialog", Font.BOLD, 20)); registerfield=newjtextfield(); registerfield.setname("registerfield"); panel.add(registerfield); registerfield.sethorizontalalignment(swingconstants.center); registerfield.setfont(newfont("dialog", Font.PLAIN, 42)); registerfield.setcolumns(10); JPanelpanel_1=newJPanel(); registerpanel.add(panel_1); 17

18 panel_1.setlayout(newgridlayout(0, 1, 0, 0)); TimeRegisterHandlertrh=newTimeRegisterHandler(path); JPanelentriesPanel=newJPanel(); getcontentpane().add(entriespanel, BorderLayout.CENTER); entriespanel.setlayout(newgridlayout(0, 1, 0, 0)); recentreg=newjtextarea(); recentreg.setname("registerlist"); recentreg.seteditable(false); JScrollPanesp=newJScrollPane(recentReg); entriespanel.add(sp); JButtonregisterButton=newJButton("Registrera"); registerbutton.setname("registerbutton"); panel_1.add(registerbutton); registerbutton.setfont(newfont("dialog", Font.BOLD, 28)); registerfield.addactionlistener(newenteractionlistener(trh, this)); JButtonbtnMass=newJButton("Mass-start"); btnmass.setname("btnmass"); btnmass.setfont(newfont("dialog", Font.BOLD, 28)); btnmass.addactionlistener(newregallbuttonlistener(trh, this)); panel_1.add(btnmass); registerbutton.addactionlistener(newregbuttonlistener(trh, this)); setvisible(true); /** * AppendsaStringtothemessagefieldintheGUI. * *@paramtext * toappend. */ publicvoidappend(stringtext){ recentreg.append(text); registerfield.settext(""); registerfield.requestfocus(); /** * Methodtogetthetextenteredintotheregistrationfield. * *@returnthetextintheregistrationfield. */ publicstringgetregfieldtext(){ 18

19 try{ returnregisterfield.gettext(); catch(exceptione){ return""; SortingGUI (Detta är användargränssnittet som sköter sorteringen). Main metoden som startar programmet finns i en seperat klass. packages.gui; importjavax.swing.jbutton; importjavax.swing.jframe; importjavax.swing.jscrollpane; importjavax.swing.jtextarea; imports.controller.endbuttonlistener; imports.controller.namebuttonlistener; imports.controller.sortbuttonlistener; 19

20 imports.controller.startbuttonlistener; imports.model.laptimehandler; imports.model.racerhandler; imports.model.time; publicclasssortingguiextendsjframe{ privatestaticfinallongserialversionuid=1l; privatejtextareaarea; publicsortinggui(stringstring){ super("sortering"); RacerHandlerrh; if(string.equals("test")){ StringtimeLimit=" "; intmaxlapswrite=3; rh=newlaptimehandler(timelimit, maxlapswrite, new Time(" ")); else{ RaceTypeDialogrtd=newRaceTypeDialog(); rh=rtd.getracetype(); getcontentpane().setlayout(null); setbounds(100, 100, 521, 540); setdefaultcloseoperation(jframe.exit_on_close); JButtonbtnLoadStartFile=newJButton("LaddaStartfil"); btnloadstartfile.addactionlistener(newstartbuttonlistener(rh, this,string)); btnloadstartfile.setbounds(12, 12, 490, 74); btnloadstartfile.setname("loadstartbtn"); getcontentpane().add(btnloadstartfile); JButtonbtnLoadEndFile=newJButton("LaddaMÃ lfil"); btnloadendfile.addactionlistener(newendbuttonlistener(rh, this,string)); btnloadendfile.setbounds(12, 98, 490, 74); btnloadendfile.setname("loadendbtn"); getcontentpane().add(btnloadendfile); JButtonbtnLoadNameFile=newJButton("LaddaNamnfil"); btnloadnamefile.addactionlistener(newnamebuttonlistener(rh,this,string)); btnloadnamefile.setbounds(12, 184, 490, 74); btnloadnamefile.setname("loadnamebtn"); getcontentpane().add(btnloadnamefile); JButtonbtnSort=newJButton("Sortera"); btnsort.addactionlistener(newsortbuttonlistener(rh, this,string)); btnsort.setbounds(12, 270, 490, 74); btnsort.setname("sortbtn"); getcontentpane().add(btnsort); 20

21 JScrollPanescrollPane=newJScrollPane(); scrollpane.setbounds(12, 360, 490, 142); getcontentpane().add(scrollpane); area=newjtextarea(); area.setname("textfield"); area.seteditable(false); scrollpane.setviewportview(area); setvisible(true); publicvoidappend(stringtext){ area.append(text+"\n"); jfcunit packagetestgui; importjava.awt.event.keyevent; importjavax.swing.jbutton; importjavax.swing.jcomponent; importjavax.swing.jtextarea; importjavax.swing.jtextfield; importjunit.extensions.jfcunit.jfctestcase; importjunit.extensions.jfcunit.jfctesthelper; importjunit.extensions.jfcunit.eventdata.keyeventdata; importjunit.extensions.jfcunit.eventdata.mouseeventdata; importjunit.extensions.jfcunit.finder.namedcomponentfinder; importorg.junit.test; importr.gui.registrationgui; importr.model.currenttime; publicclasstestregisterguiextendsjfctestcase{ privateregistrationguigui=null; privatecurrenttimecurrenttime; protectedvoidsetup() throwsexception{ currenttime=newcurrenttime(); super.setup(); sethelper(newjfctesthelper()); gui=newregistrationgui(true); 21

22 gui.setvisible(true); /** * Forthesetestthetesterneedtomanuallywriteafilenameintothe * savewindow publicvoidtestregistergui(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"registerField"); JTextFieldregisterField=(JTextField) finder.find(gui, 0); assertnotnull("textfielddoesnotexits", registerfield); assertequals("textfiledshouldbeempty","", registerfield.gettext()); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_5)); assertequals("textfieldshouldcontain5","5", registerfield.gettext()); finder.setname("registerlist"); JTextArearegisterArea=(JTextArea) finder.find(gui, 0); assertnotnull("jtextareadoesnotexits", registerarea); assertequals("jtextareashouldbeempty","", registerarea.gettext()); finder.setname("registerbutton"); JButtonregisterButton=(JButton) finder.find(gui, 0); assertnotnull("registerbuttondoesnotexits", registerbutton); assertequals("registerbuttonshouldsay'registrera'","registrera", registerbutton.gettext()); gethelper().enterclickandleave(newmouseeventdata(this, registerbutton)); StringcurrentTimeString=currentTime.toString(); assertequals("jtextareashouldbefilled", "5;" +currenttimestring.substring(0, 6), registerarea.gettext().substring(0, 9)); booleansecondsmatch=false; StringsecondsString=registerArea.getText().substring(9, 11); intseconds=integer.parseint(secondsstring); secondsmatch=((integer.parseint(currenttimestring.substring(6, 8)) == seconds) (Integer.parseInt(currentTimeString.substring(6, 8)) ==seconds+ 1)); asserttrue("secondsdonotmatch", 22

23 publicvoidtestregisterguiwronginput(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"registerField"); JTextFieldregisterField=(JTextField) finder.find(gui, 0); assertnotnull("textfielddoesnotexits", registerfield); assertequals("textfiledshouldbeempty","", registerfield.gettext()); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_SLASH)); assertequals("textfieldshouldcontain/","/", registerfield.gettext()); finder.setname("registerlist"); JTextArearegisterArea=(JTextArea) finder.find(gui, 0); assertnotnull("jtextareadoesnotexits", registerarea); assertequals("jtextareashouldbeempty","", registerarea.gettext()); finder.setname("registerbutton"); JButtonregisterButton=(JButton) finder.find(gui, 0); assertnotnull("registerbuttondoesnotexits", registerbutton); assertequals("registerbuttonshouldsay'registrera'","registrera", registerbutton.gettext()); gethelper().enterclickandleave(newmouseeventdata(this, registerbutton)); assertequals("jtextareashouldshowexception","felinmatning\n", publicvoidtestregisterguimassstart(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"registerField"); JTextFieldregisterField=(JTextField) finder.find(gui, 0); assertnotnull("textfielddoesnotexits", registerfield); assertequals("textfiledshouldbeempty","", registerfield.gettext()); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_1)); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_MINUS)); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_3)); assertequals("textfieldshouldcontain1-3","1-3", registerfield.gettext()); finder.setname("registerlist"); JTextArearegisterArea=(JTextArea) finder.find(gui, 0); assertnotnull("jtextareadoesnotexits", registerarea); assertequals("jtextareashouldbeempty","", registerarea.gettext()); finder.setname("registerbutton"); JButtonregisterButton=(JButton) finder.find(gui, 0); assertnotnull("registerbuttondoesnotexits", registerbutton); assertequals("registerbuttonshouldsay'registrera'","registrera", 23

24 registerbutton)); gethelper() registerbutton.gettext());.enterclickandleave(newmouseeventdata(this, StringcurrentTimeString=currentTime.toString(); assertequals("jtextareashouldbefilled", "1-3;" +currenttimestring.substring(0, 6), registerarea.gettext().substring(0, 11)); booleansecondsmatch=false; StringsecondsString=registerArea.getText().substring(11, 13); intseconds=integer.parseint(secondsstring); secondsmatch=((integer.parseint(currenttimestring.substring(6, 8)) == seconds) (Integer.parseInt(currentTimeString.substring(6, 8)) ==seconds+ 1)); asserttrue("secondsdonotmatch", publicvoidtestregisterguiwrongordermassstart(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"registerField"); JTextFieldregisterField=(JTextField) finder.find(gui, 0); assertnotnull("textfielddoesnotexits", registerfield); assertequals("textfiledshouldbeempty","", registerfield.gettext()); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_3)); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_MINUS)); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_1)); assertequals("textfieldshouldcontain3-1","3-1", registerfield.gettext()); finder.setname("registerlist"); JTextArearegisterArea=(JTextArea) finder.find(gui, 0); assertnotnull("jtextareadoesnotexits", registerarea); assertequals("jtextareashouldbeempty","", registerarea.gettext()); finder.setname("registerbutton"); JButtonregisterButton=(JButton) finder.find(gui, 0); assertnotnull("registerbuttondoesnotexits", registerbutton); assertequals("registerbuttonshouldsay'registrera'","registrera", registerbutton.gettext()); gethelper().enterclickandleave(newmouseeventdata(this, 24

25 registerbutton)); assertequals("jtextareashouldbefilled", "Detförstataletmåstevaramindreändetandra\n", publicvoidtestmassbutton(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"registerField"); JTextFieldregisterField=(JTextField) finder.find(gui, 0); assertnotnull("textfielddoesnotexits", registerfield); assertequals("textfiledshouldbeempty","", registerfield.gettext()); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_1)); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_MINUS)); gethelper().sendkeyaction( newkeyeventdata(this, registerfield, KeyEvent.VK_3)); finder.setname("btnmass"); JButtonbtnMass=(JButton) finder.find(gui, 0); gethelper().enterclickandleave(newmouseeventdata(this, btnmass)); finder.setname("registerlist"); JTextArearegisterArea=(JTextArea) finder.find(gui, 0); StringcurrentTimeString=currentTime.toString(); Stringactual=registerArea.getText().substring(0, 27); Stringtemp=currentTimeString.substring(0, 5); Stringexpected="Mass-startmedtiden:" +temp; assertequals("jtextareashouldbefilled", expected, actual); booleansecondsmatch=false; StringsecondsString=registerArea.getText().substring(28, 30); intseconds=integer.parseint(secondsstring); secondsmatch=((integer.parseint(currenttimestring.substring(6, 8)) == seconds) (Integer.parseInt(currentTimeString.substring(6, 8)) ==seconds+ 1)); asserttrue("secondsdonotmatch", secondsmatch); packagetestgui; importjavax.swing.jbutton; importjavax.swing.jcomponent; importjavax.swing.jtextarea; importjunit.extensions.jfcunit.jfctestcase; importjunit.extensions.jfcunit.jfctesthelper; importjunit.extensions.jfcunit.eventdata.mouseeventdata; importjunit.extensions.jfcunit.finder.namedcomponentfinder; 25

26 importorg.junit.test; imports.gui.sortinggui; publicclasstestsortingguiextendsjfctestcase{ privatesortingguigui=null; protectedvoidsetup() throwsexception{ super.setup(); // junit.extensions.jfcunit.windowmonitor.start(); sethelper(newjfctesthelper()); gui=newsortinggui("test"); gui.setvisible(true); /** * Thistestneedstoopenuser.dir+SaveFiles/iteration1/starttider.txt publicvoidtestastartbtn(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"TextField"); JTextAreatextArea=(JTextArea) finder.find(gui, 0); finder.setname("loadstartbtn"); JButtonloadStartBtn=(JButton) finder.find(gui, 0); assertnotnull("startbtndoesnotexits", loadstartbtn); assertequals("startbtnshouldnotbeempty","laddastartfil", loadstartbtn.gettext()); gethelper().enterclickandleave(newmouseeventdata(this, loadstartbtn)); Stringpath=System.getProperty("user.dir") +"/SaveFiles/Iteration1/starttider.txt"; assertequals("textareashouldbenotempty", "Inläsningavstartfillyckades\n" +path+"\n", publicvoidtesttextarea(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"TextField"); JTextAreatextArea=(JTextArea) finder.find(gui, 0); assertnotnull("textareadoesnotexits", textarea); assertequals("textareashouldbeempty","", publicvoidtestendbtn(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"LoadEndBtn"); JButtonloadEndBtn=(JButton) finder.find(gui, 0); 26

27 assertnotnull("endbtndoesnotexits", loadendbtn); assertequals("endbtnshouldnotbeempty","laddamålfil", publicvoidtestnamebtn(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"LoadNameBtn"); JButtonloadNameBtn=(JButton) finder.find(gui, 0); assertnotnull("loadnamebtndoesnotexits", loadnamebtn); assertequals("loadnamebtnshouldnotbeempty","laddanamnfil", loadnamebtn.gettext()); /** * Thistestneedsthatthesortingresultissavedasuser.dir+ * SaveFiles/iteration1/guiTest.txt publicvoidtestsortbtn(){ NamedComponentFinderfinder=newNamedComponentFinder( JComponent.class,"TextField"); JTextAreatextArea=(JTextArea) finder.find(gui, 0); finder.setname("sortbtn"); JButtonsortBtn=(JButton) finder.find(gui, 0); assertnotnull("sortbtndoesnotexits", sortbtn); assertequals("sortbtnshouldnotbeempty","sortera", sortbtn.gettext()); gethelper().enterclickandleave(newmouseeventdata(this, sortbtn)); Stringpath=System.getProperty("user.dir") +"/SaveFiles/Iteration1/guiTest.txt"; assertequals("textareashouldbenotempty", "Genereringavresulatatlistalyckades.\n", textarea.gettext()); 27

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

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

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

Några grundläggande begrepp

Några grundläggande begrepp Några grundläggande begrepp Validering bygger vi rätt system? Uppfyller kravspecifikationen de verkliga behoven? Verifiering bygger vi systemet rätt? Uppfyller det färdiga systemet kravspecifikationen?

Läs mer

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS Individuellt Mjukvaruutvecklingsprojekt (Utvecklare av digitala tjänster) Den 1 juni 2011 ABSTRAKT Rapporten tar upp positiva och negativa erfarenheter som jag erhållit

Läs mer

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

Automatiserad GUI-testning för Java EDA270 - Djupstudie. J. Assarsson D08, Lunds Tekniska Högskola dt08ja2@student.lth.se Automatiserad GUI-testning för Java EDA270 - Djupstudie J. Assarsson D08, Lunds Tekniska Högskola dt08ja2@student.lth.se 26 februari 2012 Abstract Den här rapporten är en del av en djupstudie i kursen

Läs mer

Filhanterare med AngularJS

Filhanterare med AngularJS Filhanterare med AngularJS Författare: Filip Johansson Peter Emilsson Oskar Georgsson Christian Nilsson Datum: 2014-03-26 1 Sammanfattning Filhanterare med AngularJS är en filhanterare skapad för Sigma

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

Labrapport över Rumbokningssytemet Grupp:1

Labrapport över Rumbokningssytemet Grupp:1 Fakulteten för ekonomi, kommunikation, IT & data Labrapport över Rumbokningssytemet Grupp:1 Kurskod: DVGC18 Kursnamn: Software Engineering Inlämningsdatum: 2009 10 28 Scrummaster: Martin Blom Projektmedlemmar:

Läs mer

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse Verktyg och Utvecklingsmiljö Föreläsning 2 Eclipse Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg. Editorer Kompilatorer Avlusare(debugger) Versionshantering(kommer i

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

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDI02 Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Verifikation, Validering och Testning XP Extreme Programming Vad är ett fel? I engelskan

Läs mer

Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10

Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10 Projekt Rapport RaidPlanner Jeanette Karlsson UD10 Abstrakt: Denna rapport handlar om mitt projekt i kursen Individuellt Mjukvaruutvecklings projekt. Rapporten kommer att ta upp hur jag gått tillväga,

Läs mer

Proj-Iteration1. Arkitektur alt. 1

Proj-Iteration1. Arkitektur alt. 1 Proj-Iteration1 PVG/Coaching Boris Magnusson Datavetenskap LTH Proj-Iter1-1 Registrering Registrering Arkitektur alt. 1 Personuppgifter Starttid Sorterare Måltid Efterbehandling Resultat Tre program som

Läs mer

Preliminär specifikation av projekt

Preliminär specifikation av projekt Preliminär specifikation av projekt Projektets namn: Infraröd Minneslåda (numera omdöpt till FastSync) Uppdragsgivare: Alex Olwal aolwal@cs.columbia.edu Deltagare: Johan Ullberg Nils

Läs mer

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java jonas.kvarnstrom@liu.se 2017 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Till stor del ersatt av Swing: Mer omfattande,

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

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson Rapport grupp 4 Software Engineering Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson 2009-10-29 Processer Sprinter Scrum har varit till stor hjälp för oss för att nå våra mål,

Läs mer

Testplan Cykelgarage

Testplan Cykelgarage Testplan Cykelgarage Stefan Johansson D08 (dt08sj7@student.lth.se) Johan Anderholm D08 (dt08ja5@student.lth.se) Angelica Gabasio D08 (dt08ag8@student.lth.se) Marcus Carlberg D08 (dt08mc4@student.lth.se)

Läs mer

V!cto. Att tjäna pengar genom bättre testning med

V!cto. Att tjäna pengar genom bättre testning med Att tjäna pengar genom testning med Att tjäna pengar genom testning med 1 (50) Det finns tre vägar till test: 1: Testautomati- Att bygga sering Att bygga Att bygga Att bygga Att bygga Att bygga Att bygga

Läs mer

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets GUI (forts) Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets Sven-Olof Nyström Uppsala Universitet 18 mars 2005 Skansholm: Kapitel 6 Användaren kan kommunicera med programmet

Läs mer

Proj-Iteration 5B. Plan för återstående iterationer

Proj-Iteration 5B. Plan för återstående iterationer Proj-Iteration 5B PVG/Coaching Boris Magnusson Datavetenskap LTH PVG/Coach 2009. Proj-Iter5B : 1 Plan för återstående iterationer Förutom att arbeta vidare på stories skall release göras både under iteration

Läs mer

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

Creo Customization. Lars Björs 2014-10-16

Creo Customization. Lars Björs 2014-10-16 Creo Customization Lars Björs 2014-10-16 Norra Europas största partner och återförsäljare av PTC relaterad programvara (Windchill, Creo, Arbortext, MathCad, Relex) 70 anställda Egen utvecklingsavdelning

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Model View Controller Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är väldigt

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

Installationsbeskrivning för CAB Service Platform med CABInstall

Installationsbeskrivning för CAB Service Platform med CABInstall Installationsbeskrivning för CAB Service Platform med CABInstall INLEDNING... 2 INSTALLATION... 3 AVANCERAD INSTALLATION... 10 YTTERLIGARE INFORMATION... 11 Proxy... 11 Sida 1 av 12 Inledning Denna beskrivning

Läs mer

Slutrapport Get it going contracts

Slutrapport Get it going contracts Slutrapport Get it going contracts Författare: Anthony Dry Datum: 2011-06-02 Program: Utvecklare av digitala tjänster Kurs: Individuellt mjukvaruutvecklingsprojekt 7.5p Linnéuniversitetet (Kalmar) Abstrakt

Läs mer

Beskrivning av gesällprov RMI Chat Mikael Rydmark

Beskrivning av gesällprov RMI Chat Mikael Rydmark Beskrivning av gesällprov RMI Chat Mikael Rydmark rydmark@kth.se Mikael Rydmark 1(8) 12-06-06 Innehållsförteckning Inledning...3 Server...3 Klient... 3 Ansluta till servern...3 Huvudchat...4 Privat kommunikation...5

Läs mer

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

emopluppen Användning av Ant Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC) emopluppen Användning av "Ant" Version: 1.4 ( 2002/04/26 07:27:52 UTC) Niklas Backlund Sammanfattning Det här dokumentet handlar om programmet Ant, som är en byggmiljö för programutvecklingsprojekt. Dess

Läs mer

Introduktion till programmering med hjälp av Lego Mindstorm

Introduktion till programmering med hjälp av Lego Mindstorm Kungliga Tekniska Högskolan Introduktion till programmering med hjälp av Lego Mindstorm Laborationsrapport gällande programmering inom NXC Simon Jansson 31 08 2014 simonjan@kth.se Introduktionskurs i datateknik

Läs mer

Gränssnitt för FakeGranska. Lars Mattsson

Gränssnitt för FakeGranska. Lars Mattsson Gränssnitt för FakeGranska av Lars Mattsson (larsmatt@kth.se) Innehållsförteckning 1 Introduktion...3 2 Genomförande:...3 3 Användning...5 4 Kända buggar:...6 5 Källförteckning...6 2 1 Introduktion Taken

Läs mer

EDAA01 Programmeringsteknik - fördjupningskurs

EDAA01 Programmeringsteknik - fördjupningskurs EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@cs.lth.se sandra.nilsson@cs.lth.se http://cs.lth.se/edaa01ht Förkunskapskrav: Godkänd på obligatoriska

Läs mer

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Stora delar har

Läs mer

Vad utmärker ett bra användargränssnitt?

Vad utmärker ett bra användargränssnitt? Vad utmärker ett bra användargränssnitt? Att kommunicera med användarna Feedback och Pliancy Excise kontra Flow GUI = Graphic User Interface GUI = Graphic User Interface GUIn, eller grafiska gränssnitt

Läs mer

Windows Forms Winstrand Development

Windows Forms Winstrand Development 2013-01-23 1 Winstrand Development Användargränssnitt Hittills har vi skapat program för kommandoraden. Den bakomliggande koden fungerar som den ska, men vi upptäcker snabbt att programmen är begränsade

Läs mer

Agil testning i SCRUM

Agil testning i SCRUM Agil testning i SCRUM Petter Salomonsson Petter.salomonsson@addq.se Tel: 0708-398435 Kort presentation AddQ Consulting AB tydlig fokus på test och kvalitetssäkringstjänster erbjuder mycket erfarna konsulter

Läs mer

Design och konstruktion av grafiska gränssnitt

Design och konstruktion av grafiska gränssnitt Design och konstruktion av grafiska gränssnitt Armin Nezirevic Peter Börjesson Interaktionsdesign Tillämpad informationsteknologi Chalmers/GU Idag Vad utmärker ett bra användargränssnitt? Kort kursinfo

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

Läs mer

SNABBGUIDE för studenter windows. Utskriftshantering, Kopiering och Scanning

SNABBGUIDE för studenter windows. Utskriftshantering, Kopiering och Scanning SNABBGUIDE för studenter windows Utskriftshantering, Kopiering och Scanning Installation av klient på din privata dator Installation av klient För att kommunicera med utskriftssystemet behöver varje dator

Läs mer

Date Version Description Author. 1 Introduktion s Översikt av Vårdguiden 1.2 Syfte och Omfattning Inkluderat

Date Version Description Author. 1 Introduktion s Översikt av Vårdguiden 1.2 Syfte och Omfattning Inkluderat Slutrapport Vårdguiden SR.Vg_v.1.0 Date Version Description Author 2017-03-17 1.0 Slutrapport gällande för TP.Vg_v.1.0, TS.Vg_v.1.0, TR.Vg_V.1.0 och AvR.Vg_v.1.0 Lisa Millhus Innehåll 1 Introduktion s.2

Läs mer

Regressionstestning teori och praktik

Regressionstestning teori och praktik Regressionstestning teori och praktik Lic. Emelie Engström emelie.engstrom@cs.lth.se Software Engineering Research Group LUND UNIVERSITY Sweden SWELL the Swedish Research School in Software Verification

Läs mer

Mina listor. En Android-applikation. Rickard Karlsson 2013-06-09. Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.

Mina listor. En Android-applikation. Rickard Karlsson 2013-06-09. Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu. Mina listor En Android-applikation Rickard Karlsson 2013-06-09 Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.se Innehållsförteckning 2. Innehållsförteckning 3. Abstrakt 4. Inledning/bakgrund

Läs mer

Metoder och verktyg för funktionssäkerhet

Metoder och verktyg för funktionssäkerhet Metoder och verktyg för funktionssäkerhet Projektstart 1. Hantera kraven En bra process är grunden för att hantera kraven i ett säkerhetsprojekt. Det krävs att du har en tydlig spårbarhet mellan krav och

Läs mer

Instruktion för användande av Citrix MetaFrame

Instruktion för användande av Citrix MetaFrame Instruktion för användande av Citrix MetaFrame Öppna valfri browser, helst Google Chrome eller annan modern browser. Firefox, Safari, MS Edge, IE osv fungerar också men Internet Explorer är dock inget

Läs mer

Användning av testautomation inom Extendas utvecklingsorganisation

Användning av testautomation inom Extendas utvecklingsorganisation Testautomation Användning av testautomation inom Extendas utvecklingsorganisation Agenda Presentation av Extenda Vad är en POS? Test av POS Automatiska tester Sammanfattning 2 Kort historik 1982 Extenda

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

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning PMM (Process Maturity Metrics) PMM är en metod för att mäta processmognad i utvecklingsprojekt. I korthet går metoden ut på att man utvärderar sin utvecklingsprocess med avseende på ett antal framgångsfaktorer

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

Digitalt lärande och programmering i klassrummet

Digitalt lärande och programmering i klassrummet Stockholm 2018-02-14 14 februari 2018 Digitalt lärande och programmering i klassrummet Programmera i Python med micro:bit Introduktion I förra lektionen gick vi igenom grunderna i hur man programmerar

Läs mer

Startmeny i Windows 8

Startmeny i Windows 8 Så trollar du fram en Startmeny i Windows 8 7 5 smarta verktyg 7 Gratis och enkelt 7 Ger Windows helt nya funktioner. 5 program som fixar en riktig Startmeny i Windows 8 Saknar du Startmenyn i Windows

Läs mer

Testautomatisering. Labbar, FitNesse, TDD, BDD

Testautomatisering. Labbar, FitNesse, TDD, BDD Testautomatisering Labbar, FitNesse, TDD, BDD Lab 4 Utökad deadline? Lab 4 FM: Lab 1-3 snack FitNesse TDD BDD EM: Handledning Idag Watir::Wait.until {"OK"} Lab 1-3 I Ruby: False: false eller nil True:

Läs mer

Dagbok Mikael Lyck 810717-0071

Dagbok Mikael Lyck 810717-0071 Dagbok Mikael Lyck 810717-0071 2/6 Slutredovisning, redovisningen gick bra vi hade ju redan byggt ihop spelet så vi var inte särskilt oroliga. Allt som allt är jag väldigt nöjd med slutprodukten. 11/5

Läs mer

Praktikum i programvaruproduktion

Praktikum i programvaruproduktion Praktikum i programvaruproduktion Introduktion Föreläsare/Ansvarig: Pontus Boström Email:pontus.bostrom@abo.fi Rum A5055 Assistent: Petter Sandvik Email: petter.sandvik@abo.fi Rum: A5048 Föreläsningar:

Läs mer

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P Slutrapport Författare: Zlatko Ladan Program: Utvecklare av Digitala Tjänster 180P Kurs: Individuellt Mjukvaruprojekt Z l a t k o L a d a n Sida 1 Abstrakt: Denna rapport handlar om mitt projekt som jag

Läs mer

LNU INDIVIDUELLT MJUKVARUUTVECKLINGSPROJEKT. Honey Hunter. Androidspel. Martin Karlsson 1/17/2014

LNU INDIVIDUELLT MJUKVARUUTVECKLINGSPROJEKT. Honey Hunter. Androidspel. Martin Karlsson 1/17/2014 LNU INDIVIDUELLT MJUKVARUUTVECKLINGSPROJEKT Honey Hunter Androidspel Martin Karlsson 1/17/2014 Abstrakt: Denna slutrapport berör androidspelet Honey Hunter som berör kursen Indiviudellt Mjukvaruutvecklingsprojekt

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

Calligra. En allmän inledning. Raphael Langerhorst Jost Schenck Översättare: Stefan Asserhäll

Calligra. En allmän inledning. Raphael Langerhorst Jost Schenck Översättare: Stefan Asserhäll En allmän inledning Raphael Langerhorst Jost Schenck Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 1.1 Komponenter i Calligra.................................. 5 1.2 Översikt över funktioner i

Läs mer

Version 1.0. 2013-02-13 Testteam 4 Testledare: Patrik Bäck

Version 1.0. 2013-02-13 Testteam 4 Testledare: Patrik Bäck Version 1.0-2013-02-13 Testteam 4 Testledare: Patrik Bäck 0 Sammanfattning Testplanen är utarbetad som ett svar på Konsumentverkets förfrågningsunderlag avseende upphandling av ett nytt budget- och skuldsaneringssystem,

Läs mer

Vanliga frågor för VoiceXpress

Vanliga frågor för VoiceXpress Vanliga frågor för VoiceXpress 1) Hur stort ordförråd (vokabulär) innehåller VoiceXpress? VoiceXpress innehåller ett mycket omfattande ordförråd, och svaret på frågan varierar en aning beroende på hur

Läs mer

A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices

A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices Mattias Jarheden och Thomas Forsström Sammanfattning Denna djupstudie försöker ge en inblick

Läs mer

Automatisk generering av enhetstester

Automatisk generering av enhetstester Automatisk generering av enhetstester Av Christoffer Stengren 05/03-2013 Innehållsförteckning Abstrakt...3 1. Introduktion...3 2. PVG projekt:...4 3. Vad finns det för verktyg?...4 4.Hur fungerar verktygen?...4

Läs mer

Webservice & ERP-Integration Rapport

Webservice & ERP-Integration Rapport Webservice & ERP-Integration Rapport Hardwood AB Mustafa Lazem 930916-9713 Jonas Ahrne 920325-0379 Hasan Nerjovaj 940130-7195 Stefan Liden 920628-0639 2014-05-18 Innehåll Bakgrund... 2 Syfte... 2 Projektbeskrivning...

Läs mer

Programmering i C++ Kompilering från kommandoraden

Programmering i C++ Kompilering från kommandoraden Programmering i C++ Kompilering från kommandoraden Sven Gestegård Robertz Datavetenskap, LTH 9 november 2015 Sammanfattning Ibland vill man, av olika anledningar, inte använda en stor integrerad utvecklingsmiljö

Läs mer

Proj-Iteration 3. Grov plan för releaser

Proj-Iteration 3. Grov plan för releaser Proj-Iteration 3 PVG/Coaching Boris Magnusson Datavetenskap LTH Proj-Iter3-1 Grov plan för releaser Kunden är mycket nöjd med första releasen som visar att stora framsteg gjorts med implementationsarbetet.

Läs mer

KUNGLIGA TEKNISKA HÖGSKOLAN. Laboration II1310. Programmera Lego Mindstorm robot i NXC

KUNGLIGA TEKNISKA HÖGSKOLAN. Laboration II1310. Programmera Lego Mindstorm robot i NXC KUNGLIGA TEKNISKA HÖGSKOLAN Laboration II1310 Programmera Lego Mindstorm robot i NXC Johnny Vu 120904 Jvu@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Vi har genomfört en laboration för

Läs mer

CTM Release Notes 7.5.4

CTM Release Notes 7.5.4 CTM Release Notes 7.5.4 Page 1 of 13 1 CTM RELEASE NOTES 7.5.4... 3 1.1 SKICKA TILLDELNINGSMEDDELANDE I UPPHANDLING... 3 1.2 ELEKTRONISK SIGNERING AV AVTAL... 4 1.2.1 STEG FÖR STEG INSTRUKTIONER... 4 1.3

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN KUNGLIGA TEKNISKA HÖGSKOLAN PROGRAMMERING I NXC Namn: Michel Bitar 2012-08- 25 E- post: mbitar@kth.se Introduktionskurs i datateknik, II1310 Sammanfattning Intressant och lärorik laboration om att programmera

Läs mer

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Testning av applikationer

Testning av applikationer Tentamen, (20 YH-poäng) Plats: Övningstenta Tid: Övningstenta Tillåtna hjälpmedel: Papper, penna, suddgummi, linjal. Ej tillåtna hjälpmedel: Datorer, mobiltelefoner, surfplattor, miniräknare, böcker, anteckningar,

Läs mer

Introduktionsmöte Innehåll

Introduktionsmöte Innehåll Introduktionsmöte Innehåll Introduktion till kursen Kursens mål och innehåll Undervisning Datavetenskap (LTH) Introduktionsmöte ST 2019 1 / 14 EDAA01 Programmeringsteknik - fördjupningskurs Ingen sommarkurs

Läs mer

SLUTRAPPORT RUNE TENNESMED WEBBSHOP

SLUTRAPPORT RUNE TENNESMED WEBBSHOP SLUTRAPPORT RUNE TENNESMED WEBBSHOP -05-30 Abstrakt Under 10 veckor har jag och Oskar Norling arbetat med att ta fram en webbshop-applikation till företaget Rune Tennesmed i Kalmar. I denna rapport tänker

Läs mer

www.drakbutiken.se IDE USB kabel Windows XP, Vista 7 löäzxcvbnmqwertyuiopåasdfghjklöäz [Version 1.4, 2009-11-01] www.drakbutiken.

www.drakbutiken.se IDE USB kabel Windows XP, Vista 7 löäzxcvbnmqwertyuiopåasdfghjklöäz [Version 1.4, 2009-11-01] www.drakbutiken. qwertyuiopåasdfghjklöäzxcvbnmqwe rtyuiopåasdfghjklöäzxcvbnmqwertyu iopåasdfghjklöäzxcvbnmqwertyuiopå asdfghjklöäzxcvbnmqwertyuiopåasdf ghjklöäzxcvbnmqwertyuiopåasdfghjk www.drakbutiken.se IDE USB kabel

Läs mer

Installation av M7005 och till M7005 hörande serverprogram

Installation av M7005 och till M7005 hörande serverprogram 150607/150716/151005/SJn Installation av M7005 och till M7005 hörande serverprogram samt Anpassning av M7005:s utseende Installation och anpassning av M7005 sida 1 (18) Innehåll 1 M7005:s hemsida är M7005.Metem.se...

Läs mer

Författare: Juha Söderqvist IT-GUI. Version 1.0. Datum

Författare: Juha Söderqvist IT-GUI. Version 1.0. Datum Författare: Juha Söderqvist IT-GUI Version 1.0 Datum 2017-08-18 Innehåll 1. Introduktion... 3 Human-computer interaction... 3 Grafiska användargränssnitt... 4 Operativsystem... 4 Xerox Alto Executive file

Läs mer

Quickstart manual. Rev SHTOOL Quickstart manual Smart-House

Quickstart manual. Rev SHTOOL Quickstart manual Smart-House Quickstart manual Rev. 2.3 2017-09-14 SHTOOL 6.5.33 1 Innehåll 1 FÖRORD... 3 2 PROGRAMVARA... 4 2.1 Hämta programvara... 4 2.2 PC krav... 4 3 DOKUMENTATION... 5 3.1 Manualer... 5 3.2 Projektdokumentation...

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad

Läs mer

Simon Boström Introduktionskurs i Datateknik

Simon Boström Introduktionskurs i Datateknik KTH KISTA Linefollower Med parprogrammering i NXC Simon Boström 2014-09-04 simbos@kth.se Introduktionskurs i Datateknik Sammanfattning Laborationstillfället var till för att man som ny på KTH skulle lära

Läs mer

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI NG STRESS LUNDS TEKNISKA HÖGSKOLA - 2013-05-22 Projektmedlemmar: Emil Apelgren adi10eap@student.lu.se Fredrik Helander gda10fhe@student.lu.se Jonathan Klingberg

Läs mer

12 principer of agile practice (rörlig)

12 principer of agile practice (rörlig) X-treme programming 12 principer of agile practice (rörlig) Ge nöjd kund genom tidig och kontinuerliga leveranser Den viktigaste punkten som betyder att min vill ha kontinuerlig feedback Välkomna sena

Läs mer

2014-2015 Alla rättigheter till materialet reserverade Easec

2014-2015 Alla rättigheter till materialet reserverade Easec 1 2 Innehåll Introduktion... 4 Standarder... 5 Översikt: Standarder... 6 1058.1-1987 IEEE Standard för Software Project Management Plans... 7 Ingående dokument... 8 Syfte och struktur... 9 ITIL... 10 ITIL

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

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

Läs mer

Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering. Uppdatera Mobilus Professional till version 2.0.1 Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering. * Filen MP.exe (Mobilus programmet) får inte användas* under tiden uppdateringen

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

Uppgift v1: Teststrategi i sammanhang Terese Berger. Teststrategi. Projekt CiviCRM. Version 0.9. Sida 1(7)

Uppgift v1: Teststrategi i sammanhang Terese Berger. Teststrategi. Projekt CiviCRM. Version 0.9. Sida 1(7) Teststrategi Projekt CiviCRM Version 0.9 Sida 1(7) Innehållsförteckning Referenser...2 Revisioner...2 1. Inledning...3 1.1 Uppgift...3 1.2 Bakgrund...3 1.3 Organisation...4 1.4 Granskning och godkännande...4

Läs mer

1. (3p) Inom MDI-området framhåller man att människor lär sig via metaforer. Hur menar man att detta går till?

1. (3p) Inom MDI-området framhåller man att människor lär sig via metaforer. Hur menar man att detta går till? 1. (3p) Inom MDI-området framhåller man att människor lär sig via metaforer. Hur menar man att detta går till? Att lära sig via metaforer innebär att man drar nytta av kunskap som användaren redan har,

Läs mer

Quick start manual. Smart-House 2015-04-20. Rev 1.1

Quick start manual. Smart-House 2015-04-20. Rev 1.1 Quick start manual Smart-House 2015-04-20 Rev 1.1 Innehåll Förord... 3 Programvara... 4 Hämta programvara... 4 PC krav... 4 Dokumentation... 5 Manualer... 5 Projektdokumentation... 5 Smart-Dupline... 5

Läs mer

Installationsguide ELCAD 7.10

Installationsguide ELCAD 7.10 Installationsguide ELCAD 7.10 Innehållsförteckning Inledning... 2 Installation av ELCAD 7.10... 2 Viktiga nyheter om installationen... 2 Före installationen... 2 Ladda hem internationell version... 2 Ladda

Läs mer

Agil programutveckling

Agil programutveckling Agil programutveckling Pontus Evertsson D00, Lunds Tekniska Högskola d00pe@efd.lth.se Anna Jennerheim D00, Lunds Tekniska Högskola d00aj@efd.lth.se 2003-05-15 1 1. Inledning 3 2. Extreme Programming (XP)

Läs mer

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Manuell installation av SQL Server 2008 R2 Express för SSF Timing Manuell installation av SQL Server 2008 R2 Express för SSF Timing Innehåll 1. Metoder att installera...1 2. Förutsättningar...2 DotNet Framework 3.5...2 MSI Installer 4.5...2 3. Hämta SQL Server 2008 R2

Läs mer

Quick start manual. Smart-House 2015-11-04. Rev 2.0

Quick start manual. Smart-House 2015-11-04. Rev 2.0 Quick start manual Smart-House 2015-11-04 Rev 2.0 Innehåll Förord... 3 Programvara... 4 Hämta programvara... 4 PC krav... 4 Dokumentation... 5 Manualer... 5 Projektdokumentation... 5 Smart-Dupline... 6

Läs mer

Therese Hansson & Magnus Jonsson. Motivationsfaktorer - Test inom Agila utvecklingsprojekt

Therese Hansson & Magnus Jonsson. Motivationsfaktorer - Test inom Agila utvecklingsprojekt Motivationsfaktorer - Test inom Agila utvecklingsprojekt Magnus Jonsson & Therese Hansson Flerårig erfarenhet från ett globalt utvecklingsprojekt där vi införde Agile & Scrum metodik i hela organisationen

Läs mer

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar Skapa testfall Testing Köra testen Hitta fel Inspections and reviews Verifiera resultatet Formal methods Static analysis Completeness Verifiering Kvalitet Maintainability Validering Traceability Fault

Läs mer

Slutrapport YUNSIT.se Portfolio/blogg

Slutrapport YUNSIT.se Portfolio/blogg Slutrapport YUNSIT.se Portfolio/blogg RICKARD HANSSON 2012-06-04 Abstrakt Rapporten du har i din hand kommer handla om mitt projektarbete som jag genomfört under tio veckor för utbildningen Utvecklare

Läs mer

Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling

Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling Rune Tennesmed Oskar Norling Individuellt Mjukvaruutvecklingsprojekt Webbprogrammerare H12 Oskar Norling 2012-05-30 Abstrakt Denna rapport handlar om mitt mjukvaruutecklingsprojekt som jag och en klasskompis

Läs mer

Windows 8.1, hur gör jag?

Windows 8.1, hur gör jag? 2014 Windows 8.1, hur gör jag? Tor Stenberg Piteå Kommun 2014-03-28 1 av 13 Innehåll Hur jobbar jag med Windows 8.1... 2 Logga in... 2 Skrivbordet och programportal... 2 Logga ut och stänga datorn... 3

Läs mer

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN KUNGLIGA TEKNISKA HÖGSKOLAN Robotar i NXc En laboration med Mindstormrobotar Anton Gyllenhammar 7/30/12 antongy@kth.se II1310 Introduktionskurs i datateknik Sammanfattning Denna rapport beskriver NXc-

Läs mer