Institutionen för datavetenskap Department of Computer and Information Science Examensarbete Visualisering av svarstider mellan mobila klienter och datacenter av Adrian Sidenvall, Andy Truong, Erik Boman, Mikael Szreder, Oskar Lind, Simon Eriksson, Simon Petersson LIU-IDA/LITH-EX-G--15/026--SE 2015-06-15 Linköpings universitet SE-581 83 Linköping, Sweden Linköpings universitet 581 83 Linköping Linköpings universitet Institutionen för datavetenskap Examensarbete Visualisering av svarstider mellan mobila klienter och datacenter av Adrian Sidenvall, Andy Truong, Erik Boman, Mikael Szreder, Oskar Lind, Simon Eriksson, Simon Petersson LIU-IDA/LITH-EX-G--15/026--SE 2015-06-15 Handledare: Jonas Lindgren Examinator: Kristian Sandahl Sammanfattning Rapporten är en sammanställning av gruppens samlade erfarenheter och lärdomar av ett projekt vars syfte var att utveckla ett verktyg som ska visualisera svarstider mellan mobila klienter och datacenter. Genom att använda kontinuerlig prototypning har gruppen kunnat arbeta på ett användarnära sätt för att uppfylla kundens verkliga behov. För att uppnå detta användes utvecklingsmetodiken Kanban. Under projektets gång anpassades metodiken för att bättre passa in i arbetet. Projektets användartester har lett till sammanfattande erfarenheter om visualisering av data. Visualiseringar som projektgruppen ansett tydliga uppfattades inte alltid på samma sätt av användarna. Att visualisera flera parametrar på en världskarta anses vara problematiskt då kartan i sig endast består av länder. För visualisering av flera parametrar måste då även externa element användas, exempelvis cirklar eller andra former. i Innehåll I Gemensamma erfarenheter och diskussioner 1 Inledning 1 2 1.1 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Bakgrund 4 2.1 Kursen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Opera Software . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Kanban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Teori 5 3.1 Kanban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 D3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3 SEMAT Alpha Kernel . . . . . . . . . . . . . . . . . . . . . . 6 4 Metod 7 4.1 Dokumentgranskning . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 Kravinhämtning . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.3 Prototypning . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.4 Testning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.5 Verktyg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.5.1 Utvecklingsverktyg . . . . . . . . . . . . . . . . . . . . 8 4.5.2 Dokumentverktyg . . . . . . . . . . . . . . . . . . . . . 9 4.5.3 Planeringsverktyg . . . . . . . . . . . . . . . . . . . . . 9 4.6 Arbetsmetod . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.7 Forskningsmetod . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.7.1 Möten . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ii 4.7.2 Biblioteket . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.7.3 Insamling av projekterfarenheter . . . . . . . . . . . . 11 5 Resultat 12 5.1 Fas 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.2 Fas 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5.3 Fas 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.4 Användartester . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.4.1 Användartester . . . . . . . . . . . . . . . . . . . . . . 16 6 Diskussion 6.1 6.2 17 Erfarenheter för förstudie och fas 1 . . . . . . . . . . . . . . . 17 6.1.1 Kravinhämtning . . . . . . . . . . . . . . . . . . . . . . 17 6.1.2 Aktiviteter . . . . . . . . . . . . . . . . . . . . . . . . . 17 6.1.3 Prototyper . . . . . . . . . . . . . . . . . . . . . . . . . 18 6.1.4 Mötesanteckningar . . . . . . . . . . . . . . . . . . . . 18 Erfarenheter från fas 2 . . . . . . . . . . . . . . . . . . . . . . 18 6.2.1 Arbeta mer intensivt med Kanban metodiken . . . . . 18 6.2.2 Mötesanteckningar . . . . . . . . . . . . . . . . . . . . 19 6.3 Erfarenheter från fas 3 . . . . . . . . . . . . . . . . . . . . . . 19 6.4 Tekniska erfarenheter . . . . . . . . . . . . . . . . . . . . . . . 20 6.5 6.6 6.4.1 Framtagning av verktyg för kartritande . . . . . . . . . 20 6.4.2 Framtagning av mer detaljerad kartdata . . . . . . . . 20 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 6.5.1 Visualisering på kartor . . . . . . . . . . . . . . . . . . 21 6.5.2 Visualisering av flera parametrar på en karta . . . . . . 24 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6.6.1 6.7 Möten . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Arbeta i ett vidare sammanhang . . . . . . . . . . . . . . . . . 25 6.7.1 Miljöaspekter . . . . . . . . . . . . . . . . . . . . . . . 26 7 Slutsatser 27 iii II Individuella delar 29 1 Adrian Sidenvall: Projektledning i ett mjukvaruprojekt där Kanban-metodiken används 30 1.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.5 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.6 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.7 1.8 1.9 1.6.1 Stategisk projektledning . . . . . . . . . . . . . . . . . 31 1.6.2 Kanban och Scrum . . . . . . . . . . . . . . . . . . . . 32 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1.7.1 Böcker . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1.7.2 Projekterfarenheter . . . . . . . . . . . . . . . . . . . . 33 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.8.1 Förstudie . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.8.2 Förberedelser till att använda Kanban . . . . . . . . . 34 1.8.3 Att börja använda Kanban . . . . . . . . . . . . . . . . 35 1.8.4 Vår användning av Kanban . . . . . . . . . . . . . . . 36 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.9.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.9.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1.10 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1.10.1 Hur Kanban påverkar ett projekt . . . . . . . . . . . . 39 1.10.2 Introduktion av Kanban i ett projekt . . . . . . . . . . 40 1.10.3 Strategisk projektledning . . . . . . . . . . . . . . . . . 41 2 Andy Truong: Dokumenthantering i projekt 43 2.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 iv 2.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.5 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.6 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.6.1 Versionshantering . . . . . . . . . . . . . . . . . . . . . 44 2.6.2 Kollaborativ redigering . . . . . . . . . . . . . . . . . . 45 2.6.3 Typsättning . . . . . . . . . . . . . . . . . . . . . . . . 46 2.6.4 Molnbaserad lagring . . . . . . . . . . . . . . . . . . . 47 2.6.5 Verktyg . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.7 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.8 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.9 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.9.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.9.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.10 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3 Erik Boman: Testning och säkerhet vid utvecklandet av en webbapplikation 56 3.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.5 3.4.1 Avgränsningar i rapporten . . . . . . . . . . . . . . . . 57 3.4.2 Avgränsningar vid testning . . . . . . . . . . . . . . . . 57 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.5.1 3.6 Webbapplikationer nu och då . . . . . . . . . . . . . . 57 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.6.1 Cross-site scripting . . . . . . . . . . . . . . . . . . . . 58 3.6.2 SQL-injektioner . . . . . . . . . . . . . . . . . . . . . . 58 3.6.3 Brute force . . . . . . . . . . . . . . . . . . . . . . . . 59 3.6.4 Denial of service . . . . . . . . . . . . . . . . . . . . . 59 3.7 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.8 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 v 3.9 3.8.1 Cross-site scripting . . . . . . . . . . . . . . . . . . . . 61 3.8.2 SQL-injektioner . . . . . . . . . . . . . . . . . . . . . . 61 3.8.3 Brute force . . . . . . . . . . . . . . . . . . . . . . . . 62 3.8.4 Denial of service . . . . . . . . . . . . . . . . . . . . . 63 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.9.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.9.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 3.10 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4 Mikael Szreder: Kanban som utvecklingsmetodik för mjukvaruprojekt med kontinuerlig prototypning 66 4.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.5 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.6 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.7 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.8 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.9 4.8.1 Fas 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.8.2 Fas 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.8.3 Fas 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.9.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.9.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.10 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5 Oskar Lind: Kontinuerlig kravinsamling 74 5.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.4 Ordlista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 vi 5.5 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.6 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.6.1 5.7 TDDD77 - Projektet . . . . . . . . . . . . . . . . . . . 76 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.7.1 Kravhanteringsmetoder . . . . . . . . . . . . . . . . . . 76 5.8 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.9 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.9.1 Intervjuer . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.9.2 TDDD77 – kravinsamlingsprocess . . . . . . . . . . . . 78 5.10 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.11 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6 Simon Eriksson: Implementation av interaktiv kartvisualisering med D3 83 6.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.5 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.6 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.7 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.8 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6.9 6.8.1 Första fasen med Datamaps . . . . . . . . . . . . . . . 86 6.8.2 Övergripande funktioner . . . . . . . . . . . . . . . . . 86 6.8.3 Världskartan . . . . . . . . . . . . . . . . . . . . . . . 87 6.8.4 Bubblorna . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.8.5 Datacenter . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.8.6 Sidebar . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.8.7 Statistik . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.9.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.9.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 vii 6.10 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7 Simon Petersson: Kvalitetssäkring och inspektioner 92 7.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.3 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.5 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.6 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.6.1 Inspektioner . . . . . . . . . . . . . . . . . . . . . . . . 94 7.6.2 Kvalitetsbegrepp . . . . . . . . . . . . . . . . . . . . . 94 7.7 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.8 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 7.9 7.8.1 Granskning av dokument . . . . . . . . . . . . . . . . . 96 7.8.2 Inspektioner av kod . . . . . . . . . . . . . . . . . . . . 96 7.8.3 Allmänt om kodinspektioner . . . . . . . . . . . . . . . 97 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.9.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.9.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.10 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Referenser 104 viii Del I Gemensamma erfarenheter och diskussioner 1 1 Inledning Detta dokument behandlar ett projekt i kursen TDDD77: Kandidatprojekt i programvaruutveckling vid Linköpings universitet. Dokumentet inleds med de frågeställningar som projektet behandlat samt en beskrivning av de utvecklingsmetoder och utvärderingsmetoder som använts. Projektet gick i korthet ut på att skriva en applikation för visualisering av svarstider mellan mobila klienter och datacenter, beroende på datacenters placering. För att uppnå detta använde sig projektet av utvecklingsmetodiken Kanban. 1.1 Syfte och mål Syftet med projektet var att utveckla ett verktyg vars uppgift var att genom visualisering underlätta och effektivisera placeringen av nya datacenter för att förbättra svarstider för mobila klienter. Målet var att kunden, Opera Software, skulle få ett bättre hjälpmedel för diskussion kring placering av nya datacenter. Då de tidigare använt sig av kalkylblad var förhoppningen att det nya visuella hjälpmedlet skulle ge en bättre överblick över hur placeringen av datacenter påverkade deras användare. 1.2 Frågeställning Här tas frågeställningar upp som besvaras i rapporten. 1. Vilka erfarenheter kan man få av att genomföra ett programmeringsprojekt? 2. Vilket stöd kan man få genom att använda och följa upp SEMAT Kernel Alphas? 3. Vad finns det för för- och nackdelar med att använda metoden Kanban i ett programmeringsprojekt? 2 4. Hur kan man visualisera flera olika data för enskilda länder simultant på en världskarta? 5. Finns det bra verktyg som kan användas för visualisering av data för olika länder i en webbaserad applikation? 6. Vad kan man stöta på för problem vid hantering av kartdata? 1.3 Avgränsningar Då projektet hade begränsad tidstillgång har fokus legat på att uppfylla de primära prioritetskraven, vilket har begränsat mängden uppfyllda sekundära prioritetskrav. Projektets huvudsyfte var att applikationen skulle visualisera svarstider för specifika länder och inte specifika positioner. Applikationen begränsas även av tillgänglig information och kommer endast använda den vid visualisering. Programmet hanterar endast de datacenter som kunden tillhandahåller. Dessa datacenter behöver endast kunna aktiveras och inaktiveras. Den sekundära delen av projektet handlade om automatisk optimering av datacenter. På grund av tidsbegränsningar och svalt intresse från Opera lades inget arbete på denna del. Då visualiseringen skulle ske i en webbapplikation fanns det direkt ett flertal begränsningar på vilka verktyg och tekniska lösningar som kunde användas. 3 2 Bakgrund Här beskrivs bakgrund om kursen som projektet utfördes i, kunden för projektet och projektmetodiken Kanban. 2.1 Kursen Detta projekt utfördes som en del i kursen TDDD77: Kandidatprojekt i programvaruutveckling som är kandidatprojektkursen för studenterna som studerar civilingenjör datateknik vid Linköpings universitet. Kursen omfattar 16 högskolepoäng där även kursdelar i entreprenörskap och kommunikation ingår. 2.2 Opera Software Kunden för projektet var Opera Software som är ett mjukvaruföretag grundat i Norge år 1995. Deras huvudsakliga produkt är deras webbläsare, Opera, som har över 350 miljoner användare. De har kontor på 25 olika platser runt om i världen och huvudkontor i Oslo. Detta projekt utfördes i kontakt med Operas kontor i Linköping. [1] 2.3 Kanban Kanban är från början en del av Toyotas Lean-metodik och utvecklades i Japan under 1940-talet. Syftet med metoden är att, i de områden där den tillämpas, öka produktionstakten och minska kostnaden. Ordet Kanban kommer från japanskan och betyder ”visuellt kort”. På Toyota är Kanban det visuella system med kort eller lappar på tavlor som används för att binda ihop deras Lean-metodik. [2] Här beskrivs den projektmetodik som utvecklats utifrån Toyotas idéer och därifrån fått namnet Kanban. Grunden i den metodiken, eller det processverktyget som det också kan kallas [3], kommer från just de tavlor med lappar som Toyota kallar Kanban-tavlor. 4 3 Teori Här nedan beskrivs relevant teori som berör projektets frågeställningar. 3.1 Kanban I Kanban finns egentligen bara tre principer som ska följas för att man ska kunna säga att Kanban används. Den första är just Kanban-tavlan. Tanken är att varje projektgrupp har en egen tavla där de sätter upp lappar med de olika uppgifter som måste utföras för att projektet ska bli klart. Tavlan delas upp i olika kolumner och/eller rader med sin egen titel och/eller prioritet. Lapparna med uppgifter flyter sedan över denna tavla, från att uppgiften lagts till som något som behöver göras, till att den är färdigutvecklad. Tavlans utseende, och kolumner och rader, finns inte definierat i Kanban utan anpassas efter det/de projekt som den ska användas till. Ett enkelt exempel för hur en Kanban-tavla kan se ut syns i figur 1 nedan. Figur 1: Enkelt exempel på en Kanban-tavla med tre flödestillstånd. [4] Utöver att visualisera arbetsflödet med tavlan så begränsar man antalet pågående arbetsuppgifter (Works In Progress – WIP) i de olika flödestill5 stånden, detta är den andra Kanban-principen. Projektgruppen bestämmer då hur många lappar som får finnas i varje kolumn utefter vilket antal som passar för just det projektet. Kanban säger inget om vilket antal WIP som får finnas och inte heller om antalet måste begränsas i alla flödestillstånd. Detta är något som gruppen får komma fram till, och ständigt utveckla, själva för just deras projekt. Den tredje och sista principen som ska följas är att lead time ska mätas. Lead time är den tid det tar från att en arbetsuppgift påbörjas, eller kan påbörjas, tills att den är klar. Alltså den tid det tar från att en uppgiftslapp flyttas in på tavlan, t ex från uppgiftsbanken, backlogen, till att den har flyttats till de färdiga uppgifterna. Denna tid kan användas för att utveckla användandet av Kanban vidare. Man vill nämligen få en så kort och förutsägbar lead time som möjligt. [3] 3.2 D3 JavaScript-biblioteket D3, som står för Data-Driven-Documents, valdes som grund till visualiseringen i projektet. D3 är ett bibliotek som använder sig av de standarder som finns implementerade inom moderna webbläsare så som HTML, CSS och JavaScript. Syftet med D3 är att underlätta skapandet av datavisualiseringar i webbläsare. 3.3 SEMAT Alpha Kernel SEMAT Alpha Kernel är ett enkelt sätt för en organisation att utvärdera ett mjukvaruprojekt nuvarande status. Den kan också underlätta planeringen av nästa steg i utvecklingen. Alphas representerar nyckelområden för ett projekt och Alpha States representerar tillståndet inom dessa områden [5]. 6 4 Metod Här beskrivs olika metoder och arbetssätt som använts under projektets gång. Vissa är verktyg som använts till delar av projektet medan andra beskriver sätt som vi arbetat på. 4.1 Dokumentgranskning För att se till att projektets dokument höll en viss kvalitet granskades allt som skrevs av minst en annan person utöver författaren själv. Detta gjordes för att minimera antalet mindre fel och för att kunna peka ut brister i texten. Dokument samskrevs i Google Docs och förslagsläget användes för att den som granskade skulle kunna ge förslag på förbättringar och ändringar. Dokumentansvarig hade sedan ansvar för att godkänna dessa förslag för att sedan överföra ändringarna till LATEX för formatering. 4.2 Kravinhämtning För kravinhämtning har projektgruppen använt sig av möten med kund samt av ett formulär med frågor som skickades till kunden för evaluering. Formuläret skapades genom att alla gruppmedlemmar skrev frågor och funderingar som fanns angående projektet. Dessa skrevs sedan rent och formulerades om till tydliga frågor som kunden sedan besvarade. Till vissa frågor användes en sifferskala, detta för att ge en bättre bild av hur relevant en viss funktionalitet var. 4.3 Prototypning För att få en bättre bild av kundens verkliga behov och vilka krav som sattes så användes kontinuerlig prototypning. Tidigt i projektet användes helt visuella prototyper utan funktionalitet, dessa gav en enkel bild av hur applikationen skulle kunna se ut. Senare användes dessa prototyper som grund till 7 framtida prototyper. Dessa prototyper utvecklades vidare med utökad funktionalitet genom projektets gång. Varje ny prototyp som fungerade kunde då fortsätta utvecklas mot den slutliga produkten. Vi presenterade även några av dessa prototyper för kunden vid möten och antecknade reaktioner och kommentarer. 4.4 Testning Under projektet har webbapplikationen testats för att se till att den uppfyller de krav som gruppen och Opera haft på den. Dessa tester har delvis skett informellt under tiden som produkten har utvecklats men även mer formella tester har utförts och finns dokumenterade i testrapporterna. Fokus under dessa tester låg framförallt på att hitta buggar samt avvikelser i applikationen mellan olika webbläsare. I slutet av projektet gjordes även ett antal användartester för att se hur intuitiv applikationen var. För utförandet av testerna användes en användarberättelse för att sätta in testanvändaren i ett sammanhang inför testningen. De observationer som noterades under användartesterna dokumenterades med hjälp av ett standardiserat protokoll. Dessa tester gav mycket värdefull feedback om potentiella framtida förbättringar och funktionaliteter. 4.5 Verktyg Under projektets gång har gruppen använt sig av ett antal olika verktyg. Dessa finns beskrivna nedan. 4.5.1 Utvecklingsverktyg För att underlätta utvecklingsprocessen användes Redmine. Redmine är ett webbaserat projektverktyg där aktiviteter har hanterats enligt Kanban metodiken. Gruppmedlemmarna har även rapporterat spenderad tid på varje aktivitet. 8 För att hantera all källkod har versionshanteringssystemet Git använts. För att få en bättre översikt över utvecklingsprocessen integrerades Git med Redmine. 4.5.2 Dokumentverktyg För en stor andel av dokumenten som producerades under projektets gång användes Google Docs. Detta för att enkelt kunna samskriva gemensamma dokument. Google Docs har bra funktionalitet för kommentarer och ändringsförslag vilket har använts produktivt i arbetet med kontinuerlig uppdatering och förbättring av dokumenten. Sedan har LATEX använts för att renskriva alla dokument så att de blivit utseendemässigt korrekta och följt en gemensam mall. Google Docs har även använts för att dela med sig av erfarenheter och information samt för att samla material till presentationer och oppositioner. 4.5.3 Planeringsverktyg Gruppen har använt sig av tjänsten Doodle för underlätta planeringen av möten inom projektgruppen. Där har teamledaren planerat möten utifrån tillgängliga tider och sedan skickat ett formulär till gruppmedlemmarna. Där har alla gruppmedlemmar kunnat välja individuellt passande tider för mötet. 4.6 Arbetsmetod I utförandet av projektet så har utvecklingsmetodiken Kanban använts. Från och med att Kanban infördes fanns en Kanban-tavla tillgänglig på gruppens Redmine-sida. Där har gruppens utvecklingsledare ansvarat för att lägga till och flytta runt aktiviteter. Vi valde att använda arbetsstegen Backlog, To Do, Development, Integration & Testing och Resolved. Dessa blev kolumner på gruppens Kanban-tavla. Begränsningarna av antalet aktiviteter som fick finnas i de olika kolumnerna 9 sattes initialt till tre, men anpassades under projektets gång med avseende på arbetsflödet. Under möten bestämde gruppen vilka aktiviteter som skulle påbörjas, dessa flyttades då från Backlog till To Do. Då Kanban saknar specificerade ansvarsposter för exempelvis teamledare eller testledare så har dessa lagts till utifrån de ansvarsposter som föreslagits i kursen. 4.7 Forskningsmetod Nedan följer en beskrivning av metoder som projektgruppen använt sig av för att samla erfarenheter under projektet gång. Primärt har erfarenheter erhållits från möten, där protokoll och tankar samlats. 4.7.1 Möten Under projektets gång har minst ett möte i veckan, ofta fler, hållits med hela gruppen. Vid vissa av dessa möten har även gruppens handledare närvarat för att ge gruppen stöd och svara på eventuella frågor. Mötena har använts både för att samordna och planera arbetet såväl som för att dela med sig av erfarenheter och diskutera problem och framsteg. Tanken var att alla gruppmedlemmar skulle komma till tals under möte och därför inledes varje möte med en statusuppdatering från varje gruppmedlem. Initialt var tanken att en sekreterare skulle föra mötesprotokoll, vilket följdes till stor del. Dessa mötesanteckningar kunde sedan användas för att få en återblick på beslut som tagits under möten samt för att snabbt få en överblick av vad som sades. Mötesprotokollen samlades på Google Drive för enkel tillgång. 4.7.2 Biblioteket Biblioteket på Campus Valla har använts för att få tillgång till böcker och artiklar på ett smidigt sätt. Där finns en stor samling böcker om både pro- 10 grammering, projektmetodiker och projektledning vilket har varit en värdefull resurs, både för projektet i sig och för skrivandet av denna uppsats. 4.7.3 Insamling av projekterfarenheter Mallar och riktlinjer för dokumentation av erfarenheter från projektet har saknats. Dessa erfarenheter har istället främst samlats från kommunikation, såsom mötesanteckningar och mail. Varje vecka har teamledaren skickat in en tidrapportering till examinatorn och handledaren där framsteg under gången vecka, planer för den kommande veckan samt de risker som funnits för tillfället sammanfattades. Dessa rapporteringar har senare kunnat användas för att se tillbaka på vad som gjorts och, i vissa fall, på de funderingar som tagits upp. En del individuella anteckningar av erfarenheter har även förekommit. Insamling av erfarenheter har även gjorts vid de tillfällen då faser av projektet har utvärderats. I samband med att faser har avslutats har även erfarenheter från dessa skrivits in i andra dokument, framförallt i denna uppsats. 11 5 Resultat Här presenteras resultaten från projektets olika faser. Resultatet är i stort uppdelat efter de tre faser som projektet genomgått. Men då projektgruppen använts sig av Kanban har faserna inte varit lika strikta. Under första fasen lades mycket arbete på prototyper, detta för att kunna få återkoppling av kunden om vad som önskades samt för att testa flera sätt att visualisera den givna data. I slutet av första fasen togs den första interaktiva prototypen fram. Under fas 2 fortsatte arbetet med prototypen och den utvecklades vidare med utökad funktionalitet. Efter fas 2 var bilden över var kunden önskade tydlig och prototypen övergick till den verkliga produkten. Under fas 3 fortsatte arbetet med utökad funktionalitet och kartdatan uppdaterades ett flertal gånger. I fas 3 introducerades även en back-end för hantering av data. 5.1 Fas 1 I fas 1 tog gruppen fram ett flertal enkla prototyper som diskuterades med kund för att få återkoppling. Denna återkoppling användes sedan för att få en klarare bild över vad kunden önskade. Detta gav gruppen en bättre bild över vad som skulle utvecklas, och hur utvecklingen skulle gå till. Gruppen producerade även en interaktiv prototyp där länder visualiserades med färger utifrån deras svarstid och där landets namn kom upp då man hade muspekaren över landet. Se figur 2. Denna prototyp användes sedan för vidare utveckling med utökad funktionalitet som zoomning och möjligheten att aktivera och inaktivera datacenter. Prototypen gjordes på ett sådant sätt att den med fördel kunde användas för vidare utveckling under senare faser. 12 Figur 2: Skärmdump av produkten efter fas 1. 5.2 Fas 2 Då gruppen gick ifrån iterationer efter fas 1 för att istället jobba mer emot Kanban-metodiken behandlar det här avsnittet istället tidsperioden vecka 1316. Under denna period ändrades arbetssättet och användningen av Redmine mot att mer efterlikna Kanban med en webbaserad Kanban-tavla. Detta efter att teamledaren, och även arkitekten, läst boken Kanban and Scrum – Making the most of [3] av Henrik Kniberg och Mattias Skarin. En Kanbantavla skapades och aktiviteter formades mer som Kanban-uppgifter. Under fas 2 påbörjades en ny prototyp med bubblor efter att kund uttryckt sig positivt om den idén. Sidfältet förbättrades också markant med en sortering av datacentren efter svarstid. Ny och mer detaljerad kartdata började också användas. Efter fas 2 såg produkten ut som i figur 3. 13 Figur 3: Skärmdump av produkten efter fas 2. 5.3 Fas 3 Under fas 3 fortsatte arbetet enligt Kanban-metodiken. Kanban-tavlan började användas mer frekvent och antalet WIP justerades ytterligare för att passa slutfasen av projektet. Även aktiviteter för buggar började skapas för att rapportera buggar eller felaktig funktionalitet. Dessa aktiviteter innehöll kommentarer om när buggen uppstod och hur man skulle gå tillväga för att buggen skulle uppstå, för att förenkla för den person som skulle åtgärda felet. I vissa fall fanns även en tilldelning till en person som skulle utföra aktiviteten. Detta ledde till att buggar åtgärdades väldigt snabbt och effektivt. Under fas 3 vidareutvecklades produkten som tagits fram under fas 2. En sökfunktion lades till i sidfältet och datacentren ritades ut på kartan. Utöver kartförbättringar skapades även en ny vy för statistikvisualisering med syftet att ge en bättre överblick över den tillgängliga datan. Utöver detta gjordes även många visuella förändringar och finjusteringar. Även flaggor för länderna introducerades under fas 3. För att förenkla för kunden introducerades även en back-end som tidigare 14 utvecklats men som inte använts. Detta för att konverteringen av data skulle bli enklare för kunden då back-end hanterar detta. Kartdatan ändrades även för att större länder som USA skulle gå att dela upp i mindre regioner. Under fas 3 gick gruppen över till att helt använda D3 istället för ett det tidigare biblioteket som innehöll vissa begränsningar. Detta då utökad funktionalitet krävdes utöver det tidigare bibliotekets funktioner. I figur 4 visas resultatet efter fas 3. Figur 4: Skärmdump av produkten efter fas 3. 15 5.4 Användartester Här beskrivs de användartester som utfördes med resultaten redovisade. 5.4.1 Användartester För att testa hur den visualiserade datan tolkades av användare utfördes tester mot personer med liknande teknisk kompetens som slutanvändaren. Testet Testet inleddes med att varje användare fick ett scenario uppläst för sig. Detta scenario handlade om att användaren hade en viss roll hos kunden och skulle använda sig av den utvecklade produkten för att göra vissa bedömningar. Det första steget var att användaren skulle bekanta sig med produkten och dess olika egenskaper. Steg två handlade om att tolka den visualiserade datan. Steg tre handlade om att utföra en specifik uppgift med de kunskaper som testpersonen erhållit från de två första stegen. Resultatet Många av de funktioner som för utvecklingsteamet var självklara tog tid för testpersonerna att förstå. Bland annat var det svårt att förstå skillnaden mellan färg och storlek på bubblorna. Användarna var osäkra om färgen eller storleken representerade antalet användare. Det var inte heller helt intuitivt att använda sidfältet eller att nyttja några av de mer avancerade funktionerna som fanns tillgängliga. De streck som målats ut för att visa kopplingarna mellan de olika länderna och de tre bästa datacentrena var också svåra för användarna att förstå, speciellt när de var långa och delvis ritades utanför kartan. 16 6 Diskussion Här tas diskussioner om resultat och erfarenheter från projektets olika faser upp. Diskussionen är uppdelad i tre delar efter projektets faser och består av olika delar i projektet, som kravinhämtning, prototyper och möten. 6.1 Erfarenheter för förstudie och fas 1 Fas 1 bestod till stor del av att ta fram prototyper för att få en tydligare bild av kundens behov. Då kunden från början inte hade en klar bild av den slutgiltiga produkten ledde detta till mycket prototyparbete. Denna process gav gruppen många erfarenheter inom prototypning och kravinhämtning. 6.1.1 Kravinhämtning Projektet var från början otydligt definierat och kunden gav projektgruppen fria händer över produktens utformning. Det fanns endast ett fåtal funktionella krav som kunden önskade, vilket ledde till ett intensivt arbete inom gruppen för att ta fram krav och diskutera fram en kravspecifikation tillsammans med kund. Då det tog tid innan kraven specificerades ledde detta till att gruppen till en början kände att det var svårt att påbörja utvecklingsarbetet. Gruppen ville nämligen inte påbörja arbetet på något som sedan skulle visa sig inte behövas. I slutändan var det ändå bra att få erfarenhet av hur en kravinhämtning där kunden inte vet vad den behöver. 6.1.2 Aktiviteter Då det till en början fanns många oklarheter i projektet var det svårt att planera aktiviteter. Detta ledde i sin tur till att det i förstudien och delar av första fasen var svårt att arbeta effektivt i gruppen. Detta löstes genom mycket enskilt arbete i gruppen vilket fungerade bra men kunde lösts bättre med ett annat upplägg än det som var definierat i kursen. Något som var svårt i det enskilda arbetet var att jämnt fördela arbetet över gruppmedlemmarna. 17 6.1.3 Prototyper Tidigt i kursen valde gruppen att fokusera på ett par prototyper utifrån de idéer och tankar som uppkommit under förstudien. Prototyperna demonstrerades sedan till kund för återkoppling och eventuella förbättringar. Dessa prototyper fungerade bra och gav bra respons från kunden. Det gruppen tar med sig till framtida projekt är att det är betydligt lättare att visa konkreta idéer för kund och observera kundens reaktioner än att bara diskutera tankar med kunden. Då gruppen sedan övergick till första fasen kunde prototyperna direkt användas som en bas för vidareutveckling. 6.1.4 Mötesanteckningar Gruppen valde tidigt en sekreterare som ansvarade för att skriva mötesprotokoll på handledarmöten och gruppmöten. Dessa mötesprotokoll har varit uppskattade och har möjliggjort att snabbt och enkelt gå tillbaka och se vad som bestämdes på ett visst möte, exempelvis vid eventuella konflikter. Dessutom fungerade dessa utmärkt för att frånvarande personer skulle få en överblick av vad som tagits upp på mötet. 6.2 Erfarenheter från fas 2 Fas 2 sträckte sig från och med vecka 13 till och med vecka 16. 6.2.1 Arbeta mer intensivt med Kanban metodiken Under fas 2 satte teamledaren in sig bättre i utvecklingsmetodiken Kanban och planerade upp arbetet efter metodiken för att uppnå ett bättre arbetssätt. Från början hade gruppen lite svårt att komma på aktiviteter och även minimera pågående arbete. Men i det stora hela gick gruppen mer in i Kanbans sätt att tänka och kunde på detta sätt använda metodiken på ett effektivare sätt under fortsättningen av projektet. Det märktes att det krävdes en del tid att komma in i Kanban-tänket, speciellt då majoriteten av gruppen inte använt metoden tidigare. Att gruppen 18 inte hade ett eget kontor gjorde inte saken lättare då Kanban centraliseras kring visuella hjälpmedel, med Kanban-tavlan i spetsen. Det skulle även ha varit lättare att ha fler korta spontana möten om gruppen haft en gemensam samlingsplats som ett eget kontor. Gruppen minskade detta problem genom att ofta sitta flera stycken tillsammans på CreActive som är en mötesplats för samverkan mellan studenter och näringslivet, men gruppen saknade möjligheten att ha tillfällen med obligatorisk närvaro då gruppmedlemmar haft andra viktiga saker att göra. 6.2.2 Mötesanteckningar Under denna fas ändrades de handledarmöten som gruppen haft till gruppmöten där handledaren fanns närvarande för att kunna lägga in synpunkter samt kunna rådfrågas. Då både gruppmöten och handledarmöten nu skedde på samma sätt, med enda skillnaden om en handledare var närvarande eller inte, var det svårt att separera de två mötestyperna. Då gruppen från början valde att producera två typer av protokoll för de två mötestyperna var de anpassade för det specifika möten, vilket bidrog till att gruppen inte var lika noggrann med att skriva mötesprotokoll. Gruppen ansåg dock att det fortfarande gick bra att planera och hålla koll på alla delar i projektet, men protokollen skulle ändå ha varit bra att ha. Därför återupptogs mötesanteckningarna mot slutet av fasen, med mallen för gruppmöten. 6.3 Erfarenheter från fas 3 Fas 3 sträckte sig från och med vecka 17 till och med vecka 20. Under fas 3 arbetade gruppen vidare med och utvecklade användandet av Kanban. Detta gav djupare kunskap om hur Kanban fungerar. En annan erfarenhet som gruppen tar med sig är från de användartester som gjordes under denna fas. Gruppen blev förvånad över att de användare som produkten testades på hade svårt att förstå vad vissa visualiseringar betydde. Denna kunskap kommer vara till stor nytta av i framtida projekt. 19 6.4 Tekniska erfarenheter Detta stycke behandlar de tekniska utmaningar som gruppen mött under sitt arbete samt vilka erfarenheter som utvecklats för att möta dessa. 6.4.1 Framtagning av verktyg för kartritande När vi började undersöka hur produkten skulle utvecklas tänkte vi först använda kartdata från OpenStreetMap. OpenStreetMap är ett projekt som har framtagit öppen geografisk data för kartor till öppna så som kommersiella syften. Problemet med att använda kartdata från OpenStreetMap är att det inte fanns något enkelt sätt att få ut konturerna på alla länder. Detta fick oss att leta efter andra alternativ. Efter ett tag hittades ett färdigt bibliotek kallat Datamaps. Datamaps baseras på D3 och använder SVG-element för att rita upp en interaktiv karta i en webbläsare. Efter att ha vägt för- och nackdelar med OpenStreetMap kontra Datamaps bestämde vi oss för att använda Datamaps eftersom att det uppfyllde kriteriet med att få ut konturer på länder. 6.4.2 Framtagning av mer detaljerad kartdata Gruppen upptäckte under fas 2 att kartdatan som användes till systemet för att visualisera alla länder inte var tillräckligt noggrann för kundens data. Bland annat så saknades det en stor mängd mindre länder och öar. För att lösa detta problem så påbörjades ett arbete för att skaffa mer noggrann kartdata. Då ingen i gruppen arbetat med kartdata förut så blev det en lärandeprocess och gruppen fick göra flera försök innan tillräckligt noggrann kartdata erhölls. Ett av de största problemen gruppen kämpade med var att hitta kartdata där alla länder ingick. En enkel kontroll som användes för att bedöma om kartdata var tillräckligt noggrann var att kontrollera att Franska Guyana var 20 ett separat land från Frankrike och att Monaco fanns som ett eget land. Detta krav var svårare att uppfylla än förväntat, då problem uppstod med att till exempelvis länder som Storbritannien blev uppdelade i dess riksdelar. Problemet med detta var att kunden hade data för att visualisera Storbritannien och inte dess riksdelar. Detta ledde till att gruppen bestämde sig för att manuellt konstruera kartdata till en världskarta som var anpassad efter kundens data. För att lösa detta var gruppen tvungen att skriva skript som använde sig av hårdkodade listor av regioner som skulle grupperas ihop med deras administrativa länder. För att få fram den slutgiltiga versionen av kartdatan så behövde gruppen för hand gå igenom varje datapunkt som skulle visualiseras och se till att länder stämde överens och att de var rätt placerade. Anledningen till varför länder ibland inte blev rätt placerade berodde på på att vissa öar som tillhörde länderna tog över som huvudland. Den enda lösningen till detta problem var att för hand hitta dessa felaktiga länder och lägga in dem till den hårdkodade listan av länder som skulle grupperas. 6.5 Resultat Nedan följer en diskussion av resultaten. Här förs diskussion kring visualisering kopplat till frågeställningen om att simultant visualisera flera dataparametrar på en världskarta. 6.5.1 Visualisering på kartor Då projekts huvudsyfte var att producera ett verktyg för att kunna visualisera svarstider och användare fanns två parametrar att hantera vid visualiseringen. Kunden ville att svarstiden skulle representeras med en färgskala och att mängden användare även skulle kunna gå att observera på världskartan. Den första tanken som kom upp var att färga länder efter en färgskala beroende på svarstiden men problemet var då att visualisera antalet användare. 21 Figur 5: Prototyp för visualisering av svarstider med färgskala för länder. Detta medförde att flera principer för visualisering av användarantal diskuterades. Ett förslag som kom upp tidigt var att ge varje land en bubbla, där storleken berodde på antalet användare och färgen berodde på landets svarstid, se figur 6. Efter att ha visat kunden en prototyp med bubblor var kunden positiv inställd till idén och gruppen valde att fortsätta arbeta på den prototypen. 22 Figur 6: Prototyp för visualisering av svarstider med färgskala för länder. Andra visualiseringsmetoder Det diskuterades och utfördes även några tester på om konturlinjer skulle kunna användas för att, på samma sätt som en orienteringskarta visar höjdskillnader, kunna visualisera mängden användare. Problemet med lösningen var att det inte var uppenbart vad konturerna visualiserade, samt att fördelningen av mängden användare för varje land var okänd vilket försämrade hur visualiseringen skulle ha sett ut. Det fanns även flera andra lösningar som diskuterades, såsom att skapa tredimensionella staplar för visualisering av användarantal. Hela landet skulle då alltså ses som en stapel och bli högre om landet hade många användare. Denna idé testades aldrig utan slopades tidigt då gruppen inte trodde att resultatet skulle bli bättre än det med bubblor. Det skulle även ha varit svårt att utveckla, vilket gjorde att gruppen inte ville lägga tid på en prototyp. En svårighet med idén skulle även vara prestandaproblem. På samma sätt slopades flera andra idéer tidigt i processen för att ge mer tid åt idéer med mer potential. 23 Figur 7: Tidig prototyp på visualisering av användare med konturlinjer. 6.5.2 Visualisering av flera parametrar på en karta Att simultant visualisera flera dataparametrar på enbart en världskarta är svårt. Kartan i sig består bara av länder, vilka är svåra att modifiera för att visualisera mer än en parameter. Att visualisera en parameter, t ex genom att ändra färger på länder beroende på data, är enkelt, men att visualisera två eller fler parametrar samtidigt är svårare. Man skulle kunna ändra storleken eller formen på ett land, men detta är ingen bra lösning då det lätt kan förvirra användaren. För att lösa visualiseringen av två eller flera data simultant måste externa element användas. Det kan vara enkla symboler, som kvadrater, bubblor, linjer eller mer avancerade symboler som ikoner för specifika ändamål. Dessa element bidrar till att kunna visualisera flera parametrar simultant. Precis som tidigare nämnts använder slutprodukten sig av en bubbla för varje land, för att med storleken visa mängden användare och med färgen visa svarstiden. Man kan även tänka sig att använda kanten på bubblan för att visualisera ytterligare saker, exempelvis en förändring av svarstider. 24 6.6 Metod Nedan utvärderas metoder som användes under projektet. Här ger gruppen sina synpunkter på hur metoderna har fungerat och vad som skulle kunnat gjorts bättre. 6.6.1 Möten Hur möten har strukturerats har varierat lite under projektet, vilket beskrivs mer under resultat. Under förstudie och fas 1 var handledarmötena centrala, då handledarens stöd behövdes mycket. Detta eftersom gruppen inte visste mycket om projektet ur varken kund- eller kurssynpunkt. Från och med fas 2 var behovet av handledarmöten inte lika stort längre och handledarmötena blev till gruppmöten med handledaren närvarande. Gruppen skrev tidigt i projektet mötesprotokoll. Mötena hölls ganska öppna och var anpassningsbara vid ändringar beroende på vad som var viktigt vid just det mötet. Detta har varit på både gott och ont då det har varit tillåtet att snabbt kunna ta upp vad som var viktigt vid just det mötet. Ordentliga protokoll hade dock kunnat bidra till mer seriösa samt strukturerade möten där uppmärksamheten till mötet kunde varit bättre. I Kanban finns det inget specificerat angående möten, men gruppens lösning med statsuppdateringar under mötet har fungerat mycket bra och ledde ofta till bra diskussioner. 6.7 Arbeta i ett vidare sammanhang Att gå vidare med samma projektgrupp skulle kunna innebära att gruppen arbetar vidare med samma produkt och utvecklar den med utökad funktionalitet. I gruppens fall skulle detta kunna ske genom att kunden anställer gruppmedlemmarna för att integrera produkten på deras server tillsammans med deras databas. Detta skulle kunna förbättra och ge aktuell data till verktyget. I övriga aspekter är det beställda verktyget färdigutvecklat. Det går alltid att förbättra saker och lägga till mer funktionalitet, men i det stora 25 hela anser gruppen att produkten är klar. Ett annat sätt att arbeta vidare skulle kunna vara att gruppen går vidare och arbetar med ett annat projekt. Detta skulle innebära ett intressant perspektiv då gruppen har börjat lära känna varandra bättre och vet hur gruppmedlemmarna brukar arbeta, vilket borde förenkla arbetet i ett framtida projekt. Inom detta projekt har gruppen haft en kund som givit gruppen mycket frihet med vad som ska produceras och gruppen har själva ansvarat för mycket av arbetet med vad som ska tas fram och vilka krav som ska sättas. I ett framtida projekt med en annan kund skulle det kunna vara så att denne är mer strikt och har tydligare krav på vad som ska göras och hur det ska göras, vilket gruppen inte blivit vana med under det här projektet. I stort har gruppen fått många erfarenheter i detta projekt som kommer vara applicerbara även i framtida projekt. Ytterligare erfarenheter som kan nämnas är att projektgruppen har arbetat inom en specifik metodik som utvidgats för att passa just detta projekt. Detta har givit bra erfarenheter som skulle kunna vara applicerbara även till andra projekt. De roller som gruppen har använt under projektet är något som skulle kunna användas i ett vidare sammanhang. Gruppens medlemmar har med tiden lärt sig sin roll dess ansvarsområden, vilket kan vara bra i andra projekt om man får samma roll. 6.7.1 Miljöaspekter Produktens syfte är att effektivisera utplaceringen av datacenter för att optimera svarstiden för användare. Detta kommer att implicit bidra till att mängden datacenter och deras placering optimeras vilket ger positiva miljöaspekter då överflödiga datacenter elimineras. 26 7 Slutsatser För att dra en sammanfattande slutsats av projektet och dess frågeställningar kan visualiseringen nämnas som den stora erfarenheten som gruppen kommer att ta med sig tillsammans med arbetssättet Kanban och hur det kan användas för att planera och utföra arbetet. Efter genomförandet av projektet har projektets medlemmar erhållit stora erfarenheter inom webbutveckling med dess programspråk och vilka problem som ofta uppstår hos denna utvecklingsplattform. Många av gruppens medlemmar hade inga tidigare erfarenheter av de programspråk som användes, detta ledde till att det blev olika inlärningskurvor för medlemmarna. Den stora delen i projektet har varit att arbeta enligt utvecklingsmetodiken Kanban. Här har gruppen själva utvecklat metoden för att passa detta projekt och med tiden utvecklat gränser för antalet aktiviteter för olika kategorier i aktivitetsstegen, vilket har varit en bra erfarenhet. De projektroller som använts inom projektet har i vissa fall fungerat olika bra. För att göra arbetsgången bättre hade till exempel en kombination av Kanban och någon annan agil utvecklingsmetodik fungerat bättre. Då produkten som utvecklas var en webbapplikation för visualisering har gruppen erhållit stora erfarenheter inom visualisering och metoder som kan användas för att visualisera data och hur användaren uppfattar det som visualiseras. Gruppen märkte exempelvis att lösningar som internt inom gruppen tycktes var tydliga inte uppfattades på samma sätt av de testpersoner som testade produkten. Det tydligaste exemplet på detta var att de linjer som användes för att visualisera kopplingen mellan de tre bästa datacentren och ett land vid markering där testpersonerna hade svårt att uppfatta vad som menades. Se figur 8. Då länder har olika beteckningar beroende på vilken standard som använts har vissa problem uppstått när gruppen bytt mellan standarder allt eftersom i projektet. Detta skapade vissa problem och kunde ha diskuterats mer noggrant tidigt för att undvika problem i slutet. 27 Figur 8: Visualisering av ett lands tre bästa datacenter med linjer. SEMAT Alpha-korten har varit något som gruppen inte använt sig av tidigare. Detta har medfört att korten kommit i skymundan och inte använts till dess fulla potential. Gruppen har kommit fram till slutsatsen att korten inte är något att föredra i ett mindre projekt av denna typ. 28 Del II Individuella delar 29 1 Adrian Sidenvall: Projektledning i ett mjukvaruprojekt där Kanban-metodiken används 1.1 Inledning I den här delen kommer projektledning undersökas djupare. Då vårt projekt använder metodiken Kanban kommer projektledning i just sådana projekt vara i fokus. Både erfarenheter från vårt projekt och mer generell teori om projektledning kommer att tas upp. 1.2 Syfte och mål Syftet med denna undersökning är att få en djupare kunskap om projektledning samt att samla de erfarenheter om detta som insamlats under projektet. Tanken är att detta ska kunna hjälpa mig att vara en bättre teamledare i detta projekt såväl som eventuella framtida projekt. 1.3 Frågeställning 1. Hur påverkar användning av Kanban ett projekt? 2. Vad är det viktigt att tänka på då Kanban introduceras i ett projekt, som teamledare? 3. Vad innebär strategisk projektledning? 1.4 Avgränsningar Då detta projekt har utförts på ganska kort tid, med begränsade resurser och med ganska lite förkunskaper, har användningen och utvecklingen av Kanban varit begränsad. Detta begränsar då även utvärderingen av Kanban i sin helhet då vi inte kunnat använda det fullt ut. 30 1.5 Bakgrund En bakgrund om Kanban återfinns i huvuddelen av denna uppsats i avsnitt 2.3. 1.6 Teori Här sammanfattats teori från källor som använts till denna del av uppsatsen. 1.6.1 Stategisk projektledning I boken Strategic Project Management Made Simple [6] beskriver Terry Schmidt strategisk projektledning. Där ser man projekt i ett bredare perspektiv än i den mer traditionella taktiska projektledningen. Istället för att fokusera på uppgifter som behöver utföras i projektet ser man mer på helheten och de behov som finns. Centralt i boken finns fyra frågor som varje projektgrupp bör försöka svara på. • Vad försöker vi uppnå och varför? • Hur kommer vi mäta projektets framgång? • Vilka externa förutsättningar måste existera för projektet? • Hur ska vi nå målet? Dessa frågor måste, enligt Schmidt, ställas i just den ordningen, och svaren kan utvecklas under projektets gång. För att hjälpa läsaren att kunna använda dessa frågor finns ett kapitel för varje fråga. Där går författaren in mer på djupet om vad man ska tänka på vid diskussion kring varje fråga, vad som är viktigt m.m. Detta bildar en av tre delar av boken. De andra två delarna beskriver strategisk projektledning mer generellt och vilka verktyg man kan använda respektive hur man applicerar strategisk projektledning och vad som är viktigt att tänka på som projektledare. Även mer detaljerade saker, såsom en lista över bra verb att använda vid kommunikation med gruppen kring projektmål, finns. 31 1.6.2 Kanban och Scrum Boken Kanban and Scrum - Making the most of both [3] av Henrik Kniberg och Mattias Skarin handlar som titeln antyder om Kanban och Scrum. Båda dessa är agila projektmetodiker och de har många likheter. Boken tar i sin första del, skriven av Kniberg, upp grunderna för båda metodiker och hur de bör användas. Även viss jämförelse mellan de båda metodikerna tas upp. I bokens andra del, som Skarin skrivit, finns en case-studie som behandlar introduceringen av Kanban i en projektgrupp på ett större företag. Dessa två delar ger tillsammans en väldigt bra bild av hur både Kanban och Scrum fungerar, och hur man kan gå tillväga för att introducera någon av metodikerna i en projektgrupp. Något som boken trycker mycket på är att ingen av dessa metodiker är ett komplett regelverk, det är endast grunder eller verktyg för hur man kan jobba i ett projekt. Man kan alltså inte bara läsa hur metodikerna fungerar och följa en punktlista, man måste själv utveckla metodiken för just sitt projekt. Detta ställer en del krav på projektgruppen. Tanken är dock inte att man ska behöva vara expert på metodiken för att kunna använda den, det finns många hjälpmedel för att på ett enkelt, och ofta ganska självklart, sätt utveckla sin process. 1.7 Metod Insamling av kunskap för den här delen av uppsatsen har skett på två huvudsakliga sätt. Dels genom att läsa böcker i ämnet och dels genom insamling av erfarenheter från projektet som utförts. Ingen tydligt specificerad metod har använts vid insamlingen av denna kunskap utan metoden har anpassats efter situation. Här kommer dock beskrivas mer övergripande hur insamlandet har gått till. 1.7.1 Böcker För att hitta givande böcker att läsa har Google-sökningar använts flitigt. Genom att undersöka vilka författare som är framstående inom de intressanta 32 områdena och sedan undersökning av vilka av deras böcker som var mest intressanta för just detta projekt har bra val av böcker kunnat göras. Val har även till viss del begränsats av tillgängligheten av böckerna och till denna del har alla böcker kunnat lånas från Vallabiblioteket. För att sedan få ut så mycket som möjligt från böckerna har de kunskaper som de har givit använts i projektet så snart som möjligt. De huvudområden som böckerna har behandlat är projektmetoden Kanban och projektledning. För mig har båda dessa områden varit direkt applicerbara i projektet och många av de saker som böckerna beskrivit har varit mycket användbara. För att komma ihåg att använda de metoder som böckerna beskrivit har ofta minnesanteckningar använts. Dessa har ibland även varit korta handledningar, hämtade från böckerna, om hur metoderna bör användas. 1.7.2 Projekterfarenheter En viktig grund för det som skrivs i denna del är erfarenheter från projektet i stort och även erfarenheter för mig som teamledare speciellt. Hur dessa erfarenheter har samlats in och utvärderats har dock varierat kraftigt. I vissa fall har reaktioner från gruppen av hur något fungerar antecknats. Ibland har erfarenheter direkt kunnat skrivas in i denna uppsats. Som nämnts i metodavsnittet i huvuddelen av uppsatsen har erfarenheter även samlats och utvärderats i tidrapportering och utvärderingar av faser i projektet. 1.8 Resultat I det här avsnittet läggs vårt arbete under projektet genom dess olika faser fram, sett från min synvinkel som teamledare. 1.8.1 Förstudie Under projektets förstudie så hade vi ännu inte börjat arbeta efter någon projektmetodik, att undersöka vilken metodik vi skulle välja var en del av arbetet under den fasen. På grund av detta hade vi inte så mycket struktur 33 i vårt arbete till en början. För att vårt arbete, och samarbete, ändå skulle fungera och flyta på bra krävdes en mer flexibel typ av projektledning än vanligt. Gruppen och arbetet behövde få någon form av struktur, trots att avsaknaden av metodik och oklarheten i projektet gav en brist på just det. I förstudien skrevs mycket dokument. Avtal med kunden skrevs på och projektmetodik samt mjukvara till denna valdes. Som teamledare låg mitt ansvar främst på att se till att alla i gruppen hade något att göra och att samarbetet i gruppen fungerade bra, men även mycket på kontakten med kunden. Vi bestämde roller i gruppen tidigt och detta gav en bra grund i vem som hade ansvar för vilket dokument. Det fanns dock många oklarheter i vad som skulle skrivas i vilket dokument och det behövdes en hel del samordning för att vi skulle få en bra samling dokument utan så många upprepningar eller felaktigt placerad information. Som teamledare fick jag även ansvar för projektplanen, som jag skrev i samarbete med resten av gruppen. Det blev en hel del kontakt med kunden under förstudien då det var en del krångel med avtalet och även för att projektet var otydligt definierat. Denna kontakt sköttes av mig och analysansvarige, Oskar Lind. Som teamledare var det jag som hade ansvar för avtalet och det var även jag som planerade möten med kunden och skötte den mesta kontakten med dem, med undantag för ren kravanalys vilket sköttes av Oskar. 1.8.2 Förberedelser till att använda Kanban Processen med att börja anpassa vårt arbete efter Kanban var ganska utdragen. Vi bestämde tidigt, ca 3 veckor in i projektet, att vi skulle använda oss av Kanban men det tog många veckor innan vi verkligen började göra det. Till en början, efter att vi bestämt att Kanban skulle användas, så gjorde vi väldigt lite för att anpassa oss till Kanban, mest för att vi inte visste så mycket om det. Vi började dock läsa på lite smått om Kanban och diskuterade det en del på möten. Vi kom då fram till att vi behövde något datorbaserat verktyg 34 där vår Kanban-tavla kunde finnas. Man bör förstås ha en riktig tavla som gruppen kan samlas kring för diskussioner och möten men då vi saknade ett eget rum kunde vi inte ha någon sådan. Efter en del undersökning av alternativ började vi använda Redmine där man kan ha ett tillägg för agila projekt med en tavla som kan användas som Kanban-tavla. Vi försökte även planera aktiviteter på ett sådant sätt att de skulle kunna göras till aktivitetslappar då vår Kanban-tavla tagit form. Detta försvårades precis som mycket annat av att vi inte riktigt visste vad vi skulle utveckla, på grund av otydligheterna från kunden. Dock gjorde inte det så mycket eftersom att Kanban är en agil metod och inte kräver en komplett aktivitetslista från början, fler aktiviteter kunde läggas till efterhand. 1.8.3 Att börja använda Kanban Innan vi verkligen började använda Kanban läste jag boken Kanban and Scrum - Making the most of both [3] av Henrik Kniberg och Mattias Skarin. Det behövdes för att jag skulle ha den kunskap om Kanban som krävdes för att jag skulle kunna bidra till att få gruppen att använda det på rätt sätt. Efter att ha läst i den boken omformade jag den Kanban-tavla som vi skapat på Redmine så att den verkligen blev en Kanban-tavla, anpassad efter vårt projekt. De flödestillstånd jag skapade då var: Backlog, To Do, Development, Integration & Testing och Resolved. Vi började då med begränsningar på 3 Works In Progress (WIP) på To Do, Development och I&T, egentligen bara för att ha någon begränsning att börja med. Backlog höll vi utan begränsning då det bara var en kolumn där vi lade uppgifter som vi trodde skulle behöva utföras någon gång under projektet, den var inte heller med i flödet då uppgifterna där inte arbetades på. Tanken var att Backlog skulle vara sorterad, med uppgifter av högre prioritet längst upp. På möten skulle vi då kunna flytta in uppgifter från toppen av Backlog till To Do så att de skulle finnas tillgängliga för gruppmedlemmar att börja jobba på. Uppgifter i Backlog var annars låsta där så att de endast kunde flyttas av administratörer, tanken var att de endast skulle flyttas in 35 till To Do på möten. När uppgifter flyttats till To Do skulle de även där vara sorterade efter prioritet. Denna information om hur jag tänkt att vi skulle använda vår Kanbantavla kommunicerade jag först till gruppen via mail då vi just då inte kunde ha möte på över en vecka. Det var dock en period då gruppen hade mycket annat att göra utanför projektet och Kanban-tavlan började inte användas ordentligt förrän efter ett möte då vi kunde diskutera den mer. Då började vårt arbete till slut likna Kanban. 1.8.4 Vår användning av Kanban När Kanban väl hade börjat användas ordentligt betydde det inte att allt arbete kring projektmetodik var klart, istället flyttades fokus till att förbättra snarare än implementera metodiken. Kanban är uppbyggt på ett sådant sätt att processen hela tiden ska utvecklas och anpassas bättre för projektet. Från att Kanban introducerats ordentligt i gruppen användes det kontinuerligt genom resten av projektet. De saker som gjorde att det märktes tydligast att vi använde Kanban var Kanban-tavlan på Redmine och hur vi jobbade med denna på möten. Vid mötena kunde vi ha Kanban-tavlan framme på en datorskärm eller projektor och utifrån den diskutera läget. Det kunde handla om ifall någon aktivitet på tavlan skulle flyttas fram då den var klar i den kolumn den låg i eller att någon ny aktivitet skulle flyttas in eller läggas till. Hur många WIP som var tillåtna i varje kolumn ökades efterhand då det märktes att den ursprungliga gränsen på 3 var väldigt låg. Tanken med den låga gränsen var att få medlemmar att samarbeta mer och att alla bara skulle fokusera på en aktivitet i taget. Då detta inte fungerade bra ökades gränserna för att inte skapa flaskhalsar i arbetsflödet. 1.9 Diskussion I det här avsnittet diskuteras resultatet och erfarenheter tas upp. 36 1.9.1 Resultat Det finns mycket som kan diskuteras om hur vi använde oss av Kanban och hur jag jobbade som teamledare. Här tas en del av detta upp. Jag har delat upp detta i två delar för att först diskutera tiden innan vi började använda Kanban och sedan hur vi använde Kanban. Förstudie Till en början visste vi väldigt lite om projektet, vilket gjorde planering svårt. Så istället för att lägga en bra plan för resten av projektet bestod vår förstudie till stor del av att skapa en tydlig bild av vad vårt projekt egentligen bestod av. Kontakten med kunden fungerade ändå bra och mot förstudiens slut började det kännas som att vi hade bra koll på projektet så att vi åtminstone kunde börja göra prototyper. För mig, som teamledare, så innebar den bristande informationen vi hade om projektet stora svårigheter i att planera vårt projekt. Det tog lång tid innan vi kunde göra en aktivitetslista för utvecklingen av programmet, så gruppen blev snart rastlös och trött på att bara jobba med dokument. Något som man hade kunnat tänka sig var att fler gruppmedlemmar skulle vara med i kontakten med kunden för att kunna jobba fram specifikationer för projektet snabbare. Detta var dock något som vi snabbt insåg att inte skulle hjälpa, utan vi höll oss till att bara jag och Oskar höll den kontakten. Detta eftersom att vi nästan enbart jobbade mot en enskild kontaktperson på Opera och det bara skulle bli överväldigande och förvirrande för honom om han skulle behöva ha kontakt med många olika gruppmedlemmar. Det skulle antagligen bara ha bidragit till en sämre relation med kunden. Något som jag kan se i efterhand att jag hade kunnat göra bättre är att jag borde ha lagt mer fokus på att undersöka projektmetodik under förstudien. Det hade varit bra om vi hade kommit igång med att följa en metodik tidigare så att vi hade fått mer tid till att lära oss den och använda den mer effektivt. Valet av Kanban var ändå bra och arbetet fungerade bra under merparten av den tid som Kanban användes. Jag tror dock att jag kunde ha bidragit 37 mer till användandet av metodiken, och varit en bättre teamledare, om jag hade läst på mer tidigare. Kanban Då jag själv aldrig hade jobbat med Kanban tidigare och inte heller visste speciellt mycket om metoden var det mycket viktigt att jag läste boken om Kanban [3] som nämnts tidigare. Som teamledare var det nödvändigt att jag hade den kunskap som boken gav, då det var jag som styrde arbetet med Kanban. Vi hade inte tid till att alla gruppmedlemmar skulle läsa på mycket om Kanban utan istället fick jag förmedla det jag lärt mig, tillsammans med hur jag tänkt att det skulle appliceras i vårt projekt. Det var viktigt att skapa en positiv bild av Kanban inom gruppen för att alla skulle vilja jobba efter metodiken. Visst motstånd fanns mot Kanban från början då det kunde upplevas som att det krävdes en del onödigt jobb bara för att följa metodiken. Efterhand tror jag dock att alla i gruppen insåg att det inte var alls mycket jobb och att det lilla som behövde göras bidrog till att gruppen kunde jobba mer effektivt. Jag skulle själv inte säga att vi använde Kanban fullt ut i projektet. Exempelvis så mätte vi aldrig lead time ordentligt som man ska göra i Kanban [3]. Detta berodde på flera saker. Främst skulle jag säga att det berodde på att Kanban användes ganska kort tid och det då inte fanns tid att lära sig det ordentligt. Det kändes inte heller som att det skulle ge så mycket för vårt projekt att lära oss om och utveckla Kanban fullt ut. Att vi inte visste så mycket om Kanban från början var förstås även det en bidragande faktor. Efter detta projekt skulle jag dock säga att jag lärt mig väldigt mycket om Kanban och hur det kan användas. Det kan definitivt användas i framtida projekt, och jag hoppas att jag får chansen att göra det. Jag har själv upplevt Kanban som en väldigt bra grundmetodik och jag har tyckt att det har varit kul att jobba med det. Det är dock viktigt att tänka på att Kanban bara är en bas att utgå från och inte en komplett metodik. Detta är dock något som jag upplever som något positivt med metodiken då inte alla projekt är likadana 38 och det då är dumt att behandla dem så. Varje projekt som man jobbar med Kanban ger också mycket erfarenhet och jag tror att om man jobbar med det i flera projekt så kommer man bli mycket bättre på att introducera det och använda det i ett nytt projekt. 1.9.2 Metod Metoden som jag använt och beskrivit tidigare i denna del har varit ganska bristfällig. Det hade varit bra att göra mycket mer utförliga anteckningar av både erfarenheter från projektet och lärdomar från böckerna jag läst. Att föra anteckningar mer kontinuerligt, kanske varje dag, hade även det varit väldigt positivt. Detta hade kunnat bidra till en bättre uppsats men kanske framförallt så hade det kunnat bidra till att jag kunnat utvecklas mer som teamledare under projektets gång. Anledningen att detta inte gjordes var främst lathet. Efter en dag i ett projekt känns det ofta inte som att man gjort något speciellt som är givande att reflektera över och anteckna, med det kan vara väldigt bra att göra det ändå. De reflektioner som behöver göras i samband med att anteckningarna skrivs kan bidra till mycket medvetenhet om vad man gör och hur det påverkar projektet. Detta är något som jag tar med mig till framtida projekt och som jag då kan förbättra. 1.10 Slutsatser För att sammanfatta svaren på de frågeställningar som denna del behandlar kommer de här att tas upp och besvaras var för sig. Detta är dock inga direkta svar på frågorna utan endast de erfarenheter som kunnat dras under detta projekt och från de böcker som jag har läst. 1.10.1 Hur Kanban påverkar ett projekt Det mest centrala i metodiken Kanban är Kanban-tavlan. Denna är en bra samlingspunkt och centrum för diskussion vid möten. Även fast vi inte kunnat 39 ha en fysisk tavla utan enbart haft en virtuell tavla som funnits tillgänglig via internet har detta fungerat bra. Tavlan visar på ett bra sätt vilka aktiviteter som arbetas på och var i arbetsflödet de finns. Vid möten är det väldigt bra för att starta diskussioner kring hur arbetet går. Den direkta påverkan på projektet som Kanban-tavlan i sig haft för oss är att den har ändrat sättet som vi har diskuterat aktiviteter på. Eftersom det funnits väldigt konkreta virtuella lappar med aktiviteter som varit placerade på specifika platser i arbetsflödet har det gjort att diskussioner kring aktiviteterna kunnat få mycket tydligare struktur. Att lägga till och flytta runt lapparna har även gett mötena ett tydligare syfte. Istället för att bara nämna hur arbetet går på en aktivitet har vi kunnat diskutera mer om hur den ligger till, när den kan tänkas flyttas vidare till nästa kolumn, hur högt prioriterad den är och så vidare. Utöver Kanban-tavlan i sig har vi även använt oss av gränser på antal WIP i varje flöde eller kolumn, vilket Kanban förespråkar. Detta är ett sätt att hålla fokus på rätt saker och inte jobba med för många olika saker samtidigt. Det bidrar också till att gruppen får mycket fokus på att även testa och integrera nya funktioner så att de snabbt kommer med i den sammansatta produkten. Det har fungerat väldigt bra med vår användning av kontinuerliga prototyper. Att hela tiden försöka utveckla användningen av Kanban, exempelvis genom att ändra gränserna för antal WIP, har bidragit till bättre medvetenhet kring hur vi jobbar. Då gruppen har behövt ändra sådana gränser har det tvingat oss att tänka på hur antalet pågående aktiviteter påverkar effektiviteten i vårt arbete. Jag tror själv att medvetenhet om sådana saker i hela gruppen är något mycket positivt då det bidrar till bättre samarbete, motivation och i slutändan även effektivitet. 1.10.2 Introduktion av Kanban i ett projekt Det finns många sätt att introducera Kanban i ett projekt, bra och mindre bra och mer och mindre krävande. Då min kunskap om Kanban vid intro40 duktionen var ganska bristfällig och även tiden för introduktionen var mycket begränsad blev introduktionen av Kanban i vårt projekt definitivt inte optimal. Jag har dock fått många erfarenheter av vad som fungerar bra och inte, och jag har fått många tips från de böcker som jag läst. Det som kanske är viktigast vid introduktionen av Kanban i ett projekt är att få gruppen att förstå vad nyttan med metodiken är. Om inte alla i gruppen förstår varför metodiken används och hur den bidrar till gruppens effektivitet så kommer metodiken motarbetas och inte kunna uppnå sin fulla potential. I case-studien i Kniberg och Skarins bok[3] används en workshop för att sprida metodens budskap. Jag kände inte att jag hade de förutsättningar som krävdes för att göra en workshop med gruppen. Istället fick jag använda vårt eget pågående projekt för att testa saker på. En workshop hade definitivt kunnat vara bättre då man i en sådan kan visa tydliga fördelar och vinster i att använda metodiken, och samtidigt lära ut hur den ska användas. Något annat som är viktigt att tänka på vid introduktionen av Kanban är att lyssna på gruppens tankar och åsikter. Kanban ska hela tiden utvecklas i ett projekt och det kommer det inte göra om inte alla får en möjlighet att uttrycka brister. Detta är något som jag har försökt göra hela tiden så mycket som möjligt. 1.10.3 Strategisk projektledning Denna frågeställning besvaras främst utifrån boken om strategisk projektledning[6] som jag har läst i och mina tankar kring detta. Att se projektet i det helhetsperspektiv som boken beskriver tror jag är väldigt bra som projektledare. Som boken säger så är projektledarens uppgift att få gruppen att producera resultat som bidrar till projektets syfte. Detta uppnås inte på bästa sätt om projektledaren sätter sig in mycket i varje enskild del av projektet. Det är då bättre om projektledaren ser och förmedlar helheten av projektet och projektets syfte. De frågor som nämns under teori i denna del tror jag bidrar till en väldigt bra grund för projektgruppen. Om dessa besvaras ordentligt efter mycket 41 reflektion så är det sannolikt att hela gruppen har en bra bild av projektet och dess syften och mål. 42 2 Andy Truong: Dokumenthantering i projekt 2.1 Inledning Genom ett systematiskt arbetssätt kan dokumenthantering i större projekt bli enklare och effektivare med högre kvalitet på dokumenten. Denna individuella del utreder projektgruppens tillvägagångssätt för att effektivisera hanteringen av projektets elektroniska dokument. Metoder såsom versionshantering, kollaborativ redigering och typsättning behandlas i denna utredning. De erfarenheter som förvärvats under projektets gång analyseras och redogörs. 2.2 Syfte och mål Syftet med denna delrapport är att redogöra samt reflektera över projektgruppens arbetssätt med avseende på dokumenthantering. 2.3 Frågeställning • Hur kan flera personer simultant arbeta i ett dokument men samtidigt bibehålla dess kvalitet? • Vilka metoder finns för att effektivisera dokumenthanteringen och därmed spara tid och resurser? 2.4 Avgränsningar Utredningen behandlar inte hela arbetsflödet av dokumenthantering. Delar såsom informationsinhämtning samt dokumentdistribuering till tredje part utelämnas. Utredningen avgränsas till teknisk och vetenskaplig dokumentation som lagras elektronisk. Resultatet av versionshantering begränsas till dokument även om det dessutom tillämpats på källkod. Resultatet begränsas till detta projekts erfarenheter. 43 2.5 Bakgrund Ett stort projekt kan innehålla många delmoment och oftast är flera personer involverade. Ibland kan det bli problematiskt att hantera dokumenten, särskilt då de snabbt blir många och flera ska redigera i dem samtidigt. Idag finns det många verktyg för att hantera dessa problem. Det kan dock fortfarande var svårt att hitta ett effektivt arbetssätt för dokumenthantering, vilket är motivationen till denna utredning. Under detta mjukvaruprojekt har en dokumentansvarig anordnat projektets samtliga dokument. Dokumentansvarig har försett projektet med verktyg samt dokumentmallar för att effektivt kunnat bearbeta projektets dokument. Utöver det innebar rollen att granska och formatera dokumenten. 2.6 Teori En stor del av ett projekt spenderas till dokumentation och oftast görs detta i grupp [7]. Dokumentation är en viktig byggsten då den formaliserar kommunikationen mellan projektmedlemmarna. En god dokumentation anses effektivisera utvecklingen av projektet eftersom den ger projektmedlemmarna en bättre uppföljning och insyn av projektet [8]. De ger även en återblick för framtida referenser och utveckling. Detta avsnitt behandlar olika arbetssätt och verktyg som kan tillämpas vid dokumenthantering. 2.6.1 Versionshantering Dokument som versionshanteras lagras i flera versioner. Det möjliggör spårning av tidigare ändringar och eventuellt återskapa dem. Versionshantering kan förutom på dokument tillämpas på andra medier. Kärnan i ett versionshanteringssystem är en repository som fungerar som en lagringsplats. Där lagras vanligtvis filer, kataloger samt information om dess hierarki. Behöriga klienter kan ansluta till en repository för att läsa eller 44 skriva. Filerna kan spåras och återskapas från en tidigare tidpunkt eftersom alla händelser loggas. Versionshanteringssystem finns i två former, centraliserade och decentraliserade även kallade distribuerade. Under lång tid har centraliserade system dominerat marknaden men på senare tid har många övergått till distribuerade system [9]. Exempel på versionshanteringssystem nämns i avsnitt 2.6.5. Centraliserad versionshantering I centraliserade versionshanteringssystem finns det endast en repository på en central server. Samtliga klienter kommunicerar med samma server för hämta och skicka ändringar. Distribuerat versionshantering Distribuerade versionshanteringssystem är ett nyare alternativ till det centraliserade. Huvudkonceptet är att varje klient har en egen lokal repository. Klienterna gör sina ändringar i sin lokala repository. Ändringarna kan sedan skickas till en delad repository på en extern server, men är inte nödvändigt. 2.6.2 Kollaborativ redigering Kollaborativ redigering är ett arbetssätt för dokumentredigering där fokus ligger på deltagande, uppmärksamhet och koordination. Genom att vara uppmärksam och förstå andras aktiviteter ger det förutsättningar att förstå sina egna aktiviteter bättre [10]. Målet är att gemensamt uppnå en enhetlig version av det slutgiltiga dokumentet. När flera personer samarbetar i ett dokument uppkommer det flera beslut som måste tas. Det krävs en plats där dokumentet ska lagras samtidigt som det ska vara åtkomligt för övriga deltagande. Det krävs ett verktyg för att kunna redigera dokumentet. Delarna som har bearbetats måste sammanfogas och eventuella konflikter måste hanteras. Ett system som tillämpar kollaborativ redigering löser detta och ska, enligt Jun-hui och Geng-yu och Cong [11] efter en sammanställning av andra rapporter, ha följande tre kännetecken. 45 • Obegränsad – Deltagande ska vid alla tillfällen fritt kunna redigera alla delar av dokumentet. • Distribuerad – Dokumenten ska vara åtkomliga från andra enheter än huvudkällan. • Realtid – Alla lokala förändringar ska reflekteras till andra deltagande utan större fördröjningar. Ett alternativt arbetssätt i gemensam dokumentskrivning är att tilldela varje deltagare olika delar att skriva och avsluta med att sammanfoga dessa till en slutgiltig version. Ett annat alternativ är att individuellt arbeta med dokumentet och sedan skicka den vidare till de övriga författarna för fortsatt redigering. Skulle någon hinna uppdatera dokumentet före, måste de ändringarna läggas till innan dokumentet kan skickas vidare. Idag finns det sofistikerade verktyg (2.6.5) för kollaborativ redigering. Många av dem nyttjar någon form av versionshanteringssystem för att spåra ändringar samt automatiskt sparar ändringar. Ett system behöver emellertid inte nödvändigtvis ha sparat en ändring även om ändringen har reflekterats till de andra deltagarna [11]. 2.6.3 Typsättning En väsentlig del av ordbehandling avser typsättning. Det är processen för skapandet av dokumentets layout och formatering av text. En god typsättning kan bidra till mer läsliga dokument samtidigt som de kan bli mer estetiska tilltalande. De flesta ordbehandlingsprogram har ett grafikbaserat typsättningssystem. Texten formateras efter användarens inmatningar och resultatet presenteras omgående. När dokumentet sparas ner till fil lagras texterna med formatering oftast i ett märkspråk, vilket instruerar hur dokumentet ska presenteras. Grafikbaserade typsättningssystem abstraherar bort märkspråket från användaren. 46 Märkningsbaserade typsättning exponerar användaren direkt till märkspråket. Användaren ansvarar själv formatteringen av texten utifrån exempelvis markeringstaggar eller kommandon. 2.6.4 Molnbaserad lagring Lagringstjänster som tillhandahålls över Internet lagrar filer och dokument i molnet, vilket i praktiken är ett externt serverutrymme. Filerna lagras i en eller flera servrar som är ägda och kontrollerade av företagen som tillhandahåller tjänsterna. Eftersom filerna lagras i molnet och inte lokalt är de ständigt uppdaterade och åtkomliga från flera olika enheter. Enligt en undersökning [12] är molnbaserade lösningar billigare än egna lösningar. 2.6.5 Verktyg Ett verktyg i detta sammanhang syftar till en produkt eller tjänst som kan bidra till dokumenthanteringen. Git Git är ett distribuerat versionshanteringssystem med öppen källkod. Git särskiljer mellan arbetsyta, ett förberedande steg, lokal och distribuerad repository. I arbetsytan sker alla ändringar och innehåller filer som både är spårade och icke-spårade. I det förberedande steget väljs de ändringar som ska med en specifik commit, vilket betyder att ändringarna lämnas över till en lokal repository. Slutligen skickas ändringarna upp till en distribuerad repository för att göra de tillgängliga för övriga klienter. Eventuella nya ändringar från andra klienter måste sammanfogas med de lokala innan de kan skickas upp. Skulle konflikter uppstå med ändringar från en annan författare kommer systemet automatiskt försöka sammanfoga ändringarna. Lyckas inte den automatiska sammanfogningen krävs en manuell granskning. Ju fler ändringar mellan sammanfogningarna desto högre risk för konflikter som kräver manuella åtgärder. 47 Andra distribuerade versionshanteringssystem är bland annat Mercurial och Bazaar. Centraliserade alternativ är Concurrent Versions System och Subversion. Skillnaderna mellan dem är oftast prestanda och arbetsflöde. Google Drive Google Drive är en tjänst, skapat av Google Inc., som möjliggör fillagring i molnet. Tjänsten erbjuder ett begränsat utrymme med möjlighet till uppgradering. Användaren har åtkomst till filerna från företagets webbplats. Filerna kan synkroniseras till användarens lokala system genom en applikation. Efter en fullständig synkronisering finns filerna tillgängliga även utan internetanslutning. Filer som lagras på molntjänsten kan delas med andra parter som också använder tjänsten. Ändringar som görs på delade filer speglas till samtliga parter. Andra tjänster som erbjuder molnlagring är OneDrive, Dropbox, Box och iCloud. Google Docs Google Docs är en tjänst som erbjuder webbaserad redigering av dokument, kalkylark och presentationer. Tjänsten tillhandahålls av samma företag som tillhandahåller Google Drive, vilket gör tjänsterna tätt integrerade. Dokumenten i Google Docs kan simultant bearbetas av flera användare eftersom tjänsten utövar kollaborativ redigering (2.6.2). Används företagets egna webbläsare, Google Chrome, kan dokumenten dessutom redigeras utan internetanslutning. Ändringarna synkroniseras då till molnet (2.6.4) först när internetanslutningen återfås. Google Docs har ett eget versionshanteringssystem (2.6.1) för att spåra ändringar. Det finns även ett förslagsläge där nya ändringar måste godkännas. Utöver det finns det möjlighet till att lämna kommentarer i dokumentet. Ändringar sparas automatiskt i Google Drive. De sparas i intervaller men skulle en konflikt uppstå visas ett meddelande med konflikten. Eftersom ändringarna sparas regelbundet är konflikter sällsynta. 48 Det finns alternativa lösningar som kan installeras på användarens system såsom OpenOffice och Microsoft Office skapat av Star Division respektive Microsoft Corporation. Det sistnämnda erbjuder också kollaborativ redigering om dokumenten är placerade i företagets molnlagringstjänst OneDrive. LaTeX LaTex är ett populärt typsättningssystem baserat på TeX. Användaren arbetar med texten i valfri textredigerare. Dokumentets layout och textens format bestäms av bland annat kommandon som kommer från olika paket som är konfigurationsfiler. Ett dokumentet kan bestå av flera filer som importeras till huvuddokumentet. Detta gör det möjligt att dela upp dokumentet i flera delar. LaTeX har många användbara kommandon som bland annat förenklar numrering av sektioner, figurer och tabeller samt automatiskt genrering och numrering av litteraturlista. För att se resultatet av dokumentet måste filerna kompileras. Utdatan är oftast en PDF-fil som kan presentera det formaterade dokumentet i en valfri PDF-läsare. 2.7 Metod Redan vid projektets start gjordes en gemensam evaluering av potentiella verktyg med hänsyn till parametrar såsom kostnad, tillgänglighet och tidigare erfarenheter. Ett gemensamt beslut togs om vilka verktyg som skulle användas. Under projektets gång experimenterade dokumentansvarig med nya arbetssätt för att förbättra dokumenthanteringen. Dokumentskrivning påbörjades tidigt i projektet. Efter att projektgruppen förstått projektets syfte sammanträdde samtliga projektmedlemmar i ett möte för att bestämma strategi. Utan vidare undersökningar beslutades att Google Docs huvudsakligen skulle användas till dokumentskrivning. Dokument som skrevs i Google Docs skulle lagras i Google Drive. LaTeX skulle användas till de slutgiltiga dokumenten som skulle publiceras eller skickas till 49 tredje part. Mindre interna dokument såsom mötesprotkoll skulle endast skrivas i Google Docs för att spara tid. Git skulle användas för versionshantering av LaTeX-dokumenten. Besluten grundades på de verktyg projektmedlemmarna tidigare kände till. En server sattes upp av projektets arkitekt för att hantera Git. Initialt användes Git enbart till projektets källkoder. Användandet av Git introducerades först när dokumenten började skrivas i LaTeX. Alla dokument i LaTeX versionshanterades i Git. Innan det första dokumentet överfördes från Google Docs till LaTeX tog dokumentansvarig fram en LaTeX-mall som skulle användas genomgående under projektets gång. Eftersom mallen skulle gälla för projektets samtliga dokument behövde den generaliseras. Mallen skulle dessutom ha stöd för flera språk. Dokumentansvarig hade inga tidigare erfarenhet av LaTeX således krävdes självstudier inom ämnet innan mallarna kunde skapas. Mallen förbättrades kontinuerligt under projektets gång. Oftast var det små ändringar såsom att inkludera nya paket, men även ibland stora ändringar såsom layoutförändringar. Ändringar i mallarna reflekterades dessutom i äldre dokument som använde mallarna. För att uppdatera de äldre dokumenten krävdes dock omkompilering. Mallen till dokumenten bestod av flera filer. Ett av dem är ett eget paket skapat för projektets dokument. Paketet konfigurerade dokumentens layout och importerade nödvändiga paket. Paketet tog in språk som inparameter för att anpassa dokumentet efter olika språkregler. Övriga filer bestod av framsida, försättsblad och informationsblad. Dessa fanns tillgängliga på både svenska och engelska. Filerna separerades i olika kataloger namngivna efter språkens namnkoder enligt ISO 639-1. Rätt katalog importerades till huvuddokumentet baserat på det språk som var inställt i det egna paketet. Första utkastet av varje dokument samskrevs i det vanliga redigeringsläget i Google Docs. Texten granskades och överfördes sedan till LaTeX av dokumentansvarig där nödvändiga formatteringar av texten fick göras. Följande ändringar till texterna gjordes istället i förslagsläget. Med förslagsläget 50 kunde dokumentansvarig enkelt granska och acceptera dem innan de överfördes till LaTeX-dokumenten. Därigenom överfördes endast nya ändringar och inte hela dokumenten på nytt. Texter som samskrevs bearbetades alltid i Google Docs före det överfördes till LaTeX-dokumenten. Detta medförde att dokument som skrevs i Google Docs alltid var uppdaterade med de senaste ändringarna. I Google Docs kunde projektmedlemmarna kommentera och diskutera delar av dokumentet om något var oklart. Delar av dokument som skulle skrivas individuellt skrev projektmedlemmarna direkt i LaTeX. Varje individuell del skrevs i en egen fil som importeras av huvuddokumentet. De delarna granskades först när de blev klara. Det avslutades med att hela dokumenten korrekturlästes av en eller flera projektmedlemmar. Korrigeringar gjordes vid behov. 2.8 Resultat I detta projekt producerades tio större dokument som antingen publicerades eller skickades till tredje part. Detta gällde allt från projektplan och kvalitetsplan till arkitekturbeskrivning och teknisk dokumentation. Genom tillämpning av kollaborativ redigering kunde projektets medlemmar arbeta i samma dokument simultant. Till detta användes Google Docs. Projektmedlemmarna var alltid uppmärksamma på ändringar i dokumenten eftersom de uppdaterades i realtid. De kunde därmed arbeta med texterna mer effektivt. Tjänsterna som är webbaserade krävde ingen installation, vilket gjorde det enkelt att komma igång. Eftersom projektmedlemmarna redan sedan tidigare hade erfarenhet och användarkonton på tjänsterna kunde dokumentskrivandet påbörjas omedelbart. Mellan varje utkast överfördes texterna från Google Docs till LaTeX för att utforma dokumentens layout. Dokumentansvarig ansvarade för dokumentens layoutmallar. Detta medförde att övriga projektmedlemmar istället kunde fokusera på dokumentens innehåll. Genom användandet av LaTeX kunde mycket tid sparas eftersom skapandet av mallen endast gjordes en gång me51 dan det återanvändes av flera dokument. LaTeX numrerar bland annat referenser, sektioner, figurer och tabeller automatiskt. Det gjorde det enklare att lägga till och ta bort innehåll samtidigt som korrekt numrering bevarades. Dokument som redigerades på Google Docs kunde endast lagras i Google Drive, där de även versionshanterades av ett internt system. LaTeX-dokumenten versionshanterades på Git. Dokumenten var därmed alltid tillgängliga för samtliga projektmedlemmar. Varje text granskades av dokumentansvarig för att erhålla hög dokumentkvalitet. För nya dokument granskades hela texter innan de senare överfördes till LaTeX. För ändringar i befintliga dokument användes förslagsläget i Google Docs. Dokumentansvarig granskade och accepterade ändringen innan den överfördes till LaTeX. 2.9 Diskussion Under ett projekt kan det skapas många fler dokument än förväntat. Avsevärd stor del tid av detta projekt gick åt till bearbetning och hantering av dokument. Det fanns oerhört många olika verktyg att välja emellan. Det kan vara krångligt att hitta ett arbetssätt som ska fungera bra för ett projekt. 2.9.1 Resultat Google Docs valdes främst för tillämpningen av kollaborativ redigering. Att samtliga projektmedlemmar hade tidigare erfarenhet av det hade också betydelse. Alternativa lösningar undersöktes ej eftersom det inte kändes något behov. Google Docs erbjöd de funktioner som behövdes, vilket även inkluderar möjligheten att lämna kommentarer samt ett förslagsläge som gjorde det möjligt att granska ändringar. Dessa funktioner användes väldigt ofta av projektmedlemmarna för att kommunicera i texterna. En stor nackdel med Google Docs är layout och formatering. Det fanns stora begränsningar i dokumentkonfiguration för Google Docs, något LaTeX inte hade. Detta var den enda anledningen till valet av LaTeX. Samtliga verktyg som användes i projektet var kostnadsfria som också var ett av kriterierna när de valdes. 52 Förslagsläget i Google Docs var både bra och dåligt beroende kvantiteten av den text som hade ändrats. Vid färre ändringar fungerade det bra eftersom dokumentansvarig inte behövde föra över hela dokumentet på nytt, vilket sparade tid. Vid många ändringar blev det mycket rörigt i Google Docs och allt behövde föras över på nytt. Det positiva med förslagsläget var att ändringarna enkelt kunde granskas. Arbetssättet fungerade väldigt bra. Granskning av alla ändringar var tidskrävande men resulterade i högre dokumentkvalitet. I detta projekt fanns det endast en dokumentansvarig, vilket var adekvat för projektets storlek. För större projekt skulle det rekommenderas att flera personer tilldelas olika dokument att granska överföra från Google Docs till LaTeX för att avlasta dokumentansvarig. Både LaTeX och Git är väldigt användbara verktyg men brister i att användaren måste förstå de kommandon som ska användas. Användaren måste lära sig hantera konflikter och lösa dem, något som inte alltid är trivialt. Att ta fram dokumentmallen var mycket tidskrävande. Främst för att dokumentansvarig inte hade tidigare arbetat med LaTeX och det krävdes mycket självstudier. När mallen väl var på plats gick det snabbt att skapa nya dokument som använde mallen. Det var endast det egna LaTeX-paketet som var komplex att skapa. Dokumenten som använde sig av mallen var triviala och bestod endast av några fåtal kommandon som enkelt kunde läras ut till projektmedlemmarna med inga tidigare erfarenheter av LaTeX. Detta gjorde det möjligt att alla projektmedlemmar kunde skriva sina individuella delar direkt i LaTeX eftersom behovet av kollaborativ redigering då inte fanns. Det ultimata hade varit om Google Docs hade utökat funktionalitet för att bättre hantera layout och formatering, men samtidigt behålla dess enkelhet. Utan att behöva vänta på att Google ska uppdatera deras tjänst skulle det vara möjligt att bygga ett script som automatiskt konverterar till LaTeXformat. Det skulle dock vara ett stort projekt i sig. 53 2.9.2 Metod Mot slutet av projektet närmade sig deadline allt för fort och det blev tidsbrist. Det gjorde att metoden inte följdes fullständigt för ett återstående dokument. De slutgiltiga ändringar i det dokumentet gjordes direkt i LaTeX. Detta medförde att ändringarna inte granskades enligt tidigare arbetssätt. Istället korrekturläste samtliga projektmedlemmar dokumentet när det ansågs vara klart. Detta fungerade bra men begränsas till när dokumentet började bli färdigt och hela dokumentet ändå skulle korrekturläsas. Det skulle krävas för mycket resurser att ständigt behöva läsa igenom hela dokumenten även vid fåtal ändringar. Eftersom det fanns bristande kunskap inom LaTeX uppstod det emellanåt kompileringsfel som var besvärliga och tidskrävande att lösa. Ofta var orsaken att gammal cache-data inte hade rensats ordentligt. Annars har LaTeX gett mycket goda erfarenheter. Ett problem med redigering i förslagsläget var att projektmedlemmar stundvis kunde glömma slå på förslagsläget. Det resulterade i att en del ändringar inte fördes över till LaTeX-dokumenten. 2.10 Slutsatser Valen av arbetssätt och verktyg för projekthantering i ett projekt varierar beroende på typ av projekt och dess storlek. De flesta projekt kan dock ta lärdomar av de erfarenheter som erhölls av detta projekt. Sannolikt kommer det produceras många dokument i projekt och oftast bearbetas dokumenten grupp. Kollaborativ redigering (2.6.2) och versionshantering (2.6.1) kan bidra till bättre och enklare bearbetning och hantering av dokument i grupp. I detta mjukvaruprojekt har flertalet verktyg (2.6.5) använts. Google Docs har använts till att samskriva dokument och det tillämpar kollaborativ redigering. Google Drive har använts till lagring av gemensamma filer. LaTeX har använts till typsättning av dokuments layout eftersom formatering i Google Docs är bristande. Git har använts till versionshantering av LaTeX- 54 dokumenten. Dokumenten bör granskas av en andra person för att säkerhetställa att dokumentet håller kvalitet. Detta kan göras genom exempelvis ett förslagsläge i Google Docs för att endast granska nya ändringar. Eftersom det kan skapas många dokument bör bra dokumentmallar tas fram redan vid projektets start. Lämplig användning av dokumentmallar sparar tid eftersom repetitiva moment undviks. 55 3 Erik Boman: Testning och säkerhet vid utvecklandet av en webbapplikation 3.1 Inledning Detta är en individuell del av kandidatrapporten om visualisering av svarstider mellan mobila klienter och datacenter. Denna del kommer att behandla det testande och säkerhetsarbete som sker vid utvecklandet av en webbapplikation. Rapporten tar även upp och diskuterar hur man kan effektivisera testandet genom att använda olika automatiska tester. 3.2 Syfte och mål Syftet med denna delrapport är att visa på vad som är viktigt att tänka på i testarbetet av en webbaserad applikation samt vilka delar som är extra viktiga att testa grundligt. Ett annat syfte är att visa på hur viktigt det är för företag att testa deras webbapplikationer och vilka konsekvenserna kan bli om detta inte görs grundligt. 3.3 Frågeställning 1. Varför lägger inte många företag mer pengar på testning av deras webbsäkerhet? 2. Vilka olika typer av säkerhetsrisker finns det när en webbapplikation görs tillgänglig via internet och hur kan man motverka dessa risker? 3.4 Avgränsningar Nedan beskrivs de avgränsningar som gjorts. 56 3.4.1 Avgränsningar i rapporten Den här rapporten tar endast upp testning och säkerhetsarbete vid utvecklandet av en webbapplikation som tillhandahålls via en webbserver. Ingenting om skillnader i säkerhet mellan olika webbläsare tas upp. Det är även viktigt att poängtera att långt ifrån alla säkerhetsrisker tas upp utan fokus ligger på de som är vanligast förekommande. 3.4.2 Avgränsningar vid testning Den stora begränsningen vid testandet av en produkt är oftast tid och/eller pengar. Eftersom att de flesta projekt (även vårt) har begränsad budget kan testandet av en produkt inte pågå hur länge som helst. Vi har under projektets gång fått göra många avvägningar mellan vidare utveckling och testning. 3.5 Bakgrund Det blir vanligare och vanligare att företag får sina servrar hackade så att privat information läcker ut. Snittföretaget lägger idag ca 10-15 % av sin totala IT-budget på säkerhet [13, s. 3]. Detta är ofta inte tillräckligt [14]. Internetattacker kan orsaka företag osannolika kostnader både genom att eventuellt förstöra hårdvara och genom det extra arbete som företaget får lägga ner på att hantera attacken [15, s. 2]. Företagets rykte kan också skadas allvarligt speciellt om personlig information om företagets kunder läcker ut. Bristerna är i många fall ett resultat av otillräckligt testande av serverns säkerhet och bristande kunskap. Om mer tid lades på testning skulle det ske mycket färre lyckade internetattacker. 3.5.1 Webbapplikationer nu och då I internets tidiga dagar var de flesta hemsidorna statiska informationskällor. Det var nästan bara företag, myndigheter och föreningar som hade hemsidor och de innehöll sällan något mer än ren html-kod. Idag är merparten av 57 världens hemsidor dynamiska, med kod skriven ofta i Javascript eller liknande [16, s. 17]. Användaren kan ofta också mata in data till webbservern via olika typer av formulär och med detta kommer säkerhetsrisker. Antalet hemsidor har också ökat lavinartat från den ensamma första hemsidan 1991 till dagens över 1 miljard hemsidor. 3.6 Teori Det finns otroligt många sätt att förstöra eller få tillgång till en webbserver och informationen på en webbserver. Några av de vanligaste sätten beskrivs nedan. 3.6.1 Cross-site scripting En av de vanligaste säkerhetsbristerna som många hemsidor har handlar om cross-site scripting [17, s. 41]. Attacker genom cross-site scripting drabbar ofta forum eller chatter. Det finns egentligen två stycken varianter av crosssite scripting. I det ena fallet läggs html-kod in i ett inlägg i till exempel en gästbok eller på ett forum. På det sättet kan hemsidans utseende förändras genom ramar som går kors och tvärs över hemsidan eller stora bilder över hela skärmen. I det andra fallet utnyttjas samma säkerhetsläcka som i det första fallet men här ligger ofta fokus istället på att få tag i information om andra användare på hemsidan. Detta kan till exempel göras genom ett enkelt skript som när användare besöker den infekterade sidan skickar deras inloggningsinformation till hackaren[16, s. 17]. 3.6.2 SQL-injektioner Webbsidor med webbformulär är särskilt utsatta för SQL-injektioner. Ta som ett exempel en hemsida med ett inloggningsformulär. Användaren matar in användarnamn och lösenord som sedan skickas till webbservern med tillhörande databas för validering. För att se om inloggningsinformationen stämmer kan databasen till exempel ges följande fråga (MySQL), 58 ”SELECT * FROM users WHERE username=’+username+’ AND password=’+password+’;”, om databasen returnerar en rad fanns en användare med givet användarnamn och lösenord. Antag nu att användaren angav till exempel ”admin” som användarnamn och ” ’ OR ’1’=’1 ” som lösenord. Databasqueryn blir därmed: ”SELECT * FROM users WHERE username=’admin’ AND password=” OR ’1’=’1’;”. Eftersom att 1=1 kommer databasen att returnera en rad och användaren får tillgång till adminkontot. Det finns många andra exempel på vad en hackare kan göra. Med grundläggande kunskap om databaser och lite gissande av tabellnamn kan till exempel hela tabeller ur databasen raderas [17, s. 42]. 3.6.3 Brute force En brute force attack går helt enkelt ut på att gissa sig fram till rätt lösenord för inloggning på till exempel en hemsida. Det är ganska ovanligt att rena brute force attacker lyckas eftersom att det krävs otroligt lång tid även för en snabb dator att gissa på alla möjliga kombinationer av tecken som kan bygga upp ett lösenord. Istället brukar olika kombinationer av vanligt förekommande lösenord testas först för att öka chansen att få en tidig träff. 3.6.4 Denial of service Det finns otroligt många olika typer av denial of service attacker men det de flesta varianterna har gemensamt är att de försöker förhindra vanliga användare från att komma åt information. [18, s. 515] Denna information kan till exempel vara en hemsida. En av de vanligaste sätten att utföra en denial of service attack är en så kallad distribuerad denial of service. I det fallet så används massor av datorer som är uppkopplade till internet till att skicka förfrågningar, ofta till något företags webbserver, så att den blir överbelastad. [19, s. 117] Ofta är det vanliga privatpersoners datorer som har blivit hackade och sedan används till dessa attacker utan att ägaren av datorn ens vet om det. 59 3.7 Metod Under arbetet med projektet har gruppen inte fokuserat särskilt mycket på säkerhetsarbete eftersom att produkten vi utvecklar ändå bara kommer att finnas tillgänglig internt på Opera. För att lära mig mer om säkerhet har därför antagits att vår produkt kommer att göras tillgänglig via internet och sedan testat dess säkerhet. Vid säkerhetsarbetet användes programmet Vega [20] som är ett gratis verktyg för att automatiskt hitta säkerhetsläckor i webbapplikationer. För att kunna göra ett test på en applikation med Vega behövdes en webbserver så därför installerades Apache, som är den den vanligaste webbservern i nuläget, på den dator som testernas utfördes på. Att testa applikationen tog endast några minuter och Vega hittade inga säkerhetsrisker relaterade till vår applikation (endast några risker i webbserverinställningarna). Dock skulle säkerhetsrisker kunna uppstå, framförallt med den sökruta för att söka efter länder som applikationen innehåller. Om den data användaren matar in i sökfältet direkt skulle användas till att ta ut länder ur en databas skulle SQL-injektioner kunna bli ett problem. I nuläget letar den bara i en array med länder men det är bra att vara medveten om säkerhetsriskerna i förväg. 3.8 Resultat För att förbättra säkerheten hos en webbapplikation finns det många olika saker som kan göras. Till att börja med är det viktigt att se till så att nyaste versionen av alla program på webbservern är installerade eftersom att nya uppdateringar med säkerhetsfixar släpps kontinuerligt. Eftersom att vår webbapplikation inte kommer att vara ansluten direkt till internet behövde inte vi tänka särskilt mycket på det som diskuteras i den här rapporten men det är fortfarande viktigt att känna till de risker som finns och de begränsningar som en produkt har om den görs tillgänglig via internet. Om Opera av någon anledning skulle vilja göra webbapplikationen 60 tillgänglig för allmänheten via internet och ha den kopplad till en databas skulle mycket mer arbete behöva läggas på säkerhetsarbete för att inte riskera informationsstölder och/eller serversabotage. 3.8.1 Cross-site scripting För att skydda sig mot cross-site scripting är det viktigt att se till så att användarinmatad data inte får innehålla vad som helst. För att förhindra att skadlig kod läggs in på hemsidan bör man därför konvertera riskabla tecken till deras respektive vanliga texttecken. Till exempel bör tecknet ”<” konverteras till ”<” eftersom att den annars kan användas till att skapa ett skript som exekveras vid laddning a hemsidan. Om ”<” används kommer tecknet istället att skrivas ut som vanligt. Ofta finns det inbyggda funktioner som gör detta automatiskt, till exempel så kan man i PHP använda sig av funktionen htmlspecialchars. Att testa om en applikation är skyddad mot cross-site scripting manuellt kan vara mycket tidskrävande eftersom att det potentiellt kan finnas otroligt många kryphål där skadlig kod kan ta sig in i systemet. Det finns också stor risk att man missar något ställe i koden och lämnar en lucka för hackaren. För att enkelt och tidseffektivt kolla om en applikation har några kryphål kan man istället använda sig av ett program som automatiskt hittar dessa åt en. Det finns ett stort antal sådana program i olika prisklasser att ladda ner. Det finns även ett antal hemsidor som utför sådana sökningar över internet och visar resultatet direkt i webbläsaren. 3.8.2 SQL-injektioner Det bästa sättet att skydda sig mot SQL-injektioner är genom att använda parametriserade frågor när man hämtar eller lagrar något i en databas. Att implementera detta är ganska enkelt och gör så att om någon användare försöker mata in till exempel ” ’ OR ’1’=’1 ” som lösenord (se 3.6.2) kommer databasen inte att bli lurad av att 1=1 utan kommer istället kolla om ” ’ OR ’1’=’1 ” stämmer överens med användarens lösenord. Ett exempel på en 61 simpel databasinsättning som använder parametriserade frågor skulle i PHP kunna se ut så här: Listing 1: Parametriserad query i PHP $query = $dbh - > prepare (" INSERT INTO users ( username , password ) VALUES (: username , : password )"); $query - > bindParam ( ’: username ’ , $username ); $query - > bindParam ( ’: password ’ , $password ); $query - > execute (); De användarinmatade variablerna $username och $password kan inte längre skada databasen allvarligt eftersom att de inte kan påverka frågan på något oväntat sätt. För att testa om en applikation är skyddad mot SQL-injektioner kan man ofta göra på samma sätt som i fallet med cross-site scripting (se 3.8.1). Det finns många program som försöker hitta svagheter i en applikation och sedan rapporterar vilka som hittades. Ofta finns det program som testar både svagheter vad det gäller cross-site scripting och SQL-injektioner samtidigt. 3.8.3 Brute force Brute force attacker utförs ofta av botar eftersom att det kortar ner tiden det tar att gissa ett lösenord mot om en människa skulle sitta och göra gissningar. Därför skulle ett enkelt sätt att förhindra brute force attacker kunna vara genom att införa en verifikation på att det är en människa som gör inmatningen till exempel genom att låta dem utföra någon uppgift som en dator har svårt att utföra, till exempel känna igen några bokstäver och/eller siffror i en bild. Detta kan dock vara jobbigt att göra för användaren varje gång denne vill logga in och datorer kan, även om det är lite komplicerat klara av att känna igen bokstäver och siffror. Ett bättre sätt att lösa problemet kan vara att införa restriktioner på antal inloggningsförsök för en specifik IP-adress eller för ett användarkonto. Att lägga in en kort tidsfördröjning vid misslyckad inloggning kan också vara lämpligt eftersom att det kan förhindra servern från att bli överbelastad vid en attack utförd av en bot. 62 Precis som för cross-site scripting och SQL-injektioner finns det program som automatiskt testar hur utsatt en applikation är för attacker. Dessa program simulerar helt enkelt en attack och ser hur lång tid det tar att få tillgång till en användares konto. 3.8.4 Denial of service Den här typen av attack är den svåraste att på egen hand förhindra av de typer av attacker som tagits upp i den här rapporten. Om en distribuerad denial of service attack utförs mot en server är det ganska hopplöst att försöka blockera IP-adresser eftersom att potentiellt flera tusentals IP-adresser skulle behöva blockeras. Istället bör man leta efter likheter bland förfrågningarna som kan blockeras med brandväggen. Likheter kan till exempel hittas i “user agenten”. En ”user agent” innehåller information om bland annat operativsystem och typ av webbläsare. Vid denial of service attacker är denna information ofta avsaknad eller felaktig. I andra fall ser denna information helt korrekt ut och då får man leta efter andra likheter. Eftersom att det kan vara svårt att hitta någon likhet krävs det att den som är säkerhetsansvarig har mycket stor kunskap om denna typ av attack. Ett annat sätt att lösa problemet skulle kunna vara att se till så att den server och den internetuppkoppling som används har en så pass stor överkapacitet att en attack knappast märks, men eftersom att serverhårdvara och internettrafik kostar pengar är detta ofta inte någon särskilt bra lösning. För att testa hur bra sin egen applikation klarar av en denial of service attack är antagligen det bästa sättet att simulera en attack innan applikationen görs tillgänglig online. På så sätt upptäcker man eventuella brister i till exempel brandväggens inställningar och dessutom tränas den som är ansvarig för applikationen på att hantera en attack. Eftersom att de flesta denial of service attacker sker på olika sätt och ser olika ut är det i princip omöjligt att helt skydda sig helt mot dem. 63 3.9 Diskussion När det finns så pass relativt snabba metoder för att testa och förbättra en webbsidas säkerhet är det beklagligt att vissa företag inte lägger mer pengar och tid på att testa deras säkerhet. Ofta är en ganska stor bidragande orsak bristande kunskap om webbsäkerhet men även bristande vetskap om hur ofta och hur lätt webbattacker sker kan påverka [21, s. 12]. Många företag vet antagligen inte ens om att de har blivit hackade och att deras privata information läckt ut. Jag tror också att många företag låter bli att lägga pengar på att testa och förbättra deras säkerhet eftersom att de tror att det är ointressant för hackare att anfalla deras webbapplikation. Detta kan bero på att de tror att, eftersom att de till exempel är ett litet företag eller för att de inte lagrar någon känslig information, inte är ett intressant mål för hackare. När det gäller större företag så har de i de flesta fall åtagit åtminstone grundläggande säkerhetsåtgärder för sina webbapplikationer. När säkerheten sedan ska förbättras ytterligare så krävs det mer avancerade och tidskrävande åtgärder vilket kan leda till att testandet och säkerhetsarbetet avslutas efter att ett grundläggande skydd upprättats. 3.9.1 Resultat Det är inte särskilt överraskande att det går att förbättra en webbapplikations säkerhet genom att testa välkända säkerhetshål, men att det i de flesta fall är så pass lätt och kräver så pass lite kompetens, åtminstone för att få ett grundläggande skydd är överraskande. Datorprogram kan skanna en webbapplikation efter cross-site scripting, SQL-injectioner och brute force attacker på mycket kort tid. Det är dock värt att poängtera att dessa automatiska testprogram kan missa viktiga säkerhetsrisker och om ett mer komplett skydd är nödvändigt behöver även manuella kontroller av applikationens kod göras. Att förbättra säkerheten för en webbapplikation behöver i många fall inte ta lång tid. Att skydda sig mot cross-site scripting och SQL-injektioner kräver 64 endast att lite försiktighet används vid hanterade av användarinmatad data. När det gäller denial of service attacker är det svårare att skydda sig. Här ställs höga krav på att ha personal som vet hur man hanterar en sådan attack snarare än på hur robust applikationen är. 3.9.2 Metod Att sätta upp en webbserver och installera ett program för testning av säkerhet tog inte alls lång tid. Jag använde mig som sagt av programmet Vega men jag tror att de flesta andra liknande program är lika lätta att sätta upp och använda. Vega är kanske inte den mest avancerade säkerhetsskannern som finns men för att täcka de flesta av säkerhetsriskerna som tagits upp i detta dokument fungerade det riktigt bra. 3.10 Slutsatser De slutsatser som kan dras ifrån arbetet med testning under projektets gång samt från innehållet i denna rapport är att en produkt aldrig blir fullständigt testad. Det går heller inte att helt och hållet säkra en webbserver från säkerhetsrisker hur mycket tid som än läggs på att testa den och göra den säker. Trots detta så kan man komma ganska långt i säkerhetsarbetet på ganska kort tid om man bara tänker på vilka risker som finns och hur man försvårar arbetet för potentiella hackare. Framför allt så gäller det att vara försiktig med användarinmatad data. Att företag inte lägger mer pengar på testning av säkerhetsfunktioner beror i de flesta fall antingen på att de är omedvetna om riskerna med att inte göra det, eller att det skulle krävas för mycket arbete för att göra några ytterligare säkerhetsförbättringar. 65 4 Mikael Szreder: Kanban som utvecklingsmetodik för mjukvaruprojekt med kontinuerlig prototypning Agila utvecklingsmetodiker har blivit allt mer populärare inom mjukvaruutveckling. Det finns dock ett akut behov av empiriska studier som utvärderar deras effektivitet [22, s. 1]. 4.1 Inledning Eftersom slutprodukten i detta projekt inte var tydligt definierad av kunden ledde detta till att projektet utvecklades med en strikt process för inhämtning av krav och prototypning [23, s. 5]. Genom att kontinuerligt evaluera prototyper tillsammans med kunden och mot kundens krav var det tänkt att skapa produkten som kunden ville ha. 4.2 Syfte och mål Syftet med denna delrapport är att undersöka hur Kanban, en agil utvecklingsmetodik, fungerar för projekt där krav och slutresultat inte är strikt definierade. 4.3 Frågeställning Följande frågeställningar ska besvaras i denna rapport. 1. Vilka fördelar och nackdelar finns det med att använda Kanban när man använder sig av kontinuerlig prototypning? 2. Jämfört med andra agila utvecklingsmetodiker vad är fördelarna med att använda Kanban i ett projekt där produktkraven ändrar på sig? 3. Vilka fördelar och nackdelar finns det med att använda Kanban när man arbetar i ett litet projekt? 66 Eftersom detta projekt var av relativt litet storlek så ska bland annat storleken av projektet tas i beaktning vid diskussionen. 4.4 Avgränsningar Vid diskussionen av frågeställningarna kommer endast erfarenheter från just detta projekt samt erfarenheter och resultat från eventuella forskningsrapporter att användas. 4.5 Bakgrund De traditionella utvecklingsmetodikerna, ibland kallade Heavyweight beskriver strikt processerna som ska användas vid utveckling. De agila utvecklingsmetodikerna försöker ändra dessa prioriteringar till mer fria och flexibla metoder. Den agila rörelsen har delvis sitt ursprung i den så kallade Agile Manifesto eller som den egentligen heter The Manifesto for Agile Software Development [24]. Denna publikation var resultatet av ett samarbete mellan 17 representanter från olika företag som samlades för att försöka skapa ett gemensamt ramverk för denna typ av utvecklingsmetodiker [22, s. 16]. Vid detta tillfälle skapades även den så kallade Agile Alliance [25] en global ideell organisation som har åtagit sig uppgiften att främja agila principer inom mjukvaruindustrin. En utvecklingsmetodik som har tagit inspiration från den agila tankesättet är Kanban [26, s. 28]. Kanban tar sitt ursprung i Toyotas produktionssystem och har anpassats till mjukvaruutveckling på den senaste tiden [2]. En mer noggrann beskrivning av Kanban kan återfinnas i huvuddelen av denna rapport under rubrik 2.3 - Kanban. 67 4.6 Teori Kärnan i Kanban beskrivs av följande tre uppgifter [2]: Visualisera arbetsflödet Uppgifterna ska delas in i aktiviteter och placeras på den så kallade Kanban-tavlan. Namngivna kolumner hjälper till att illustrera vart aktiviteter är i arbetsflödet. Begränsa mängden aktiviteter i ett visst arbetssteg Begränsa mängden aktiviteter som är i ett visst arbetssteg/kolumn på Kanban-tavlan. Mät ledtiden Mät tiden det tar för aktiviteter att gå genom hela arbetsflödet. Målet är sedan att minimera denna tid. En viktig påpekning är att Kanban begränsar mängden arbete per utveckligssteg till skillnad från vissa andra utvecklingsmetodiker som begränsar mängden arbete inom en iteration eller inom ett visst tidsintervall [3]. Denna skillnad tillåter Kanban att vara mer responsiv till eventuella ändringar i produktkrav eftersom aktiviteter kan alltid prioriteras om innan utvecklingen av dem har påbörjats. 4.7 Metod Projektgruppen har haft minst ett möte per vecka där gruppens Kanbantavla sågs över och en statusuppdatering av gruppmedlemmarna gjordes. Under dessa möten diskuterades eventuella ändringar till arbetsbegränsningarna på Kanban-tavlan och eventuella problem med arbetet togs upp. Dessa möten har även givit en överblick över hur utvecklingen fortskridit. Under dessa möten har observationer skrivits ner för att användas som grund till denna rapport. 68 4.8 Resultat I det här avsnittet läggs vårt arbete fram, sett från min synvinkel som arkitekt. 4.8.1 Fas 1 Eftersom gruppen inte hade någon bra bild på vad kunden egentligen var intresserad av, gick mycket av arbetet i fas 1 ut på att skapa prototyper samt evaluering av olika idéer angående hur produkten skulle kunna utformas. På slutet av fas 1 så hade gruppen producerat en interaktiv prototyp som presenterades för kund för att få återkoppling. Rent arkitekturmässigt så skapades denna prototyp med så minimalt arbete som möjligt. 4.8.2 Fas 2 Under fas 2 så använde gruppen sig av återkopplingen från kunden för att utöka den interaktiva prototypen med mer funktionalitet och förbättra existerande visualisering. Eftersom arkitekturen av prototypen i fas 2 var fortfarande minimalt definierad så påbörjades planeringen av en refaktorisering av all kod som skulle ske under fas 3. 4.8.3 Fas 3 Under fas 3 så skrevs hela prototypen om och arkitekturen definierades tydligare. Gruppen gjorde detta för att göra den mer lättförståelig och enklare att upprätthålla samt för att det skulle vara enklare utöka i framtiden. I denna fas infördes även en back-end som var ansvarig för att tillgängliggöra verktyget från flera datorer. Denna back-end var även ansvarig att konvertera kundens datafiler till ett format som kunde direkt användas av klientsidan. 69 4.9 Diskussion I det här avsnittet diskuteras resultatet och erfarenheter tas upp. 4.9.1 Resultat Generellt gick projektet mycket bra och tack vare kontinuerlig prototypning kunde gruppen testa produkten ofta och se till att funktionalitet var meningsfull och tydlig. När man använder sig av Kanban och kontinuerlig prototypning kan det vara en bra ide att definiera vilka aktiviteter som ska inkluderas i nästa prototyp. Mängden aktiviteter som inkluderas till nästa prototyp kan variera baserat hur ofta man har kontakten med kunden. Om kunden finns på plats och kan testa varje ny funktionalitet så snart den är klar så kommer denna lista att vara rätt så kort. Om detta inte är fallet så kommer extra planering behövas, där man i samarbete med kunden bestämmer vilken funktionalitet ska vara färdig till nästa prototyp. Detta kommer ge utseendet av iterationer men med den stora fördelen är att iterationslängden inte måste vara strikt definierat. Iterationslängden kan då till exempel sättas till tiden tills nästa kundmöte. Eftersom Kanban inte föreskriver något angående ändringar i produktkrav så betyder detta att aktiviteter kan i princip ändras fritt när som helst så länge man inte bryter mot begränsningarna i något av arbetsstegen. Jämfört med de andra agila utvecklingsmetodikerna så leder detta till att Kanban blir väldigt responsiv mot ändringar i produktkrav. En svaghet av Kanban är att inga processer för utveckling eller testning är definierade. Det är alltså helt upp till utvecklaren att skapa eller använda processer som passar organisationen eller projektet. Detta leder till att utvecklare kombinerar Kanbans visualisering av arbetsflödet med delar av andra mer definierade metoder och på så sätt får en mer definierad metodik. En kombination av Kanban och till exempelvis XP (eXtreme Programming) är till exempelvis en kombination som kan fungera bra för mjukvaruprojekt. 70 Lika som Kanban är XP också en agil utvecklingsmetodik, dock är XP mer specificerad för just precis mjukvaruutveckling. 4.9.2 Metod Projektgruppen har haft minst ett möte per vecka och dessa möten protokollfördes. Dessa protokoll innehöll information om framsteg och problem som skett i utvecklingen sen senaste mötet. Förutom att projektgruppen hade minst ett möte per vecka, så gjordes en stor del kommunikation utanför mötestid. Denna typ av kommunikation skrevs ofta inte ner då den ofta handlade om detaljer samt designval som inte var tillräckligt viktiga för att tas upp med hela projektgruppen. Detta val att hålla icke väsentliga ämnen utanför mötestider ledde till att det fanns mer tid att diskutera arbetsprocessen under mötena. Detta har tillåtit gruppen att se över eventuella problem i utvecklingen och vidta lämpliga åtgärder mot dem. Nackdelen med att denna typ av kommunikationen var att den inte protokollfördes. Detta ledde till att det i vissa fall uppstod problem i utvecklingen eftersom inte alla gruppmedlemmar var informerade om ändringar som hade skett. Eftersom projektgruppen varit relativt liten så skadade inte den bristande kommunikationen slutresultatet. Skulle gruppen varit större så skulle denna brist på kommunikation kunna ha lett till allvarligare problem. Det kan därför vara en bra idé för större projektgrupper att definiera en process för kommunikation av designval. 4.10 Slutsatser Man kan tycka att den minimala definitionen av Kanban är en svaghet. Men det är precis den minimala definitionen som är dess styrka. Tanken med Kanban är inte att man bara ska använda det som är föreskrivet utan att man ska utöka processen så den passar projektet/organisationen [2]. Man kan tänka sig Kanban som en hörnsten till en utvecklingsmetodik som är 71 precis anpassad till projektet/organisationen. Vill man ha iterationer, så är det bara att använda iterationer, vill man ha möten varje dag, så är det bara att ha möten varje dag. Kanban begränsar inte projektet utan är ett verktyg för att stärka planeringen. Vilka fördelar och nackdelar finns det med att använda Kanban när man använder sig av kontinuerlig prototypning? Eftersom Kanban inte kräver någon form av iterationer kan detta leda till att prototyperna inte är så tydligt definierade. Detta ger en frihet till utvecklarna som både kan vara befriande men riskerar även att inte passa med kundens förväntningar. Jämfört med andra agila utvecklingsmetodiker vad är fördelarna med att använda Kanban i ett projekt där produktkraven ändrar på sig? Om en utvecklingsmetodik har iterationer betyder det oftast att inga ändringar får göras till aktiviteter eller krav inom en påbörjad iteration, vilket betyder att ändringar till aktiviteter eller krav kommer appliceras i början på nästa iteration. Den största fördelen med Kanban när det gäller eventuella ändringar i produktkrav är att det inte finns något krav på iterationer. Detta betyder att aktiviteter kan i princip omprioriteras fritt så länge arbetsbegränsningarna för arbetsflödet inte bryts. Vilka fördelar och nackdelar finns det med att använda Kanban när man arbetar i ett litet projekt? En av de större fördelarna är att det är enkelt att använda och komma igång med och kräver inte mycket förberedelsearbete innan det tas i bruk. En nackdel med Kanban är att eftersom Kanban är så minimalt definierat så finns det en risk att vissa arbetssteg som testning och distribution kommer kräva extra förberedelser för att definiera processerna för dessa arbetssteg för att underlätta vidare arbete. 72 Denna nackdel har mindre konsekvenser för små projektgrupper. Vid större projektgrupper skulle jag rekommendera att man ser över och kombinerar Kanban med andra mer definierade metoder. 73 5 Oskar Lind: Kontinuerlig kravinsamling 5.1 Inledning I kursen TDDD77 har grupp nummer 3 arbetat med att framställa ett visualiseringsverktyg åt webbläsarutvecklaren ”Opera Software”. Under projektets början fanns det många stora frågetecken kring vad slutprodukten egentligen skulle innehålla. Efter att gruppen valt Kanban som utvecklingsmetod fördes en kontinuerlig kommunikation genom hela projektet för att lyckas hålla backloggen fylld. I projekt där en agil utvecklingmetodik används så innebär det oftast att kundens inverkan är stor genom hela projektet. Då varje ny del av projektet kan resultera i nya önskemål och krav så finns risk att konflikter uppstår då kraven som satts ej överensstämmer med båda parternas uppfattning. Denna del kommer handla om kravinsamling och kravens roll i projekt med agil utvecklingsmetod. 5.2 Syfte och mål Beskriva, analysera och utvärdera den kravinsamlingsmetod som används under projektets gång. Där till jämföra och dra paralleller till etablerade kravinsamlingsmetoder genom att studera hur dessa används av näringslivet. Det slutgiltiga målet är att samla analys- och kravinsamlingskunskaper för att förbättra kravinsamlingsmetodiken i framtida liknande projekt. 5.3 Frågeställning • Vilka kravinsamlingsmetoder har utbredning inom akademin? • Hur används dessa i näringslivet och hur mycket frångås teorin? • Vad är en lämplig kravinsamlingsmetod för ett liknande, framtida projekt? 74 • Hur säkerställs att båda parter blir nöjda med slutprodukten i ett agilt projekt? 5.4 Ordlista Backlogg – Annan benämning på arbetskö, frekvent förekomande i agila områden LEAN – En benämning som ges till arbetsmetoder vars syfte är effektivisering Latens – Tiden för ett meddelande att skickas från klient till server REPEAT – Requirements Engineering Process At Telelogic RDEM – Requirement Driven Evolution Model Svarstid – Latens plus tiden för servern att svara klienten Vattenfallsmetoden – arbetsmetod [27] Scrum – Agil utvecklingsmetod som bygger på ett intervallsystem med så kallade sprints [27] Kanban – Planeringsmetod som används i industri och utveckling för att effektivisera arbetet [28] 5.5 Avgränsningar För att kunna svara på frågeställningarna som angetts i stycke 5.3 kommer följande delmoment att genomföras: • Analys av kravinsamling och värdet av välformulerade krav i Scrum och Kanban • Analys av REPEAT • Intervju med projektledare med analysansvar på ett mjukvaruföretag 75 5.6 5.6.1 Bakgrund TDDD77 - Projektet I kursen TDDD77 ingår ett moment som består av ett mjukvaruutvecklingsprojekt. I detta projekt ska grupper av varierande storlek, bestående av studenter vid Datatekniksprogrammet vid Linköpings universitet, på beställning av en extern part utveckla en mjukvarulösning. Denna delrapport kommer fokusera på kravinsamlingen i det projekt som utförts av grupp 3. Projektet utfördes på beställning av Opera Software. Syfte var att ta fram en mjukvarulösning som visualiserade latens mellan länder och potentiella datacenter. 5.7 Teori För att vara bekant med de termer som behövs för att besvara frågeställningen ges här beskrivningar av de aspekter som spelar en central roll i denna del. 5.7.1 Kravhanteringsmetoder Det finns många kravhanteringsmetoder som sedan tidigare är etablerade. För att få en bättre kunskap av vilka alternativa teoretiska metoder som finns beskrivs här två alternativ. REPEAT REPEAT bygger kring en kravhanteringsorganisation som består av flera olika grupper som uppfyller olika syften. Överst sitter kravhanteringsgruppen som organiserar och administrerar de olika kraven. Under i hierarkin finns kravgrupper vars uppgift är att analysera och specificera de olika kraven. Dessutom finns grupper med testare, utvecklare samt olika typer av specialister för att utforma kraven än bättre. De steg som ett krav går igenom är: New, Assigned, Classified, Selected samt Applied. Om det någon gång under kravframtagninsprocessen kommer 76 fram att kravet ej fyller någon funktion, eller inte går att implementera, så finns möjligheten att när som helst förkasta förslaget. [29] RDEM RDEM fokuserar på kvalitet hos de leveranser som kommer att ges och tiden då de släpps är av mindre vikt. RDEM bygger på att kravinsamlingsansvaret ligger hos en projektkommitté som består av personer både från utvecklingsteamet och beställaren. Denna grupp tar varje förslag som inkommer till projektet och får detta förslag att genomgå fyra olika stadier. Dessa stadier är: Captured, Specified, Planed och Realized. De olika nivåerna beskriver hur långt ett krav kommer om det accepteras som ett nytt produktkrav. Ett förslag på ett krav är heller inte ett krav fören det nått den första nivån, Captured. I specified så specificeras och delas kravet upp för att lättare bearbetas för att slutligen i ett planerat krav. Först när ett krav blir realiserat så börjar utvecklingsgruppen med att utveckla det som utvecklingskommittéen sammanställt till ett krav. Ett krav kan alltid backas i framtagningsprocessen. Däremot så kastas aldrig ett krav, ett krav pausas endast realized steget om kravkommittéen ser kravet som icke nödvändigt. [29] 5.8 Metod För att bredda kunskapen om kravinsamling så har ett utbud med artiklar av information- och analysegenskap studerats. Till stor del har så har fokus legat på artiklar som handlar om olika kravinsamlingsmetoder, då främst om REPEAT och RDEM. Som en del i studien om kravinsamling så har även kontakt från ett externt företag använts Den person som intervjuats via mail jobbar som projektledare på ett företag som levererar mjukvarulösningar till en bred kundbas. För att få erfarenhet från praktiken har ett projekt genomförts, innehållande en omfattande kravinsamlingsprocess. 77 5.9 Resultat Här beskrivs de resultat som erhållits genom arbetet med denna rapport. 5.9.1 Intervjuer Vid en intervju med en kontaktperson på mjukvaruföretaget Valtech så erhölls mycket information om hur kundkommunikation och kravarbete kan fungera i verkligheten. Till stor del så sköttes kundkommunikation genom en form av produktägare. Detta oavsett om arbetsmetoden helt baserats på Scrum eller om det handlar om Kanban som kombinerats med Scrum [30]. All kommunikation kring vad produkten ska omfatta sker via en kanal och det medför att riskerna för tvetydiga tolkningar av önskemål minskar. Även om produktägaren i stora drag ofta bara förser utvecklingsgruppen med user stories så finns en person från intressenternas sida med en förhoppningsvis stor analysförmåga och teknisk kunnighet. På detta sätt kan kraven ofta specificeras och ibland utökas vid olika steg i utvecklingen av en produkt. [29] I de fall att kunden känner att produkten uppfyller de krav som de har så görs valet förmodligen att avsluta projektet. Vid projektavslutet så slutar kunden att betala för nya sprints varpå kravinsamlingen från projektgruppens sida avslutas. Då en kund vanligtvis inte betalat för onödiga sprints så avslutas i de flesta fall projekten när kunden slutar komma med nya önskemål. [29] 5.9.2 TDDD77 – kravinsamlingsprocess I projektuppstarten började arbetet för gruppen med att välja projekt från en mängd olika alternativ. Det alternativ som gruppen kom att välja blev ett projekt riktat mot Opera Software. Redan från början fick alla gruppdeltagare en egen mental bild av vad som skulle göras. Beskrivningen i projektförslaget gav projektgruppen en idé om ett optimeringsverktyg som nyttjade sig starkt av ett grafiskt gränssnitt. Idéer om vilka optimeringsalgoritmer som skulle användas och hur en backend 78 som skulle klara av stora optimeringsproblem började skissas på. När projektets första kundmöte bara en liten tid senare ägde rum blev bilden en helt annan. De viktigaste kraven som stod i projektbeskrivningen lyftes då inte alls längre fram som viktiga och en stor förvirring inom projektgruppen uppstod. För att reda ut vad kunden önskade skapades då ett formulär för att projektgruppen skulle kunna identifiera i vilken riktning som kunden ville styra projektet. Då det vid denna tid i projektet hade funnits åsiktsskillnader mellan kund och projektgruppen så gjordes ett aktivt val att vänta med konstruktion av kravspecifikation till det att en tydlig vision hade arbetats fram. När den första versionen av kravspecifikationen var färdig hade ett mål diskuterats fram med kunden. Det tog däremot mycket mindre tid än det först var beräknat att färdigställa de krav som kunden hade kommit med. Efter ungefär halva projekttiden så hade projektgruppen en lösning som kunden till mångt och mycket var nöjd med. Resultatet av detta blev på grund av kursens examinationskrav en dialog med kunden om vilka fler funktioner som kunden kunde tänka sig ha nytta av som höll på till projektets slut. Genom hela projektet så har produktdemonstrationer för kunden skett. Detta började genom att gruppen direkt efter formulärets färdigställande började med ett antal prototyper som löste det problem som kunden förklarat. Dessa produktdemonstrationer både gav kunden en säkerhet då projektgruppens arbete blev lätt att följa och gjorde att kunden ofta fick komma med egna nya idéer på hur produkten skulle kunna bli bättre. Prototypningen hjälpte projektgruppen att kontra det problem som uppstod då kunden ej hade några user stories. Kravens målfunktion analyserades med hjälp av de olika stadierna för krav som SEMAT alpha state cards beskriver [31]. 5.10 Diskussion Bra krav är A och O i alla projekt. En uppsättning med välformulerade krav ger både kunden säkerhet i resultat och leverantören tydliga avgränsningar 79 för vad som ska utföras. I många sammanhang så sätts kraven till att vara avklarade vid en specifik tidpunkt. I ett projekt som bygger på vattenfallsmetoden handlar det ofta om att kraven, som alla samlats in i början av projektet, också alla ska vara avklarade vid slutet av projektet. Då förefaller det i många fall också naturligt att endast ha en kravinsamling som sedan revideras under projektets gång. I ett projekt med Scrum som arbetsmetod handlar det om krav satta för varje enskild sprint. Dessa tas från en backlogg som hela tiden kan fyllas på. Detta kan då ske genom en kontinuerlig kravinsamling. När Kanban kombineras med någon annan form av arbetsmetod så kan det lätt uppstå frågor. När ska kravhantering ske? När ska den sluta? När ska kraven vara färdigställda? Då ett populärt sätt att arbeta med Kanban är att kombinera det med Scrum så fås svaren på en gång då det i Scrum redan finns förutbestämt hur kraven ska hanteras [30]. I de fall som andra projektstyrningsmetoder väljs kan det däremot uppstå frågor om dessa metoder inte på förhand specificeras. Situationen med otydliga regler kring krav i projektstyrningen uppstod under projektdelen i TDDD77. Detta tillsammans med en kund som förvisso hade mycket god teknisk kompetens men däremot saknade erfarenhet som beställare gav en kravsituation som var osäker. Lyckligtvis fanns goda möjligheter till vidare förhandlingar med kund under hela projektet. Även vid de tillfällen då backloggen började tömmas så hade projektgruppen fria händer till att själva tänka kreativt. Denna kreativitet mynnade ut i prototyper som sedan visades för kund, godkändes eller avvisades och till sist blev föremål för nya krav. Den artikel som studerats mest ingående innefattar en jämförelse mellan REPEAT och RDEM. Denna jämförelse visar på många sätt att det handlar om två väldigt lika kravbearbetningsmetoder. Den stora skillnaden i slutändan är var utvecklingsgruppens fokus ligger. Ska produkten levereras i tid oavsett kvalité eller huruvida är leveranstid mindre viktigt om slutprodukten blir så bra som möjligt. Vid granskning av de marknadsdrivna kravinsamlingsmetoderna är REPEAT den metod som ligger närmst tillvä- 80 gagångssättet under projektet. Metoden har stor fokus på när leverans ska planeras till. Projektet med Opera hade redan från början ett sistadatum. När det kommer till projektrollerna som använts i hela projektet är det däremot RDEM som är den process som är mer lik. Då det i detta fall i stort sett varit hela projektgruppen som varit med och tagit fram kraven. Oavsett så har inte hela projektgruppen varit delaktig i kravframtagningen, något som kan ha bidragit negativt sett till metodernas rekommenderade kravgruppsstruktur. Ytterligare en faktor som gör projektets kravhantering mer lik RDEM är fokus på kvalité i slutprodukten. Då projektgruppen ej hade krav på tidseffektivitet så låg mycket arbete på mervärde för kunden. Då det på företaget Valtech är projektledaren som är i fokus när det handlar om kravinsamling så finns här också olikheter. I projektet användes både analysansvarig och projektledare för att driva kommunikation med kunden. I till exempel formulärsutformningen var till och med hela projektgruppen inbjudna till att vara en del av kommunikationen utan att ha någon direkt mellanhand. Detta ledde till att personer med olika ansvarsposter fick chansen att fråga kunden om det som de undrade om över projektet direkt. Eftersom det skedde i början fick hela projektgruppen en tydligare bild om projektets omfattning och inriktning istället för bara projektledaren. Det blir tydligt att det finns en stor skillnad mellan de kravinsamlingsmetoder som studerats tillsammans med den som används och den som används på Valtech. De metoder som studerats och den som använts använder sig av projektgruppens frågvishet och kunskap för kravinsamligen på ett tydligt sätt. Hos det studerade företaget verkar däremot kravinsamlingen vara mer centraliserad till en specifik nyckelperson. Vilken roll de övriga projektmedlemmarna har är inte något som framkommit och är något som skulle kunna studeras vidare. Ytterligare en intressant aspekt är de olika nivåerna som både RDEM och REPEAT använder för att beskriva hur mogna de funktioner som kraven beskriver är. Genom att dela upp utvecklingsfasen av en funktion blir det tydligare när målet med arbetet är uppnått. I det utförda projektet så 81 har SEMAT alpha states använts för att kunna göra denna uppdelning men uppföljningen har varit dålig. Detta gjorde att det blev svårt att få översikt på utvecklingen av de olika funktionerna i vissa lägen och ett visst överarbete ibland skedde. Genom att använda en mer etablerad kravinsamlingsmetod är det möjligt att denna dokumentation kunde blivit bättre. 5.11 Slutsatser När det kommer till kravinsamling så finns det många olika metoder som alla är utformade för att fungera bra i olika arbetsgrupper och situationer. De metoder som studerats i detta arbete, RDEM och REPEAT, är bara två sätt att genomföra kravinsamlingen på. Då dessa är framtagna av företag inom IT-branchen för 10-20 år sedan så är det svårt att avgöra vilken betydelse de har i den akademiska världen. När blicken vänds mot näringslivet så har fokus till stor del legat på företag med en verksamhet som liknar den i det utförda projektet. Här ligger ofta Scrum till grund för mycket av arbetsmetoden oavsett om projektgruppen valt en egen tolkning. Vilken metod som ska användas beror till stor del på vilken grupp och vilket projekt det handlar om. Vad som däremot kan konstateras är att en process där kundens grundönskemål identifieras för att sedan drivas framåt med prototyper har varit ett lyckat koncept i detta projekt. Det går aldrig att säkerställa att alla parter blir nöjda vid ett mjukvaruutvecklingsprojekt. Olika kunder har olika behov och det första en person som är kund eller analysansvarig är att identifiera dessa redan innan avtal skrivs mellan parterna. När väl ett avtal skrivs ska detta vara anpassat efter arbetsmetod och på ett tydligt sätt beskriva hur krav ska hanteras. 82 6 Simon Eriksson: Implementation av interaktiv kartvisualisering med D3 6.1 Inledning Denna individuella del behandlar hur en given design för en interaktiv visualisering som visar landsspecifik information på en världskarta med hjälp av bubblor kan implementeras med hjälp av JavaScript-biblioteket D3, och hur bra visualiseringsprogrammet blir inom funktionalitet respektive kodimplementation. 6.2 Syfte och mål Syftet med denna delrapport är att ta reda på hur bra D3 fungerar för att implementera avancerade kartvisualiseringar med landsspecifik data inom såväl funktionalitet som inom kodimplementation. Då visualiseringar av landsspecifik data är vanligt förekommande idag så kan denna delrapport hjälpa utvecklare att välja tekniska lösningar för liknande projekt. 6.3 Frågeställning • Vilka fördelar respektive nackdelar finns med att använda D3 för att implementera en avancerad och interaktiv kartvisualisering som uppfyller en given bubbelbaserad design och dess funktionskrav? • Lämpar sig D3 bra för att skapa effektiva och lättunderhållna implementationer? 6.4 Avgränsningar Denna individuella del fokuserar på hur man kan implementera en tidigare designad visualiseringsdesign och tar därför inte upp själva designprocessen. Ej heller testas andra ramverk eller grafiska bibliotek som också kan användas 83 för visualisering. Det finns heller inga etiska aspekter eller liknande som man kan ta hänsyn till. 6.5 Bakgrund Opera Software behöver ett verktyg som kan hjälpa dem att planera och bestämma var deras proxyservrar, som används för att minska svarstider till webbplatser, ska placeras. Visualiseringen behöver visa svarstid samt antal användare för varje land, man ska även kunna se varje datacenters svarstid för ett specifikt land. För detta har en visualiseringsdesign baserad på bubblor som visas ovanför länderna tagits fram av gruppen i samråd med Opera. Applikationen måste vara funktionell och fungera för kunden samtidigt som den är lätt att implementera och underhålla för utvecklarna. 6.6 Teori D3 är ett JavaScript-bibliotek för att skapa interaktiva och avancerade datavisualiseringar i webbapplikationer. D3 grundfilosofi är att underlätta databaserade dokumentmanipuleringar samt vara flexibelt och integrera väl med DOM och vanliga webbstandarder som exempelvis HTML, CSS och SVG. Grundmodellen i D3 bygger på väljare (selectors), operatorer (operators), datajoins och events. Med väljare väljer man ut element från DOM enligt vissa kriterier för manipulering som man sedan kan manipulera med operatorer. Med datajoins binder man JavaScript-data till en grupp av element, där man även kan använda de speciella väljarfunktionerna enter och exit, enter för att hämta ingående data samt exit för att hämta utgående element. D3 kan binda events till element som gör saker med applikationen när användaren interagerar med element på ett visst sätt, exempelvis hover eller musklick. Vid dokumentmanipuleringar har D3 stöd för övergångar som kan användas för animeringar mellan olika lägen. D3 har även inbyggda moduler för att underlätta vanliga operationer, som exempelvis färgskalor, layoutplaceringar, utritning av vektorelement och parsning av dataformat som exempelvis 84 datum och CSV.[32] D3 har stöd för att hantera TopoJSON och GeoJSON, som är JSONbaserade dataformat för att definiera kartdata i vektorformat inklusive metadata som namn, landskoder och dylikt. D3 har även flertalet kartrelaterade hjälpfunktioner, bland annat hanterande av kartprojektioner. Man kan implementera egna kartprojektioner men det finns även inbyggda metoder som exempelvis Mercator. Genom att läsa kartfilerna kan man hämta ut ländernas former och placeringar som sedan kan projiceras och renderas med hjälp av vektorformatet SVG. [33] 6.7 Metod Under projektet användes D3 för att utveckla en webbapplikation för kartvisualisering. Under projektets gång bedömdes det hur väl biblioteket fungerade för projektet samt vilka fördelar och brister som fanns. Följande kriterier bedömdes: • Hur smidigt fungerar D3 och dess programmeringsmodell för att implementera en viss funktionalitet? • Hur lättläslig och begriplig blir koden? Visualiseringens design var en världskarta med bubblor som visas ovanför länderna, där färgen indikerar minsta latensen mellan landet och ett datacenter och bubblans radie indikerar antalet användare i landet. Datacentren är placerade på kartan med en kvadratisk ikon, när man klickar på den avaktiveras datacentret. Det finns även en sidebar som listar datacentrerna samt latenssiffror för varje datacenter i ett individuellt land om användaren klickat på landets bubbla, även härifrån kan man aktivera eller inaktivera datacentren. När datacentren aktiveras eller avaktiveras räknas minsta latensen om och färgerna i bubblorna uppdateras. 85 6.8 Resultat I detta avsnitt diskuteras hur D3 användes under projektet. 6.8.1 Första fasen med Datamaps Inledningsvis använde vi oss av biblioteket Datamaps, som är ett färdigt bibliotek för att rita kartor och bubblor med hjälp av D3, på så vis hoppades vi slippa att själva implementera koden för att rita kartan. Inledningsvis provade vi att göra bubblorna med hjälp av Datamaps inbyggda bubbelstöd, det visade sig dock vara alltför begränsat då man inte kunde ge bubblor individuella färger på ett smidigt sätt. I stället gjorde vi ett eget plugin till Datamaps som ritar bubblor med hjälp av D3 som var anpassat för bubblor med individuella färger och storlekar. Vi lade därefter till olika funktioner i vår plugin, som exempelvis en informationsruta som visas när muspekaren är över bubblan. Ett problem med Datamaps var att standardkartan saknade många mindre länder, varav många av dessa behövdes. Därför genererade vi en ny karta i TopoJSON och ersatte standardkartan med den nya. Vi bytte också ut standardprojektionskoden i Datamaps mot en egen implementerad i D3. Med tiden blev fler och fler funktioner i Datamaps utbytta mot egna implementationer, och till slut byttes Datamaps ut helt mot egenimplementerad kartkod med D3, vilken ledde till renare kod med färre beroenden. 6.8.2 Övergripande funktioner Vid starten laddas all relevant data in från JSON-filer med hjälp av D3:s inbyggda asynkrona JSON-inläsningsfunktion. För att göra koden modulär och lättunderhållen är JavaScript-koden uppdelad i ett flertal klasser, där varje typ av objekt på kartan har en egen klass. Då vi har valt en responsiv design där kartan anpassar sin storlek efter fönstret, och det inte finns något inbyggt stöd för att hantera detta så måste alla SVG-element manuellt ändras vid storleksändring. Detta görs genom att ett event som körs vid stor86 leksändring anropar klassernas egna storleksfunktioner, som manuellt räknar om storleken på alla objekt och uppdaterar. Kartdatan hämtades från Natural Earth Data och konverterades sedan till TopoJSON. För att få en karta som både hade Franska Guyana och länder som Storbritannien och Belgien enade i stället för delade i flera delar fick vi göra ett särskilt skript som satte ihop vissa länderna genom att kopiera och modifiera kod från TopoJSON-konverteraren. Ett problem som fanns sedan den nya kartdatan nu var att applikationen var alltför seg, det kunde åtgärdas genom att förenkla linjerna i kartdatan med hjälp av TopoJSON-generatorn. 6.8.3 Världskartan För att skapa själva världskartan läggs först SVG-elementet och sedan en SVG-grupp för kartan till med hjälp av D3:s urval och operatorer vid starten av applikationen. Vid laddningen av sidan laddas först data från kartfilen med hjälp av TopoJSON-biblioteket, samtidigt filtreras även Antarktis bort från datan med hjälp av JavaScript:s inbyggda filter-funktion. Sedan läggs länderna till i kartan med hjälp av databindning i form av SVG-pathelement som hämtar sin form från en vektorpath. För att kunna rita länderna på en tvådimensionell yta behöver path:en avbildas med en kartprojektion innan den ritas upp, vilket vi gjorde med hjälp av D3:s inbyggda funktioner för Mercatorprojektionen. För att D3:s projektionsfunktioner ska kunna användas behöver utvecklaren dock själv specificera skalningen och translationen för att kartan inte ska ha fel storlek eller gå utanför SVG-ytan. 6.8.4 Bubblorna Bubblorna har likt världskartan också ett eget SVG-lager. För att se till så att små bubblor ritas ovanpå de stora så måste länderna sorteras efter antalet användare innan de ritas upp, vilket kan göras med sort-funktionen i JavaScript. När länderna är sorterade skapas en lista med relevant data om länderna som sedan databinds, där cirklar med korrekt storlek och färg 87 läggs till i det nya SVG-lagret. Varje bubbla har också ett dataattribut med landskoden för att lätt kunna hittas av andra funktioner. Mittpunkten hämtas från landets form och D3:s funktion för att beräkna mittpunkten på en form. Eftersom olika händelser ska inträffa när man klickar på eller har musen över bubblan så läggs även events till för bubblorna när de skapas. När datacentren aktiveras eller inaktiveras körs en funktion som uppdaterar färgerna genom att hämta alla bubblor med väljare och för var och en räknar om minsta latenser och uppdaterar färgen med operatorer, i det här fallet används ej databindning. När man har muspekaren över ett datacenter i sidebaren så går bubbelfärgerna över till ett särskilt differensläge som visas hur det landet påverkas om datacentret aktiveras eller avaktiveras. Om tiden blir bättre blir bubblan grön, om den blir sämre så blir bubblan röd, annars blir den vit. Ju större skillnaden är desto starkare blir färgen. Uppdateringen fungerar på liknande sätt som vid uppdateringar i det vanliga läget, skillnaden för varje bubbla räknas ut och sedan uppdateras färgen. D3:s funktioner för att skapa skalor användes för att ta fram skalfunktionen som beräknar bubblans storlek samt skalfunktionen som beräknar bubbelfärgen för en viss svarstid. När muspekaren är ovanför visas en popupbubbla med landets namn och flagga samt användarantal och lägsta svarstid. Själva popuprutan är implementerad med en egen klass som huvudsakligen använder jQuery för att välja och manipulera objekt. 6.8.5 Datacenter Vid kartuppritning ritas datacentrerna upp på kartan med hjälp av D3, även här används databindning för att lägga SVG-element med rätt position och data för varje datacenter. Förutom position och hårdkodad storlek så läggs även events till. Förutom events för popuprutan så finns även ett event till som aktiverar eller inaktiverar popuprutan när användaren klickar på datacentret. Koordinaterna måste avbildas med en kartprojektion innan den ritas 88 upp för att de ska hamna på rätt ställe, här återanvänds naturligtvis den som används för världskartan. För att tydligare visualisera vilka datacenter som är bäst för ett visst land så ritas bågar mellan de tre bästa datacentren och landets bubbla när upp landet är aktiverat. Dessa är implementerade genom att skapa en array med ett objekt för varje båge som sedan databinds. Databindningen tar linjen mellan bubblans mittpunkt och det aktuella datacentret och avbildar den med hjälp av världskartans kartprojektion så att den slutliga formen blir en båge. D3:s stöd för övergångar används här för att skapa en animering där bågen gradvis ritas ut. 6.8.6 Sidebar Sidebarkoden manipulerar inte direkt själva kartan och använder huvudsakligen jQuery, huvudsakligen för att den behöver använda jQuery-pluginet MixItUp som sorterar datacentrerna på listan efter svarstid, och koden försöker att blanda jQuery och D3 så lite som möjligt i samma klass. 6.8.7 Statistik I slutfasen gjordes även en separat statistikvy som visar cirkeldiagram över andelen användare i världen med en viss svarstid. Även för detta användes D3, bland annat dess inbyggda funktioner för att rita cirkelsektorer och cirkeldiagram. Även denna data uppdateras när man aktiverar eller inaktiverar datacenter. Eftersom detta inte strikt har med kartvisualiseringen att göra utelämnas detaljerna. 6.9 Diskussion I detta avsnitt diskuteras hur bra D3 fungerade för projektet samt hur bra metoden fungerade. 89 6.9.1 Resultat Kartimplementationen kunde framgångsrikt och på ett förhållandevis enkelt sätt implementeras med hjälp av D3 och TopoJSON, inklusive avancerad interaktiv funktionalitet. D3 hade många funktioner som var till stor hjälp och förenklade utvecklingsarbetet markant, bland annat funktionerna för kartritande och projektion, databindningsmodellen för att rita objekt, funktionerna för asynkron JSON-inladdning, diagramfunktionerna samt förstås även de mer basala delarna som väljare och operatorer. Den resulterande D3-koden var också förhållandevis lätt att förstå och underhålla. För vissa mer avancerade väljaroperationer kändes D3 otillräckligt eller mer klumpigt, och jQuery användes i stället som tillägg. D3-modellen kunde vara svår att förstå till en början och följdes inte alltid helt, bland annat användes ofta jQuery när D3 hade fungerat eller loopar i stället för databindningsfunktionerna, som är mer idiomatisk och korrekt D3-kod. Mer fördjupning inom D3 och dess programmeringsmodell innan kodskrivandet hade varit bra för samtliga utvecklande gruppmedlemmar. En annan svårighet var att det svårt att få ut exakt den kartinformation vi ville ha från Natural Earth Data, ett exempel är att vi ville ha Franska Guyana och Frankrike som separata länder men i några av detillgängliga datamängderna så var de enade och i andra så var flertalet länder splittrade i diverse delar som var irrelevanta. Problemet kunde slut fixas med hjälp av ett eget TopoJSON-genereringsskript som manuellt slog ihop specifika landsdelar för vissa länder. 6.9.2 Metod Att utvärdera D3 genom att faktiskt använda det i en praktiskt projekt har känt som en bra lösning. Däremot hade det varit bra med en mer formell metod för att kvantifiera hur bra D3 fungerar i projektet. Det hade även varit bra att anteckna och sammanställa löpande i stället för att göra det i slutfasen. 90 6.10 Slutsatser Slutsatsen av arbetet och analysen är att D3 kan användas för att förhållandevis enkelt implementera kraftfulla och funktionella interaktiva kartvisualiseringar, själva programmeringsmodellen kan dock vara svår att sätta sig in i och det rekommenderas att man fördjupar sig in i den innan man utvecklar applikationen. För vissa mer avancerade operationer kan även jQuery behövas. Man får även vara förberedd på att inhämtningen och genereringen av kartdata kan vara komplicerat. 91 7 Simon Petersson: Kvalitetssäkring och inspektioner 7.1 Inledning Att utveckla en produkt som uppfyller kundens krav lyckas inte alltid, vilket kan bero på flera anledningar. Ofta beror det på att produkten inte utvärderats under projektets gång utan endast i slutet, då kritiska problem blir svårare att åtgärda. Denna individuella del behandlar kvalitetssäkring och inspektioner för ”Visualisering av svarstider mellan mobila klienter och datacenter” som utförs i kursen TDDD77 vid Linköpings universitet. Här beskrivs meningen bakom kvalitetssäkringen och varför den utförs samt projektgruppens metoder för att uppfylla kraven. 7.2 Syfte och mål Syftet med att utföra inspektioner var att säkerställa att projektet följde en viss standard och att detta i slutändan skulle underlätta slutförandet av projektet. En kvalitetssäkring helt enkelt, där det slutgiltiga målet var att projektets alla parter skulle bli nöjda. Syftet med denna rapport är att undersöka hur kvalitet uppnås och hur man ska arbeta för att uppnå detta. För att uppnå kvalitet låg fokus på enklare inspektioner av kod och dokument. Målet med inspektionerna var att de krav som specificerats skulle uppfyllas samtidigt som problem med kravmotsägelser i slutet skulle minimeras. 7.3 Frågeställning Man kan inte i förväg veta att ett projekt kommer lyckas. Man kan ha en bra projektplan, kvalitetsplan, riskhantering, samt en välmotiverad projektgrupp och en kund som vill ha ett projekt utfört. Detta garanterar inte att 92 projektet kommer lyckas och att projektgruppen kommer uppfylla de förbestämda målen. Här kan kvalitetsstyrning användas för att med olika metoder säkerställa att den slutgiltiga produkten uppfyller kraven. Här nedan följer frågeställningar som behandlas i rapporten. • Hur påverkar inspektioner? Blir det bättre eller sämre i slutändan? • Vilken tid är rimligt att lägga på kvalitetsarbete? • Vem har huvudansvar för att projektet håller en god kvalitet? 7.4 Avgränsningar Då kvalitet är både tidskrävande och dyrt förenklades vissa delar av kvalitetsarbetet i projektet. Vissa metoder förenklades och utfördes av enstaka personer vid enstaka tillfällen, då projektgruppen inte kunde avsätta alltför stora resurser på kvalitetsarbete då projektet hade begränsat antal timmar för färdigställande. Enligt projektets kvalitetsplan planerade gruppen ungefär 4-5 timmar varje vecka till kvalitetsarbete, där den största portionen av tiden skulle fyllas av kvalitetssamordnaren. 7.5 Bakgrund En vanlig orsak till att ett projekt misslyckas är dålig planering [34]. Här behövs ofta en god planering med tydliga ramar för vad som ska göras och när. Andra orsaker till att ett projekt inte lyckas är att det inte uppfyller de förbestämda kraven [34]. Denna del är vad som behandlas i denna rapport, där målet ligger i att förbättra förutsättningarna till att projektet ska lyckas och att minimera oönskade konsekvenser i slutet av projektet. 7.6 Teori Nedan följer en beskrivning av relevant teori för rapportens frågeställningar med förklaring av inspektioner och ordet kvalitet. 93 7.6.1 Inspektioner Under projektets utfördes mindre inspektioner av kvalitetssamordnaren. Detta för att ge en bild över hur utvecklingsarbetet låg till samt för att utvärdera kod som skrivits. Nedan följer en beskrivning av checklistan som användes vid inspektioner för koden. Checklistan följer en enkel tabellform och består av ett antal punkter som behandlades och antecknades vid inspektioner. Tabell 1: Checklista vid inspektioner. Datum Utförare Område Filer Problem som observerats / Kodfel Åtgärd Kravkoppling Område innebär den funktionalitet som granskades och är en kort beskrivning av vilken del som inspektionen behandlade. Filer innebär de kod-filer som granskades. Problem / Kodfel är buggar eller allmänna problem som observerades. Åtgärd innebär sätt som direkt var applicerbara för att lösa problemet, ofta för mindre buggar. Kravkoppling innebär en bild över kopplingen till kraven som fanns, dvs fanns det några motsägelser eller följde produkten kraven. 7.6.2 Kvalitetsbegrepp Anders Weinoff och Emelie Wirström författare till ”Vägen till ett lyckat ITprojekt” beskriver Nordqvist syn på styrning av ett projekt med hjälp av tre faktorer. Dessa faktorer är tid, kostnad och kvalitet som förhåller sig till varandra enligt följande: Pris, mängd och tid ger kostnad. Mängden beror på funktionell standard, vilket ger kvantitet och sist kvalitet som ges av priset av teknisk lösning [35]. Att öka kvalitet medför således att kostnaden och 94 tiden ökar. Nedan visas en figur som Anders och Emelie tar upp. Denna figur skapades av Mats Engwall för att pedagogiskt beskriva åtagandetriangeln som en uppspänning mellan funktionalitet, tid och kostnad [35]. Figur 9: Åtagandetriangel Figur 9 ger en bild av att dessa faktorer är beroende av varandra och att öka kvalitet påverkar på alla faktorer. Hur mycket kvalitet får kosta blir en balans av hur mycket tid och pengar utvecklarna är villiga att lägga på kvalitetsarbete, då det både är kostsamt och tidskrävande. Begreppet kvalitet är ett mångsidigt begrepp som ofta måste betraktas ur flera perspektiv för att ge en heltäckande bild. Kvalitet på kod syftar inte bara till hur många buggar som finns utan också kodens portabilitet, återanvändbarhet, integrerbarhet och effektivitet. Det finns även andra faktorer som kodens underhåll och testbarhet som spelar in. 7.7 Metod Projektgruppen använde sig av granskningar av dokument som utfördes enligt kvalitetsplanen, där huvudtanken låg i att fler än bara författaren skulle granska dokumenten och ge synpunkter innan dokumentet ansågs vara godkänt för redigering till finare format i LaTeX. Här fördes ett nära samarbete med dokumentansvarig. 95 Projektgruppen har använt sig av inspektioner där kvalitetssamordnaren gått igenom koden och dess funktionalitet för att säkerställa överensstämmelse med kraven och i nödvändiga fall se till att saker testas och dokumenteras. Testningen utfördes av testledaren som hade huvudansvar för testning. 7.8 Resultat Under projektets tidiga faser genomfördes endast ett fåtal inspektioner för granskning av kod, då projektgruppen till största del arbetade med prototyper. När prototyparbetet var klart och projektet gick in i en mer produktiv fas påbörjades kvalitetsarbetet mer intensivt. 7.8.1 Granskning av dokument Under hela projektet utfördes flera granskningar av de producerade dokumenten. Här var alla gruppens medlemmar delaktiga i att granska och korrekturläsa allt som skrevs, där huvudansvar i uppföljning och slutgiltigt ansvar togs av kvalitetssamordnaren med hjälp av dokumentansvarig som ansvarade för själva dokumenten. Granskning av dokument följde inte någon standard för granskning eller uppföljning. Istället var projektledaren drivande med att alla skulle läsa igenom det som skrevs för att rätta språkliga fel. Gruppens alla medlemmar tog ansvar för granskning av dokument och gruppen använde sig av Google docs för skrivandet, där förslags-läget med god nytta användes för att kunna ge förslag på förändringar i texten jämfört med nuvarande version. Dokumentansvarig ansvarade sedan för att godkänna förslag och modifiera LaTeX-filer för finare formatering till alla dokument. 7.8.2 Inspektioner av kod De inspektioner som utfördes bidrog till att många småfel effektivt kunde hittas. Inspektionerna var samtidigt bakgrunden till flera diskussioner som ledde till omstruktureringar för att förbättra koden uppbyggnad. Majoriteten 96 av inspektionerna som utfördes var riktade mot specifika funktionaliteter i koden, som exempelvis bubblor, datacenter eller sidebar, där uppskattningsvis ett par hundra rader kod tillhörande denna funktionalitet granskades vid inspektionen. I genomsnitt dokumenterades 2-3 småfel vid varje inspektion samt ofta ett par förbättringsförslag på koden, exempelvis för att koden skulle bli mer generell eller för att förbättra kodens prestanda. Totalt granskades stora delar av koden, där ny funktionalitet som implementerades hade högre prioritet jämfört med förbättringar och utökningar av tidigare funktionalitet, som då inte granskades lika ingående. Nedan följer en sammanställning av några relevanta delar från kodinspektionerna: Ett problem som observerades efter att Popup-rutor implementerades var att dess position skilde sig mellan olika webbläsare. Detta trodde gruppen berodde på kompatibilitetsproblem för multipla webbläsare, men det visade sig efter kodinspektion att det var ett enkelt fel där pixlar användes istället för procent på två ställen i CSS-koden. Under samma tid observerades även att många länders bubblor saknades, vilket visade sig bero på att kartbiblioteket som då användes inte var tillräckligt noggrant och många små länder saknades. Detta låg till grund för den nya kartan som då börjades skapas, där en person i gruppen började arbeta med en karta anpassad efter den data som gruppen hade. Då bubbelkoden inspekterades valde gruppen även att byta till en inbyggd funktion för att bestämma länders mittpunkt, istället för den dåvarande externa datafilen. Det utfördes även en noggrann inspektion av sidebaren då gruppen observerat att den inte fungerade korrekt. Vid inspektionen observerades även att länder sorterades felaktigt, vilket berodde på att sorteringen inte tog hänsyn till decimaler. Det fanns även problem med att länder som hade oändligt svarstid inte hamnade sist vid sortering. 7.8.3 Allmänt om kodinspektioner Efter en tids arbete observerades att det fanns problem med läsbarheten i koden, speciellt för personer som inte var insatta i vissa delar av koden. 97 Detta ledde till en stor omstrukturering av all CSS- och JavaScript-kod, som flyttades ut till egna filer och strukturerade upp för att öka läsbarheten. Det skapades även flera init-funktioner för olika delar av koden. I senare delar av projektet när produkten började bli klar utfördes även inspektioner för att kontrollera produktens prestanda, då vissa medlemmar observerat att den var långsam på att uppdatera färger i webbläsaren Firefox vid aktivering och inaktivering av datacenter. Vid inspektionen observerades att uppdateringen av bubblors färg var ineffektiv, då programmet sorterade alla datacenter för varje land varje gång ett datacenter aktiverades eller inaktiverades. Under inspektionen observerades samtidigt att bubblorna inte fungerade för Windows-användare, detta var i samband med att back-end hade införts. Då konverteringen till JSON data på back-end kontrollerades visades sig problemet bero på att Windows använder en annan separator för radbrytning vilket gjorde att ”\r” lades till på slutet av alla värden för svarstider och användarantal, vilket orsakade att det blev NaN-värden på all data efter konverteringen. 7.9 Diskussion Att granska och utvärdera allt som skrivs är nödvändigt för att få projektmedlemmarna delaktiga i projektets alla delar. Projektmedlemmarna får då möjligheten att påverka utvecklingsarbetet och samtidigt hjälper det till att minimera språkfel. Detta var framför allt viktigt vid skrivandet av projektets kravspecifikation och arkitektplan där stora delar av gruppen hade starka synpunkter på hur saker skulle implementeras och vilka krav som skulle sättas. Detta leder till rekommendationen att alla ska gå igenom kraven innan huvudarbetet påbörjas för att minimera oklarheter eller att några krav blir felaktigt formulerade, vilket skulle kunna påverka projektets utgång. En orsak till att dålig kvalitet uppstår kan vara att programmerarna hoppar direkt in i utvecklingsarbetet, utan att genomgå förarbetet med analys och design [36]. Detta är något som kan kopplas till vårt projekt där vi ti98 digt känt att vi vill hoppa in i utvecklingsarbetet så snart som möjligt och från början inte ansett att planeringsarbetet är viktigt. Men efterhand i projektet har gruppen börjat inse att planeringen både hjälper för kvalitet i utförandet samt för att effektivisera utvecklingsarbetet. Såklart skulle en del planeringsarbete kunna skippas om de som utvecklar produkten är väldigt erfarna programmerare och har stor kunskap inom området och gjort liknande saker tidigare. Sara Eliason och Jenny Karnehed författare till ”Systemutveckling - en modell för verifiering och validering” menar att många utvecklare har uppfattningen att kvalitet är något som skapas hos en programvara i slutet av arbetet när testningen utförs. Här menar de istället att kvalitet förbättras av testningen men det garanterar inte att ett felfritt program levereras till kunden, utan kvalitetsarbete är något som måste utföras kontinuerligt. De anser även att ett projekt bör ha väl genomtänkta verifierings- och valideringsaktiviteter från början för att uppnå kvalitet [36]. I efterhand anser jag personligen att jag kunde satt upp lite mer tydliga ramar för kvalitetsarbete och försökt få fler involverade i detta arbete. ”De största felen ligger alltid i kravspecifikationen, inte i koden - Lidfeldt 1998” [36]. Personligen anser jag att detta inte är helt sant, men det är ett intressant citat och det visar att kravspecifikationen till stor del speglar det arbete som utförs och är kraven felformulerad från början, finns det stor risk att problem uppstår i utvecklingsarbetet. Nedan följer ett diagram som Sara och Jenny presenterar angående hur korrigeringen av kravfel kostar beroende på när den utförs [36]. Även om detta givetvis är en uppskattning får man ändå en tydlig indikering på hur stor påverkan kraven har på kvalitet i slutet av ett projekt. Vilket gör det enkelt att dra slutsatsen att kraven ska vara korrekta från början i så stor utsträckning som möjligt. 99 Figur 10: Diagram över kostnaden i antalet persontimmar beror på när ett krav korrigeras. 7.9.1 Resultat För att reflektera över resultatet så har flera erfarenheter kunnat erhållits från planeringsarbetet. Ofta märks problem inte i början av ett projektet. Ibland uppstår små problem som sakta växer tills de blir allvarliga och inte längre kan ignoreras. Med detta menas att det är bra att planera noga innan arbetet påbörjas och se över alternativ och hur ens lösning kommer att påverka andra delar av systemet. I vissa fall har vi inom gruppen märkt att lite bättre planering från början skulle uppskattats. Detta för att minimera ändringar i slutet när gruppen kommit till insikt med saker som behöver förändras för att de inte fungerar tillsammans. I det stora hela var planeringen av metoder och ramverk som använts bra, men det skulle kunna ha dokumenterats och diskuteras lite mer om hur saker kommer fungera tillsammans. Det tydligaste exemplet är genererandet av kartan, där många modifieringar utfördes efterhand då problem uppstod. Det första problemet som uppstod var att länder saknades, då kartan inte var tillräckligt noggrann. Ett annat problem uppstod då gruppen bytte standard för landskoder, vilket i slutet blev problematiskt då det fanns krav på uppdelning av större länder till regioner. Problemet med standarden som då användes var att den inte hade beteckningar för regioner, vilket visar på att gruppen borde planerat bättre från början och kontrollerat kraven mer noggrant för att undvika problem i slutet. 100 7.9.2 Metod Kvalitetssamordnaren har ansvarat och utfört inspektioner. För inspektioner har en enkel modell använts, där den grafiska delen granskats efter småfel eller buggar, därefter följt av en granskning av koden, efter eventuella syntaxfel, motsägelser med kodstandard eller allmänna problem. Samtidigt har metoder och funktioner i koden utvärderats för att avgöra dess kompatibilitet, hur generella de är och hur de kommer fungera i framtiden, för att exempelvis kunna byta ut kartan på ett enkelt sätt. Som exempel kan det nämnas att gruppen valde att använda en inbyggd funktion i kartbiblioteket för att räkna ut mittpunkten av länder istället för en separat datafil. Detta för att minimera arbetet för kunden i framtiden, så endast kartan behövs uppdateras. För att förbättra kvalitetsarbetet borde bättre uppföljning använts, då inspektioner utförts av en person och problem eller liknande som observerats har fixats av kvalitetssamordnaren och i vissa fall bara lätt diskuterats med berörda personer. Här vill man ha en vidare diskussion med gruppens medlemmar och gå igenom problemen och se till att de åtgärdas och ha en bättre uppföljning för att säkerställa att åtgärderna har utförts och att problemet är löst. En bra metod som gruppen använde sig av i senare delar av projektet var att buggar eller saker som inte fungerades lades till som en aktivitet i projektplaneringsverktyget Redmine, vilket förenklade processen att rapportera fel som observerats. Aktiviteter skapades då med instruktioner för när buggen uppstod och vem i gruppen som tilldelats uppgiften att lösa problemet, vilket bidrog till att buggar åtgärdades väldigt snabbt och effektivt. För att sammanfatta inspektioner så har dessa varit ett utmärkt sätt att kontrollera både kod och dokument som skrivits. För kod behövs ofta en lite mer strukturerad metod medan för dokumenten fungerar det bra att korrekturläsa dokument och ge förslag på förändringar. Kodinspektionerna har bidragit med att förbättra koden som skrivits. De har fungerat mycket bra för att hitta mindre fel som bland annat kompatibilitetsproblem och för 101 att snabbt kunna rapportera åtgärder, men även för större saker som lett till omstruktureringar av koden. Den aspekten som ofta ses som negativ med inspektioner är att de är tidskrävande och bidrar inte till någon markant förbättring. Detta har inte varit fallet i vårt projekt, då inspektionerna som utförts varit av det enklare slaget och har inte varit lika formella som för ett multinationellt företag. 7.10 Slutsatser För att sammanfatta och dra slutfattande erfarenheter av projektets kvalitetsarbete kan tidsfaktorn nämnas som den avgörande faktorn. Denna speglar ofta tillsammans med pengar, vilket i vårt fall inte var en faktor, hur mycket tid en grupp kan lägga på kvalitetsarbete. Inspektioner har endast utförts av en person som haft huvudansvar för allt. Här skulle i efterhand en bredare spridning som involverar flera personer varit uppskattad. Dock har gruppen inte kunnat avsätta allt för mycket resurser på detta då många andra aktiviteter samtidigt har varit viktiga och behövt uppmärksamhet. Buggrapporteringsverktyget i Redmine har i projektets senare delar varit ett bra sätt att rapportera in buggar och har medfört att problem snabbt blivit åtgärdade. Den avsatta tiden för kvalitetsarbete var bra uppskattad och var tillräckligt stor för en person av använda för kvalitetsarbete. Om fler personer skulle hållit på med kontinuerligt kvalitetsarbete skulle lite mer tid behövts avsättas. Sedan så har vårt projekt inte haft alltför stor arbetsbörda på utvecklingsarbetet så kvalitetsarbetet har varit ett bra sätt för att se till att arbetet blir så bra som möjligt och att så många småfel som möjligt elimineras. I det stora hela har inspektionerna varit uppskattade och bidragit till bra diskussioner över hur vi ska utveckla produkten vidare för att förbättra användarupplevelsen. För att återkoppla till frågeställningen angående vem som har huvudansvar för projektets kvalitet så är det enkla svaret alla. Givetvis är det rekommenderat att minst en person har huvudansvaret för uppföljningen och 102 agerar som drivande kraft för att få folk engagerade, men om man vill uppnå bra kvalitet inom rimlig tid är det bra om alla försöker att engagera sig. Man kan inte alltid skriva bra fungerade kod direkt utan det kräver erfarenhet och träning. Att få återkoppling på kod och diskutera problem med någon annan är ett av de bästa sätten att utvecklas. 103 Referenser [1] Opera Software. Om - Opera Software. http://www.opera.com/sv/ about. [Online; hämtad den 14 april 2015]. [2] Crisp. Kanban. https://crisp.se/gratis-material-och-guider/ kanban. [Online; hämtad den 14 april 2015]. [3] Henrik Kniberg och Mattias Skarin. Kanban and Scrum - Making the most of both. C4Media, 2010. isbn: 9780557138326. [4] Wikimedia Commons. Simple kanban board. http://commons.wikimedia. org/wiki/File:Simple- kanban- board- .jpg. [Online; hämtad den 20 april 2015]. [5] Wikimedia Commons. Alpha State Cards: A Lean and Lightweight Governance Approach for Agile Software Development. http : / / www . ivarjacobson.com/alphastatecards/. [Online; hämtad den 22 maj 2015]. [6] Terry Schmidt. Strategic Project Management Made Simple: Practical tools for leaders and teams. 2009. [7] R.A. Calvo m. fl. “Collaborative Writing Support Tools on the Cloud”. I: Learning Technologies, IEEE Transactions on 4.1 (jan. 2011), s. 88– 97. issn: 1939-1382. doi: 10.1109/TLT.2010.43. [8] Golara Garousi m. fl. “Usage and usefulness of technical software documentation: An industrial case study”. I: Information and Software Technology 57 (2015), s. 664–682. issn: 0950-5849. doi: http : / / dx . doi . org / 10 . 1016 / j . infsof . 2014 . 08 . 003. url: http : / / www . sciencedirect.com/science/article/pii/S095058491400192X. [9] Caius Brindescu m. fl. “How do centralized and distributed version control systems impact software changes?” I: Proceedings of the 36th International Conference on Software Engineering. ACM. 2014, s. 322– 333. 104 [10] Paul Dourish och Victoria Bellotti. “Awareness and Coordination in Shared Workspaces”. I: New York, NY, USA: ACM, 1992, s. 1. url: http://www.dourish.com/publications/1992/cscw92-awareness. pdf. [11] Jun-hui LIU, Geng-yu WEI och Cong WANG. “Research on concurrency control algorithm for real-time collaborative editing systems”. I: The Journal of China Universities of Posts and Telecommunications 21, Supplement 1 (2014), s. 6–11. issn: 1005-8885. doi: http://dx. doi . org / 10 . 1016 / S1005 - 8885(14 ) 60519 - 7. url: http : / / www . sciencedirect.com/science/article/pii/S1005888514605197. [12] Andrew Reichman. “File storage costs less in the cloud than in-house”. I: White paper, Forrester (2011). [13] Department for Business Inovation & Skills. "2014 Information Security breaches survey. https://www.gov.uk/government/uploads/ system / uploads / attachment _ data / file / 307296 / bis - 14 - 767 information-security-breaches-survey-2014-technical-reportrevision1.pdf. [Online; hämtad den 2 maj 2015]. [14] Paul Rubes. Why you should be spending more on security. http:// www.cio.com/article/2904364/security0/why-you-should-bespending-more-on-security.html. [Online; hämtad den 1 maj 2015]. [15] Paul K Martin och Inspector General. “NASA Cybersecurity: An Examination of the Agency’s Information Security”. I: US House of Representatives, Feb (2012). [16] Lieven Desmet m. fl. Web Application Security. http : / / research . microsoft.com/en-us/um/people/livshits/papers%5Ctr%5Cdagrep_ s12401.pdf. [Online; hämtad den 1 maj 2015]. [17] Yao-Wen Huang m. fl. “Securing Web Application Code by Static Analysis and Runtime Protection”. I: Proceedings of the 13th International Conference on World Wide Web. WWW ’04. New York, NY, USA: 105 ACM, 2004, s. 40–52. isbn: 1-58113-844-X. doi: 10 . 1145 / 988672 . 988679. url: http://doi.acm.org/10.1145/988672.988679. [18] Frank Kargl, Joern Maier och Michael Weber. “Protecting Web Servers from Distributed Denial of Service Attacks”. I: Proceedings of the 10th International Conference on World Wide Web. WWW ’01. Hong Kong, Hong Kong: ACM, 2001, s. 514–524. isbn: 1-58113-348-0. doi: 10 . 1145/371920.372148. url: http://doi.acm.org/10.1145/371920. 372148. [19] David Moore m. fl. “Inferring Internet Denial-of-service Activity”. I: ACM Trans. Comput. Syst. 24.2 (maj 2006), s. 115–139. issn: 07342071. doi: 10.1145/1132026.1132027. url: http://doi.acm.org/ 10.1145/1132026.1132027. [20] Subgraph. Vega Vulnerability Scanner. https://subgraph.com/vega/. [Online; hämtad den 10 maj 2015]. [21] Kaspersky Lab. Global IT Security Risks: 2012. http://www.kaspersky. com / downloads / pdf / kaspersky _ global _ it - security - risks survey_report_eng_final.pdf. [Online; hämtad den 26 maj 2015]. [22] MA Awad. “A comparison between agile and traditional software development methodologies”. I: University of Western Australia (2005). [23] Kristian Sandahl. Project Management. http://www.ida.liu.se/ ~TDDC88 / theory / lecture - 4 - project - management . pdf. [Online; hämtad den 12 mars 2015]. [24] Martin Fowler och Jim Highsmith. “The agile manifesto”. I: Software Development 9.8 (2001), s. 28–35. [25] Agile Alliance. http://www.agilealliance.org/. [26] Dean Leffingwell. Agile software requirements: lean requirements practices for teams, programs, and the enterprise. Addison-Wesley Professional, 2010. 106 [27] Ken Schwaber. “Scrum development process”. I: Business Object Design and Implementation. Springer, 1997, s. 117–134. [28] Muhammad Ovais Ahmad, Jouni Markkula och Markku Oivo. “Kanban in software development: A systematic literature review”. I: Software Engineering and Advanced Applications (SEAA), 2013 39th EUROMICRO Conference on. IEEE. 2013, s. 9–16. [29] Pär Carlshamre och Björn Regnell. “Requirements lifecycle management and release planning in market-driven requirements engineering processes”. I: Database and Expert Systems Applications, 2000. Proceedings. 11th International Workshop on. IEEE. 2000, s. 961–965. [30] Erik Kurin. Intervju- och mail-material. [Personlig kommunikation; utförd april - maj 2015]. [31] Ivar Jacobson International AB. SEMAT state cards. http : / / www . ivarjacobson.com/alphastatecards/. [Online; hämtad den 13 april 2015]. [32] Michael Bostock, Vadim Ogievetsky och Jeffrey Heer. “D3 data-driven documents”. I: Visualization and Computer Graphics, IEEE Transactions on 17.12 (2011), s. 2301–2309. [33] Michael Bostock och Jason Davies. “Code as cartography”. I: The Cartographic Journal 50.2 (2013), s. 129–135. [34] George Tentak och Jimmy Nyström. “Identifiering av problem i ITprojekt: En studie baserad på IT-konsultföretags och beställarorganisationers erfarenhet av misslyckade IT-projekt”. I: (2009). [35] Emelie Weinoff Anders och Wirström. “Vägen till ett lyckat IT-projekt”. I: (2009). [36] Sara Karnhed Jenny och Eliasson. “Systemutveckling-en modell för verifiering och validering”. I: (2000). 107 Upphovsrätt Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare – från publiceringsdatum under förutsättning att inga extraordinära omständigheter uppstår. Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner, skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för ickekommersiell forskning och för undervisning. Överföring av upphovsrätten vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av dokumentet kräver upphovsmannens medgivande. För att garantera äktheten, säkerheten och tillgängligheten finns lösningar av teknisk och administrativ art. Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i den omfattning som god sed kräver vid användning av dokumentet på ovan beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan form eller i sådant sammanhang som är kränkande för upphovsmannens litterära eller konstnärliga anseende eller egenart. För ytterligare information om Linköping University Electronic Press se förlagets hemsida http://www.ep.liu.se/ Copyright The publishers will keep this document online on the Internet – or its possible replacement – from the date of publication barring exceptional circumstances. The online availability of the document implies permanent permission for anyone to read, to download, or to print out single copies for his/hers own use and to use it unchanged for non-commercial research and educational purpose. Subsequent transfers of copyright cannot revoke this permission. All other uses of the document are conditional upon the consent of the copyright owner. The publisher has taken technical and administrative measures to assure authenticity, security and accessibility. 108 According to intellectual property law the author has the right to be mentioned when his/her work is accessed as described above and to be protected against infringement. For additional information about the Linköping University Electronic Press and its procedures for publication and for assurance of document integrity, please refer to its www home page: http://www.ep.liu.se/. c Adrian Sidenvall, Andy Truong, Erik Boman, Mikael Szreder, Oskar Lind, Simon Eriksson, Simon Petersson 109
© Copyright 2024