On The Minimum dys - Al-Zara_20150119 - MUEP
Transcription
On The Minimum dys - Al-Zara_20150119 - MUEP
Examensarbete 15 högskolepoäng, grundnivå Minimumkrav för ett CI-system On The Minimum Requirements of a CI-system Petrus Kiendys Shadi Al-Zara Examen: Högskoleingenjörsprogram 180 hp Data- och telekommunikationsteknik 19 januari 2015 Examinator: Handledare: Gion Svedberg Mia Persson Tore Nestenius This page intentionally left blank. Tack till medverkande Vi vill tacka följande personer för deras medverkande och stöd under detta examensarbete: Tore Nestenius (extern handledare från Edument AB) för handledning och kontinuerligt stöd under arbetets gång, i synnerhet för den hjälp vi fick under arbetets tidiga fas då vi inte riktigt visste hur vi skulle komma igång. Tore tillhandahöll oss med resurser som vi fick användning av och tillförde en praktisk aspekt av examensarbetet. Mia Persson (intern handledare) för handledning och stöd vid moment och aspekter av examensarbetet som vi haft begränsad kunskap om. Vi har fått hjälp med bl.a. utformningen av marknadsundersökningen, kategorisering av funktionella och icke-funktionella krav samt vilka vetenskapliga metoder som är mest lämpliga för att angripa vår frågeställning. Joakim Hellberg (IT-support) för tillhandahållandet av en fysisk server som vi kan ansluta oss till via fjärrstyrning för att utföra praktiska moment av examensarbetet. Annabella Loconsole (ämnesexpert inom kravhantering) för tips om metoder som kan användas när man utformar krav för ett IT-system samt en inblick i omfattningen av att utföra en formell kravhantering av ett IT-system. Ulrik Eklund, Kristina Ericson och resten av lärarlaget för konkreta tips under informationssökningen av vetenskapliga artiklar, utformning av referenser enligt IEEEreferensstil och hänvisningar till litteratur för att få en bättre förståelse för den vetenskapliga metoden. iii Sammanfattning När en grupp utvecklare jobbar med samma kodbas kan konflikter uppstå med avseende på implementationen av moduler eller delsystem som varje utvecklare individuellt jobbar på. Dessa konflikter måste snabbt lösas för att projektet ska fortskrida och inte stagnera. Utvecklare som sällan kommunicerar framför ofta okompatibla moduler eller delsystem som kan vara svåra eller omöjliga att integrera i kodbasen, detta leder ofta till s.k. “integration hell” där det kan ta väldigt lång tid att anpassa ny kod till en befintlig kodbas. En strategi som man kan ta till är “continuous integration”, ett arbetssätt som erbjuder en rad fördelar när man jobbar i grupp på en gemensam kodbas. Continuous integration är möjligt att tillämpa utan verktyg eftersom detta är ett arbetssätt. Däremot kan processen stödjas av ett s.k. “CI-system” som är något av en teknisk implementation eller påtagligt införlivande och stöd för arbetsmetoden “continuous integration”. Denna rapport syftar till att ge en inblick i vad ett CI-system är och vad den principiellt består av. Vi undersöker vad ett CI-system absolut måste bestå av genom en litteraturundersökning och en marknadsundersökning. Vi ställer upp dessa beståndsdelar som “funktionella” och “icke-funktionella” krav för ett typiskt CI-system. Vi kan på så vis kvantifiera och kategorisera olika komponenter och funktionaliteter som bör innefattas i ett typiskt CI-system. I denna rapport finns även ett bihang som visar hur man kommer igång med att bygga en egen CI-server mha. CI-systemmjukvaran “TeamCity”. Slutsatsen av vår rapport är att CI-system är ett viktigt redskap som kan underlätta mjukvaruutveckling. Med hjälp av CI-system kan man stödja utvecklingsprocessen genom att bl.a. förhindra integrationsproblem, automatisera vissa delar av arbetsprocessen (kompilering av källkod, testning av mjukvara, notifikation om stabilitet av kodbas och distribution av färdig mjukvara) samt snabbt hitta och lösa integrationsfel. Nyckelord: continuous integration, CI, CI-system, TeamCity, funktionella krav, ickefunktionella krav iv Abstract When a group of developers work on the same code base, conflicts may arise regarding the implementation of modules or subsystems that developers individually work on. These conflicts have to be resolved quickly in order for the project to advance at a steady pace. Developers who do not communicate changes or other necessary deviations may find themselves in a situation where new or modified modules or subsystems are impossible or very difficult to integrate into the mainline code-base. This often leads to so called “integration hell” where it could take huge amounts of time to adapt new code into the current state of the code-base. One strategy, which can be deployed to counteract this trend is called “continuous integration”. This practice offers a wide range of advantages when a group of developers collaborates on writing clean and stable code. Continuous integration can be put into practice without the use of any tools as it is a “way to do things” rather than an actual tool. With that said, it is possible to support the practice with a tangible tool called a CI-system. This study aims to give insight into the makings of a CI-system and what it fundamentally consists of and has to be able to do. A study of contemporary research reports regarding the subject and a survey was performed in order to substantiate claims and conclusions. Core characteristics of CI-systems are grouped into “functional requirements” and “nonfunctional requirements (quality attributes)”. By doing this, it is possible to quantify and categorize various core components and functionalities of a typical CI-system. This study also contains an attachment which provides instructions of how to get started with implementing your own CI-server using the CI-system software ”TeamCity”. The conclusion of this study is that a CI-system is an important tool that enables a more efficient software development process. By making use of CI-systems developers can refine the development process by preventing integration problems, automating some parts of the work process (build, test, feedback, deployment) and quickly finding and solving integration issues. Keywords: continuous integration, CI, CI-system, TeamCity, functional requirements, nonfunctional requirements, quality attributes v Innehållsförteckning 1. Inledning..................................................................................................................... 1 1.1 Bakgrund ....................................................................................................................... 1 1.2 Målgrupp för examensarbete ....................................................................................... 2 1.3 Syfte och frågeställning................................................................................................. 2 1.3.1 Motivering till ämnesval ...................................................................................... 2 1.4 Uppdragsbeskrivning och avgränsningar ...................................................................... 3 1.4.1 Internt uppdrag ................................................................................................... 3 1.4.2 Externt uppdrag................................................................................................... 3 1.5 Översikt över området .................................................................................................. 4 2. Teoretisk beskrivning .................................................................................................. 7 2.1 Systemutvecklingsmetoder........................................................................................... 7 2.2 Continuous Integration (CI)........................................................................................... 8 2.2.1 Vad är CI?............................................................................................................. 8 2.2.2 Varför CI-system används.................................................................................... 9 2.3 CI-system verktyg .......................................................................................................... 9 2.3.1 CI-system grundläggande verktyg ....................................................................... 9 2.3.2 CI arbetsflöde ...................................................................................................... 10 2.4 För- och nackdelar med CI-system................................................................................ 11 2.4.1 Fördelar med CI-system ...................................................................................... 11 2.4.2 Nackdelar med CI-system .................................................................................... 12 2.5 Continuous Integration bästa praxis ............................................................................. 13 3. Metod......................................................................................................................... 14 3.1 Litteraturundersökning ................................................................................................. 15 3.1.1 Utförande av litteraturundersökning .................................................................. 15 3.2 Undersökningsmetod.................................................................................................... 15 3.3 Datainsamling och analys.............................................................................................. 16 3.3.1 Utförande av marknadsundersökning................................................................. 17 3.4 Etiska principer.............................................................................................................. 17 3.4.1 Informationskravet .............................................................................................. 18 3.4.2 Konfidentialitetskravet ........................................................................................ 18 3.4.3 Nyttjandekravet................................................................................................... 18 3.5 Metod för övriga moment ............................................................................................ 18 3.5.1 Utförande av kursmaterial .................................................................................. 18 3.5.2 Uppbyggnaden av CI-systemet ............................................................................ 19 3.5.3 Utförandet av användbarhetstest och behandling av svarsdata ........................ 20 vi 4. Resultat och analys ..................................................................................................... 22 4.1 Krav för ett CI-system ................................................................................................... 22 4.1.1 Funktionella krav ................................................................................................. 22 4.1.2 Icke-Funktionella krav ......................................................................................... 23 4.1.3 Hur ställer man upp krav för system? ................................................................. 24 4.1.4 Kravtest och utvärdering ..................................................................................... 25 4.2 Resultat från marknadsundersökningen....................................................................... 25 4.3 Resultat från litteraturundersökning ............................................................................ 38 4.4 Användbarhetstestning................................................................................................. 42 4.4.1 Kategorisering av användbarhet via användbarhetsattribut .............................. 42 4.4.2 Kategorisering av användbarhet via huvudområden .......................................... 42 4.4.3 Indelning av beståndsdelar för användbarhetsscenario ..................................... 43 4.4.4 Uppställning av användbarhetsscenario ............................................................. 45 4.4.5 Uppställning av testformulär och användarenkät............................................... 46 4.4.6 Resultat från användbarhetstestning .................................................................. 47 5. Slutsats ....................................................................................................................... 57 6. Diskussion ................................................................................................................... 60 6.1 Diskussion av kraven ..................................................................................................... 60 6.2 Förbättringar ................................................................................................................. 61 6.3 Fortsatt forskning .......................................................................................................... 66 Referenser ...................................................................................................................... 67 Bibliografi ................................................................................................................. 67 Bilagor ...................................................................................................................... 71 vii 1. Inledning 1.1 Bakgrund Utvecklare är intresserade av att skapa de bästa möjliga applikationer för sina kunder på kortast möjliga tid. Men applikationer kan bestå av många olika delar och moduler, vilket skapar stora och komplexa applikationer. Således blir utvecklingsprocessen av mjukvara svårare även om man använder sig av avancerade verktyg. En lösning till detta är att automatisera vissa delar av utvecklingsprocessen. Continuous integration (CI) är ett av de bästa sätten att göra detta [1]. När många team och utvecklare samarbetar med varandra är continuous integration avgörande för att leda framgång eller misslyckande av projektet [2]. Continuous integration (CI) är en del av Extreme Programming (XP) metoden. XP utvecklades 1997 under Chrysler Comprehensive Compensation System (C3) projektet av Kent Beck och Ron Jeffries [3]. Metoden har blivit populär inom mjukvaruutveckling. Det har visat sig att användning av metoden kan förbättra releasefrekvens av mjukvara och förutsägbarhet, dvs. förmågan för utvecklare att förutsäga när färdig leverans av stabil mjukvara kan ske. Metoden har även visat sig öka utvecklarnas produktivitet och förbättra kommunikationen inom ett utvecklingsteam, bland andra förmåner [4, s. 1]. CI är en process eller en uppsättning rutiner som ett utvecklingsteam kan jobba utefter. CI kräver inga verktyg för att kunna tillämpas, däremot kan processen stödjas på ett mer effektivt sätt mha CI-system. CI-system kan bl.a. automatisera olika processer som är grundläggande för CI och på så sätt förenkla, upprätthålla och förbättra processen [5]. Mer om detta kan läsas i avsnitt 2.5 “CI-system bästa praxis”. CI-system används alltmer i näringslivet vid mjukvaruutveckling för att effektivisera arbetsprocessen och tillföra ökad produktionsvärde [6]. CI-system ska enligt [7] kunna utföra 3 grundläggande funktioner som utgör cykeln för continuous integration: ● Versionshantering av resurser (version control system) för att utföra insamling av resurser (källkod, byggskript) ● Bygge av system som utför kompilering eller annan behandling av källkod, även utförandet av fördefinierade uppgifter som körning av byggskript och dylikt. ● Deployment management som tar hand om förpackningen och leveransen av stabil mjukvara. Något som sällan diskuteras är om det finns speciella krav som ett CI-system måste uppfylla för att vara tillfredsställande för ett utvecklingsteam och när systemet är användbart. Detta ska tittas närmare på i denna rapport. Läsaren hänvisas till avsnitt 2.2-2.5 för en teoretisk beskrivning kring vad CI-processen är och hur CI-system stödjer denna process. I avsnitt 2.2.1 definieras vad som menas med ett CI-system och i avsnitt 2.2.2 presenteras ett antal argument för varför CI-system bör användas. I avsnitt 2.3.1 går vi igenom olika verktyg som används i samband med CI-system och i avsnitt 2.3.2 förklaras arbetsflödet för CI-system. Avsnitt 4.1.1 och 4.1.2 handlar om funktionella och icke-funktionella krav för CIsystem. Hur de ställs upp, valideras och testas förklaras i avsnitt 4.1.3 och 4.1.4. Sida | 1 För att ge läsaren en klar bild över hur och varför CI-system används så anges i avsnitt 2.5 bästa praxis för continuous integration. 1.2 Målgrupp för examensarbete Målgruppen för denna studie är utvecklare och systemadministratörer inom olika organisationer som tänker introducera continuous integration i sin verksamhet. Examensarbetet genomfördes efter en 3-årig högskoleingenjörsutbildning i Data och Telekom vid Malmö Högskola och kan även vara intressant för studenter som genomför en kandidatexamen i liknande områden. Även tekniskt kunniga individer som är intresserade och vill lära sig mer om CI-system kan ha nytta av denna studie. Rapporten är skriven på så sätt att nya termer förklaras då dem påträffas, läsaren förväntas därför läsa från början till slut. Dock har vi angett hänvisningar till relevanta avsnitt när detta krävs för att underlätta för läsaren. 1.3 Syfte och frågeställning Syftet med denna studie är att utforska olika egenskaper hos CI-system och systematiskt kategorisera dessa samt definiera minimumkrav som CI-system måste uppfylla för att vara tillfredsställande för ett utvecklingsteam. Vår frågeställning är följande: Huvudfrågor: 1. Vilka funktionella och icke-funktionella krav måste CI-system uppfylla för att vara till nytta för användning? 2. Kan man enligt fastställda krav testa, värdera och jämföra CI-system? Delfrågor: 3. Vilken mjukvara för CI-system används mest? 4. Vilka för- och nackdelar finns det för ett CI-system? 5. Hur pass utbredd är användningen av CI-system bland utvecklare inom företag som använder sig av dessa system? 6. Leder CI-system till en mer effektiv utvecklingsprocess för mjukvaruutvecklare? 1.3.1 Motivering till ämnesval Vi har valt att utforska CI-system eftersom diskussioner med vår externa handledare (Tore Nestenius) har påvisat att det finns ett intresse och behov i industrin att bedriva ytterligare undersökning och forskning kring ämnet. Tore Nestenius jobbar för “Edument AB” som sysslar med systemutveckling och utbildning inom IT. Företaget jobbar just nu med att utforma en rad olika kurser som kan användas för workshops och 3-dagars seminarier. Några månader innan examensarbetet satte igång hade vi tid att undersöka olika förslag till examensarbetet. Vi fick en del förslag både internt på Malmö Högskola och utifrån. Efter fortsatta diskussioner med Tore stod det mellan 2 förslag: “Practical continuous Integration and deployment (with TeamCity)” och “Application visualization in .NET (with Microsoft Azure)”. Vi kom fram till att det är mer relevant och intressant att undersöka Sida | 2 “continuous integration” och valde därför detta förslag. Förslaget presenterades sedan för Malmö Högskola och vår examinator. Tillsammans med våra handledare diskuterade vi fram en infallsvinkel och avgränsning för ämnesområdet, mer om detta beskrivs i nästa avsnitt. 1.4 Uppdragsbeskrivning och avgränsningar Vi hade både ett internt uppdrag som utfördes åt Malmö Högskola och ett externt uppdrag som utfördes åt Edument AB. Uppdragen och avgränsningarna beskrivs utförligt nedan. 1.4.1 Internt uppdrag I början var det interna uppdraget att utforska CI/CD (continuous integration and deployment) i stort. Därför började vi med att utföra en grundlig förstudie (se bilaga 5) där vi lärde oss mer om CI/CD. Vi tittade även på närliggande koncept så som agila metoder. Efter diskussioner med vår examinator och interna handledare kom vi fram till att uppdraget måste avgränsas och begränsas till något som är genomförbart och verifierbart. Vi valde därför att avgränsa oss från att titta på CI som en process i stort och dess inverkan på utveckling av mjukvara till CI-system som är tekniska system för att stödja denna process och vilka krav dessa system måste uppfylla för att vara tillfredsställande för utvecklingsteam. Uppdraget delades upp i fyra delar: 1. Vi utförde en analys av vilka minimumkrav som behöver uppfyllas för att ha ett välfungerande CI-system. Kraven togs fram via en litteraturundersökning (se bilaga 3) och en marknadsundersökning. Därefter delade vi in kraven i specifika områden dvs. funktionella och icke-funktionella krav för att systematiskt kunna utföra ett kravtest utefter kraven. Således är slutsatsen för vilka krav ett CI-system måste uppfylla förankrat i både vetenskap och industriella erfarenheter. 2. Efter att vi kom fram till vilka krav som var viktigast för CI-system att uppfylla så byggde vi upp en TeamCity-server. Vi avgränsade oss till endast en implementation för att vara säkra på att kravtest och behandling av data kan utföras i tid. 3. När TeamCity-servern var körbar testades denna enligt de krav som vi ställt upp. Man kan med hjälp av testresultaten redogöra TeamCitys lämplighet för användning på ett mer objektivt och systematiskt sätt till skillnad från att endast uttrycka en subjektiv åsikt. 4. Den sista delen av examensarbetet bestod av att behandla data som vi fick fram från testfasen. Under denna del diskuterar och presenterar vi data samt dra slutsatser för TeamCity och CI-system utifrån dessa data. 1.4.2 Externt uppdrag En artefakt som producerades under examensarbetet är kursmaterial till vår externa handledare. Kursmaterialet består av en teoretisk genomgång av CI och CI-system, samt en praktiskt “get started with CI” genomgång mha CI-mjukvara TeamCity. Sida | 3 Vår externa handledare hade specifika krav kring hur kursmaterialet ska vara utformat: ● Kursmaterialet ska vara skrivet på engelska ● Kursmaterialet är tänkt att användas för en 3-dagars kurs som består av ○ 400-500 powerpoint slides eller 10 timmars kursmaterial ■ Moduler består av ca 40-60 slides i timmen ■ 2 huvuddelar som i sin tur består av moduler ● CI/CD teoretisk bakgrund och varför det används ● Praktiskt exempel på hur man kommer igång med TeamCity Vi insåg dock att arbetsbördan för att producera denna mängd material är för stor och att detta realistiskt sett inte kan rymmas inom det här examensarbetet. Därför kom vi överens med vår externa handledare att minska antalet slides men försöka hålla kvaliteten hög för det kursmaterial som vi hinner få ut. Vi fick under examensarbetet fram ca 280 slides sammanlagt för de båda huvuddelarna (se bilaga 1). Processen att utforma kursmaterialet löpte parallellt med tidigare nämnda delproblem. 1.5 Översikt över området Vår förstudie (bilaga 5) innehåller relevanta böcker, vetenskapliga artiklar och yrkeskunskap som vi tagit del av för att genomföra och förankra studien i vetenskap. Under litteraturundersökningen (bilaga 3) har vi även tagit del av tidigare studier kring ämnet CI-system och även den innehåller resurser som kommit till nytta. Nedan följer en sammanfattning av vetenskapliga artiklar, böcker och webbartiklar som kommit till störst nytta för vår studie samt en förklaring till varför vi valt just dessa resurser. Vi har utgått från följande källor för områdena: ● Beskrivning av olika begrepp inom CI: ○ För att få kunskap om CI och beskriva det som en del av mjukvaruutvecklingsverktyg läste vi den vetenskapliga artikeln [2] som beskriver fördelar med att använda automatiserade mjukvaruutvecklingsverktyg vid mjukvaruutveckling av komplexa system. Ki & Song anger flaskhalsar i mjukvaruutveckling för större projekt och presenterar en open-source lösning som förbättrar utvecklingsmiljön. ○ Det finns många artiklar som definierar CI på nätet. Webbartikeln [5] av Martin Fowler är en av de mest tillförlitliga källorna när det gäller CI. Den har hög relevans för vår studie eftersom man får en genomgång av vad CI är, vilka bästa praxis det finns för CI och varför det bör tillämpas. Med hjälp av artikeln kunde vi bl.a. definiera begreppet CI samt tolka och på svenska sammanfatta bästa praxis för CI i denna studie. ○ Ytterligare en intressant webbartikel är [12], där författaren går in på en processbeskrivning för hur ett CI-system bör fungera samt beskriver grunderna (viktiga komponenter) för ett CI-system. Den hjälpte oss att förstå och beskriva CI-processen i vår studie. ○ Den vetenskapliga artikeln [15] som är skriven i form av “case study”, visar hur CI-system och automatiserade tester används för att utveckla robusta Sida | 4 C4ISR system. Artikeln beskriver koncepten build agents och build configuration som används i TeamCity. Författarna beskriver även testning utförligt. Av artikeln fick vi veta hur ett CI-system kan tillämpas i industrin. ○ En bok som kommer till stor användning är [9]. Den beskriver begreppet CI och dess praxis från grunden samt går den igenom andra effektiva processer som utförs av CI-system, såsom databasintegration, testning och återkoppling. I vår studie definierade vi begreppet CI och beskrev olika CIprocesser med hjälp av denna bok. ○ Slutligen vill vi nämna den vetenskapliga artikeln [4] som genom en litteraturstudie visar att det finns skillnader i hur olika utvecklare brukar och tolkar continuous integration. Denna studie är väldigt lik i karaktär till vår studie, inte minst pga. vi i vår studie också utfört en litteraturundersökning. ● Beskrivning av olika komponenter och verktyg för CI-system: ○ Introduktionsboken [8] var till stor hjälp för att kunna bygga vårt CI- system då den beskriver steg för steg hur man bygger upp en TeamCity-server. ○ En annan bok vi tyckte var intressant att belysa är [1]. Den beskriver hur man implementerar ett CI-system i .NET samt ger en beskrivning av olika CIservrar. Boken hjälper utvecklare som vill komma igång med CI men vet inte hur. I vår studie använde vi boken för att beskriva olika komponenter och viktiga verktyg som ingår i ett CI-system. ○ Boken [10] är mycket intressant för vår studie eftersom den innehåller de principer och tekniska metoder som används i CI-system och beskriver olika komponenter och funktioner i systemet. ○ Webbartikeln [14] anger fördelar med att använda sig av CI-system både genom en inledning som beskriver vad ett CI-system är och praktiska exempel på hur man kommer igång med det. I den praktiska beskrivningen förklarar författaren hur man förbereder ett större projekt för automatisering via byggskript. Vi fick stor hjälp av denna artikel då den förklarade hur byggskript kan användas. ○ Den vetenskapliga artikeln [7] beskriver inlärningsprocessen då man inrättar continuous integration för en grupp utvecklare. Författaren tar utförligt och explicit de grundläggande komponenter som ett CI-system består av och han förklarar hur CI-system kan motverka långa integrationsprocesser och göra de mindre och mer hanterbara. ● Beskrivning av olika krav för CI-system: ○ En intressant webbartikel när det gäller CI-krav är [11]. I denna artikel listas några krav som ett CI-system måste uppfylla för att kunna fungera och erbjuda utvecklare kontinuerliga kvalitetskontroller. Fokus för artikeln sammanfaller med vår frågeställning beträffande CI-krav. Vissa böcker och artiklar som vi använde oss av när vi undersökte krav för CI-system [17, 25-26, 42] nämner inte krav specifikt för CI-system utan det är allmänna beskrivningar om hur krav hanteras i sammanhang där man utvecklar mjukvara. Sida | 5 2. Teoretisk beskrivning 2.1 Systemutvecklingsmetoder Inom organisationer som arbetar med mjukvaruutveckling är det viktigt att använda någon typ av utvecklingsmetod för att hantera och förbättra utvecklingsprocessen [17]. De mest kända traditionella metoderna inom mjukvaruutveckling är följande: ● Vattenfallsmetoden är en metod som använts länge och är en av de traditionella sekventiella metoderna i vilket arbetsprocessen övergår från ett stadie till ett annat utan att återgå till föregående stadier [18]. Fig. 1: Vattenfallsprocessen [18] ● Agila metoder kan sägas vara moderna anpassningar av de traditionella metoderna och innefattar en grupp av mjukvaruutvecklingsmetoder. De utvecklades för att producera mjukvara av hög kvalitet under kortare tid och för att effektivisera utvecklingsprocessen. Metoderna är designade på så sätt det blir lättare för utvecklare att identifiera kravförändringar under utvecklingsprocessen. Utvecklargrupper som använder sig av agila metoder brukar ha en bättre kontakt med kunden och övriga intressenter under utvecklingsprocessen. [19-20] Fig. 2: Agila metoder [20] Sida | 6 ● Extreme Programmering (XP) är en del av de agila metoderna och utvecklades 1997 under Chrysler Comprehensive Compensation (C3) projektet av Kent Beck och hans utvecklingsteam. XP syftar till att förbättra kvaliteten på mjukvaran, förkorta leveransplaner och vara en metod som är anpassad till föränderliga kundkrav. [3, 21] Fig. 3: XP practices [21] "Continuous Integration originated with the Extreme Programming development process, as one of its original twelve practices" [5]. 2.2 Continuous Integration (CI) 2.2.1 Vad är CI? Martin Fowler påpekar att continuous integration är en metod som ofta används i mjukvaruutveckling där utvecklare i ett team integrerar sitt arbete minst en gång om dagen vilket ofta leder till flera integrationer per dag. Varje integration verifieras, kontrolleras och testas för att så snabbt som möjligt upptäcka fel i integrationen av ny kod [5]. Paul Duvall anger en annan definition där han menar att CI är en taktik som används mest inom mjukvaruutveckling för att det garanterar hälsosamma IT-system och stabila applikationer. Det ökar mjukvaruutvecklares förmågan att göra förändringar i deras kod och garanterar en snabb återkoppling om något fel uppstår i programvaran. Detta möjliggörs genom att köra ett bygge med varje förändring [9]. Sida | 7 2.2.2 Varför CI-system används K. Marcin och B. Craig anger flera skäl till att använda CI i utvecklingsprocessen som följande [1]: ● Minskade risker: CI skapar bättre mjukvara pga. tidiga tester och integrationer av ny kod under utvecklingsprocessen. ● Paketerbar mjukvara: När installationsprocessen automatiseras kommer programvaran att installeras som den ska. ● Ökad synlighet för projektet: Återkopplingsmekanismen ger en möjlighet för projektmedlemmar att se byggresultaten och visar var problemen uppstår. ● Snabba inkrementella byggen: Att snabbt bygga och testa innebär att utvecklare snabbare får resultat, vilket bistår utvecklarna att fixa problemen tidigare i utvecklingsprocessen. CI-system kan både användas i små, medelstora och stora IT-verksamheter. CI-system kan även användas vid andra verksamheter, bl.a. uppbyggnad av kunskapsbaser [22], men vi kommer inte titta närmare på dessa användningsområden. 2.3 CI-system verktyg En komplett CI-process använder sig av flera verktyg. Man kan köpa dyra CI-system som är funktionsrika och ofta enkelt att installera och underhålla, eller så kan man använda verktyg som inte är lika funktionsrika och ofta kräver en del arbete för att ställa upp, men är antingen gratis eller till låg kostnad [1]. 2.3.1 CI-system grundläggande verktyg Grundläggande CI-system verktyg enligt K. Marcin och B. Craig [1] är: 1. Versionshanteringssystem (eng. source code control) När utvecklare lägger upp sin kod i en gemensam kodbas gör de en så kallad incheckning (eng. commit) av källkoden. Varje revision av källkoden lagras i en så kallad centralkatalog (eng. repository). Centralkatalogen tillhandahåller utvecklare med den senaste revisionen av källkoden som lagts in och arkiverar samtidigt tidigare revisioner så att man bl.a. ska kunna återställa källkod till ett tidigare tillstånd om det behövs men även för att spåra förändringar som skett över en viss tid. Centralkatalogen används inte bara för att lagra och arkivera källkod utan används även för att lagra andra artefakter så som kundsanteckningar, designskisser, dokumentation och liknande. 2. Continuous Integration server CI-servern pollar källkodskontroll-systemet med ett jämnt intervall för att upptäcka förändringar (tittar om en ny revision har lagts in). När en förändring upptäckts kan CI-servern hämta hem kodbasen på nytt och t.ex. trigga ett nytt bygge och köra enhetstest. CI-servern samordnar även de övriga stegen i CI-processen. Sida | 8 3. Bygghanterare (eng. build manager) Verktyget hanterar själva kompileringen och bygge av källkod och övriga projektfiler. Vissa projekt implementeras kanske för olika plattformar eller olika inställningar för kompilatorn. Build managern sköter detta arbetet och ser till att rätt kompilator används för att kompilera källkoden. Efter kompilering kan binärfilerna användas för olika syften t.ex. paketeras och distribueras eller testas dynamiskt, dvs. systemet testas under körtid till skillnad från statiska test där man läser av källkoden för att hitta fel. 4. Enhetstest (eng. unit testing) Detta verktyg kör enhetstester som utvecklarteamet skriver för sin applikation. När testerna genomförts genereras resultatdata som brukar sparas i loggar (t.ex. XMLformat) eller i textfiler. Loggarna kan sedan avläsas av CI-systemet varefter olika åtgärder kan vidtas beroende på huruvida testerna lyckades eller misslyckades. 5. Återkopplingsmekanism (eng. feedback mechanism) Utvecklare vill ofta hålla sig uppdaterade om huruvida deras senaste incheckningar av källkoden gick igenom tester och byggdes korrekt. Detta är speciellt viktigt om utvecklarens incheckning resulterade i ett misslyckat bygge, då måste detta misstag åtgärdas så fort som möjligt för att kodbasen ska återgå till ett stabilt läge. Utvecklare blir ofta meddelade om misslyckade byggen genom en feedbackmekanism, där dem får feedback via en rad olika kommunikationskanaler så som t.ex. email, SMS, IM, dashboard. 2.3.2 CI arbetsflöde Fig. 4: arbetsflöde för CI-system[23] Sida | 9 CI-processen börjar med att en build server i CI-systemet hämtar den senaste revisionen från ett versionshanteringssystem när den upptäcker att en ny revision lagts in [22, s. 97]. CI-systemet kommer sedan att köra fördefinierade skript som anger hur den hämtade källkoden ska byggas och övriga konfigurationer kring bygget. När applikationen har byggts enligt skriptet körs relevanta automatiserade tester. De flesta CI-systemmjukvaror inkluderar ett webbinterface som visar en lista över byggen som kör och möjliggör en insikt för utvecklare i byggprocessen och avläsning. Här kan utvecklare se om deras revision av källkoden är stabil eller om något gick fel på vägen. Denna process avslutas i produktion och lagring av resulterande artefakterna såsom binärfiler eller installationspaket och distribueras så att testare och kunder enkelt kan hämta den mest uppdaterade och stabila versionen av applikationen. De allra flesta CI-system kan konfigureras med hjälp av ett webbgränssnitt eller via terminalkommandon samt skript. 2.4 För- och nackdelar med CI-system Det finns flera fördelar och nackdelar med CI-system. Vi har genom rapporten främst belyst fördelar med CI-system som möjliggör effektivisering av olika arbetsprocesser för systemutvecklare. I följande avsnitt vill vi sammanfatta dessa fördelar men även gå in på några fördelar med CI-system som inte nämns lika ofta. Även om vi i vår studie vill anföra argument för varför CI-system kan vara gynnsamma för vissa situationer måste vi givetvis även vara objektiva och opartiska i vår bedömning, därför kommer vi även redogöra nackdelar med att använda sig av CI-system, främst de organisatoriska svårigheter som kan uppstå då utvecklare överger vissa rutiner och arbetsmetoder för att tillämpa continuous integration med hjälp av CI-system. 2.4.1 Fördelar med CI-system CI-system har många fördelar [33, 41, 49-50] och vi har nämnt de flesta i olika avsnitt av rapporten. Nedan anger vi och sammanfattar några fördelar som vi tycker är extra viktiga men även fördelar som inte ofta brukar nämnas i sammanhang där man diskuterar CIsystem: ● Smidigare integration av ny kod. Utvecklare undviker långa integrationsfaser i utvecklingsprocessen genom att dela upp arbetsuppgiften i små delar som oftare kan integreras in i kodbasen. ● Automatisering av bygg-, testning- och distributions-processer. ● Hjälper till att skapa CRISP (Complete, Repeatable, Informative, Schedulable, Portable) byggen av systemet som är under utveckling via CI-systemet. Med CRISP menar vi: o Complete - Bygget av systemet ska kunna ske på en “ren maskin” och utan att utvecklaren ska behöva utföra en manuell rutin som kan medföra mänskliga fel, med andra ord ska bygget av systemet ske med ett knapptryck och utföras på ett maskinellt och automatiserat sätt. o Repeatable - Bygget av systemet ska vara repeterbart, dvs. det resultat som skapas när kompilatorn och övriga behandlingsverktyg bearbetat källkod ska inte ändras över tiden och inte bero på “yttre faktorer” och verktyg, CISida | 10 ● ● ● ● systemet ska förses med all inmatning inkl. byggskript i centralkatalogen där hela kodbasen ligger. o Informative - Om något går fel i bygget av systemet så ska man snabbt kunna fixa dessa fel. Detta kan man endast göra om man har ett CI-system som utförligt loggar olika händelser och statistik. Med hjälp av dessa loggar kan man snabbt se var fel inträffade. Det är viktigt att man har mekanismer som tidigt kan spåra oväntade förändringar eller beteenden för systemet som utvecklas. o Schedulable -Utvecklare ska kunna schemalägga byggen, det ska inte behövas manuella utlösare för att köra byggen. o Portable - Systemet ska kunna byggas från vilken arbetsstation som helst, oavsett vilken plattform och operativsystem körs. Detta kan ske via CI-system och man bör därför förlita sig på CI-systemet för att byggen istället för att utföra det på enskilda arbetsstationer. Snabbare och enklare att hitta fel och fixa buggar, både semantiska och syntaktiska fel men även kodningskonventioner kan upprätthållas via CI-system. Bättre översikt över projektet och fortskridande. Detta ökar förtroende mellan utvecklarna men även mellan kunden och slutanvändare som kan se fortskridandet av projektet mer kontinuerligt. Generera distributionspaket när som helst, då kodbasen alltid förväntas vara stabil (fixas inom en kort tidsram om så inte är fallet). Distributionspaketet kan även genereras från vilken arbetsstation som helst då det är CI-systemet som sköter detta och inte enskilda arbetsstationer vars miljöer kan skiljas åt. Detta anknyter till föregående punkt då utvecklare kan förse kunden med distributionspaket i utvärderings- eller demonstrationssyfte mer kontinuerligt under projektets gång. Snabb återkoppling och rapportering när fel inträffar. Utvecklaren som har gjort fel är snabbt underrättad om fel som finns och kan åtgärda dessa fel så att medarbetare som ska fortsätta med arbetet inte använder sig av icke-fungerande kod eller artefakter. 2.4.2 Nackdelar med CI-system Det är givetvis inte bara intressant att titta på vilka fördelar ett CI-system har men även vilka nackdelar som finns och hur mycket tid och resurser som måste läggas ner för att komma igång och tillämpa CI-system på en industriell nivå. Det är rätt svårt att få fram information kring detta eftersom de allra flesta källor som beskriver CI-system argumenterar för användningen av CI-system snarare än emot. Dock har vi hittat information kring nackdelar med CI-system och vilka svårigheter som kan uppstå när man försöker använda sig av CIsystem inom olika verksamheter [33, 49]. ● Det tar tid att ställa upp och komma igång med CI-system. Detta fenomen inträffar när man omstrukturerar eller ska tillämpa nya rutiner på arbetsplatsen i alla möjliga sammanhang, inte bara när CI-system ska introduceras. Oavsett vilken rutin som ska ändras så finns det alltid en “förlust av tid” när man introducerar något nytt. Det tar inte bara tid att ställa upp ett CI-system, man måste även ha kompetens och förhoppningsvis tidigare erfarenhet av att ställa upp CI-system för att det ska gå så smidigt som möjligt. Sida | 11 ● Det krävs välutvecklade tester (t.ex. enhetstester och integrationstester) för att ta del av fördelarna med automatisering. Liksom föregående punkt kan det ta ett tag innan utvecklare skiftar från att skriva mjukvara som kan kompileras (men som kanske ändå innehåller fel) till ett testdrivet tillvägagångssätt där man först utvecklar en testsvit (eng. test suite) för att sedan påbörja implementationen av systemet. ● Frekventa förändringar i kodbasen kan skapa ett tillstånd av förvirring för utvecklare. Detta är kanske mer vanligt för utvecklare som tidigare inte arbetat med CI-system. Denna nackdel är dock mer pga. dålig inlärd rutin eller praxis snarare än en direkt nackdel eller motargument för att använda CI-system. Ett sätt att motverka denna nackdel är att utbilda utvecklare (kanske via en snabbkurs i hur man använder CIsystem) och inge förtroende samt förklara hur det nya arbetsflödet kommer att se ut då utvecklare som arbetat med vattenfallsmodellen är mer vana att jobba med större moduler över längre tid istället för att dela upp arbetet i mindre arbetspaket. ● Ett bra CI-system betyder höga kostnader gällande mjukvara och hårdvara. Detta kan vara ett problem för verksamheter som inte har en budget att investera i ytterligare resurser. Kostnaderna omfattar inte endast köp av mjukvara och hårdvara, det finns ytterligare kostnader som tillkommer när man t.ex. måste reparera servrar eller uppdatera mjukvaran. Problem kan även uppstå om man upptäcker att ett visst mjukvarupaket inte uppfyller de krav som man ställer på sina utvecklingsverktyg och man måste då migrera till och anpassa en annan lösning. Ovan har vi listat en rad olika nackdelar. Att hitta integrationsfel och buggar tidigt i utvecklingsprocessen sparar både tid och pengar över livslängden på ett projekt [49]. Därför vill vi påstå att fördelarna med att använda sig av ett CI-system uppväger nackdelarna som man stöter på när man först börjar använda sig av ett CI-system. 2.5 Continuous Integration bästa praxis För att ge en mer handfast bild av hur CI-processen kan och bör användas och hur CI-system kan upprätthålla CI-processen samt en rad olika fördelar mjukvaruutvecklare kan dra nytta av om de tillämpar CI, kommer de 10 bästa CI tillämpningarna enligt Martin Fowler att presenteras nedan: [5] 1. Utvecklingsteamet bör använda sig av en gemensam centralkatalog 2. Automatisera bygget 3. Se till att bygget innehåller automatiska tester 4. Utvecklare uppmanas att ofta checka in till kodbasen 5. Varje incheckning bör trigga en build som ligger på utvecklarens ansvar 6. Se till att bygget är optimerat och kan göras på under 10 minuter 7. Utför tester i en kopia av produktionsmiljön 8. Tillgängliggör exekverbara filer (prototyper/demo) för intressenter 9. Se till att hela utvecklingsteamet har koll på läget 10. Automatisera paketering och distribution av mjukvara Sida | 12 3. Metod I detta avsnitt går vi igenom hur vi löste olika delproblem under examensarbetet. För att kunna introducera ett CI-system vetenskapligt krävs det en hel del kunskap om ämnet. Vi började vår studie med att söka och samla in information kring ämnet på nätet. Då hade vi ingen aning om vad CI-system handlar om. Därefter genomförde vi en problemformulering där vi förklarade och avgränsade vår frågeställning. Strukturen på examensarbetet och indelningen av delproblem fick vi fram under förstudien som innehöll bl.a. litteraturstudier och tekniska lösningar till problemet (se bilaga 5). Då fördjupade vi oss i ämnet genom att läsa flera böcker och vetenskapliga artiklar som handlar om problemområdet. För att underbygga den slutsats som vi slutligen kom fram till och för att få svar på vår frågeställning utförde vi både en litteraturundersökning (avsnitt 3.1) och en marknadsundersökning (avsnitt 3.3). Svarsdatan från dessa undersökningar kunde vi senare jämföra och korrelatera. Slutligen, för att kunna verifiera en aspekt av vår slutsats och demonstrera en praktisk artefakt i examensarbetet så ställde vi upp ett CI-system (avsnitt 3.5.2) och övrig infrastruktur för att demonstrera hur CI-system kan användas, men även ett användbarhetstest (avsnitt 3.5.3) för att utöka omfattningen av det praktiska momentet. Under tiden som vi utförde samtliga delar arbetade vi även med kursmaterial (avsnitt 3.5.1) på uppdrag av vår externa handledare. Processen som vi använde följer stegen som Saunders, Lewis & Thornhill beskriver i [24]. Stegen förklaras tydligare enligt bilden nedan. Fig. 5: Research process I följande avsnitt förklarar vi hur vi har utfört de olika stegen. Sida | 13 3.1 Litteraturundersökning För att kunna beskriva CI och dess minimala krav i produktutvecklingscykeln krävs det erfarenhet och kunskap om den aktuella byggprocessen och olika CI komponenter. Därför valde vi att avgränsa oss och genomföra en litteraturundersökning (se bilaga 3) på CIsystem. Syftet med litteraturundersökningen var att samla information och fakta om CIsystem, förstå hur CI-system fungerar och undersöka om det är möjligt att definiera minimumkrav som CI-system måste uppfyllas för att vara tillfredsställande för ett utvecklingsteam. 3.1.1 Utförande av litteraturundersökning Vi beslutade oss för att presentera och formellt ställa upp litteraturundersökningen i en matris där kopplingar mellan referenser och funktionella samt icke-funktionella krav listas. Populära CI-servrar mjukvaror listades även här (se bilaga 3). För att fastställa vilka funktionella och icke-funktionella krav som vi letar efter i litteraturen tillgick vi mötesprotokoll och anteckningar från diskussioner med våra handledare. Vi sökte även efter en sammanfattning av vanliga icke-funktionella krav för olika typer av system [25-28]. Den litteratur som vi sedan gick igenom med hjälp av ovan nämnda funktionella och ickefunktionella krav bestod av yrkeskunskap i form av webbartiklar och bloggar, böcker utgivna av författare som är verksamma inom mjukvaruutveckling med CI-system och vetenskapliga artiklar som har en högre nivå av relevans för vår studie [2, 5, 7, 9-16, 29-35]. 3.2 Undersökningsmetod Som undersökningsmetod valde vi SES metoden enligt John W. Creswell [36]. Sequential Exploratory Strategy (SES) är en två-fas metod med prioritet på den första fasen. Under den inledande fasen samlar man in och analyserar kvalitativ data. Därefter övergår man till nästa fas och kategoriserar de kvantitativa data, man använder sig alltså av kvantitativ data för att förstå sig på de kvalitativa data. Slutligen integrerar man slutsatser som man fått fram från båda faserna i en “tolkningsfas”. Metoden är enkel att tillämpa och använda sig av i olika formuleringar, dess utformning gör den även lämpad för en tydlig beskrivning av hur man behandlat datan. Metoden är väl lämpad för forskning kring ett fenomen, särskilt om man vill utforska de kvalitativa resultaten från den första fasen [36]. Eftersom vi i vår studie kommer att utforska CI-system och dess minimala krav, där vi är särskilt intresserade av kvalitativ data anser vi att SES-metoden är att föredra. Sida | 14 3.3 Datainsamling och analys Under denna studie genomfördes en marknadsundersökning mha en webbaserad enkät, för att på ett effektivt sätt samla in data från en stor grupp människor om vårt ämne. Via enkäten som utfördes kunde vi få fram data som vi ville komma fram till om CI-system och dess minimala krav. En enkätundersökning är ett flexibelt medium som kan mäta attityder, kunskaper, preferenser, osv [37]. När man gör en enkätundersökning så är det viktigt att man formulerar enkätfrågorna noggrant så att man verkligen får den svarsdata som är relevant för studien. Frågorna ska vara tydliga och kortfattade samt de ska inte vara ledande i sin karaktär [38]. Enkäten innehåller 19 frågor av olika typer och tar cirka 5 minuter att fylla på. Den är riktad till företag och utvecklare som använder sig av CI-system inom olika organisationer av olika storlekar i ett flertal länder. Enkätundersökningsfrågorna presenteras i bilaga 2. Enligt Saunders, Lewis och Thornhill [24] finns det olika tekniker för att samla in och analysera data som man fått ifrån en undersökning. De vanligaste datainsamlingstekniker är kvalitativ och kvantitativ tekniker. Man kan skilja mellan de två teknikerna när man behandlar numeriska eller icke-numeriska uppgifter. ● Kvalitativ datainsamling används för det mesta vid frågor eller dataanalytiska förfaranden där man bara intresserad av att kategorisera data som ger eller använder sig ut av icke-numerisk data så som text, bilder och även videoklipp. I vår enkätundersökning har vi använt den kvalitativa tekniken för att undersöka och samla in data för funktionella och icke-funktionella krav för CI-system på vissa frågor t.ex. fråga 1, 3, 5-8, 11-19. (se bilaga 2) ● Kvantitativ datainsamling används däremot oftast vid frågor eller dataanalytiska förfaranden där man är intresserad av att visualisera data i grafer och statistik som ger eller använder sig utav numerisk data. I enkätundersökning har vi också använt den kvantitativa tekniken för att undersöka och samla in data för funktionella och icke-funktionella krav för CI-system på vissa frågor t.ex. fråga 2, 4, 9-10. (se bilaga 2) För att klargöra de kvalitativa resultaten som vi fick från enkätfrågorna omvandlade vi kvalitativa data till numerisk data och statistik i form av grafer. Vi kombinerade både kvalitativa och kvantitativa tekniker för att kunna presentera resultaten på ett bättre sätt. Därför ska vi enligt Creswell [36] kunna använda mixed methods i denna typ av studie. Mixed methods är metoder som enligt Saunders, M., Lewis, P. och Thornhill, A. [24] kombinerar både kvantitativa och kvalitativa datainsamlingstekniker och analysförfaranden. Detta innebär att man kan ta kvantitativa uppgifter och omvandla dem till vanlig text som kan analyseras kvalitativt. Eller så kan man omvandla sina kvalitativa data till numerisk data, så att dem kan analyseras kvantitativt precis som vi gjorde i fråga 3, 5-8, 11-19 när vi tog utdatan från textfrågorna (kvalitativa data) som vi kom fram till via enkäten och presenterade detta via diagram för att tydligare åskådliggöra resultaten. Sida | 15 3.3.1 Utförande av marknadsundersökning För att genomföra en marknadsundersökning valde vi att utföra en webbaserad enkät. [37] Enkäten genomfördes med hjälp av Google Docs Forms (se bilaga 2). Anledningen till vårt val av Google Docs Forms var att det är lätt och använda, gratis, och att det inte finns någon övre gräns för hur många frågor man kan ställa upp på enkäten som SurveyMonkey har. Enkäten utformades enligt strikta riktlinjer [36], vi kunde därför försäkra oss om att vi fick ut användbara svar från marknadsundersökningen till vår studie. Enkäten innehåller 19 frågor av olika typer och tar cirka 5 minuter att fylla i. Den är riktad till företag och utvecklare som använder sig av CI-system inom olika organisationer av olika storlekar. I början tänkte vi ta kontakt med företag som jobbar med CI-system inom Sverige och skickade då enkäten till flera företag som jobbar med CI-system i hela landet, men de flesta företag som tillfrågades avböjde att delta i vår studie. Därefter vände vi oss till sociala media såsom Facebook, LinkedIn, Twitter och vi kontaktade företagare och utvecklare som sysslar med CI-system. Enkäten innefattade frågor av olika typer [38] bl.a. flersvarsfrågor som kan sägas vara kvantitativa och öppna frågor som kan sägas vara kvalitativa. Meningen med detta var att ge utvecklare möjlighet att uttrycka sig själva i sina egna ord och få en bättre förståelse för hur utvecklare identifierar och definierar minimala krav för CI-system. I slutändan besvarades enkäten av 39 aktörer av de ca 300 aktörer som tillfrågades att delta, vilket innebär att svarsfrekvensen var ca 13%. För att samla in och analysera data med hjälp av enkätundersökning använde vi oss ut av kvalitativ datainsamlingsteknik för följande frågor: 1, 3, 5-8, 11-19. För återstående frågor använde vi kvantitativ datainsamlingsteknik [24]. Erhållna data ifrån enkätundersökningen behandlades med hjälp av MS Excel och visualiserades i olika typ av diagram (se avsnitt 4.2), för att lättare kunna visa svaren och enklare kunna dra slutsatser av inlämnade svar. 3.4 Etiska principer Ett av de stegen i undersökningsprocessen är att diskutera etiska principer. Enligt Staffan Stukát [39] är det viktigt att man tänker på etiska principer när man utför en undersökning. Därför ansåg vi att det var viktigt att ta hänsyn till etiska principer när vi utförde denna studie. De forskningsetiska principer beskrivs av Vetenskapsrådet [40] som följande: Sida | 16 3.4.1 Informationskravet “Forskaren skall informera de av forskningen berörda om den aktuella forskningsuppgiftens syfte” [40]. Vi informerade deltagare om studiens syfte och vilka villkor som gäller när de deltar i studien. Vi var specifika när vi angav att syftet för vår studie var att undersöka krav för CIsystem (se bilaga 2). 3.4.2 Konfidentialitetskravet “Uppgifter om alla i en undersökning ingående personer skall ges största möjliga konfidentialitet och personuppgifterna skall förvaras på ett sådant sätt att obehöriga inte kan ta del av dem” [40]. Vi har under studien angett att deras svar förblir sekretessbelagda och att insamling av uppgifter för denna studie hanteras varsamt för att obehöriga ej ska få tillgång till denna data (se bilaga 2). 3.4.3 Nyttjandekravet “Uppgifter insamlade om enskilda personer får endast användas för forskningsändamål” [40]. I vår studie har vi angett att deltagande i undersökningarna genererar data som endast kommer att användas av för att besvara våra frågeställningar för studien (se bilaga 2). 3.5 Metod för övriga moment Utöver undersökningsprocessen som vi använde oss av har vi även utfört moment i vår studie som inte innefattas av den. Nedan beskriver vi hur vi utfört kursmaterial, uppbyggnad av CI-systemet och genomförandet av tester. 3.5.1 Utförande av kursmaterial Båda delar av kursmaterialet (teoretisk och praktisk) som vi fick fram presenteras i bilaga 1. Vi började först med den teoretiska delen av kursmaterialet genom att söka lämpliga källor och samla in information som behövs för att beskriva continuous integration. Informationen som erhölls kom dels från böcker och vetenskapliga artiklar som vi gick igenom när vi skrev Sida | 17 vår studie och dels från olika webbartiklar på nätet. De flesta källor kunde vi komma fram till via Malmö högskolans databaser (bl.a. ACM Digital library, Google Scholar, IEEE Xplore). Information och anteckningar som vi sammanställde under studien utmynnade till bl.a. kursmaterial i form av 2 omfattande powerpoint-dokument, dessa dokument utgör ett utkast till den kurs som kommer att vidareutvecklas och användas i utbildningssyfte av Edument AB där man både är intresserad av att undervisa i continuous integration men även i hur detta praktiskt kan tillämpas med hjälp av CI-server mjukvaran TeamCity. För att utföra den praktiska delen av kursmaterialet behövde vi därför först och främst komma igång med TeamCity och förstå hur man använder sig av det, innan vi kunde börja beskriva det och presentera i ett powerpoint-dokument. Mer om hur själva uppbyggnaden av CI-systemet TeamCity skedde kan läsas om i nästa avsnitt. Vi kan därför fokusera på själva processen av att få fram den praktiska delen av kursmaterialet i detta avsnitt. Detta var i själva verket en väldigt enkel process, dock tog det ett bra tag att få alla bitar på plats och få fram powerpoint-dokumentet. Vi tog helt enkelt skärmdumpar under olika delar av interaktionen med TeamCity (allt från installation av TeamCity till att köra byggen och tester) och kategoriserade dessa i moduler. Sammanlagt fick vi fram 14 moduler som beskriver hur man kommer igång med att använda TeamCity. Vissa bilder behövde även modifieras (t.ex. förstoras eller att viktiga element i bilden markeras med röda rektanglar eller pilar) så detta skedde i nästa steg. När vi väl hade skärmdumparna på plats så infogades dessa i powerpoint-dokumentet och en bildtext skrevs till för att beskriva vad som sker på skärmdumparna. Även en beskrivande text för varje modul skrevs för att åhöraren ska få en uppfattning om vad som kommer att presenteras. 3.5.2 Uppbyggnaden av CI-systemet För att uppfylla krav som ställs på ingenjörer och ingenjörsverksamhet byggde vi upp ett CIsystem och kravtestade systemet enligt de krav som fåtts fram av tidigare nämnda undersökningar. Vi använde oss under detta moment av CI-mjukvaran “TeamCity” [8] för att uppfylla vår externa handledares krav. Vi avgränsade oss till uppbyggnad och kravtest av endast ett CI-system pga. omfattningen av examensarbetet. Vi valde TeamCity eftersom just detta CI-system är av intresse för vår externa handledare. Eftersom vi har interna krav på att utföra ett praktiskt moment och ett externt krav att producera kursmaterial som består av en praktisk del där vi går in på hur man kommer igång med en TeamCity-server var detta ett lämpligt val. IT-supporten på Malmö högskola försåg oss med en dator som vi kunde använda som CIsystem server. Serverns systemspecifikationer beskrivs i bilaga 9. Sida | 18 Till att börja med installerade vi TeamCity (se bilaga 1 för en utförlig beskrivning om hur man kommer igång med TeamCity). TeamCity lagrar loggar och annat i en databas, därför installerade vi även XAMPP för att kunna köra en MySQL databas. Sedan installerade vi IDE:n Eclipse Luna för att skapa ett enkelt Java-projekt som vi kan bygga och testa i TeamCity, detta projekt är alltså skapat i demonstrationssyfte och har ingen annan praktisk tillämpning. Vi installerade även Apache Ant för att skriva ett byggskript som bygger projektet lokalt, detta skript måste sedan skickas med till TeamCity så att CI-systemet vet hur den ska bygga källkoden i projektet. Sedan skrev vi även enhetstester för projektet i JUnit via Eclipse. När Java-projektet var färdigt (se bilaga 8) så satte vi upp ett VCS (version control system) i Google Code och använde oss då av Subversion (se bilaga 1 för en beskrivning i hur detta skedde). Subversion centralkatalogen kan hittas här: https://code.google.com/p/ci-research-teamcity-test-project/. Vi använde TortoiseSVN som ett grafiskt gränssnitt för att checka in nya revisioner av kodbasen till Subversion centralkatalogen. Vid detta laget hade vi alla bitarna på plats och då var det bara att få TeamCity att hämta den senaste revisionen av kodbasen som vi lagt upp på Google Code Subversion och kompilera koden samt köra enhetstester (även detta beskrivs mer utförligt i bilaga 1). 3.5.3 Utförandet av användbarhetstest och behandling av svarsdata Av både litteraturundersökningen och marknadsundersökningen framgår det att det ickefunktionella kravet användbarhet är ett av de viktigaste kraven som måste uppfyllas i ett CIsystem. Efter diskussioner med vår interna handledare kom vi därför fram till att det vore intressant att ta reda på om TeamCity uppfyller krav gällande användbarhet. Dessutom är detta ett sätt för oss att validera de slutsatser som vi har kommit fram till genom undersökningarna. Vi började med att diskutera vilken målgrupp vi ska rikta oss mot. Likt marknadsundersökningen var vi mest intresserade att titta på huruvida yrkesverksamma individer som haft erfarenhet av CI-system anser att TeamCity är användbart eller ej. När vi fastställt målgruppen så utformade vi textmallar där vi informerar inbjudna individer och företag om hur de kan anmäla sitt intresse och vi skickade ut dessa inbjudningar främst via LinkedIn där vi bjöd in mer än 400 individer och företag. Eftersom användbarhetstestet ej kan utföras obevakat, till skillnad från t.ex. enkäten för marknadsundersökningen, och eftersom den dessutom tar mellan 30-50 minuter att utföra krävdes en del arbete med bokföring och schemaläggning av intresserade testkandidater. Vi erbjöd även de intresserade att anmäla sitt intresse både via mail och via Doodle.com, vår schemaläggningssida kan hittas här: http://doodle.com/mupeaxexh6ccug43. I olika sammanhang kan man använda sig av ett godtyckligt antal testare för att fastställa om krav för ett system är uppfyllt eller ej. För vårt användbarhetstest bestämde vi oss för att Sida | 19 ha 5 testsessioner med deltagare som har tidigare erfarenhet av CI-system men ej använt TeamCity. Vi ville även ha 1-5 deltagare som tidigare använt TeamCity, dessa deltagare kan då placeras i en kontrollgrupp där vi kan jämföra resultat mellan testgruppen och kontrollgruppen. Dessutom kan kontrollgruppens resultat användas som måttstock när vi fastställer kriterier och gränsvärden för svarsdatan och bestämmer om dessa påvisar att CIsystemet är användbart eller ej. Efter att ha genomgått testsessioner och inbjudningar under 2 veckors tid hade vi svarsdata från 5 deltagare i testgruppen (som ej använt TeamCity tidigare) och 1 deltagare i kontrollgruppen. Vi hoppades få in lite fler deltagare i kontrollgruppen men just pga. omfattningen och tiden som individer måste lägga ner för att genomföra detta test (30-50 min plus bokning och mail-korrespondens) men även faktumet att vi utförde testerna utan en budget (diskuteras närmare i avsnitt 6.2 “förbättringar”) innebar att vi inom denna tidsram inte fick in fler testsession. Trots detta anser vi att momentet är lyckat då vi i första hand ville få in 5 deltagare i testgruppen, vilket vi lyckades med. För att ställa upp en miljö där vi kan utföra användbarhetstest fanns det en del saker att tänka på. För det första bestämde vi oss för att utomstående klienter (deltagaren) skulle koppla upp sig mot vår CI-server som körs på Malmö Högskola. När klienten väl var uppkopplad så försågs hon med användarenkäten och interfacet till TeamCity som båda körs via webbläsaren. Inloggning till TeamCity, förberedelse inför testsession och tillgång till användarenkäten sköttes alltså av oss innan klienten/testaren anslöt sig. Vi använde oss av TeamViewer för att förse en uppkopplingslänk mellan CI-system servern och testaren. Det fanns flera skäl till att vi valde just TeamViewer istället för t.ex. VNC eller andra verktyg. För det första så ville vi ha en säker uppkoppling där vi som värd snabbt kan koppla ifrån eller begränsa interaktion och tillgång till CI-system servern om det under testets gång visar sig att testaren interagerar med servern utanför testets ramar. Då kan testaren snabbt kopplas från och nekas en ny uppkoppling. Sedan har TeamViewer stöd för att spela in testsessioner vilket var önskvärt. Detta innebär att vi inte måste belasta servern med ytterligare program som körs under testsessionen. Mer diskussion kring TeamViewer och dess fördelar och nackdelar i avsnitt 6.2 “förbättringar”. Det sista delmomentet i utförandet av användbarhetstesterna var efterbehandlingen av svarsdatan från testsessionerna. Som tidigare nämnt så fylldes en del svarsdata in i testformuläret via användarenkäten och en del efter kontroll av inspelade test sessioner. Arbetsflödet för behandling och beräkning av “task time” förbättrades under delmomentets gång där vi till en början utförde aritmetiska beräkningar manuellt men sedan tillämpade automatiska och mer precisa beräkningar via spreadsheet-mjukvara så som MS Excel, OpenOffice Spreadsheet och Google Docs Spreadsheet. Vi använde oss av bl.a. http://www.grun1.com/utils/timeDiff.cfm för att dubbelkolla beräkningar och kunde på så sätt snabbt hitta fel som uppstod pga. manuella beräkningar i det tidiga skedet. Den behandlade svarsdatan redogörs grafiskt i form av diagram i avsnitt 4.4.6. Sida | 20 4. Resultat och analys I detta avsnitt redogör vi resultat som vi fått fram genom våra undersökningar samt analyserar resultatdatan. Vi definierar även olika begrepp och förklarar koncept som vi lärt oss om i samband med detta arbete som är specifikt för vårt sätt att betrakta CI-system utifrån krav. Vi redogör både funktionella och icke-funktionella krav för CI-system i avsnitt 4.1 samt redogör för hur man ställer upp krav för system och hur man sen kan kravtesta och utvärdera system utifrån uppställda krav. I avsnitt 4.2 redovisar vi resultat från marknadsundersökningen som vi utförde och i avsnitt 4.3 redovisar vi resultat från litteraturundersökningen. I avsnitt 4.4 förklarar vi hur man utför användbarhetstestning enligt vedertagna tekniker samt hur vi själva tillämpat den föreslagna tekniken för vårt eget syfte. Slutligen redogör vi resultatet från vår användbarhetstestning. 4.1 Krav för ett CI-system Systemkrav är de krav som ställs på mjukvaran och anger vilka avvägningar man gör t.ex. mellan olika icke-funktionella krav som oftast är ömsesidigt uteslutande, exempelvis kan en applikation skrivas på ett tydligare sätt för att senare kunna underhållas till förlust av prestanda och resurseffektivitet. I systemkrav anges även vilka funktionella krav som ligger i fokus, dvs. vad applikationen ska kunna utföra för tjänst i huvudsak. Kraven som ställs på mjukvara kan kategoriseras enligt funktionella och icke-funktionella krav [17]. 4.1.1 Funktionella krav Funktionella krav för ett CI-system beskriver vad systemet ska göra. Här kommer några exempel på funktionella krav för ett CI-system [5, 7, 30, 32, 41]: ● Kodhantering (eng. code management): Hantering av ändringarna i källkod och möjliggörandet av att återvända till äldre versionen och tillstånd av applikationen vid behov. ● Kompilering/bygge av källkod (eng. compiling/building source code): Kompilering av källkod via CI-systemet. ● Testning: Olika typer av tester ska kunna utföras via CI-systemet. Det finns olika sätt att kvalitetssäkra källkod, bl.a. via statisk analys, enhetstest, stresstest och integrationstest samt systemtest. ● Återkoppling (eng. feedback/notification): Utvecklare som checkat in kod måste på något sätt bli underrättade om CI-systemet upptäcker fel i den incheckade koden. Detta kan ske via exempelvis email, dashboard/WUI (eng. web-based user interface, dvs. webbaserat användargränssnitt), SMS eller IM (eng. instant messaging). Vissa projektgrupper använder sig av andra sätt att notifiera gruppmedlemmar om att kodbasen är i ett brutet tillstånd, därför är det bra om CI-systemet tillåter administratören att konfigurera återkopplingen till en hög grad. ● Distribution (eng. deployment): Källkod som kompilerats och testats kommer vid en viss tidpunkt under projektets gång att behöva distribueras till slutanvändare och övriga intressenter (eng. stakeholder). Detta kan automatiseras via CI-system som skapar jar-filer, tar-filer eller paketerar körbar mjukvara i en så kallad “installer”, dessa utdelningsbara (eng. distributable) filer kan sedan delas ut till intressenter. Sida | 21 ● Administration: Hantering av användare och användargrupper med en lista över privilegier som kan tilldelas till dessa. ● Byggserverhantering (eng. build agent management): Hantering av byggservrar som utför centrala funktionaliteter för CI-system. En byggserver är en enhet som utför själva arbetet som ett CI-system delegerar till enheten, t.ex. kompilering av källkod och testning av kod. Byggservrar kan hanteras och ställas in med olika prioriteringsnivåer för byggen och utlösare (eng. triggers). ● Resurshantering (eng. resource management): Kontroll över diskanvändning, komprimering, lagring, säkerhetskopiering av data och övervakning av resursanvändning och tillståndet av CI-systemet. 4.1.2 Icke-Funktionella krav Icke-funktionella krav för ett CI-system beskriver hur systemet ska utföra funktioner. Här kommer några exempel på icke-funktionella krav för ett CI-system [17, 25-28, 42]: ● Prestanda (eng. performance): Prestanda är ett mått på hur snabbt ett CI-system agerar när det utför ett visst arbete. Exempel på olika typer av arbeten är uppstart av CI-systemet eller större moduler, återhämtning från fel, kommunikation med utomstående komponenter, bearbetning av anrop (eng. queries), stabil användning av GUI:t och byggning av källkod för projekt. ● Användbarhet (eng. usability): Användbarhet för ett CI-system avser huruvida god eller dålig interaktionen mellan användare och systemet är, alltså hur lätt det är att använda sig av systemet som användare. Ett användbart CI-system är ett system som stödjer användarens inlärningsprocess och gör det lätt för användaren att vänja sig vid gränssnittet och använda den på ett effektivt sätt, t.ex. kan detta göras genom att följa en standard för var vissa knappar ska ligga och användas, användaren kan då intuitivt lära sig använda CI-systemet eftersom GUI:t liknar många andra system. Ett användbart system ökar också feltolerans (dvs. det är svårt att begå kritiska fel som påverkar större delar av systemet och inte går att ångra). ● Utbyggbarhet (eng. extensibility): Ett CI-system ska vara lätt att utvidga och modifiera. Utvecklare av CI-system måste därför se till att tillgodose ett gränssnitt eller API för tredjepartsutvecklare så att CI-systemet kan modifieras men så att denna modifikation ej påverkar CI-systemets robusthet på ett negativt sätt. ● Tillförlitlighet (eng. reliability): Ett tillförlitligt CI-system har förmågan att kontinuerligt utföra funktioner, uppgifter och vara tillgänglig för att utföra diverse tjänster på begäran av klienter eller användare. Detta ska kunna ske under en längre tid utan avsevärda försämringar eller fel som uppstår pga. att systemet hålls i drift. Dessutom ska systemet vara funktionellt även om delsystem eller beroende komponenter (eng. dependencies) fallerar. ● Stabilitet (eng. stability): Med stabilitet menar man CI-systemets förmåga att vara robust under en längre tid av användning men även att modifiering av systemets periferi- och kärnkomponenter inte ska påverka systemets prestanda. ● Tillgänglighet (eng. availability): Ett CI-system som är tillgängligt är ett system som kan interagera med klienter eller användare under en längre tid och har en låg stilleståndstid (eng. downtime). Ett CI-system med hög drifttid (eng. uptime) är tillgängligt och möjliggör användare att få tillgång till information eller resurser på Sida | 22 begäran. Med tillgänglighet menas även om ett CI-system endast kan nås från en viss plats (inom ett visst nätverk) eller om det kan nås via internet. ● Skalbarhet (eng. scalability): Skalbarhet är en egenskap hos ett CI-system som beskriver dess förmåga att hantera och prestera under en ökad eller växande arbetsbörda. Exempelvis kan skalbarhet syfta på förmågan hos ett CI-system att öka sin prestanda och bearbeta en viss arbetsbörda snabbare när man utökar resurserna som CI-systemet har att tillvarata. Detta kan antingen göras genom att byta ut gamla eller slitna komponenter mot nya för en centraliserad server (t.ex. lägga till RAMminne eller installera ett bättre CPU), eller att använda sig av decentraliserad bearbetning av arbetsbördan, dvs. en fördelning av arbetsbördan (eng. load balancing). ● Återhämtning (eng. recoverability): Ett CI-system med en fungerande återhämtningsförmåga kan återställas till ett fungerande tillstånd om ett kritiskt fel skulle inträffa. Systemet måste ha en förmåga att säkerhetskopiera och utföra vissa uppgifter på ett tillförlitligt sätt och utan att orsaka kostnadsförluster. ● Effektivitet (eng. efficiency): Ett effektivt CI-system använder resurser på ett effektivt sätt, dvs. en överanvändning av resurser sker inte relativt med den arbetsbördan som tilldelats till systemet. Systemet har en förmåga att bl.a. tilldela minne till olika processer, fördela processorkraft mellan olika processer och att förbruka ström på ett effektivt sätt. 4.1.3 Hur ställer man upp krav för system? Under kravhanteringsprocess “eng. requirements engineering process“ kan olika tekniker användas för att hjälpa utvecklare att ställa upp krav för ett system. Några av de tekniker beskrivs av [17, s. 100-107] som följande: 1. Krav upptäckt (eng. requirements discovery): är en process för att samla in information om ett befintligt system, för att sedan kunna avgöra vilken målgrupp av användare som kommer att använda systemet och vilka krav som ställs på systemet enligt denna information. 2. Intervjuer (eng. interviewing): där utvecklare ställer frågor till systemanvändare kring deras system som kommer utvecklas. 3. Scenario (eng. scenarios): är en berättelse som beskriver på vilket sätt systemet kommer användas. 4. Användningsfall (eng. use cases): där systemet beskrivs med hjälp av flera grafiska modeller som UML-sekvens eller statiska diagram. Med andra ord, identifieras alla aktörer som kommer att interagera med systemet och deras roll i interaktionen beskrivs grafiskt. I vår studie har vi följt en undersökningsprocess (avsnitt 3), vi utförde en enkätundersökning (se avsnitt 3.1) där vi ställde några frågor kring CI-system till utvecklare och företagare som använder sig av CI-system för att samla in information kring krav för CI-system och vi skrev ett användbarhetsscenario (se avsnitt 4.4.4). Vi har således använt oss av “requirement discovery”, “interviewing” och “scenarios” teknikerna. Sida | 23 4.1.4 Kravtest och utvärdering Det finns ett antal kravvalideringstekniker som kan användas för sig eller i kombination med varandra [17, s. 110], några av dessa beskrivs nedan: 1. Kravrecensioner (eng. requirements reviews). 2. Test-case generation. 3. Prototyping: Här demonstreras en körbar modell av systemet till slutanvändare (utvecklare, kunder) så att de kan experimentera med modellen för att se om den uppfyller deras verkliga krav samt identifiera eventuella problem och planera möjliga lösningar. Enligt E. Folmer, J. Gurp och J. Bosch har användbarhet (eng. usability) blivit en viktig faktor vid utveckling av programvara och har även visat sig vara avgörande för framgången av programvarusystem. Många mjukvaruprojekt har påvisat att programvara som har användbarhetsproblem inte kan anpassas utan större förändringar i programvarukonstruktionen. Att lösa användbarhetsproblem under senare faser av utvecklingsprocessen kostar tid, pengar och förhindrar utvecklare från att uppfylla alla användbarhetskraven vilket resulterar i system med mindre än optimal användbarhet. [43] Vår marknadsundersökning har påvisat att det icke-funktionella kravet användbarhet är ett av de viktigaste kraven som måste uppfyllas i ett CI-system och vi har därför valt att utvärdera CI-systemet TeamCity med avseende på användbarhet. Tekniken som vi har valt för att validera kravet användbarhet är “prototyping” med hjälp avanvändbarhetsscenario som beskrivs i avsnitt 4.4.4. Vi har valt prototyping-tekniken för att den ger användare en möjligt att testa hur väl systemet stödjer deras arbete enligt krav som ställs på systemet. Tekniken hjälper även användaren att få fram nya idéer samt ser till så att man hittar starka och svaga sidor i systemet. Detta kan sedan leda till fastställandet av nya systemkrav. En funktion beskrivs ibland i en systemspecifikation som verkar vara användbar och väl definierad. Men när denna funktion kombineras med andra funktioner, så upptäcker användare ofta att deras ursprungliga uppfattning var felaktig eller ofullständig. [17] 4.2 Resultat från marknadsundersökningen Vår marknadsundersökning bestod av en enkät som innehåller 19 frågor varav 15 flersvarsfrågor och 4 fritextfrågor. Syftet med flersvarfrågorna var delvis att få kvantitativ svarsdata för en enklare behandling och delvis för att underlätta för deltagaren att svara på frågorna. Syftet med fritextfrågorna var att få rikare information och en bättre förståelse för hur utvecklarna identifierar och definierar minimala krav för CI-system dvs. kvalitativ svarsdata. Frågorna skickades via social medier som bl.a. LinkedIn, Twitter och Facebook, och var riktade till företagare och utvecklare som använder sig av CI-system. Resultat som vi fick utav marknadsundersökningen presenteras grafiskt och analyseras nedan. Sida | 24 Analys av fråga 1 Enligt Goodman, Elbaz och [1, 2, 4-6] kom CI-system först till användning inom mjukvaruutveckling men har sen dess även använts i andra typer av verksamheter. För att ta reda på vilka verksamheter som använder sig av CI-system så ställde vi denna fråga. Svarsdatan pekar på att 74% av svarsobjekten anger att de använder sig av CI-system inom en Data/IT verksamhet, 13% Teknologi/Vetenskap, 5% Logistics/Transport och 3% Ekonomi/Finans samt 5% har andra verksamheter. Enligt svarsdatan så används CI-system mest inom Data/IT branschen. Fig. 6: “Type of business” Analys av fråga 2 För att veta hur stor verksamheten är som mest använder sig av CI-system så ställdes denna fråga. Av svaren som vi fick från svarobjekten i enkätundersökningen så kunde vi enligt EUkommissionens [44] definition benämna 21% som små företag där de har mindre än 50 anställda, 29% som medelstora företag som har 50-250 anställda och 50% som stora företag med fler än 250 anställda. Enligt svarsdatan är det huvudsakligen stora företag som använder sig av CI-system. Fig. 7: “Size of the company” Sida | 25 Analys av fråga 3 För att få fram meningsfull svarsdata så försökte vi nå ut till ett stort antal företagare och utvecklare (ca 300) inom teknikbranschen som faktiskt använder sig av CI-system. För att säkerställa att enkäten besvaras av svarsobjekt som sysslar med CI-system ställde vi denna fråga. Svarsdatan påvisar att 97% av de som deltog i undersökningen använder CI-system Fig. 8: “Companies that utilize CI-systems” Analys av fråga 4 Vi ville undersöka hur stor andel av utvecklare i en verksamhet som använder sig av CIsystem. På så sätt kan vi få en uppfattning om CI-system påverkar hela eller endast några delar av arbetsprocessen i verksamheten. Vi har valt en 10% inkrementell ökningsskala vilket innebär att t.ex. svarsalternativ 1 = 10%, 5 = 50%, 10 = 100%. Svarsdatan visar att 41% av svarobjekten har svarat att 100% av andel utvecklare använder sig av CI-system i deras verksamhet. Enligt svarsdatan så påverkar CI-system hela arbetsprocessen hos de flesta verksamheter. Fig. 9: “Percentage of developers that use or are affected by the CI-system” Sida | 26 Analys av fråga 5 Här undersöker vi vilken CI-systemmjukvara som används mest i näringslivet för att senare kunna använda oss av denna data i vår studie. Av de 39 svar som vi mottagit var det 41% som använder Jenkins, 32% använder TeamCity, 5% använder Cruise Control, 5% använder Bamboo, 5% använder Continua CI - FinalBuilder och resten 16% använder andra CIsystemmjukvaror som inte finns med på listan. Alltså enligt svarsdatan så är det Jenkins som är mest känd CI-system ute på marknaden. Fig. 10: “CI-system software that is used in the company” Analys av fråga 6 För att kunna kategorisera främsta fördelarna av CI-system och förstå vad utvecklarna gillar och föredrar i deras system ställdes den frågan. Alltså tyckte de flesta enligt svarsdatan att deras CI-system var lätt att använda. Fig. 11: “Main advantages with your CI-system” Sida | 27 Analys av fråga 7 Här frågade vi deltagarna att välja vad de ogillar i deras CI-system för att kunna kategorisera främsta nackdelarna av CI-system. De flesta anser att deras CI-system inte har några nackdelar. Fig. 12: “Main disadvantages with your CI-system” Analys av fråga 8 Av denna fråga försökte vi ta reda på hur ofta ett CI-system används hos olika verksamheter. Svarsdatan påvisar att CI-system används kontinuerligt hos de flesta verksamheterna. Fig. 13: “Frequency of performing builds” Sida | 28 Analys av fråga 9 För att kunna veta hur lång tid CI-system brukar ta i olika verksamheter för att genomföra ett bygge ställdes denna fråga. Svarsdatan visar att det tar olika tid för olika CI-system i olika verksamheter att genomföra ett bygge på grund av olika faktorer som påverkar CI-system prestanda så som snabb mjukvara och gammal hårdvara … osv. Tiden anges i HH:MM:SS format. Men de flesta som deltog i undersökningen angav att deras CI-system i snitt tar en timme för att genomföra ett bygge. Fig. 14: “Time for your CI-system to build a project” Analys av fråga 10 För att ta reda på om CI-system leder till bättre prestanda och produktionsvärde i en verksamhet [4-6] ställdes denna fråga. Svarsdatan visar att 97% av svarobjekten tycker att verksamhetens prestanda och produktionsvärde har ökat med hjälp av CI-system. Fig. 15: “Company’s performance after using CI-system” Sida | 29 Analys av fråga 11 För att ta reda på vilka huvudsakliga funktionella krav som ett CI-system brukar ha hos de flesta verksamheter ställde vi denna fråga. Frågan besvarades i fritext och vi fick därför ut rik kvalitativ information som behövdes tolkas. Efter tolkning grupperades och kvantifierades svaren. Diagrammet visar att de flesta svarsobjekt har angett: ● compile/build source code ● test ● feedback ● package/deployment Dessa krav kan sägas vara de huvudsakliga funktionella krav som ett CI-system ska uppfylla. Fig. 16: “The basic functional requirements of a CI-system (qualitative sample)” Sida | 30 Analys av fråga 12 För att bekräfta fritextsvaret från fråga 11 gav vi svarsobjekt en möjlighet att besvara samma typ av fråga med hjälp av flersvar. Vi tänkte att bästa sätt att få svar på denna fråga var att låta svarsobjekten göra det åt oss genom att ange de funktionella krav de har för deras CI-system. Svarsdatan visar att de flesta som deltog i undersökningen valde: ● compiling/building source code ● test (unit test, static analysis) ● feedback Dessa kan påstås utgöra de minimala funktionella kraven för CI-system i enligt vår marknadsundersökning. Fig. 17: “The basic functional requirements of your CI-system (quantitative sample)” Sida | 31 Analys av fråga 13 Vi ville inte bara veta vilka funktionella krav som svarsobjekten hade på CI-system utan även vilka av dessa krav som de ansåg var viktigast, därför ställde vi denna fråga. Ur diagrammet kan vi avläsa att de flesta ansåg att “compile/build source code” var det viktigaste kravet som måste uppfyllas, med bred marginal. Men även följande krav ansågs viktiga att uppfylla: ● VCS/SCM management ● testing ● provide feedback to developer Fig. 18: “Most important functional requirements for this CI-system” Sida | 32 Analys av fråga 14 Samtliga svarsobjekt anser att deras CI-system uppfyller minimala funktionella krav (compiling/building source code, test, feedback). Fig. 19: “Does your CI-system meet the minimum functional requirements?” Analys av fråga 15 För att ta reda på vilka huvudsakliga icke-funktionella krav som ett CI-system brukar ha hos de flesta verksamheter ställde vi denna fråga. Frågan besvarades i fritext och vi fick därför ut rik kvalitativ information som behövdes tolkas. Efter tolkning grupperades och kvantifierades svaren. Diagrammet visar att de flesta svarsobjekt har angett performance usability och reliability. Dessa krav kan sägas vara de huvudsakliga icke-funktionella krav som ett CI-system ska uppfylla. Fig. 20: “The basic non-functional requirements of your CI-system (qualitative sample)” Sida | 33 Analys av fråga 16 För att bekräfta fritextsvaret från fråga 15 gav vi svarsobjekt en möjlighet att besvara samma typ av fråga med hjälp av flersvar. Vi tänkte att bästa sätt att få svar på denna fråga var att låta svarsobjekten göra det åt oss genom att ange de funktionella krav de har för deras CI-system. Svarsdatan visar att de flesta som deltog i undersökningen valde: ● extensibility ● stability & reliability ● maintainability ● usability Dessa kan påstås utgöra de minimala icke-funktionella kraven för CI-system i enligt vår marknadsundersökning. Fig. 21: “The basic non-functional requirements of this CI-system (quantitative sample)” Sida | 34 Analys av fråga 17 Vi ville inte bara veta vilka icke-funktionella krav som svarsobjekten hade på CI-system utan även vilka av dessa krav som de ansåg var viktigast, därför ställde vi denna fråga. Ur diagrammet kan vi avläsa att de flesta ansåg att “usability” var det viktigaste kravet som måste uppfyllas följt av “maintainability”. Även följande icke-funktionella krav anses vara viktiga: ● stability & reliability ● extensibility ● performance Fig. 22: “Most important non-functional requirements for your CI-system” Sida | 35 Analys av fråga 18 De flesta som deltog i undersökningen tycker att deras CI-system uppfyller minimala ickefunktionella krav (extensibility, stability, reliability, maintainability). Fig. 23: “Does your CI-system meet the minimum non-functional requirements?” Analys av fråga 19 Den sista frågan var för att veta om de som deltog i undersökningen är intresserade för att ta reda på slutresultatet. Svarsdatan visar att de flesta tackade ja. Fig. 24: “Respondent’s desire to be notified of the final results” Sida | 36 4.3 Resultat från litteraturundersökning Litteraturundersökningen var en formell sammanställning och uppräkning av hur ofta vissa nyckelord förekommer i litteratur kring CI-system. Vi kategoriserade då nyckelord i funktionella krav, icke-funktionella krav och som ett tillägg avläste vi även omnämnandet av olika CI-server mjukvaror som vi sedan kan jämföra med de mjukvaror som nämndes i marknadsundersökningen. De flesta huvudfrågor och delfrågor från vår frågeställning besvaras av resultat från både litteratur- och marknadsundersökningen, det är därför viktigt att vi ställer liknande frågor och tittar efter liknande signaler från båda undersökningarna. Vi hänvisar läsaren till avsnitt 3.1.1 för mer information kring utförandet av litteraturundersökningen. Se bilaga 3 för rådatan och uppställningen av litteraturundersökningen. I litteraturundersökningen har vi formellt avläst 10 webbartiklar, 2 böcker och 7 vetenskapliga artiklar [2, 5, 7, 9-16, 29-35] och spårat kopplingar mellan funktionella- och icke-funktionella krav. De flesta krav listade vi enligt [25-28], dock fanns det krav som kom till vår kännedom när vi läste igenom källorna, även dessa lades till i matrisen. Nedan redogör vi resultat för undersökningen som åskådliggörs grafiskt i diagram. Vi analyserar även resultaten och kan ibland tolka resultaten. Sida | 37 Funktionella krav som omnämns i litteraturen Vi undersökte vilka funktionella krav som nämns i litteraturen och fick fram nedanstående resultat. Det visar sig att följande funktionella krav omnämns mest: ● Källkodshantering (eng. source code management) ● Kompilering av källkod (eng. build source code) ● Körning av tester (eng. run tests) ● Notifiering [av status för bygge] (eng. feedback & notifications) Vi kan även se att andra funktionella krav är betydande men nämns inte lika ofta: ● Möjliggörandet av byggautomatisering (eng. enable automation) ● Förse infrastruktur som möjliggör upprepbara byggen (eng. provide infrastructure for repeatable builds) ● Distribution [av mjukvara] (eng. deployment) Ovanstående funktionella krav nämns ofta som betydelsefulla funktioner för CI-system i litteraturen. Fig. 25: “Functional requirements” Sida | 38 Icke-funktionella krav som omnämns i litteraturen Vi undersökte även vilka icke-funktionella krav som nämns i litteraturen. Följande icke-funktionella krav omnämns mest: ● Prestanda (eng. performance) ● Användbarhet (eng. usability) ● Flyttbarhet (eng. portability) ● Interoperabilitet (eng. interoperability) Vi kan på diagrammet se rätt stora gap mellan de icke-funktionella krav som nämns mest och de som nämns mer sällan. En till sak som är viktig att påpeka är att icke-funktionella krav ofta inte nämns explicit utan genom “förväntningar”, t.ex. att ett CI-system ska bygga källkod snabbt vilket tyder på ett prestandakrav. En indelning av dessa “förväntningar” är i vissa fall överlappande eller tvetydig. Hur vi gjort kan närmare granskas i matrisen för litteraturundersökningen (se bilaga 3). Fig. 26: “Non-functional requirements” Sida | 39 CI-server mjukvara som omnämns i litteraturen Slutligen undersökte vi även vilken CI-server mjukvara som nämns i litteraturen och hur ofta mjukvaran omnämns. Vi kan på nedanstående diagram se att följande CI-server mjukvaror nämns mest i litteraturen: ● CruiseControl och dess varianter ● Jenkins ● Hudson ● Bamboo ● TeamCity ● Buildbot Kanske är det inte så förvånande att CruiseControl är mest omnämnt i litteraturen om tar hänsyn till att den första versionen av CruiseControl släpptes under början av 2001. Dock kan man undra varför AnthillPro som även det släpptes 2001 inte är mer omnämnt i litteraturen. Här kan det handla om allt från en diskrepans i marknadsföring mellan de två mjukvarorna till att utvecklare har lättare att ta till sig CruiseControl, denna diskussion är dock utanför ramarna för vår studie. Något annat som är av intresse med denna data är att TeamCity inte nämns lika ofta som t.ex. Jenkins, Hudson eller till och med Bamboo i litteraturen. Detta trots att TeamCity, enligt vår marknadsundersökning, anses användas av ca 32% av tillfrågade utvecklare, där 42% uppges använda Jenkins men endast 5% uppges använda Bamboo. Fig. 27: “CI-server software” Sida | 40 4.4 Användbarhetstestning Vi gick tidigare igenom ett antal icke-funktionella krav, däribland det icke-funktionella kravet användbarhet (eng. usability). Under senare delar av examensarbetet ställde vi upp ett användbarhetstest och mätte användbarheten för TeamCity, men innan resultatet för dessa mätningar och slutsats kan dras måste vi gå igenom vad som menas med användbarhet och hur ett användbarhetstest ställs upp. 4.4.1 Kategorisering av användbarhet via användbarhetsattribut Användbarhet har enligt Folmer, Gulp och Bosch att göra med hur enkelt det är för slutanvändaren att utföra en viss uppgift med hjälp av systemet och på vilket sätt systemet stödjer denna process. I vår studie vill vi ta reda på hur lätt det är för slutanvändaren att utföra en rad olika nyckelfunktioner som stöds av de flesta CI-system (enligt litteraturundersökning och marknadsundersökning). Det finns olika sätt att kategorisera användbarhet. Nedan följer Folmer, Gulp och Bosch kategoriseringen med hjälp av användbarhetsattribut [43, 45]: ● Lärbarhet (eng. learnability) - Hur snabbt kan en användare komma igång med att använda ett system som hon inte har använt tidigare, samt hur lätt det är för användaren att minnas hur man använder sig av systemet ● Effektiv användning (eng. efficiency of use) - Antalet uppgifter användaren kan utföra under en viss tid med hjälp av systemet ● Tillförlitlighet (eng. reliability) - Andelen fel som uppstår när man använder sig av systemet och hur lång tid det tar att återhämta sig från fel ● Tillfredsställelse (eng. satisfaction) - Användarens subjektiva åsikt kring användandet av systemet Vi kommer dock att kategorisera användbarhet enligt Bass kategorisering av huvudområden för scenarion [46] som beskrivs nedan, men använder oss även av vissa ovanstående användbarhetsattribut för att få ett helhetsperspektiv utifrån testarens synpunkt (detta redogörs i avsnitt 4.4.6). 4.4.2 Kategorisering av användbarhet via huvudområden Bass [46] använder sig av ett annat sätt att kategorisera och strukturera användbarhet så att det kan testas. Vi använde oss främst av detta sätt att kategorisera användbarhet när vi ställde upp användbarhetstestet. Huvudområden som betecknar användbarhet [46]: ● Inlärning av systemets funktioner (eng. Learning system features) - På vilket sätt hjälper systemet användaren att bli bekant med systemets olika funktioner och hur man använder sig av dessa? Har CI-systemet ett tydligt (grafiskt) gränssnitt som gör det lätt för framförallt nya användare att snabbt lära sig använda systemet. ● Effektiv användning av systemet (eng. Using a system efficiently) - Hur kan systemet hjälpa användaren att utföra uppgifter på ett mer effektivt sätt. Sida | 41 Här kommer vi att titta på om CI-systemet har effektiva sätt att automatisera och skapa genvägar för processer som ofta används och därför bör vara ytterst effektiviserade. ● Minimera inverkan av fel (eng. Minimizing the impact of errors) - Vad kan systemet göra för att avvärja användarfel. Vad händer om användaren råkar ta bort eller modifiera kritiska komponenter av utvecklingsinfrastrukturen? Har systemet dialogrutor eller säkringar som kan motverka kritiska fel? ● Anpassning av systemet för användarens behov (eng. Adapting the system to user needs) - Hur kan systemet anpassas för att bli mer användbart för användaren? Vi kommer att titta på om tidigare utförda operationer och händelser i systemet påverkar användarupplevelsen. Vi tittar även på om gränssnittet kan ändras till användarens fördel. ● Inge förtroende och tillfredsställelse (eng. Increasing confidence and satisfaction) Hur bekräftar systemet för användaren att denne utfört önskvärd åtgärd? Vi tittar efter bekräftelsedialoger och andra indikationer som förmedlar förändringar av systemets tillstånd till användaren. 4.4.3 Indelning av beståndsdelar för användbarhetsscenario När man väl definierat vad som menas med användbarhet kan man övergå till att beskriva hur användbarhet ska mätas. Bass anger ett användbarhetsscenario (eng. usability scenario) som kan delas upp i ett antal beståndsdelar. Dessa beståndsdelar påvisar omständigheterna och avgränsningar för mätningen av användbarhet för ett visst system. Användbarhetsscenariot kan avgränsas och delas upp i följande beståndsdelar: ● Källa för indata (eng. source of stimulus) - Källan för indata är en självständig entitet och kan vara allt från en individ till ett datorsystem eller annan typ av självständig aktör. I fallet med användbarhetstestning (eng. usability testing) är användaren källan för indata. ● Indata (eng. stimulus) - Indata är en omständighet, villkor eller önskemål som måste övervägas när denna når mottagaren. I fallet med användbarhetstestning är indatan kategoriserat enligt de huvudområden som beskrevs i avsnitt 4.4.2. Användaren vill alltså lära sig systemets funktioner, effektivt kunna använda systemet, minimera inverkan av fel, anpassa systemet för sina behov och känna förtroende och tillfredsställelse med användningen av systemet. ● Mottagare (eng. artifact) - En mottagare för indatan måste identifieras. Detta kan antingen vara hela systemet eller en del av systemet. I fallet med användbarhetstestning är det hela systemet. Sida | 42 ● Miljö (eng. environment) - Utskick av indata och mottagandet av denna sker i en viss miljö och under vissa omständigheter. Exempelvis kan systemet vara i ett tillstånd av överbelastning, normalkörning eller i ett avstängt tillstånd. Andra typer av tillstånd kan även äga rum. I fallet med användbarhetstestning sker relevanta händelser vid körtid eller vid konfiguration av systemet (så som t.ex. installation av systemet). Interaktioner med systemet innan dess räknas till “interaktioner mellan utvecklare och systemet” och kan därför inte innefattas i detta scenario. ● Respons (eng. response) - Respons är den händelsen som sker efter att indatan tagits emot och behandlats av mottagaren. I fallet med användbarhetstestning förväntas systemet kunna uppfylla användarens behov genom att förse henne med programfunktioner som möjliggör utförandet av önskvärda uppgifter. Detta återspeglas via responsen som genereras. ● Mätning av respons (eng. response measure) - När responsen genereras måste denna mätas på något sätt för att systemet ska kunna kravtestas och för att man ska kunna fastställa om systemet besvarat indatan med rätt typ av respons. Responsen i användbarhetstestning kan mätas på ett antal olika sätt: [47-48] ○ Tiden det tog (eng. task time) för användaren att utföra en viss uppgift ○ Antalet fel som uppstod ○ Antalet problem som användaren löst ○ Användarens tillfredsställelse med hur uppgiften löstes mha. systemet ○ Kunskapsökning, känner användaren att hon förstått hur man använder systemet för att utföra specifika uppgifter? ○ Förhållandet mellan antalet lyckade operationer och totala antalet operationer som utförts ○ Hur mycket tid/data gick förlorat när ett fel inträffade (vare sig felet orsakades av systemet eller användaren är ej relevant i detta mätningsfall) I utförandet av användbarhetstestet kommer vi att välja några av dessa mätningar av respons som vi anser är mest relevanta för vår studie. Sida | 43 4.4.4 Uppställning av användbarhetsscenario Vi utgick från Bass kategorisering av användbarhet och beskrivning av användbarhetsscenario när vi ställde upp vårt scenario [46, s. 106]. CI-systemet TeamCity testades utifrån detta scenario: Beståndsdel av Värden scenario Källa för indata Användare Indata Vill ● ● ● ● ● Lära sig systemets funktioner Effektivt kunna använda systemet Minimera inverkan av fel Anpassa systemet för sina behov Känna förtroende och tillfredsställelse med användningen av systemet Mottagare CI-system (TeamCity) Miljö Normalkörning Respons CI-systemet förser användaren med följande responser: 1. För att stödja “Inlärning av systemets funktioner”: ● GUI:t är tydligt och lättanvänt ● GUI:ns design är baserad på “progressive disclosure” 2. För att stödja “Effektiv användning av systemet”: ● Det är enkelt att automatisera funktioner som ofta kommer att användas t.ex. konfiguration av byggskript ● Återanvändning av data/kommandon som tidigare inmatats 3. För att stödja “Minimera inverkan av fel”: ● Dialogrutor och säkringar inför mer omfattande operationer ● Möjlighet att “ångra” (eng. undo) ändringar 4. För att stödja “Anpassning av systemet för användarens behov”: ● Systemets utseende och funktionalitet kan ändras utifrån användarens behov 5. För att stödja “Inge förtroende och tillfredsställelse”: ● Systemets tillstånd åskådliggörs tydligt för användaren ● Större ändringar bekräftas genom t.ex. bekräftelsedialoger Mätning av respons ● Tid för att utföra en uppgift (eng. task time) ● Antalet problem som användaren löst ● Användarens tillfredsställelse med hur uppgiften löstes Sida | 44 4.4.5 Uppställning av testformulär och användarenkät Baserat på användbarhetsscenariot ovan har vi utformat ett testformulär (se bilaga 6) som vi fyller i för att sammanställa svarsdata från testaren efter utförandet och inspelning av test. Eftersom vissa svar endast kan besvaras av testaren själv och ej observeras via inspelning av test har vi även utformat en användarenkät (se bilaga 7) som testaren fyller i under testets gång. I testformuläret har vi delat upp uppgifter enligt de responser och huvudområden som anges i användbarhetsscenariot. Uppgifterna är inte specifika för något enskilt CI-system och kan därför tillämpas på såväl TeamCity som andra CI-system. Vi har dessutom sett till att funktionella krav som anses viktiga enligt litteratur- och marknadsundersökningarna innefattas i testformuläret. Vi har exempelvis med uppgifter där testaren ska bygga källkod för Java-projektet som vi skapade eller köra tester för Java-projektet, detta eftersom exempelvis “bygge av källkod” och “testning” framgått som viktiga funktionella krav för CIsystem (se avsnitt 5 för slutsatser kring viktiga funktionella och icke-funktionella krav för CIsystem). Med hjälp av inspelningen av testsessioner kan vi fylla i tiden som förflöt när testaren utförde en viss uppgift (eng. task time) samt kontrollera om uppgiften löstes korrekt. I testformuläret fylls även in svarsdata från användarenkäten som endast kan besvaras av testare, t.ex. tillfredsställelse av att lösa en viss uppgift. Den andra större dokumentationsartefakten för användbarhetstestning var som nämnt användarenkäten. Denna fylldes i under testets gång av testaren. Användarenkäten är TeamCity-specifik och kan till skillnad från testformuläret inte användas för andra CI-system, den måste i sådant fall skrivas om. Trots detta anknyter den till testformuläret och användbarhetsscenariot på ett sådant sätt att man kan påstå att den konkretiserar riktlinjer angivna i dessa artefakter så att de kan tillämpas på TeamCity på ett testbart sätt. I denna form fyllde testaren bland annat i hur hon upplevde att lösa specifika uppgifter med hjälp av systemet. Vi var noggranna med att endast inkludera frågor i användarenkäten som inte kan besvaras via observation. Användarenkäten var inte endast till för att fyllas i av testaren under testsessionens gång, utan här fanns även all information beskriven för att testaren ska kunna utföra uppgifterna i TeamCity. En detalj som är värd att nämna är att ordningen på uppgifterna är strukturerad och optimerad för att minimera förvirring under utförandet av uppgifter och minska tiden för att utföra testet för samtliga testare, ordningsföljden beskrivs i testformuläret. För att anknyta till kategorisering av användbarhet enligt Folmer, Gulp och Bosch lade vi även till 4 korta frågor i slutet av användarenkäten som testaren svarar på för att delge sin uppfattning om TeamCity enligt dessa 4 kategorier. Sida | 45 4.4.6 Resultat från användbarhetstestning I detta avsnitt redovisas de resultat som vi fick fram av användbarhetstestet och analysen av svarsdatan från testerna som utfördes. Användbarhetstestet är också av betydelse för att svara på vår andra huvudfråga, om man kan “testa, jämföra och värdera CI-system”. I just denna studie kommer vi inte att utföra användbarhetstestet på flera olika CI-system men det är något som kan vara intressant att utföra (se avsnitt 6.3 “fortsatt forskning”). Bilaga 6 påvisar hur vi samlat och sammanställt data som kommer att presenteras grafiskt i form av diagram. Bilaga 7 är användarenkäten som användes för att samla in denna data och agerar som ett gränssnitt mellan oss och testare. Läsaren hänvisas till dessa bilagor för att ta del av mer utförlig information kring genomförandet av användbarhetstester. Resultatdatan som kommer att presenteras i detta avsnitt berör olika aspekter av användbarhetstestet som vi tycker är extra intressanta att titta på. Olika statistik kring utförandet av testerna samt testarnas subjektiva intryck av att lösa uppgifter och av TeamCity i sin helhet kommer att åskådliggöras. Samtliga diagram belyser skillnader mellan testgruppen som bestod av 5 testare och kontrollgruppen som bestod av 1 testare. Vi analyserar resultaten som redogörs och kan i vissa fall även tolka resultaten. Varje diagram förses med en förklaring till hur mätningen genomfördes och ibland även en förklaring till varför vi mätte just detta. Därefter följer en saklig redogörelse av hur datan som presenteras i diagrammen ska avläsas, följt av en subjektiv tolkning av datan där detta är möjligt. Sida | 46 Totalt antal uppgifter som löstes Vi kontrollerade hur många uppgifter av totalt 17 st som löstes av testare efter varje testsession via användarenkäten och inspelningar. En del testare ansåg sig vara klara med vissa uppgifter men det framkom efter granskning av inspelning att detta inte stämde, vi korrigerade svarsdatan utefter vår uppfattning om huruvida uppgiften löstes korrekt eller ej. Vi kan på nedanstående stapeldiagram avläsa att kontrollgruppen löste alla 17 uppgifter medan testgruppen löste nästan alla 17 uppgifter. Testgruppen hade 16.4 uppgifter lösta i snitt vilket innebar att 3 fel uppstod under de 5 testsessionerna. Varför testgruppen inte lyckades lösa alla uppgifter är svårt att avgöra utifrån den data som vi samlade in, det kan antingen bero på att användarenkätens uppgiftbeskrivning för vissa uppgifter var otydlig eller yttre faktorer som att TeamCity i vissa fall är så användarvänlig och layout-mässigt anpassad för att stödja nya användare att utföra vissa operationer. Eftersom felen uppstod bland 3 olika uppgifter (uppgift 3, 4 och 14) är det mer sannolikt att det har att göra med interaktionen mellan testare och TeamCity snarare än ett allmänt fel i utformandet av användarenkäten. Vi menar att ett fel i användarenkäten hade kommit till uttryck om olika testare begick samma fel under utförande av testet (dvs. om felet uppstod på samma uppgift). Uppgifterna i vilka fel uppstod tillhör huvudområdena “Anpassning av systemet för användarens behov”, “Inlärning av systemets funktioner” och “Inge förtroende och tillfredsställelse”. Trots vår diskussion om de 3 felen som uppstod kan vi konstatera att det nästan “perfekta resultatet” för antal korrekt utförda uppgifter tyder på att TeamCity stödjer lärbarhet för användare som aldrig använt systemet tidigare. Fig. 28: “Totalt antal uppgifter som löstes” Sida | 47 Total tid för utförande av samtliga uppgifter Vi tittade inte bara på hur många uppgifter som löstes, vi tittade även på hur lång tid det tog för testarna att utföra alla uppgifter. Vi gjorde detta genom att gå igenom inspelningarna av testsessionerna och kolla hur lång tid det tog för varje testare att gå vidare till nästa uppgift, från att uppgift 1 påbörjades till att uppgift 17 avslutades. Vi ser intressant data i nedanstående stapeldiagram (jämfört med diagrammet för “totalt antal uppgifter som löstes”). Kontrollgruppen genomförde samtliga uppgifter på 20 minuter och 19 sekunder, medan testgruppen utförde uppgifterna på 43 minuter och 18 sekunder. Vi ser därför en markant skillnad mellan oerfarna TeamCity användare och erfarna användare med avseende på hur snabbt vissa operationer kan utföras i TeamCity. Att kontrollgruppen utförde samtliga uppgifter betydligt snabbare än testgruppen tyder på att TeamCity stödjer användbarhetsattributet effektiv användning. Fig. 29: “Total tid för utförande av samtliga uppgifter” Sida | 48 Användarnas tillfredsställelse av att lösa samtliga uppgifter Efter varje utförd (eller outförd) uppgift angav testaren hur han eller hon upplevde att uppgiften löstes. Detta gjordes utefter en Likert skala där 1 innebär en låg tillfredsställelse med utförandet av en viss uppgift och 5 innebär hög tillfredsställelse. I stapeldiagrammet kan vi avläsa en relativt hög nivå av tillfredsställelse för båda grupperna, dock ser vi att testgruppen var aningen mindre tillfredsställd i genomsnitt. Detta beror förmodligen på att testarna i testgruppen inte alltid visste hur de ska göra för att lösa vissa uppgifter. Vi kan också efter granskning av testformuläret se en korrelation mellan missnöje och misslyckande av utförandet av specifika uppgifter. Om vi tittar på kontrollgruppen kan vi se att testaren angivit nivå 5 av tillfredsställelse på samtliga uppgifter förutom uppgift 1, 6 och 11. Dessa uppgifter tillhör huvudområdet “Inlärning av systemets funktioner”. Om vi istället tittar på testgruppen kan vi se att testarna angivit en hög nivå av tillfredsställelse med 5,0 i snitt för uppgift 8 och 13. En låg nivå av tillfredsställelse kan vi avläsa för uppgift 4 med 2,8 i snitt. Uppgifterna med ett högt utslag tillhör huvudområdena “Inlärning av systemets funktioner” och “Minimera inverkan av fel”. Beträffande uppgiften med lågt utslag tillhör den huvudområdet “Anpassning av systemet för användarens behov”. Vi kan se att på det stora hela verkar TeamCity stödja användbarhetsattributet tillfredsställelse. Det verkar dock finnas rum för förbättring när det gäller användarens tillfredsställelse och upplevelse av hur pass anpassningsbart systemet är för användarens behov. Fig. 30: “Användarnas tillfredsställelse av att lösa samtliga uppgifter” Sida | 49 Total tid för utförandet av enskild uppgift Under efterbehandligsfasen av testsessionerna tittade vi på hur lång tid det tar för varje testare att utföra varje enskild uppgift. Startpunkt och slutpunkt markerades när testaren påbörjade en ny uppgift i användarenkäten genom att gå till nästa sida. På så sätt kunde vi ta tidspunkter på ett objektivt sätt istället för att gissa oss fram till när en viss uppgift påbörjades eller avslutades. Vissa testare kommunicerade även med oss mellan utförandet av uppgifter, detta noterades och räknades bort för att inte driva upp datan till högre nivåer pga. dessa “pauser”. Vi kan väldigt tydligt se från linjediagrammet att kontrollgruppen låg snäppet under testgruppen vad gäller snabbheten i att utföra uppgifterna. Dock kan vi se att genomsnittstiden för utförandet av enskild uppgift för testgruppen var aningen lägre på 1 minut och 10 sekunder jämfört med 1 minut och 16 sekunder för kontrollgruppen. Vad detta kan bero på är svårt att fastställa, dock kan vi konstatera att det har att göra med uppgiften “Kompilera källkod för ett projekt” som tillhör responsen “Det är enkelt att automatisera funktioner som ofta kommer att användas” och huvudområdet “Inlärning av systemets funktioner”. Fig. 31: “Total tid för utförandet av enskild uppgift” Sida | 50 Tidigare erfarenhet av CI-system Till skillnad från tidigare redovisad resultat så presenterar vi via detta stapeldiagram inte mätningar. Vi redogör här hur testarna har svarat när de tillfrågades vilken tidigare erfarenhet de har av CI-system och vilken CI-systemmjukvara de har använt sig av. Som nämnt i utförandet av användbarhetstestet så var målgruppen för testerna användare som både hade erfarenhet av CI-system tidigare men ej av TeamCity och användare som tidigare använt sig av TeamCity. Detta åskådliggörs rätt tydligt i stapeldiagrammet då vi ser att endast testaren från kontrollgruppen angav att han hade erfarenhet av TeamCity. Han angav även erfarenhet av CruiseControl.net. Slutligen vill vi även påpeka att tidigare erfarenhet av CI-system kan ha en betydelse för olika statistik och data som erhålls från denna typ av användbarhetstest. Det kan vara så att Jenkins är likt eller olikt till användning och utseende som TeamCity. Detta innebär att inlärningskurvan för TeamCity kan bero på vilken tidigare erfarenhet av CI-system man har, därför är detta viktigt att belysa och ta hänsyn till både i vår studie och liknande studier, genom att exempelvis ställa motsvarande fråga i andra enkäter. Fig. 32: “Tidigare erfarenhet av CI-system (båda grupper)” Sida | 51 Hur pass väl stödjer TeamCity “Lärbarhet”? Som tidigare nämnt så använder vi oss av 4 användbarhetsattribut för att fastställa vilket intryck testarna har av TeamCity. Vi börjar med att diskutera lärbarhet. Lärbarhet har att göra med hur snabbt användaren lär sig använda systemet och hur lätt det är att minnas hur man använder systemet. Vi kan från diagrammet avläsa att kontrollgruppen angav den högsta nivån för lärbarhet. Kanske beror detta på att denna testare redan är bekant med hur TeamCity används och därför även anser att nya användare kommer att snabbt kommer att lära sig hur man använder TeamCity. Om vi tittar på testgruppen kan vi se att de allra flesta svarat att de anser att TeamCity stödjer lärbarhet. Denna data är aningen mer intressant att titta på, främst pga. dessa testare uppgav att de inte använt TeamCity tidigare. Detta tyder på att nya användare efter utförandet av 17 uppgifter tycker att TeamCity är ganska bra på att lära användaren hur man kommer igång med användningen av CI-systemet. Fig. 33: “Hur pass väl stödjer TeamCity ‘Lärbarhet’?” Sida | 52 Hur pass väl stödjer TeamCity “Effektiv användning”? Effektiv användning av ett system innebär att en användare snabbt kan utföra operationer i systemet och kan effektivisera det han eller hon genomför med hjälp av systemet ju mer bekant han eller hon blir med användandet av systemet. Resultatdatan som åskådliggörs via diagrammet påvisar även här att de flesta testare har en uppfattning om att TeamCity stödjer effektiv användning. Till skillnad från föregående diskussion om lärbarhet, är det mer betydelsefullt att belysa kontrollgruppens uppfattning av effektiv användning. Detta eftersom en testare med tidigare erfarenhet av TeamCity förmodligen har använt systemet under en viss tid och kan därför ha en uppfattning om TeamCity “håller i längden”. Om vi tittar på testgruppen kan vi se att de flesta angett nivå 4 för just detta användbarhetsattribut. Både testare 4 och 5 har angett att TeamCity stödjer effektiv användning trots att deras totala tid för utförandet av uppgifterna hörde till de längre tidtagningarna. Tolkning: Att de markerat nivå 5 kan bero på att de under testets gång ansåg att det gick fortare framåt när de lärde sig använda systemet bättre, men kanske också pga. testsessionen var så pass långt gången att de snabbt ville “fylla i den sista sidan” i användarenkäten och bli klara med testsessionen. Fig. 34: “Hur pass väl stödjer TeamCity ‘Effektiv användning’?” Sida | 53 Hur pass väl stödjer TeamCity “Tillförlitlighet”? Ett system som är tillförlitligt är ett system utformat på så sätt att en användarens interaktion med systemet genererar ett lågt eller obefintligt antal fel vid “normalt bruk”. Tillförlitlighet innebär även att ett system snabbt kan återhämta sig från fel som kan uppstå. Som vi kan se på diagrammet nedan så har samtliga testare angett högsta nivå för att påvisa att TeamCity stödjer tillförlitlighet. Detta är rätt ointressant data att diskutera eftersom det inte finns någon variation, dock kan vi konstatera att TeamCity är ett tillförlitligt system utifrån denna data. En intressant sak som vi kan påpeka är testare 3’s svar på frågan. Denna testare angav att han inte hade tillräckligt med erfarenhet av TeamCity för att dra denna slutsats och att ytterligare användning av TeamCity krävs för att på ett bestämt sätt kunna fastställa om TeamCity faktiskt är tillförlitligt. Fig. 35: “Hur pass väl stödjer TeamCity ‘Tillförlitlighet’?” Sida | 54 Hur pass väl stödjer TeamCity “Tillfredsställelse”? En användares tillfredsställelse med ett system är hur denna individ subjektivt upplever användningen av systemet. Som nämnt har testaren efter varje uppgift svarat på hur tillfredsställd han eller hon är med hur uppgiften löstes. Även på slutet av användarenkäten frågar vi testaren hur tillfredsställd han eller hon är med TeamCity i stort. Vi kan även i detta diagram se en homogenitet mellan svarsdatan där endast små avvikelser förekommer. De allra flesta testare har angett nivå 4 av tillfredsställelse för TeamCity. Ännu en intressant sak som kan påpekas är testare 2’s svar för denna fråga där testaren angett att en längre tid med användandet av CI-systemet krävs för att kunna fastställa om TeamCity är tillfredsställande att användas. Fig. 36: “Hur pass väl stödjer TeamCity ‘Tillfredsställelse’?” Sida | 55 5. Slutsats Vår frågeställning bestod av 2 huvudfrågor och 4 delfrågor (se avsnitt 1.3). Efter genomförd marknadsundersökning och litteraturundersökning kan vi dra en slutsats kring vad ett CI-system principiellt bör bestå av, vilka funktioner den bör förse användaren med samt vilka kvalitetsattribut som bör eftersträvas. Svaren till vår första huvudfråga “Vilka funktionella och icke-funktionella krav måste CIsystem uppfylla för att vara till nytta för användning?” är följande: ● Funktionella krav: ○ Källkodshantering (eng. source code management) ○ Kompilering av källkod (eng. build/compile source code) ○ Exekvering av byggskript (eng. running arbitrary build scripts), med möjlighet till byggautomatisering (eng. enable build automation) ○ Körning av tester (eng. run tests) ○ Notifiering av status för bygge (eng. feedback/notification of build status) ○ Stöd för paketering och distribution av mjukvara (eng. support deployment of stable software) ● Icke-funktionella krav: ○ Prestanda (eng. performance) ○ Användbarhet (eng. usability) ○ Tillförlitlighet (eng. reliability) ○ Utbyggbarhet (eng. extensibility) ○ Stabilitet (eng. stability) ○ Underhållsmässighet (eng. maintainability) Efter genomförd användbarhetstest kan vi även besvara vår andra huvudfråga och därmed validera en del av den slutsats vi fått fram via första huvudfrågan. Vår andra huvudfråga “Kan man enligt fastställda krav testa, värdera och jämföra CIsystem?” besvaras positivt via de resultat som vi redogör i avsnitt 4.4.6. Genom en utvärdering av användbarhet för CI-systemet TeamCity demonstrerade vi detta praktiskt. Genom att använda sig av testformuläret som vi fick fram under utförandet av användbarhetstestet och genom att modifiera användarenkäten för ett annat CI-system kan man även utföra användbarhetstestet för andra CI-systemmjukvaror. Sida | 56 Delfråga 1 “Vilken mjukvara för CI-system används mest?” besvaras av både litteraturundersökningen och marknadsundersökningen. Enligt undersökningarna kom vi fram till följande: ● Litteraturundersökningen pekar på: ○ CruiseControl och dess varianter ○ Jenkins ○ Hudson ○ Bamboo ○ TeamCity ○ Buildbot ● Marknadsundersökningen pekar på: ○ Jenkins ○ TeamCity CruiseControl och dess varianter nämns fortfarande i litteratur och är en väletablerad CIserver mjukvara som funnits i över 10 år. Hudson som senare blev Jenkins har en stor marknadsandel och nämns även den i litteraturen. TeamCity nämns inte så ofta i litteratur, däremot visar marknadsundersökningen att även den har en stor marknadsandel. Vi kan dra slutsatsen att Jenkins används mest, tätt följd av TeamCity men att även andra CI-server mjukvaror så som CruiseControl nämns i litteraturen och säkerligen används än idag. Delfråga 2 “Vilka för- och nackdelar finns det för ett CI-system?” besvaras av marknadsundersökningen och diskuteras även i avsnitt 2.4. Med hjälp av denna fråga vill vi ta reda på vad som utmärker vissa CI-system från andra och vad det är som gör att en grupp utvecklare väljer att använda ett CI-system över ett annat. Vi tittar också på eventuella nackdelar som utvecklare tycker att deras CI-system har. Svarsobjekten för marknadsundersökningen har angivit att de främsta fördelarna med deras CI-system är att det är lättanvänt, stabilt och tillförlitligt. När svarsobjekten tillfrågades om nackdelar med deras CI-system var det en signifikant andel som inte kunde identifiera någon betydlig nackdel. Om vi däremot tittar på de svarsobjekt som identifierade nackdelar med sitt CI-system nämnde de svårigheter med att felsöka, en hög kostnad (av att sätta upp och underhålla systemet) och instabilitet. Andra nackdelar specificerades också men dessa nämns ej här. Delfråga 3 “Hur pass utbredd är användningen av CI-system bland utvecklare inom företag som använder sig av dessa system?” besvaras av marknadsundersökningen (se analys av fråga 4). 41% av svarsobjekten svarade att 100% av deras utvecklare använder sig av CIsystemet och övriga svarsobjekt anger att ca 60-100% av utvecklare på företaget påverkas av CI-systemet. Endast tre svarsobjekt utav 39 svarade att CI-systemet endast påverkar 10%, 30% resp. 50% av deras verksamhet, där de resterande angav en större andel utvecklare Sida | 57 som påverkas av CI-systemet. Vi kan därför konstatera att nästintill 100% av utvecklare på företagen påverkas av CI-systemet där ett sådant är implementerat. Delfråga 4 “Leder CI-system till en mer effektiv utvecklingsprocess för mjukvaruutvecklare?” besvaras av marknadsundersökningen (se analys av fråga 10). 97% av svarsobjekten har svarat att deras CI-system leder till att deras verksamhet kan prestera bättre. Att en tillämpning och användning av CI-system har övervägande fördelar jämfört med dess nackdelar nämns även i litteraturen. Därmed kan vi dra slutsatsen att ett CI-system leder till en mer effektiv utvecklingsprocess för mjukvaruutvecklare. Sida | 58 6. Diskussion I detta avsnitt vill vi diskutera sådant som tidigare nämnts i rapporten. Vi börjar med att diskutera krav som CI-system bör uppfylla enligt våra undersökningar i avsnitt 6.1 och huruvida vår uppfattning om vilka krav som var viktiga stämde under tidiga skeden av examensarbetet. I avsnitt 6.2 redovisar vi smärre fel och misstag som gjordes under examensarbetets gång men även alternativa tillvägagångssätt och förbättringsförslag, med andra ord utföranden av moment som hade kunnat göras på ett annat sätt. Slutligen kommer vi i avsnitt 6.3 att spåna på framtida forskningsförslag och försöka klargöra hur man kan gå vidare med de resultat som vi kommit fram till i vår studie. 6.1 Diskussion av kraven Vi kan från både litteratur- och marknadsundersökningen komma underfund med att CIsystem består av betydligt fler funktionella krav än vad vi hade förväntat oss (grönmarkerade) under tidiga skeden av examensarbetet. Av dessa undersökningar framgår det att följande funktionella krav är betydelsefulla: ● Källkodshantering (eng. source code management) ● Kompilering av källkod (eng. build/compile source code) ● Exekvering av byggskript (eng. running arbitrary build scripts) ● Körning av tester (eng. run tests) ● Notifiering av status för bygge (eng. feedback/notification of build status) ● Stöd för distribution av mjukvara (eng. support deployment of stable software) ● Möjliggörandet av byggautomatisering (eng. enable build automation) ○ Förse utvecklarna med en infrastruktur som möjliggör upprepbara byggen (eng. provide infrastructure for repeatable builds) ● Hantering av byggartefakter (eng. internal handling of build artifacts) Vi kan dock se att de funktionella krav som vi utgick från fick högt utslag i undersökningarna. Vi förutsåg inte att övriga funktionella krav som listas ovan (ej grönmarkerade) även är av betydelse. Den största överraskningen för oss var beträffande icke-funktionella krav där vi förväntade oss att “performance” (grönmarkerat) skulle få högst utslag. Visserligen påvisar båda undersökningarna att “performance” är ett eftersträvat icke-funktionellt krav för CI-system, däremot visade sig att det fanns andra minst lika betydelsefulla icke-funktionella krav (ej grönmarkerade) som både litteraturen och slutanvändare av CI-system påpekade. Samtliga icke-funktionella krav som är av intresse listas nedan: ● ● ● ● ● ● ● ● Prestanda (eng. performance) Användbarhet (eng. usability) Flyttbarhet (eng. portability) Interoperabilitet (eng. interoperability) Utbyggbarhet (eng. extensibility) Stabilitet (eng. stability) Tillförlitlighet (eng. reliability) Underhållsmässighet (eng. maintainability) Sida | 59 Varför stämde då vår tidigare uppfattning om vilka krav som ett CI-system måste uppfylla inte helt överens med den slutsats som vi kom fram till efter undersökningarna? Troligtvis beror det på ett flertal olika anledningar. Under förstudien hade vi inte all information till vårt förfogande och vi hade därför en väldigt vag idé om hur CI-system används och vad de består av. Dessutom skiljer sig beskrivningar av CI-system och användandet av vissa begrepp mellan olika författare och källor, något som gör det svårt att dra slutsatser från ett stort antal källor [4]. Marknadsundersökningen var till stor hjälp för att ta reda på vilka krav ett CI-system ska uppfylla och en bra vägvisare när vi försökte göra tvetydiga begrepp, som vi stötte på under litteraturundersökningen, entydiga. 6.2 Förbättringar Nedan presenterar vi olika förbättringar och alternativa lösningar samt reflektioner kring hur vissa moment hade kunnat utföras utifrån andra förutsättningar (så som en obegränsad tidsomfattning eller en större budget): ● Utförande av intervjuer som medel för en marknadsundersökning istället för en enkätundersökning: Det finns en rad olika skäl till varför intervjuer kan användas för att utföra en marknadsundersökning istället för att använda ett opersonligt medium som enkäter. I studier där man använder sig av intervjuer kan man ofta inte nå ut till lika många individer som man kan med hjälp av enkäter, däremot kan man inrikta sig på att träffa nyckelpersoner för ens studie. Exempelvis hade en intervju med Kent Beck eller Martin Fowler gett oss rik information om hur CI-system området ser ut just nu. Intervjuer ger en mer kvalitativ data att arbeta med och kanske mer tankeväckande svar. Intervjuaren kan ändra frågor, klargöra punkter och ställa nya frågor beroende på vilken riktning intervjun tar, detta kan leda till en rikare marknadsundersökning. [24, s. 323] ● En fråga i marknadsundersökningen ställdes på ett oklart sätt: Fråga 4 i marknadsundersökningen borde ha formulerats på ett mer konsekvent sätt. Frågan som ställdes var “What percentage of your developers uses or is affected by the CI-solution?”. Ursprungligen ville vi ta reda på hur många anställda på företaget (även de som inte direkt jobbar med mjukvaruutveckling eller annan IT-verksamhet, t.ex. kundservice, försäljningsavdelningen eller PR-avdelningen) som påverkas av företagets CI-system. Ett exempel på ett sådant scenario är: Kundservicen för företag X är överbelastad med klagomål eftersom en uppdatering i ett mjukvarupaket som företaget lanserat skapat problem för deras kunder. Efter att mjukvaruutvecklarna tagit till sig användning av CI-system så är kundservicen inte lika belastad, även under perioder där många uppdateringar lanseras till kunder. Tyvärr ställdes frågan på ett sätt som innebar att vi endast fick ut svarsdata som tyder på hur utvecklarna på företaget berörs. Därför var vi tvungna att i ett senare skede även omformulera delfråga 3, något som inte påverkade integriteten av Sida | 60 studiens syfte eller mål men gott kunde undvikas och klargöras innan enkäten skickades iväg. ● Vi hade kunnat ställa upp och jämfört flera olika CI-system: Genom att göra detta kan man utifrån fler referenspunkter utvärdera prestandan och funktionaliteten av ett visst CI-system, TeamCity i vårt fall. Uppställning av ett CI-system med hjälp av exempelvis Jenkins, CruiseControl eller Bamboo hade varit spännande, tyvärr tar detta också tid och innebär en större omfattning av examensarbetet. ● Vi hade även kunnat utföra flera typer av icke-funktionella tester: I vår studie undersökte vi användbarhet (eng. usability). Det hade även varit intressant att titta på och mäta andra icke-funktionella krav, t.ex. prestanda (eng. performance), utbyggbarhet (eng. extensibility) eller tillförlitlighet (eng. reliability). Dock innebär detta liksom föregående punkt en ökad omfattning av examensarbetet, inte endast eftersom det tar tid att utföra utan även för att ytterligare kunskaper måste införskaffas inom dessa områden. ● Körning av CI-system via virtuella maskiner (VM): Det finns flera fördelar med att använda sig av virtuella maskiner för att köra CI-system. Nedan kommer vi att ange hur användning av virtuella maskiner både hade kunnat underlätta användbarhetstestningen men också hur det hade skapat fler möjligheter för simuleringar av olika slag: ○ Man kan via en virtuell maskin installera och konfigurera TeamCity på ett säkert sätt, i den mening att om ett fel uppstår så kan man återställa TeamCity till ett tidigare tillstånd eller helt enkelt rensa TeamCity från den virtuella maskinen. ○ Användning av virtuella maskiner medför en positiv egenskap om man tittar på säkerhetsaspekten av att tillåta utomstående enheter att koppla upp sig mot en server (i syfte att utföra tester). Kör man t.ex. TeamCity via en virtuell maskin så kan utomstående användare som har för avsikt att sabotera eller skada maskinen som de fått tillgång till endast navigera inom ramarna för den virtuella maskinen. Detta innebär att förändringar i systemet som görs snabbt kan återställas till ett fungerande tillstånd utan att påverka värdsystemet (dvs. operativsystemet som kör den virtuella maskinen). Under vårt arbete har vi som nämnt använt TeamViewer och har fått vara försiktiga med att uppkopplade testare inte utför ändringar i systemet som kan vara skadliga. ○ Man återställer CI-systemet till ett “testbart tillstånd” efter varje test, så att nästa testsession kan utföras. Under detta examensarbete var vi tvungna att anteckna vilka ändringar användaren gör i CI-systemet och sedan återställa dessa efter att testet genomförts så att nästa testare utgår från samma situation. Med virtuella maskiner kan detta göras betydligt lättare genom att återställa CI-systemet till tidigare s.k. “snapshots”. Sida | 61 ○ Man skulle kunna köra 2 instanser av TeamCity parallellt och utföra olika tester på dessa. På så sätt kan man smidigare upptäcka skillnader mellan instanserna och fastslå vad skillnaden orsakas av. ○ När man kör ett system via en virtuell maskin så har man en väldigt precis kontroll över allokering av hårdvaruresurser för just denna virtuella maskin. Om man då kör TeamCity via en virtuell maskin så kan man utföra olika tester med varierande parametrar och hårdvarubegränsningar för att se skillnader i utslag utifrån dessa parametrar. ○ Användning av TeamCity på en virtuell maskin som agerar centralenhet och build agents på andra virtuella maskiner som utför själva jobbet för att simulera kommunikation mellan olika fysiska enheter i en typisk CI-system miljö där man ofta har skalbar decentralisering av CI-systemet och inte kör både TeamCity och dess build agents på samma server/maskin. ● Körning av CI-system i Linux: Unixliknande operativsystem är att föredra för att ställa upp CI-system. Exempelvis är körning av CI-system i Linux tillförlitligare i den mening att fel och stabilitet inte påverkas lika mycket när servern är igång under en längre tid. Det är även enklare att konfigurera CI-system via Linux om man är bekant med gränssnittet och de verktyg som finns att tillgå. Vi hade inte stora problem med tillförlitlighet när vi körde TeamCity i Windows 8 men det fanns en del problem med skrivrättigheter och tillgång till konfigurationsfiler för TeamCity. Även uppstart av TeamCity eller då användning återupptogs efter en tid av TeamCity som varit i drift under längre tid var ibland trögt. Vi hade även problem med virtuella nätverksadaptrar när vi försökte ställa upp virtuella maskiner. Ett annat moment som kan lösas på ett smidigare sätt i Linux är SSH uppkopplingar för fjärrstyrning. Detta kan då användas istället för TeamViewer. TeamViewer upplevdes som “trögt” av många testare i den mening att det fanns en viss latens/fördröjning och möjligtvis paketförlust i anslutningen mellan testarens enhet och servern och att testaren ibland fick klicka ett par extra gånger för att kunna navigera i TeamCity via TeamViewer. Anledningen till varför vi inte använde oss av Linux var för att vi inte hade förkunskap om detta operativsystem, men det är något som är värt att titta på och kanske hade vissa moment kunnat lösas på ett smidigare sätt om vi använt oss av Linux. ● Förberedandet av användbarhetstester kan automatiseras: De förberedelser som gjordes inför användbarhetstesterna var manuella. Delvis har detta att göra med att vi inte använde virtuella maskiner men en del inställningar gjordes även utanför en tänkt “VM-miljö”. Exempel på dessa förberedelser är schemaläggning av testare och uppdatering av status (t.ex. om en testare ändrar tid), sätta igång användarenkäten och TeamViewer för användning, skicka ut uppkopplingsinstruktioner till testare, sätta igång inspelning av testsession när testaren väl kopplat upp sig samt efterbehandling av testsessionen som innebar allt från att stänga ner användarenkäten och TeamViewer, till att uppdatera schemaläggning och bokföring Sida | 62 av testare, skicka ut “tack mejl” till testare och behandla svarsdatan. Många av ovan nämnda uppgifter kan automatiseras och förenklas, på så sätt minskar man arbetsbördan av att utföra testerna och kan därför fokusera sin tid på annat. ● Smärre fel i designen av användbarhetstestet: Ett antal smärre fel smög sig in i designen av den dokumentation som skapades för användbarhetstestet. Nedan presenteras dessa fel: ○ Bakgrundsinformation som testkandidater angav när de anmälde sitt intresse för användbarhetstestet och i användarenkäten innan testet utfördes behövde inte ha med fältet “task assignment”. Detta var till för att ge en rikare bild av testarens bakgrund men var något som de flesta testare inte tog till sig. Det räcker alltså om testaren endast anger “occupation”. ○ Både testgruppen och kontrollgruppen klarade de flesta uppgifter (eng. tasks) under användbarhetstestet. Båda grupperna gick igenom 17 uppgifter där kontrollgruppen klarade 17 uppgifter och testgruppen klarade 16.4 uppgifter i snitt. Det vore intressant att veta varför vissa inte klarade av alla uppgifter och just därför hade vi ett fritextfält där testaren motiverade varför hon inte klarade just den uppgiften. Dock kunde den beskrivande texten, som angav att testaren ska motivera varför hon misslyckades med uppgiften, vara lite mer detaljrik och kräva att testaren anger om felet låg i TeamCity eller om det var uppgiftsbeskrivningen som var vag. Man skulle även kunnat föra en diskussion med testaren efter en misslyckad uppgift för att få en bättre bild av vad som gick fel, detta är speciellt viktigt när man utför användbarhetstest, att man vet vad som gick fel och varför, så att detta senare kan åtgärdas. ● Användning av bättre verktyg: Detta examensarbete utfördes utan en budget. Vi använde oss av gratisverktyg och medel som försågs av Malmö Högskola för att kunna utföra samtliga moment. Dock hade vissa moment kunnat utföras både snabbare och kanske med en större grad av kontroll om vi använt oss av verktyg som kostar lite extra. Exempel på vad som hade kunnat göras annorlunda om vi haft en budget att tillgå presenteras nedan: ○ Användning av SurveyMonkey.com eller liknande verktyg för att utföra marknadsundersökning via enkäter men även användarenkäten som användes för användbarhetstestet. Vi använde oss i vårt arbete av Google’s gratisverktyg och dessa fungerar utmärkt när man vill få fram mindre och enklare artefakter och dokument, men det var mycket som var omständigt och saknades i t.ex. Google Forms. En teknisk begränsning var att det inte går att manipulera olika element samtidigt och utföra flera operationer åt gången (eng. bulk operations). Detta innebär att en uppställning av t.ex. 20 frågor tar relativt lång tid eftersom man inte enkelt kan behandla och återanvända tidigare inmatningar. En annan teknisk begränsning var att Google Forms stöd för logisk utgrening är bristfällig och därför kräver Sida | 63 kringgående (eng. workaround) som även dessa har begränsad användning. Exempelvis vill man ofta dölja vissa element och endast visa dessa om användaren svarat på ett visst sätt, detta kan inte göras i Google Forms och innebär därför att svarsobjektet presenteras med lite för mycket information än vad som är nödvändigt. ○ Rekrytering av testare via tjänster som t.ex. UserTesting.com. Med hjälp av denna typ av tjänst kan man snabbt och enkelt skräddarsy ett användbarhetstest och få testare som är avlönade för att utföra testet. Efter utförda test får man en detaljerad rapport och andra artefakter för att bedöma hur pass användbar systemet som man testat är. Tjänsten UserTesting.com kostar $49 för en videoinspelning eller $225/månad. En fördel med att använda sig av denna typ av tjänster är att man snabbt kan få svarsdata som kan bearbetas. Momenten med att skicka ut inbjudningar för marknadsundersökningens enkät och användbarhetstestet var rätt tidskrävande. Marknadsundersökningen nappade individer på rätt snabbt, inbjudningarna för användbarhetstestet tog dock en lite längre tid trots att vi nådde ut till mer än 400 individer för båda delarna. Denna tid kunde ha sparats in genom att använda sig av olika tjänster där man förses med en grupp testare. ○ Slutligen vill vi påpeka att hårdvara även kan användas för användbarhetstest som utförs fysiskt (ej via internet). Exempelvis kan man använda sig av olika instrument som “eye tracking” för att få in rik data från testare som på ett mer tillförlitligt sätt beskriver hur testaren upplever utförandet av användbarhetstestet. Detta kräver antingen att hårdvaran finns tillgänglig för oss och att testerna då måste utföras lokalt eller att testare som befinner sig på olika platser måste ha tillgång till hårdvaran eller teststudios varifrån testerna kan utföras. Sida | 64 6.3 Fortsatt forskning En del nya frågeställningar uppkom under genomförandet av denna studie. Det finns nog många olika spår som man kan gå vidare på för att utforska CI-system: ● Man skulle kunna titta på vad som gör vissa CI-system bättre än andra. Konsensus verkar vara att CI-system i de flesta fall är nyttigt för verksamheter, men om man istället för att titta på vilka krav ett CI-system ska uppfylla tittar på vad det är som gör att vissa utvecklingsteam använder sig av en viss CI-systemmjukvara istället för en annan, kan man nog ta reda på en hel del intressanta saker kring state-of-the-art CI-system. ● Man kan titta på vilka olika typer [13] av CI-system som finns. Man utgår från en modell [4] och tittar på hur olika delar av ett CI-system hänger ihop samt redogör för varför vissa typer används i vissa sammanhang. ● Analysera CI-system utifrån en reglerteknisk synvinkel där man tittar på vad som händer när ett överflöde av incheckningar sker. Hur hanterar utvecklare ett oreglerat flöde av arbetsenheter som bearbetas av CI-systemet, motverkar detta själva continuous integration-processen eller kan CI-system anpassas för att hantera dessa typer av “svängningar”? ● Skapa CI-systemmjukvara som kan integrera och använda sig av befintliga verktyg och plugins som finns till andra CI-systemmjukvaror. ● Implementera flera olika CI-system och kravtesta dessa enligt de krav som vi framfört. Vidareutveckla vår modell för att utvärdera CI-system. Sida | 65 Referenser Bibliografi [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] K. Marcin, B. Craig, “Continuous integration in .NET”, Stamford: Manning Publications, 2011. Y. Ki, M. Song, ”An Open Source-Based Approach to Software Development infrastructures”, ASE, 2009, s. 525-529. K. Beck, Extreme Programming Explained: Embrace Change, Upper Saddle River: Addision-Wesly, 1999. D. Ståhl, J. Bosch ”Modeling continuous integration practice differences in industry software development”, Journal of Systems and Software, vol. 87, s. 48-59, Januari 2014. M. Fowler, “Continuous Integration”, maj 1, 2006, http://martinfowler.com/articles/continuousIntegration.html. [Hämtad: 25 feb 2014]. M. Larsson, N. Lindholm, "Den agila utvecklingen. En studie baserad på den agila metodikens utformning i praktiken," Examensarbete, Malmö högskola, Sverige, 2009, http://muep.mah.se/handle/2043/8343. [Hämtad: 12 mars 2014]. Abdul, F.A; Fhang, M.C.S. “Implementing Continuous Integration towards Rapid Application Development”, ICIMTR, 2012, s. 118-123. Volodymyr Melymuka. TeamCity 7 Continuous Integration Essentials: A step-by-step introductory tutorial and intelligible practical guide to successfully applying Continuous Integration via TeamCity, Birmingham: Packt Pub, 2012. P. Duvall , M. Steve, G. Andrew. Continuous integration: improving software quality and reducing risk, Saddle River. NJ: Addison-Wesley, 2007. Farley, Dave; Humble, Jez. Continuous Delivery Reliable Software Releases through Build, Test, and Deployment Automation, Boston: Pearson Education, 2010. M. Bathie, “Continuous Integration- Basic Overview and Best Practices”, CollabNet, April 11, 2010, http://blogs.collab.net/cloudforge/continuous-integration-overview-best-practice. [Hämtad: 7 mar 2014]. L. White, “Continuous Integration Strategies”, Red Hat, nov 8, 2013, http://developerblog.redhat.com/2013/11/08/ci-strategies. [Hämtad: 6 mar 2014]. C. T. Brown, R. Canino-Koning, “Continuous Integration”, The Architecture of Open Source Applications, first edition, A. Brown, G. Wilson, Calif. : Creative Commons, 2011, s 125-139. E. Duvenage, “Continuous integration basics”, WordPress, nov 14, 2011, http://www.eugeneduvenage.com/series/continuous-integration-2/. [Hämtad: 7 mar 2014]. H.M. Yuksel, “Using continuous integration and automated test techniques for a robust C4ISR system”, ISCIS 2009, s. 743- 748. Eun Ha Kim, “Implementing an Effective Test Automation Framework”, COMPSAC 2009, s. 534-538, 20-24. Sida | 66 [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] I. Sommerville. Software Engineering: International computer science series, Ninth edition, Boston: Addison-Wesley, 2001. Future Publishing Limited. “The new design methodologies”, Oct 30, 2012, http://www.creativebloq.com/design/new-design-methodologies-1012599. [Hämtad: 15 aug 2014]. Livermore, J.A. “Factors that impact implementing an agile software development methodology”, SoutheastCon, 2007, s. 82-86, 22-25. QAI Global Service. “ Agile Methodology”, http://www.qaiglobalservices.com/SCRUM-Master-Agile-Methodology-Consulting.html. [Hämtad: 15 aug, 2014]. Ronald E. Jeffries. “What is Extreme Programming?”, Xprogramming, March 16, 2011 http://xprogramming.com/what-is-extreme-programming/. [Hämtad: 15 aug 2014]. J. Baumeister, J. Reutelshoefer. “Developing knowledge systems with continuous integration”, Proceedings of the 11th International Conference on Knowledge Management and Knowledge Technologies, 2011, vol 33 , 4 sidor. PRQA Programming Research. “Continuous Integration”, http://www.programmingresearch.com/products/continuous-integration-jenkinsplug-in/. [Hämtad: 21 maj 2014]. M. Saunders; P. Lewis; A. Thornhill, Research methods for business students, Fifth edition, Harlow: Pearson Education Limited, 2009. G. Borrêga, “Functional Requirements and Their Poor Cousins: The Truth About Non-Functional Requirements (NFRs), Platform - OutSystems, mar 25, 2013 https://www.outsystems.com/blog/2013/03/the-truth-about-non-functionalrequirements-nfrs.html. [Hämtad: 3 aug 2014]. M. Griffiths, “Non-Functional Requirements - Minimal Checklist”, Leading Answers, march 29, 2009, http://leadinganswers.typepad.com/leading_answers/2009/03/nonfunctionalrequirements-minimal-checklist.html. [Hämtad: 5 aug 2014]. T. Stålhane, “Non-functional requirements”, NTNU, http://www.idi.ntnu.no/emner/tdt4242/materials/Non-functionalrequiements.ppt. [Hämtad: 5 aug 2014]. P. B. Hoggett, “Making Quality Software: 12 non functional requirements every app should have”, WordPress, jan 7, 2011 http://eyefodder.com/2011/06/quality-software-non-functional-requirements.html. [Hämtad: 6 aug 2014]. Agileheads, “Continuous Integration Basics”, mar 8, 2012, http://agileheads.wordpress.com/2012/03/08/continuous-integration-basics/. [Hämtad: 8 mar 2014]. P. M. Duvall, “Continuous Integration”: Improving Software Quality with Continuous Integration, 2007, Stelligent Inc, http://www.wjug.org/wjug/docs/ci-quality-bw.pdf. [Hämtad: 8 mar2014]. Sida | 67 [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] Xamarin, “Introduction to Continuous Integration with Xamarin”: Integrating Xamarin Projects into a Continuous Build Workflow, http://developer.xamarin.com/guides/cross-platform/ci/intro_to_ci/. [Hämtad: 9 mar 2014]. D. Bowler, “Ten Best Practices For Continuous Integration”, CollabNet, okt 9, 2012, http://blogs.collab.net/devopsci/ten-best-practices-for-continuous-integration . [Hämtad: 10 mar 2014]. E. Crewe, “Continuous Integration (C.I)”, https://docs.google.com/presentation/d/1Lagu5-PZp22XxL2voBmORv04R6UngRUJ s5SClshT2Ck/present. [Hämtad: 11 mar 2014]. W. Billingsley, J. Steel, “A comparison of two iterations of a software studio course based on continuous integration”, ITiCSE, 2013, s. 213-218. S. Stolberg, “Enabling Agile Testing Through Continuous Integration”, AGILE 2009, s. 369-374. John W. Creswell. Qualitative, Quantitative, and mixed methods approaches, 4th edition, Lincoln: SAGE Publications, 2014. Sarah L. Collie, P. Jesse Rine; ”Survey Design: Getting the results you need”, Office of Process Simplification, May 26, 2009, http://www.virginia.edu/processsimplification/resources/survey_design.pdf. [Hämtad: 6 maj 2014]. Oppenheim, A. N. Questionnaire design, interviewing and attitude measurement, New edition, Continuum, London and New York, 2001. Stukát, S, Att skriva examensarbete i utbildningsvetenskap, upplaga 2, Lund: Studentlitteratur AB, 2011. E. Gotab, Forskningsetiska principer: inom humanistisk-samhällsvetenskaplig forskning, Sverige: Vetenskapsrådet, 2002. Thought Works. “Continuous Integration”, http://www.thoughtworks.com/continuous-integration. [Hämtad: 1 aug 2014]. Quyen L, Nguyen. “Non-Functional Requirements Analysis Modeling for Software product Lines”, MISE, 2009, s. 56-61. E. Folmer, J. Gurp, J. Bosch. “Software Architecture Analysis of Usability”, Berlin Heidelberg: Springer-Verlag, 2005. G. Verheugen. Den nya definitionen av SMF-företag: Användarhandbok och mall för försäkran, EU: Europeiska kommissionen 2006. E. Folmer, J. Gurp, and J. Bosch. “Scenario-based assessment of software architecture usability”: In Proceedings of Workshop on Bridging the Gaps Between Software Engineering and Human-Computer Interaction (SE-HCI). IFIP, 2003, s. 61–68. Bass, L; Clements, P.; Kazman, R. Software architecture in practice , 3 uppl, Upper Saddle River NJ: Addison-Wesley, 2012. J. Sauro, “Measuring Errors in the User Experience”, Measuring U, Maj 15, 2012, http://www.measuringusability.com/blog/errors-ux.php. [Hämtad: 5 sept 2014]. J. Sauro, “Measuring Usability Average Task Times in Usability Tests: What to Report?”, Measuring U, April 21, 2010, http://www.measuringusability.com/average-times.php. [Hämtad: 4 sept 2014]. Sida | 68 [49] [50] Khushboo. S, Kishore. M. N, “Continuous Integration Using Team Foundation Build” Microsoft Developer Network, Microsoft Corporation, jan 2006, http://msdn.microsoft.com/en-us/library/ms364045(v=vs.80).aspx. [Hämtad: 1 aug 2014]. T. Krishnan, “Continuous Integration & Hudson”, Slideshare, May 03, 2010, http://www.slideshare.net/thyagk/continuous-integration-system. [Hämtad: 23 mar 2014]. Sida | 69 Bilaga 1 2014-10-14 Historical background © 2014 Edument AB. All Rights Reserved Continuous Integration & Deployment System Development Methods Kent Beck Martin Fowler In 1997, have Kent Beck and a team of developers at Chrysler Comprehensive Compensation (C3) project, invented Extreme Programming (XP). [1] Martin Fowler said: “This was my first chance to see Continuous Integration in action with a meaningful amount of unit tests”.[2] System Development Methods The most pupular traditional sequential methods in system development: Ian Sommerville Development methods is a must to manage and improve development process in any organization working with system development.[3] Waterfall Method Waterfall method is an old method of those traditional sequential methods.[3] In which the work process is flowing downwards • Waterfall method • Agile method • Extreme programming Agile methodologies Agile is a newer approach of those traditional sequential methods and a generic term for several development methods. . 1 2014-10-14 Agile Development Methodology Agile changed the way devlopers organize their work. With Agile developers analysis, designs, builds, and tests depends on pruduct’s requirements. Continuous Integration (CI) "Continuous Integration originated with the Extreme Extreme Programming (XP) XP is one of Agile software development methods. It was developed to handle the needs of software development. It performed by teams of few developers to be commensurate with the changing requirements. [1] What is CI? Definition 1 Programming development process, as one of its original twelve practices” [2]. What is CI? Why CI ? Definition 2 A developers goal is to create perfekt applications with less time and work as possible. Reaching this goal is not easy now, because the applications are getting more complex and consists many parts. [5] 2 2014-10-14 One of the most important keys to improving applications and streamline the work is to automate som parts of the work that are possible to automate. [5] One of the best ways to automate som of the work is to implement Continuous integration (CI) [5] Reasons of using CI • Reduce risks: Bugs and problems can be detected and solved earlier by implementing a CI-system, because the testing and integration is already done earlier in the developementprocess. [5] Reasons of using CI • Deployable software: To make sure that the developed software will work as expected the installation process has to be automated. [5] Which leeds to bettersoftware. Reasons of using CI • Increase project visibility: Project members’ll get better control over the project because of the feedback mechanism, which allows them to see the final results and place of errors to be fixed. [5] Reasons of using CI • Fast incremental builds: CI provides faster build, test and feedback which helps developers to finde bugs and errors earlier in the development process. [5] 3 2014-10-14 Frequency of performing builds 0% 0% 21% 79% CI-Tools Essential CI-Tools The quality of a CI-system depends on tools that the system contains. We can either buy an expensive CIsystem that is feature-proof and often easy to use, or we can choose a CI-system that is less future-proof and often require more work before it can be used, but are almost for free or low cost. [5] • Helps developers to revert the codebase to a bug-free state in case of build fail, unittest fail or bugs detection.[5] Advantages with CI-system Other Stable Reliable Low cost Fast Easy to troubleshoot Ease of use None 0 Responses 5 Ease of use 0 23 Easy to troubleshoot 15 10 15 • Source code control • Continuous integration server • Feedback mechanism • Build manager • Unit test framework • Code analysis tool • Testing tools [5] CI-Advantages Advantages with CI-system None Continuously Daily Weekly Monthly 20 25 Fast Low cost Reliable Stable Other 7 14 16 19 10 • Fixing integration and problems continuously avoids last-minut stress of releasing data. 4 2014-10-14 CI-Advantages CI-Advantages • Early warning when the code is broken or incompatible • Povides fast feedback to developers about code quality and functionallity. • Early warning when detecting incompatible changes on the code • Frequent controll on the code helps developers to create better and less complex code. • Makes the current build available all times so that developers can test, demonstrate, or release the build. • Metrics that developers get from automated testing helps developing good quality and functionality code. • Provides fast unit testing of all changes CI-Disadvantages CI-Disadvantages survey • Some developers complaining that Continuous Integration causes kind of bottleneck at the work because of the hard roles. [5] Disadvantages with CI-system Other Unstable Unreliable High cost Slow Difficult to troubleshoot Difficult to use None 0 None Responses 20 5 Difficult to Difficult to troublesho use ot 1 4 10 Slow 1 15 20 High cost Unreliable Unstable 4 1 25 Other 3 6 CI-Disadvantages • Increment of maintenance and hardware costs. [6] • Experience for the first-time setup required. • It requires speciell software to get best results. • CI causes a backup because developers cannot check in code that is not completed. Advantages VS Disadvantages Most developers who use CI believe that the advantages of using CI will covers the disadvantages. Because they will save both time when they find and fix integration problems earlier in the development and they will save money when they complete the project earlier. [6] 5 2014-10-14 CI-Workflow ” In the CI process, developers check code into the version control repository. The automated CI system polls the repository for changes and then builds and tests the code. Results are posted to a feedback system where the team members can see the results” [5]. Manual Build & CI-server Manual Build Here the developer has to check out the head of the mainline in the integration machine where he now can find his last checkin. He then starts the integration build , and wait for results. He’ll be done with his commit if the buid succeed. [2] Why manual build? Doing time schedule buildings, like every night or in specific time doesn’t means that it’s continuous build not either Continuous Integration because the main point with continuous integrations is to detect and fix bugs and problems as soon as possible. [2] James Shore A schedule build like every night means that bugs and problems will lie undisconverd in the system for a long time and that will take more time to detect and remove them. And this is contrary to the principle of Continuous Integration. [2] Why manual build? • It’s easier and faster to detect and fix the problem by using manual build . The problem will be one of 3 things if something goes wrong. - your own code - Integrations with someone else code - Enviromental changes. [7] • “The code in revision control always builds and passes tests. Period”. [7] Why manual build? • We do not need to fix somebody else's mistakes or broken build due to negligence. • Manual build leeds to better test and better design because it’ll keep your build times down and avoids long integrations. 6 2014-10-14 CI-Server It acts like an observer to the repository because as soon as the repository finishes a commit, the server will send the source automatically onto an integration machine to start the build and then send feedback to developer by e-mail, SMS or dashboard. [2] CI-Benefits • • • • • • • • No more long integrations [8] Better communication Increase project visibility Detect bugs and problems faster Saving alot of debugging time Enhance confidence and improvement No more worrying about not working codes. Faster software delivery by reducing integration issues Why CI- Server? CI-Server is a helpful tool according to developers who are using it. [2] for example CI server’s web pages provides: • An indication of who is building. • What changes made. • History of changes. • Last activities on the project. • Control of what developers have been doing. • Get a sense of the project's status. CI-System Practices Continuous Integration system has many practices. And the best ten practices according to Martin Fowler are: [2] 1. ”Maintain a Single Source Repository”[2] which can be demonstrated in several stages: • A clean machine should be able to fully build your application without external dependancies. • Make sure to use a source code management system, also make sure everyone uses the repository to checkout and commit their code to. • Do not store actual build artifacts such as binaries or executables. • Store everything you need in the repository to fully build your application including source code but also test scripts, properties files, install scripts, third party libraries, IDE configurations. • Branching is a feature of source code management systems, but make sure you use it to a bare minimum. Make sure everyone works off the mainline and frequently integrates their changes into mainline. 7 2014-10-14 2. ”Automate the Build” [2] Going from source code compilation to run time execution can be a complicated process and shouldn't be handled manually by developers as the process is prone to human errors and can be automated. 3. ”Make Your Build Self-Testing” [2] Traditionally, building an application means compiling, linking and executing code, omitting the process of testing the code for bugs. While IDEs can catch obvious bugs through static analysis many slip through the net. A good way to add another level of error detection is to include automated tests in the build process. Make sure to include everything in the automated build. Going back back to (1), nothing else should be required from a clean machine to fully build the system. Make sure your build tool can analyze what needs to be built and customize the build according to the changes that have been made, no need to rebuild everything from scratch if a minor change was made. For self-testing code to be useful you need to write a whole suite (a bunch of) automated tests that cover a large part of the code base (high code coverage). Going back to (2), the whole suite of tests needs to be able to trigger from a simple command. For a build to be self-testing the failure of a test should cause the build to fail. 4. ”Everyone Commits To the Mainline Every Day”[2] Of course, tests can't find everything and poorly written tests can't detect the presence of bugs. However, having imperfect tests run frequently is preferred over perfect tests that are never written at all. Integration is primarily about communication. Frequent integration allows developers to quickly notify their team about changes of the project. Of course, there are prerequisites for the developer before a commit to the mainline should be made. 8 2014-10-14 The developer needs to update their working copy to match the mainline (other developers may have made changes since the last checkout), resolve any conflicts and make sure that his code builds locally without errors, including passing tests. Only then is he free to commit to the mainline. By being engaged to this practice, developers quickly identify conflicts within the project. Conflicts that stay undetected for weeks can be very hard to resolve. A series of errors can be detected early and resolved, such as compilation conflicts and textual conflicts. Even bugs can be detected that would otherwise occur as a result of lack of integration. It is advized that developers commit to the repository at least a day, preferably several times a day. The more frequently your team commits, the easier it is to identify and resolve errors. Furthermore, breaking down a days of work into small chunks of a few hours helps track and provide a sense of progress. The regularity of commits can help project managers to track progress with KPI. 5. ”Every Commit Should Build the Mainline on an Integration Machine”[2] Every time a developer commits his code, the CIsystem should trigger a build of the mainline. 6. ”Keep the Build Fast”[2] The developer who commits needs to monitor the mainline build so it can be fixed if it breaks. He's not done until the CI system is done building and testing the latest revision of the code. Practically impossible if building takes a lot of time, more about this in (6). The whole point of CI is to provide rapid feedback. This can only be enforced by optimizing the build process, as a long build can become a bottleneck, disrupting the CI process and wasting precious development time. The build time relies on the complexity and scope of the project. The XP guideline of a ten minute build is within reason. 9 2014-10-14 Concentrated effort should be put in to optimizing the build process as every minute reduced off the build time is aminute saved every time a developer commits ,which could add up to a lot of time! A solution to this problem is setting up a deployment pipe (aka. build pipeline or staged build) which basically means that the ”monolithic big bang” build will be separated into several stages. For more complex projects, the usual bottleneck lies in the testing phase. More so when tests involve external services such as databases. The first stage build will be called the commit build. During this stage only the highest priority tests will be run, to ensure a good balance between code coverage and build time. Once the first stage build is successful developers can resume development of the system. Meanwhile further thorough tests can be run ”in the background” which leads us to the second stage build. The suite of tests that is run during the second stage buildis more encompassing and involves testing of endto end behavior, thus it might take a couple of hours to run. With the first stage build having compiled and run localized unit tests (where external services are comitted), the secondstage build run tests that involve larger scale interactions. Builds performed after the initial commit build are said to contain ”pure tests” as they thoroughly investigate for errors that are not detectable in the commit build. Whenever bugs are detected in stage builds subsequent to the commit build, developers try to adapt or introduce new tests to the commit build, to assure that the bug stays fixed in the commit build if it should reappear at later releases. The second stage build runs whenever higher priority tasks are not run and picks up the latest stable commit build for further testing. The example of the two stage pipeline is used for explanatory purposes. In practice, any number of stages can be used in a deployment pipeline. Furthermore, builds subsequent to the commit build can b e parallelized and the workload may be distributed and scaled over a large number of machines. By distributing the workload of later build stages, it is possible to introduce further automated testing without sacrificing the need for a fast building of the commit build. 10 2014-10-14 7. ”Test in a Clone of the Production Environment” [2] The whole point of testing is of course to detect and resolve any issue that the system would have in production (the environment where customers use the system). Issues may arise if the production environment is significantly different from the development and tes ting environment. In practice, it may be hard to replicate the production environment. For example if you're writing desktop software it's virtually impossible to test your system in every kind of environment running various third party software. The developer should however be aware that Every difference in the test and production environment poses a risk and may potentially be a source of error. 8. ”Make it Easy for Anyone to Get the Latest Executable”[2]. Agile development of software addresses one of the most difficult parts of software development: How do we build the right software for the customer? It's often very hard for the customer to specify what he wants in advance, it's much easier to point out what needs to be fixed or changed. Ideally, the same version of the database software is running under the same version of operating system in the two environments.All libraries that are present in the production environment should also be present in the test environment. The same IP addresses and ports should be used, running on the same hardware and platform, etc. Virtualization is a great way to put together test environments as everything can be saved into the virtualization. Virtualization also allows for running of multiple tests on one machine or even simulation of multiple machines in a network on a single physical machine. For this purpose, everyone involved with the proj ect including the customer should with ease be able to get hold of the latest stable executable. Make sure there's a place where people involved with the project have access to and can get hold of the latest stable executable. Preferably, also make sure that previous stable executable are available. 11 2014-10-14 9. ”Everyone can see what's happening” [2] As mentioned in (4), (Continuous) Integration is Primarily about communication. Make sure everyone can easily see the state of the system and recent changes that have been made. The state of the mainline build is one of the most i mportant things to communicate, it's important that everyone is on the same page. Some CIsystem software offer dashboards that display if there's a build in progress and the state of the most recent mainline build. Furthermore, CIsystem software can provide more details about these events. Often times, team leaders are interested in this kind of information to get a sense of who's being active and to keep an overview over the sta te of the system. Another advantage with dashboards is that Peripheral people that are not co-located with The main team of developers can from a remote location get a sense of the project's status. Many teams are not content with a dashboard, instead hooking up various ”build sensors” such as light display sand lava lamps with red and green colours indicating stable or broken states of the mainline build. Yet another advantage is that dashboards can be used to aggregate build information and project status of several different projects, thus providing a centralized place where this information can be viewed. But CI-systems aren't necessary to enforce this practice. Unique physical tokens such as rubber chickens or toys may be passed around the office to indicate what developer in a team is doing the current build. 10. ”Automate Deployment”[2] In other cases, aural signatures, such as ringing a bell, are used to communicate the status of builds. Regardless of how teams choose to communicate,it' s very important that the state of the mainline build is communicated in a clear way and that this information is readily available to anyone involved in the project! As previously mentioned, usually several environments are used during development of software at enterprise level. Since executable are frequently moved between These environments, it's preferred to automate the deployment process. This is made possible and can be simplified and automated with scripts. 12 2014-10-14 Of course, this also means that deployment into Production should be automated and possible to do with ease. While it is true that deployment into production is not something that every development team will want to do every day, a routine for doing this should nevertheless be set up to assure that this process is easy to set in motion once it's needed and that deployment to production can be done quickly. As well all know, bad things happen and if worst comes to worst, and a critical bugs are found in the production environment it's good to be able to quickly revert to the last known stable state. Automated rollbacks also reduce tension in the team regarding deployment, encouraging developers to deploy more frequently at lower risk ofcritical failure, meaning new features get released quicker! This allows developers to test out new features, fixes and changes in a smaller scale before fully deciding on whether to keep the changes or discard them Another benefit of automated deployment is as with other forms of automation, the reduced risk of human errors. It's a cheap practice to utilize as it uses the same capabilities as mentioned in (6). Another capability that should be considered is Automated rollback. Automated deployment can even be taken one step further! The practice of deploying a trial build with the lat est features and fixes to a subset of users allows the development team to see the impact of the latest changes before gradually rolling the latest build out to the entire user base. How To Du It? According to (thoughtworks)[8] • Developers have to check out their code into their own workspaces. • Developers have to commit changes they have made to the repository. • The CI server monitors the repository and checks out changes when they occur. • The CI server builds the system and runs unit and integration tests. • The CI server releases deployable artefacts for testing. • The CI server assigns a build label to the version of the code it just built. • The CI server informs the team of the successful build. • If the build or tests fail, the CI server alerts the team. • The team fix the issue at the earliest opportunity. • Continue to continually integrate and test throughout the project. 13 2014-10-14 Team responsibilities It’s important that a team developers have some kind of policies to follow, when working with Continuous Integration. Policies that let teams having better control and manage on themselves, to complete the work successfully. [8] CI- Team Objections And Solutions When the job increases, developers have to change the style of their work to fet the new situation. This can lead to objections from some team members that working with Continuous integration like the following: [5] CI- Team Objections And Solutions Objection: • It’s difficult for developers to follow up the continuous and very fast changes. [5] Solution: • It’ll be easier to follow up if dovelopers start out with a simple build a day, and increase it later on when they feel that they can. Team responsibilities (thoughtworks)[8] have explained some polices that developers have to follow: • • • • • ”Check in frequently Don’t check in broken code Don’t check in untested code Don’t check in when the build is broken Don’t go home after checking in until the system builds” [8] CI- Team Objections And Solutions Objection: • CI brings additional tasks to developers like CIsystem setup and maintainance and this will take them away from the main task. [5] Solution: • Developers will save much more time when the systen is fully integrated because they will be able to build code, test code and fix bugs earlier and faster . [5] CI- Team Objections And Solutions Objection: • CI requires additional expenses when it comes to hardware and software costs. [5] Solution: • You can actuelly start out with old equipments lik an old PC as your CI server and so on. [5] 14 2014-10-14 CI- Team Objections And Solutions Objection: • Developers have to compile and test their code. Solution: • Compiling and testing helps developers to use their brains to solve application problems. But CI automates much of the work process. [5] Objection: • It takes along time before a CI-system can be included into the project. [5] Solution: • You’ll be able to use som of CI-tools no matter how much time your project needs to use CI. But the easier and better way to do that is by creating the new project under CI process. [5] Size of the company that using with CIsystem CI and type of business 5% 5% 0% 3% CI- Team Objections And Solutions Administration 13% Computer / IT Technology / Science 74% 21% 50% 29% Economy / Finance Logistics / Transport Other Percentage of developers uses or affected by the CI-solution 18 Company's performance after using CI-system 0% 16 Small (up to 50 employees) Medium (50 - 250 employees) Large (over 250 employees) 3% 14 Percentage (1=10%, 5=50%, 10=100%) 12 10 8 6 Responses 4 Worse performance No change 97% Better performance 2 0 1 2 3 4 5 6 7 8 9 10 15 2014-10-14 Continuous Delivery Continuous Delivery (CD) "Continuous delivery is a series of practices designed to ensure that code can be rapidly and safely deployed to production by delivering every change to a production-like environment”. [9] “For many organizations Continuous Delivery isn’t just a deployment methodology, it’s critical to doing business” [10] CD- Survey CD- Benefits Som of CD benefits are the following: [12] • Delever most important changes and improvements faster. • Ability to release in high quality and usability. • Ability to increase development team in a continuous process by skipping batch processes. When to use CD? CD- Benefits • Save money and time by eleminating batch process. • Developers have more time to think and complete the work. • Developers work in low stress condition. • Improve cooperation between development and operations Continuous Delivery should be used when: [12] • • • • • Having online service Having longer release time Having a new product to develope Having a big project with many contributors Having to release security patches frequently 16 2014-10-14 CD- Practices CD- Practices Som of CD practices: [13] 1. Manage and version controll your code and include everything like documents, configuration parameters, databases. 2. Automate everything that make sense to you like unite testing, integration testing, regression testing. 3. Automate your deployments. Continuous Deployment 4. Fix the problem that you get probably at it’s root and follow the process again from the beginning. 5. Allocate some time for frequent maintenance and improvment if you want to reach the benefits. 6. Decide a clear process and let your teams follow it, everyone should cooperate to get CD started, and to keep it going. Continuous ( Delivery VS Deployment) 1. Deliver every change of code to an environment continuously to be tested automatically. [15] Jez Humble According to (Jez Humble) who is the author of Continuous Delivery. “it is the practice of releasing every good build to users” [14] 2. “Then every change that passes the automated tests is deployed to production automatically.” [15] Continuous Improvement Continuous Improvement “A process based on continuous improvement is essential to the rapid delivery of quality software. “ [14] “Continuous improvement is an ongoing effort to improve products, services or processes. These efforts can seek “incremental” improvement over time or “breakthrough” improvement all at once”. [16] 17 2014-10-14 Continuous improvement tools Four-step quality model or plan-do-check-act (PDCA) cycle is the most used tool for continuous improvement. It’s also known as Deming Cycle or Shewhart Cycle: [16] What PDCA- cycle means? “Plan: Identify an opportunity and plan for change. Check: Use data to analyse the results of the change and determine whether it made a difference. Do: Implement the change on a small scale. Act: If the change was successful, implement it on a wider scale and continuously assess your results. If the change did not work, begin the cycle again”. [16] Continuous improvement methods There are many methods for continuous improvement. But the widely used methods are Six Sigma, Lean, and Total Quality Management . All of them are found to enhance teamwork, employee involvement, systematize processes and reducing defects, variation and cycle time. [16] (Continuous and Continual) Improvement? “The terms continuous improvement and continual improvement are frequently used interchangeably. But some quality practitioners make the following distinction”. [16] (Continuous VS Continual) Improvement “Continual improvement: a broader term preferred by W. Edwards Deming to refer to general processes of improvement and encompassing “discontinuous” improvements that is, many different approaches, covering different areas. Continuous improvement: a subset of continual improvement, with a more specific focus on linear, incremental improvement within an existing process. Some practitioners also associate continuous improvement more closely with techniques of statistical process control”. [16] David Bolton “A Version Control System (VCS) is an application, desktop or web-based that lets developers keep their source code and binary and resource files stored away along with information about different versions” [19] 18 2014-10-14 Version Control Why Version Control? ”The simplest way to explain Version control is that it's used to keep a repository of your project files together with a history of all your code changes in one place. This allows the developers of the project to track every change made to the code, who made the change and the reasons for the code change.”[20] ”Version control is essential when working with a team of developers. • Using version control will allow multiple developers to work on the same file at the same time. • If you were using version control you could just revert your code back to before you started developing that feature.” [20] Why Version Control? Version Control Options • ”Version control will record who wrote a piece of code. • Version control is also a good way to keep your code shared on multiple computers. • Tagging is an important feature you need to take advantage of when working with version control. When you have completed a piece of work and ready to deploy the code, you then tag this version of the code.” [20] SVN ”SVN or Subversion: Is very popular due to the fact that it's very easy to understand and very straight forward to work with. The WordPress plugin repository uses SVN. It works by having a central server for your repository, this repository is split into 3 key areas...Trunk, Branches and Tags. Each one of these areas have an important role to play. ” [20] ”There are many different types of version control, here we are just going to look at the two most popular version control repositories, Git and SVN.” [20] GIT ”At the moment GIT is probably the most popular version control which is aided by the popular websiteGithub. Like I said before GIT and SVN are quite similar but the workflow is a bit different. SVN has one central repository, but GIT has multiple repositories, one central repository but each developer has their own repository.” [20] 19 2014-10-14 Software configuration management (SCM) SCM Best Practices ”Using a SCM System To: • • • • • • • Jacky Estublier “SCM is the control of the evolution of complex systems,…, for the purpose to contribute to satisfying quality and delay constraints.” [17] Store and version all source code Utilizing private developer workspaces Third-party libraries Properties files Database schema Test scripts Install scripts” [18] Best Practice CI- Servers Comparison Name ”Utilizing Private Developer Workspaces • • • • Work in isolation Revert to known “good” states when needed Checkpoint their changes Share only mature, well-tested code with other team members” [18] Platform License Windowsbuilders Javabuilders MSBuild,NAnt, Visual Studio, Duplicates finder for .NET Ant, Maven 2/3, IDEA .ipr based, IDEAInspections, IDEADuplicates finder,Gradle TeamCity Servlet Container Proprietary Team Foundation Server Windows,VSTM Proprietary MSBuild Ant, Maven Shippable Hosted Proprietary MSBuild, NAnt Ant, Maven, Gradle QuickBuild Cross-platform Proprietary MSBuild,NAnt, Visual Studio Ant, Maven 1, Maven 2 Creative Jenkins/Hudson Servlet Container Commonsand MIT MSBuild, NAnt Ant, Maven 2 , Kundo Other.Builders Notification Rake, FxCop, Command Line E-mail, XMPP, RSS, IDE, SysTray Custom script, Command line E-Mail, SOAP Ruby, Python,Node.js E-mail, Campfire ,Java,Scala,C Sharp Rake, Shell script, Command Line E-mail, XMPP, RSS, GoogleTalk, Remote API Grails,Phing, Android, Email, Rake,Ruby, Cmake, GoogleCalendar, Gradle, SCons,Python IRC,XMPP, Shell script, Gant RSS, witter IDEIntegration Eclipse, Visual Studio, IntelliJ IDEA, RubyMine, PyCharm, PhpStorm ,WebStorm Integration Jetbrains Youtrack, JIRA, Bugzilla,FishEye, FindBugs, PMD, dotCover,NCover Visual Studio, Eclipse Unknown No GitHub, Heroku Eclipse, IntelliJ IDEA, Visual Studio JIRA Eclipse, IntelliJIDEA, NetBeans Bugzilla, GoogleCode, JIRA,Redmine, Mantis, Trac CruiseControl Cross-platform BSD-style NAnt, Rake, and Xcode Apache Ant, Phing, Maven catch-all 'exec' E-mail, CCTray Eclipse Unknown Bamboo Servlet Container Proprietary MSBuild,NAnt, Visual Studio Ant, Maven 1, Maven 2,Maven 3 custom script, command line, Bash XMPP, Google Talk, Email,RSS, Remote API IntelliJIDEA, Eclipse, Visual Studio FishEye,Crowd, JIRA,Clover AnthillPro Cross-platform Proprietary Shell script, Batch script, Cross-platform commandline, Groovy script,Make,[6] RTC Jazz,[7] TFS Build[8] Email, XMPP ,RSS, Systray Eclipse, Visual Studio (many)[9] MSBuild,[1]NAnt,[2 Ant,[4]Maven 1, 2, ] Visual Studio[3] & 3[5] Refrences References: [1] Kent Beck. ” Extreme Programming Explained”: Embrace change, U.S, 1999. [2]Martin. Fowler, “Continuous Integration”, http://martinfowler.com/articles/continuousIntegration.html [e- resurce], 2006 [3] Ian Sommerville,”software Engineering”, Ninth Edition, Addison-Wesley , 2011. [4] Duvall, Paul ; Matyas, Steve; Glover, Andrew. “Continuous integration”: improving software quality and reducing risk, Saddle River, NJ, 2007. [5] K.Marcin ; B.Craig, “Continuous Integration in .Net” [e-book], 2011 [6] V.Bakhov, “ Continuous Integration For Database Development” [e-resurce], 2011 [7] James Shor, “ The Art Of Agile”, http://www.jamesshore.com/Blog/ContinuousIntegration-on-a-Dollar-a-Day.html e- resurce. 2007 [8] http://www.thoughtworks.com/continuous-integration [9] Yuli Deng,”Continuous Delivery Software Developing System On Vlab Platform”, Arisona State University, 2013 [10] James, Turnbull, http://www.jamesturnbull.net/ [11] http://www.continuousagile.com/unblock/cd_costs_benefits.html [12] http://www.continuousagile.com/unblock/cd_costs_benefits.html [13] http://www.dbmaestro.com/2014/04/six-top-tips-for-continuous-delivery/ [14] J. Humble; D. Farley.” Continuous Delivery”: Reliable Software Releases Through Build, Test, And Deployment Automation, Addition Wesley, 2010 [15] http://puppetlabs.com/blog/continuous-delivery-vs-continuous-deployment-whats-diff [16] http://asq.org/learn-about-quality/continuous-improvement/overview/overview.html [17] Jacky Estublier.” Software Configuration Management: A Road Map”, Proceedings of the Conference on The Future of Software Engineering, USA 2000. [18] http://www.accurev.com/whitepaper/pdf/scm-continuous-integration.pdf [19] http://cplus.about.com/od/glossar1/g/versiondefn.htm [20] http://agile.dzone.com/articles/version-control-git-vs-svn> • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Slide 2: Kent Beck: http://blog.trifork.com/2012/12/07/goto-night-12-12-12-and-breaking-news/ Martin Fowler: http://bzmedia.com/agility/ Slide 3: Ian Sommerville: http://www.scotlandis.com/about-scotlandis/meet-the-board/biographies Slide 4: http://zenexmachina.wordpress.com/2013/04/03/prince2-processes-vs-agile-development-methodologies/ Slide 5: http://www.creativebloq.com/design/new-design-methodologies-10125997 Slide 6: http://id.wikipedia.org/wiki/Berkas:Agile_Method.jpg Slide 7: http://www.arieon.com/products.html Slide 8: http://xprogramming.com/what-is-extreme-programming/ Slide 9: http://blog.smartbear.com/codereviewer/the-value-of-continuous-integration-at-smartbear/ Slide 10: Martin Fowler: http://martinfowler.com/bliki/ Slide 11: Paul Duvall: http://research.gigaom.com/analyst/paul-duvall/ Slide 14: https://danceclasschallenge.files.wordpress.com/2013/02/i-get-it.gif Slide 15: http://www.easierliving.com/blog/2012/06/05/prepare-for-care-reducing-the-risk-of-stroke/ Slide 16: https://keystonebytes.com/remote-services-s/software-install Slide 17: http://socialmediatoday.com/amanda-ryan/951776/visibility-equals-credibility Slide 18: http://www.tutorialspoint.com/sdlc/sdlc_iterative_model.htm Slide 19: http://zeroturnaround.com/rebellabs/the-build-tool-report-turnaround-times-using-ant-maven-eclipse-intellij-and-netbeans/ Slide 22: http://zeroturnaround.com/wp-content/uploads/2013/08/CI-ecosystem-diagram.jpg Slide 24: http://www.lofric.com/en/UrinaryHealth/Problems-due-to-illness-or-injury/Strictures/Advantages-of-CID Slide 28: http://www.lofric.com/en/UrinaryHealth/Problems-due-to-illness-or-injury/Strictures/Advantages-of-CID Slide 31: http://www.programmingresearch.com/products/continuous-integration-jenkins-plug-in/ Slide 34: James Shore: http://www.agilebrazil.com/2012/en/programacao/convidados/james-shore/ Slide 91: James Turnbull, http://www.jamesturnbull.net/ Slide 93: http://blog.cloudbees.com/2014/05/the-business-benefits-of-continuous.html Slide 99: Jez Humble, http://www.oreilly.com/pub/au/5712 Slide 100: http://www.tryerr.com/2014/01/from-release-testing-to-continous.html Slide 101 http://www.soltiusme.com/soltius/services/continuous-improvements Slide 103 http://maaw.info/Chapter8.htm Slide 108: David Bolton: http://cplus.about.com/od/glossar1/g/versiondefn.htm Slide 115 : J. Estublier: http://arnetminer.org/person/j-estublier-312866.html Slide 118: http://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software 20 2014-10-14 © 2014 Edument AB. All Rights Reserved Introduction CI-server software are used to enforce and support Continuous Integration. Continuous Integration with TeamCity Introduction Installing TeamCity TeamCity is a popular CI-server software developed by JetBrains. In this presentation we explore TeamCity and learn how to use it. Installing TeamCity Installing TeamCity Installing TeamCity Download TeamCity from http://www.jetbrains.com/teamcity/download/ We will look at TeamCity 8.1.1 in this presentation but make sure you download the latest version for your personal or business use. Choose the features that you want installed. 1 2014-10-14 Installing TeamCity Choose the server port that you want TeamCity to use. Installing TeamCity Configure Build Agent properties. Installing TeamCity Installing TeamCity Specify which user will be running the TeamCity Server service. Specify which user will be running the TeamCity Agent service. Starting up and accessing TeamCity Starting up and accessing TeamCity Starting up and accessing TeamCity Now that you have installed TeamCity, let’s start it up and access it through the web browser. 2 2014-10-14 Starting up and accessing TeamCity Run the “runAll.bat” batch file with the “start” switch to start the TeamCity Server service. By default, you can use the following command: C:\TeamCity\bin\runAll.bat start Starting up and accessing TeamCity Starting up and accessing TeamCity Access the setup instruction page by typing in the IP adress and port of the TeamCity server machine (“localhost” in our case). Setting up TeamCity after installation Setting up TeamCity after installation TeamCity should be up and running constantly, however if you wish to shut TeamCity down then do the following: Run the “runAll.bat” batch file with the “stop” switch to stop the TeamCity Server service. By default, you can use the following command: C:\TeamCity\bin\runAll.bat stop Setting up TeamCity after installation Setting up TeamCity after installation In order to run TeamCity, we need to connect it to a database. Verify the location of the data directory. 3 2014-10-14 Setting up TeamCity after installation Setup your connection to your database of choice (we’re using MySQL). Setting up TeamCity after installation If the MySQL JDBC driver is not found in your environment, make sure you download it. Setting up TeamCity after installation Setting up TeamCity after installation Once downloaded, move the .jar file containing the driver to the TeamCity /lib/jdbc folder. Click on the “Refresh JDBC drivers” button and make sure TeamCity loads the driver correctly. Setting up TeamCity after installation Setting up TeamCity after installation Fill in the rest of the fields in the form in order to establish a connection to your database. Make sure a database is set up prior to filling out the form, the following statement may be used on your MySQL control panel to create a TeamCity compliant database. 4 2014-10-14 Creating a user account for TeamCity Creating a user account for TeamCity Creating a user account for TeamCity In order to log in and interact with TeamCity, you need to set up a user account. Creating a user account for TeamCity Creating a user account for TeamCity Access the “Create Administrator Account” page by navigating to the localhost/setupAdmin.html page. Fill in the username of the administrator and the password. Overview of TeamCity Overview of TeamCity Overview of TeamCity Now that we can log in to TeamCity as an admin user, let’s take a look at the different sections of TeamCity and what they do. 5 2014-10-14 Overview of TeamCity The first page that you’re presented with is the “Overview page”, also known as the “Projects page”. You have an overview of all projects from this page. Overview of TeamCity This is the “Agents” page. This page provides an overview of Build Agents. You can view properties of Build Agents here or set up new Build Agents. Overview of TeamCity This is the “Changes page”. VCS changes (changes committed to the repository) are displayed on this page. Overview of TeamCity This is the “Build Queue page”. Builds that have been triggered (and scheduled) will queue up and be listed on this page. Overview of TeamCity Overview of TeamCity This is the “User Settings page”. You can set up your TeamCity profile and user-specific settings on this page. This is the “Administration page”. Only a user with administrative privileges will be able to access this page. A wide range of global and project-specific settings can be accessed and changed from this page. 6 2014-10-14 Setting up a sample project Setting up a sample project Setting up a sample project Now that we have taken a look around TeamCity, let’s set up a sample project that we can work with. The sample project will be a Java-project, being built with an Ant build script and tested with the JUnit unit testing framework. Setting up a sample project Setting up a sample project Here’s an overview of our project. We have 2 Java-classes and a JUnit test class. We also have a custom build script which we will be using. Setting up a sample project Demo02.java is also a demonstration of a functional class. It’s included in this project to show that a project may of course consist of more than 1 class. Demo01.java is a demonstration of how what a functional class in a Java project can do. It has 2 methods that concatenate a string and calculate a sum. Setting up a sample project Test01.java is a JUnit test class that consists of a test suite containing 2 test cases. Each test case tests the 2 methods of Demo01.java: demoStringConcatenate & demoCalcSum. 7 2014-10-14 Setting up a sample project Setting up a sample project build_custom.xml is an Ant build script (the Eclipse-generated build.xml will not be used). This build script consists of various targets, on this slide we can see the “init” target which initializes file and folder structures pre-compilation. On this slide we can see the “build”, “clean” and “run” targets which compile the project, clean (ie. delete) generated binaries and other artifacts, and run the project. Setting up a sample project Running the project locally Running the project locally On this slide we can see the “test” target which runs JUnit tests included in the project. Running the project locally Running the project locally Now that we have a project in place, let’s run it in the IDE and in the CLI. We are using Eclipse as our IDE and Windows Command Prompt as our interfaces but of course any IDE and CLI can be used. Demo01 is running, also creating an instance of Demo02. “hello” and “world” is concatenated into “helloworld”. 5 and 10 is added up into 15. 8 2014-10-14 Running the project locally Test01 is running, displaying both console output stream (bottom) and the passing of unit tests (right). Both tests passed successfully. Running the project locally Demo01 can also be run through Ant via the CLI, this command directs Ant to build_custom.xml and runs the target “run”: ant -f build_custom.xml run Running the project locally build_custom is building and testing the project. Console output stream of the junit tests can be read. Running the project locally Test01 can aswell be run through Ant via the CLI, this command directs Ant to build_custom.xml and runs the target “test” (which performs unit tests): ant -f build_custom.xml test Setting up and installing Ant & JUnit Setting up and installing Ant & JUnit Setting up and installing Ant & JUnit We’ve demonstrated how to use Ant and JUnit both within the IDE and outside (via the CLI). Let’s take a step back and go through the installation and integration process of connecting Ant and JUnit to the IDE. 9 2014-10-14 Setting up and installing Ant & JUnit Navigate to the JUnit homepage (http://junit.org/) and read about JUnit or simply proceed to the installation page. Setting up and installing Ant & JUnit You should know have these 3 archive files in your download folder. Setting up and installing Ant & JUnit Refer to the Apache Ant manual if you have trouble installing Ant or want to learn more about Ant in general. Setting up and installing Ant & JUnit Navigate to the Apache Ant “Binary Distributions” page (http://ant.apache.org/bindownload.cgi) and download the .zip archive. Setting up and installing Ant & JUnit Refer to the JUnit FAQ if you have trouble installing JUnit or want to learn more about JUnit in general. Setting up and installing Ant & JUnit Installing JUnit in short: Place the hamcrest-core library and junit library in the /lib folder of your project. 10 2014-10-14 Setting up and installing Ant & JUnit For Eclipse, go into the project properties and add the JAR to the libraries in the Java Build Path. If you have a recent version of Eclipse, this isn’t necessary as JUnit should already be provided in the bundle. Setting up and installing Ant & JUnit Setting up and installing Ant & JUnit Installing Ant in short: Extract the contents of the apache-ant .zip archive into any folder, I’ve placed it in C:\ant. Make sure you correctly configure environment variables (refer to the Apache Ant manual) Setting up a VCS and commit code Setting up a VCS and commit code Try running the command “ant -version” from any directory in the CLI (Command Prompt). The version of Ant should be displayed. Setting up a VCS and commit code Setting up a VCS and commit code In this section, we will demonstrate how to set up a VCS (version control system) using a SVN (Apache Subversion) repository hosted on Google Code. We will also demonstrate how you can commit your project files to the repository. Navigate to the Google code webpage (https://code.google.com/) and click on “Create a new project”. 11 2014-10-14 Setting up a VCS and commit code Set up the parameters of your VCS. You can use Git, Mercurial or Subversion with Google Code, we’re going to use Subversion. Setting up a VCS and commit code Setting up a VCS and commit code Google Code provides a graphical interface to the SVN repository. Here’s an overview of the source code. Setting up a VCS and commit code So that’s how the interface of Google Code looks like, now let’s take a look at how to actually commit the code of the project. We’re going to use TortoiseSVN to commit code through a graphical interface. Of course this can also be done through a CLI but we will not cover this approach. Here’s an overview of commit messages and revision changes. Setting up a VCS and commit code Navigate to the TortoiseSVN webpage (http://tortoisesvn.net/) and download TortoiseSVN. Setting up a VCS and commit code Make some changes in the source code. 12 2014-10-14 Setting up a VCS and commit code TortoiseSVN spots the differences in the project folder (workspace). You must however first commit your existing codebase for it to track changes done to your project files. Setting up a VCS and commit code Any changes made are displayed here, including addition or removal of files (compared to the most recent revision, the HEAD revision). Click on OK to commit the changes. Setting up a VCS and commit code The changes are displayed and highlighted in the TortoiseMerge editor. Setting up a VCS and commit code Let’s commit the changes. Right-click on the project folder and select “SVN Commit…” Setting up a VCS and commit code Let’s inspect the changes. Right-click on the changed file and select “Compare with base”. Setting up a VCS and commit code We can also inspect committed changes between revisions through the Google Code graphical interface. Clicking on “diff” displays changes made in a particular file. 13 2014-10-14 Setting up a VCS and commit code Monitoring VCS changes via TeamCity Monitoring VCS changes via TeamCity Here’s an example of changes made between r30 and r31 (revision 30 and 31). A lot of code and comment was removed. Monitoring VCS changes via TeamCity Not every VCS has a graphical interface. In fact, most VCSes can only be accessed and interacted with via CLIs. Let’s take a look at how we can monitor the codebase and differences between revisions in the VCS via TeamCity. Monitoring VCS changes via TeamCity Monitoring VCS changes via TeamCity The first time you navigate to the “Changes” page in TeamCity you will be presented with an empty list and a message telling you that your VCS username is not set up. So let’s set it up by clicking on the link in the text: “your VCS username settings”. Monitoring VCS changes via TeamCity Click on “Add new VCS username”. Once you’ve set up a VCS root (we will go over this later on), type in which VCS roots you want to monitor and for what username. The VCS username is the username by which the VCS identifies you. 14 2014-10-14 Monitoring VCS changes via TeamCity Monitoring VCS changes via TeamCity A new VCS username has been added. The VCS username is the username by which your VCS (Google Code SVN in our case) identifies you. Look up your VCS username by checking the logs of your VCS or refer to the manual of your VCS of choice. Monitoring VCS changes via TeamCity Monitoring VCS changes via TeamCity We can confirm that Google Code SVN identifies us as ci.research.mah@gmail.com through the changes page which lists revisions and details of those revisions (such as who committed them). Monitoring VCS changes via TeamCity We can also click on the white arrows next to the revisions to expand the details of that particular revision. We’re presented with build information in the “Builds” tab. If we navigate back to the “Changes” page of TeamCity, we can now see that the revisions are correctly displayed. Monitoring VCS changes via TeamCity If we click on the “Files” tab, we’re presented with information about what files were changed for that particular revision. We can see that “Test01.java” was changed for this revision. By clicking on the link, we get taken to the “difference viewer”. 15 2014-10-14 Monitoring VCS changes via TeamCity Setting up a project in TeamCity Setting up a project in TeamCity In the “difference viewer” we can inspect the changes between revisions, the same way we did through Google Codes graphical interface. This is particularly useful for those working with a repository that does not provide a graphical interface. Setting up a project in TeamCity Setting up a project in TeamCity Now that we a sample project and a connection to the VCS set up, let’s take a look at how projects can be set up in TeamCity. Let’s start by navigating to the “Administration” page and clicking on “Create project”. Setting up a project in TeamCity We’ll call our project “my-first-project”. The Project ID is generated automatically, but we can assign this manully aswell. Setting up a project in TeamCity The project “my-first-project” is now created. Let’s proceed with setting up a VCS Root. 16 2014-10-14 Setting up a project in TeamCity A VCS Root is a connection to your repository via TeamCity. Click on “VCS Roots” at the sidebar on the left-hand side. Let’s create a new VCS Root by clicking on “Create VCS root”. Setting up a project in TeamCity Setting up a project in TeamCity Refer to your VCS manual to get the URL of your repository. For Google Code SVN we navigate to “Source/Checkout” to get the URL of our repository. Setting up a project in TeamCity Our VCS Root has been successfully created. Fill in the information needed to set up a VCS Root. We’ll call this VCS Root “my-first-project-SVN-google-codeVCS-root” and fill in the URL of the repository under “SVN Connection Settings”. Setting up a project in TeamCity Setting up a project in TeamCity We’ll call it “my-first-buildconfig”. Next, let’s head back to the “General Settings” of our project and select “Create build configuration”. A Build Configuration is a set of settings which determine how the project is built. It also determines what happens before and after builds. 17 2014-10-14 Setting up a project in TeamCity Setting up a project in TeamCity The VCS Root has been successfully attached to “my-firstproject”. Now that we’ve created a Build Configuration, let’s attach it to the VCS Root that we created moments earlier by selecting it from the drop-down list and clicking on “Attach”. Setting up a project in TeamCity Setting up a project in TeamCity Now let’s add a Build Step by clicking on “Build Steps” in the sidebar and then clicking on the “Add build step” button. A Build Step is a process which will be executed when the project is run through a particular build configuration. Setting up a project in TeamCity We’ll set up our first Build Step as an Ant runner. Let’s name it “ant-build-step” and point toward build_custom.xml. Also, let’s make sure it runs the test target (so that it performs JUnit tests). Setting up a project in TeamCity The Build Step “ant-build-step” was added. Let’s set up another Build Step as a Command Line runner. This one will just consist of an echo message, but as you can see this kind of setup provides a lot of possibilities and control over how the project is built. 18 2014-10-14 Setting up a project in TeamCity Setting up a project in TeamCity Both Build Steps are now set up. Let’s move on and add a Trigger. Triggers are used to control when the build is to be triggered, either by an event or at a defined regular time. Setting up a project in TeamCity We’ll start by setting up a VCS Trigger. It will trigger whenever a change is detected in the VCS (so whenever a new commit reaches the VCS and a new revision is generated, this Build Configuration will trigger). Setting up a project in TeamCity Setting up a project in TeamCity Next up, we’ll set up a Schedule Trigger. It will trigger at a regular interval, in this case it will trigger daily at 2 AM UTC+2, and only if there are pending changes. Setting up a project in TeamCity Our Triggers have been added. Finally, let’s take a look at Failure Conditions. Failure Conditions are conditions or events that will cause the build to break. By applying these to the Build Configuration the development team can strictly control and enforce rules regarding which builds pass successfully and which builds fail. 19 2014-10-14 Setting up a project in TeamCity Setting up a project in TeamCity The Failure condition was added. We’ll add a Failure Condition that states that if the build log contains the text “test did not pass” then the build will result in a failure. Running a build in TeamCity Running a build in TeamCity Running a build in TeamCity Now that we’ve set up our project, let’s take a look at how to run it manually. In other words, let’s find out how to run a TeamCity build. Running a build in TeamCity Running a build in TeamCity Of course, having it set up with Triggers will make sure it runs unattended whenever it’s triggered, but for demonstrational purposes we will trigger the build manually. From the “Overview” page, we can see that our projects has no builds to display, this is because a build has never been run for this project. So let’s start by running a build. Run a build of “my-first-buildconfig” by pressing on the “Run” button on the far right-hand side. 20 2014-10-14 Running a build in TeamCity The build is now running. Running a build in TeamCity By hovering over the green checkmark, we can see that the build was successful and also which Build Agent ran the build. Running a build in TeamCity Running a build in TeamCity The build has completed running and the green checkmark is an indication of a successful build, so we can assume that our codebase is stable. Running a build in TeamCity If we expand the “Build shortcuts” menu by clicking on the arrow to the right, we are presented with a few shortcuts that will take us to pages which display details about the build. We can also click on “.zip” right of the “Build log” link to download the Build Log as a textfile within an archive file. Running a build in TeamCity By clicking on the “...” button next to the “Run” button we can customize and control the next build to a greater degree. Let’s click on it and see what options we are presented with. The first tab of the “Run Custom Build” menu is the “General” tab. Here we can assign a different Build Agent to run the build. We can also prioritize the build by putting it to the queue top or we can clean all files in the checkout directory to make sure that we’re running a “clean build”. 21 2014-10-14 Running a build in TeamCity The second tab of the “Run Custom Build” menu is the “Parameters” tab. Here we can assign various configuration parameters, system properties or environment variables that may affect the outcome of the build. Running a build in TeamCity Finally, the last tab of the “Run Custom Build” menu is the “Comment” tab. The developer that is triggering the build may leave a comment here if there’s a particular reason for why this build is to be run. Taking a look at the Build Configuration Taking a look at the Build Configuration Taking a look at the Build Configuration Now that we know how to run a build manually (and through Triggers), let’s take a look at the information that we are provided with through the Build Configuration. Taking a look at the Build Configuration Taking a look at the Build Configuration We’ll take a look at the Build Configuration of ci-research-teamcity-test-project as this project contains more interesting data to look at. We’ll be navigating to its Build Configuration named buildconfig3. In order to access the Build Configuration we need to click on it from the “Overview” page. 22 2014-10-14 Taking a look at the Build Configuration The first tab that we are presented with is the “Overview” tab. This tab contains a summary of the current state of the Build Configuration including pending changes, current status and a list of the recent build history. Taking a look at the Build Configuration The third tab is the “Change Log” tab. This is where you will find information about changes that occured between and during builds. Taking a look at the Build Configuration The second tab is the “History” tab. This tab contains information about the whole history of builds done via “buildconfig3”. You can also filter by agent name at the top of the tab page. Taking a look at the Build Configuration If we scroll all the way down to build #13 and #14 we can see that some files were edited (and summarized in the commit messages). We can also see that build #13 failed and that the changes made to Test01.java fixed the codebase so that build #14 resulted in a successful build. Taking a look at the Build Configuration Taking a look at the Build Configuration The fourth tab is the “Statistics” tab. Different kinds of metrics and statistics is displayed here in the form of charts and graphs. Displayed on the image above is a bar chart for the success rate of builds run during a set period of time, as well as a line graph plotting the time of build duration during a period of time. On this image, we have another two line graphs. One is displaying the time a build spent in queue before running during a specified time frame (during a month, as we can see on the far right side “Range: Month”). The other is displaying the number of tests that were run during a particular build, also color coding the nodes to signify the amount of failed and passed tests. 23 2014-10-14 Taking a look at the Build Configuration Let’s hover the mouse over these charts and see what additional information is displayed. By hovering over this bar we can see that 7 builds were run on September 14th, out of which 86% passed. So 6 builds passed during this day and 1 failed. Taking a look at the Build Configuration Build #14 spent a relatively long time in queue compared to other builds. It spent 421 milliseconds in queue. Taking a look at the Build Configuration By clicking on a build when highlighting build details, we are taken to the details of the build results (more about this later). Let’s take a look at build #13 that had 4 failed tests and 3 that passed. As we can see the failed tests are: “testGenerateError”, “testMultipleFailAsserts”, “testIndexOutOfBoundsExceptionNotRaised” and “testGenerateFailure”. Taking a look at the Build Configuration Build #30 was run on the 3rd of October. This build had one of the highest measured build duration out of all of the builds run for this particular Build Configuration at 16.005 seconds. Taking a look at the Build Configuration This chart might be a bit tricky to understand at first. Let’s take a look at build #13. The green node signifies total amount of tests run, regardless of if they passed or failed, we can see that there were 7 total tests run. The red node signifies total amount of failed tests, 4 failed tests in this case. We can also see that these 4 tests that failed were all new tests added recently to the JUnit test class. Finally, the green node signifies total amount of passed tests, 3 tests passed during this build. Taking a look at the Build Configuration Let’s move on from the “Statistics” tab to the next tab, “Compatible Agents”. In this tab, we are presented with a list of Build Agents that are compatible with “buildconfig3” and are able to run it. By utilizing this configuration, load balancing and decentralized processing can be put into effect. 24 2014-10-14 Taking a look at the Build Configuration Taking a look at the Build Configuration Next up we have the “Pending Changes” tab. This tab will provide us with a list of pending changes that have not yet been applied. Finally we have the “Settings” tab at the end of the tabs bar. In this tab page we can review and edit the Build Configurations, very much in the same way we did when we were setting up a new project. Taking a look at the Build Results Taking a look at the Build Results Taking a look at the Build Results Now that we’ve looked at the information that the Build Configuration can provide, let’s dive a bit deeper and take a look at the information that individual Build Results can give us. Taking a look at the Build Results Taking a look at the Build Results Let’s start off with finding an interesting build to look at. Navigate to the “Overview” or “History” tab of the Build Configuration and click on a build. We’ll take a closer look at build #14 by clicking on it. The first tab that we are presented with is the “Overview” tab. This tab contains a summary of the Build Results. We can see that 2 tests passed and that the test was run on the 19th of September at 22:10:31 and ran for 13 seconds in total. We can also see the Build Agent that ran it and how it was triggered (manually or by a Trigger). 25 2014-10-14 Taking a look at the Build Results Moving on to the second tab, which is the “Changes” tab. This tab displays changes that were made to the codebase between builds. As we can see, the latest change made is with revision 31 of the repository. We can read the commit log message aswell. Let’s click on the arrow next to “1 file” and see what happens. Taking a look at the Build Results Let’s move on to the third tab “Tests”. On this tab page we can gather information about tests that were run for this build. We can see that there were a total of 2 tests run and that they took less than 1 second to run. The scope of tests can be filtered aswell to customize which test suites are shown. Taking a look at the Build Results Let’s expand the Log tree and view details about the Ant target “test”. We can see that the test suite has 2 test cases. We can also see that 2 tests were run during 0.253 seconds. Both “testCalcSum” and “testStringConcatenate” passed successfully. Taking a look at the Build Results We can see that “Test01.java” was edited in the latest revision of the codebase. Taking a look at the Build Results Moving on to the next tab, “Build Log”. This is a central functionality of TeamCity and very useful in determining what went wrong once a build breaks. Expanding the Log tree reveals detailed information about the processes and Build Steps that were run during the build. There is also a way to filter what messages are shown by selecting a different option in the “View” drop-down list. Taking a look at the Build Results The next tab that we will be looking at is the “Parameters” tab. In this tab we are presented with a list of parameters and properties that were in effect when the build was run. This is great for troubleshooting! 26 2014-10-14 Taking a look at the Build Results Taking a look at the Build Results Let’s take a look at various parameters that may be of interest. We can detect the JVM version of the Build Agent that was performing the build. We can also gather various details about the Build Agent from the “Parameters” tab. We can localize the checkout directory of the Build Agent, if we navigate to that directory we can find the codebase that was pulled from the repository. We can also determine who triggered this build (it’s a VCS trigger in this case). Taking a look at the Build Results Taking a look at the Build Results The OS on which the build was run and the environment variable “Path” can also be determined by looking through the “Parameters” tab. Finally, the last tab that we’ll be looking at is the “Artifacts” tab. This tab will display all artifacts that were produced by the build. 27 Bilaga 2 Continuous Integration Survey How do we define the minimum requirements of a Continuous Integration System? We are two students from Malmö university in Sweden doing a research on how to define the basic requirements of a CI-system. The survey takes approximately 5 minutes to fill in. Your participation is vital to our study and our effort to answer our research questions. The responses will remain confidential and data gathered in this survey will be handled with care to make it impossible to trace and identify any specific individual or organization. If you would like to be notified of the final results of this study, please enter your e-mail address and check the box at the end of this survey. Thank you for your participation! * Required 1. 1 * What kind of business do you operate? Mark only one oval. Administration Computer / IT Economy / Finance Technology / Science Logistics / Transport Other: 2. 2 * How big is your company? Mark only one oval. Small (up to 50 employees) Medium (50 - 250 employees) Large (over 250 employees) 3. 3 * Does your company utilize a CI-build solution? Mark only one oval. Yes Sk ip to question 4. No Sk ip to question 19. 4. 4 * What percentage of your developers uses or is affected by the CI-solution (10%, 20%, 30%, 40%, 50% ..... 100%)? Mark only one oval. 1 2 3 4 5 6 7 10% 8 9 10 100% 5. 5 * What CI-server software do you use in your company? Mark only one oval. Hudson Bamboo CruiseControl Jenkins BuildMaster TeamCity Continua CI - FinalBuilder Other: 6. 6 * Why did you choose this CI-system over the others (main advantages with your CI-system)? Check all that apply. Low cost (setup and maintenance fee) None Ease of use Fast (building code, processing queries) Easy to troubleshoot Reliable (trust the build) Stable (no system crashes and high availability...etc) Other: 7. 7 * What are the main weaknesses with your current CI-system (main disadvantages with your CIsystem)? Check all that apply. Difficult to use Slow Unstable (causes system crashes, low availability ..etc) None Difficult to troubleshoot High cost (setup and maintenance fee) Unreliable (don't trust the build) Other: 8. 8 * How frequently does your company use the CI-system to perform builds? Check all that apply. Continuously (several times a day) Daily Weekly Monthly 9. 9 * How long does your CI-system take to build a project? Example: 4:03:32 (4 hours, 3 minutes, 32 seconds) 10. 10 * Does the CI-system that you have lead to better performance in your company? ("No change" represented by 2) Mark only one oval. 1 Worse performance 2 3 Better performance 11. 11 * How would you describe the basic (functional) requirements of your CI-system (what the system should be able to do at the minimal level of operation, core functionalities/components)? 12. 12 * Which of the following are a part of those basic (functional) requirements? Check all that apply. Feedback (through e-mail, SMS, Dashboard) Compiling/Building source code Test (Unit test, static analysis) Build agent management (various build agents, build priorities and triggers) Deployment Resource management (systems usage, storage, backup and health) Source code management Administration (setting up users or groups) Other: 13. 13 * Which of the above (functional) requirements that you selected is most important for your CIsystem? 14. 14 * Does the CI-system that you’re using meet the minimum (functional) requirements that your company is looking for? Mark only one oval. Yes No 15. 15 * How would you describe the basic (non-functional) requirements of your CI-system (how well does it do what it’s supposed to do in terms of performance, usability, reliability, etc.)? 16. 16 * Which of the following are a part of those basic (non-functional) requirements? Check all that apply. Ease to connect with (accessibility) Response time (usability) Ease of modification (extensibility) Ease to be maintained (maintainability) Stable & no crashes (stability & reliability) Ease of use (look and feel standards) Build time (projects/source code) Easy to debug Uptime/downtime (availability) Other: 17. 17 * Which of the above (non-functional) requirements that you selected is most important for your CIsystem? 18. 18 * Does the CI-system that you’re using meet the minimum (non-functional) requirements that your company is looking for? Mark only one oval. Yes No Notification of study results 19. 19 * Would you like to be notified of the final results? Mark only one oval. Yes No 20. Please enter your e-mail address if the answer is "Yes"! Bilaga 3 litteraturundersökning - källor Källor (kategori) Källor webbartiklar & yrkeskunskap http://www.aosabook.org/en/integration.html http://martinfowler.com/articles/continuousIntegration.html http://developerblog.redhat.com/2013/11/08/ci-strategies http://blogs.collab.net/cloudforge/continuous-integration-overview-best-practice http://www.eugeneduvenage.com/series/continuous-integration-2/ http://agileheads.wordpress.com/2012/03/08/continuous-integration-basics/ http://www.wjug.org/wjug/docs/ci-quality-bw.pdf http://developer.xamarin.com/guides/cross-platform/ci/intro_to_ci/ http://blogs.collab.net/devopsci/ten-best-practices-for-continuous-integration https://docs.google.com/presentation/d/1Lagu5-PZp22XxL2voBmORv04R6UngRUJs5SClshT2Ck/present böcker Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Humble, Jez and Farley, Da Continuous Integration: Improving Software Quality and Reducing Risk (Duvall, Paul M., Matyas, Steve and Glover, Andrew) vetenskapliga artiklar Using continuous integration of code and content to teach software engineering with limited resources A comparison of two iterations of a software studio course based on continuous integration An Open Source-Based Approach to Software Development Infrastructures Enabling Agile Testing Through Continuous Integration Using continuous integration and automated test techniques for a robust C4ISR system Implementing an Effective Test Automation Framework Implementing Continuous Integration towards rapid application development SUMMERING SUMMERING (NFR gruppering) 1 litteraturundersökning - funktionella krav (del 1) Funktionella Krav source code management build source code (though build triggers run arbitrary build scripts (build automation run tests support usage of production-like environment for precise testin assessment of test coverage & code complexity source code formatting & conforming to coding standard generate documentation generate differential artifacts (changelog, change scripts for db, version labeling, .. 1 [6] 1 1 [7] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [8] 1 [9] 1 1 1 1 [14] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 19 19 1 [10] 1 [11] 1 1 [15] 1 [12] 1 [16] 1 1 [17] 1 [19] 1 [20] 1 [21] 1 [22] 1 [24] 1 [25] 1 [26] 1 [13] 1 1 [18] 1 [23] 1 [27] 1 1 1 1 [31] 1 [32] 1 [28] 1 [29] 1 [33] 1 1 [34] 1 [35] 1 1 1 1 1 [38] 1 1 [39] 1 16 19 8 9 9 5 1 [30] 1 [36] 1 [37] 1 6 litteraturundersökning - funktionella krav (del 2) Funktionella Krav feedback/notifications (build status monitoring, error identification artifact & log storage (product aggregation generate install package build verification (testing) bug/issue tracking software metrics tool (benchmarking/performance measuremen concurrency testing code obfuscation deployment rollback production to stable build multiple architecture builds resource management enable automation & provide infrastructure for repeatable buil scheduling 1 [52] 1 1 1 1 [53] 1 1 1 1 1 1 1 [54] 1 1 1 1 [55] 1 [57] 1 1 1 1 [56] 1 1 1 1 1 1 1 1 1 1 1 1 1 [58] 1 [60] 1 [61] 1 1 1 [62] 1 [63] 1 [64] 1 1 1 [65] 1 1 [59] 1 1 1 [66] 1 [67] 1 [68] 1 1 1 1 1 1 [69] 1 1 [70] 1 1 [72] 1 [75] 1 [76] 1 [73] 1 [71] 1 1 [74] 1 1 [77] 1 1 1 1 [79] 1 18 9 4 1 1 1 3 1 1 1 1 2 1 2 1 [78] 1 1 1 1 13 3 1 [80] 1 1 1 [81] 6 2 16 9 litt.undersökning - icke-funktionella krav (del 1) Icke-funktionella Krav performance availability how fast can you build a project response times (sending request, interfacing through GUI, startup of system processing times (importing/exporting data, spinning wait cursor-related ease of communication (ease of implementing protocols for intermodular communicatio resource utilization (usage of appropriate resources in an appropriate tim sharing resources uptime/downtime of CI-system, hours of operation (up all the time or scheduled downtime, incl. for maintenanc accessibility to CI-system from workstations (from internet/intranet? connection requirements 1 [89] 1 [90] 1 1 [91] 1 [92] 1 [93] 1 [94] 1 1 1 1 1 1 [95] 1 1 [96] 1 [97] 1 [98] 1 [99] 1 1 [100] 1 [101] 1 [102] 1 1 8 2 4 1 4 1 2 1 3 21 4 litt.undersökning - icke-funktionella krav (del 2) usability scalability & capacity extensibility/flexibility & maintainability is the usage of the CI-system user-friendly (look and feel standards any mention of UI (web based, graphical, command line, shell detailed feedback / reporting growth requirement - can the system be scaled up? (software performance increases proportionally with added hardware resource throughput - possible to handle a large amount of requests storage - any mention of storage usage or constraint configurability - how easy is it to modify and extend (f.e. with plugins) the CI-syste maintainability/changeability - ease of improving or adapting the system to changes in environment and requireme 1 [111] 1 [112] 1 [113] 1 1 1 1 1 1 1 [114] 1 1 1 1 1 1 [115] 1 [116] 1 1 [117] 1 [118] 1 [119] 1 1 1 [120] 1 [121] 1 [122] 1 [123] 2 21 1 [124] 1 1 8 11 1 1 4 1 1 2 5 1 [125] 3 8 3 litt.undersökning - icke-funktionella krav (del 3) portability & interoperability testability security multiple programming language suppor can the CI-system be used in various environments (operating systems, hardware platform can the CI-system communicate with other systems through established standards, formats and protocols installability - capability of the system to be installed in a specified environmen co-existence - capability of system to share common resources in a common environment with other independent software/syste components can be isolated and mocked trust policies & authorization 1 1 [132] 1 1 1 [133] 1 1 1 1 [134] 1 1 [135] 1 1 [136] 1 [137] 1 [138] 1 [139] 1 1 [140] 1 1 1 4 1 1 [141] 6 2 1 5 1 18 3 3 3 3 litteraturundersökning - CI-mjukvaror CI-mjukvara (som nämns) TeamCity Jenkins Hudson Team Foundation Build Travis Wercker CruiseControl (incl. CruiseControl.NET & CruiseControl.r Cruise Buildbot CDash Pony-Build (ThoughtWorks) Go Bamboo (Zutubi) Pulse AnthillPro Electric Commander BuildForge Mike CI Continuum TinderBox Automated Build Studio Draco.NET Gauntlet Luntbuild ParaBuild QuickBuild Sin Bitten BuildBeat CM Crossroads Gump PerfectBuild Pragmatic Automation 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [142] 1 1 1 1 1 1 1 4 1 1 6 5 1 1 1 7 1 4 1 2 2 5 2 2 4 1 2 1 2 2 1 Bilaga 4 Continuous Integration and Deployment Petrus Kiendys 1. Shadi Al Zara Bakgrund Continuous Integration (CI) är en metod för att effektivt utveckla stabil mjukvara där en grupp utvecklare är inblandade i ett projekt. Syftet med exjobbet är att utforska metoden, kvantifiera dess för- och nackdelar, sätt upp krav för ett CI-system samt implementera ett CI-system för att undersöka om implementationen uppfyller kraven. Kunskapsinsamlingen kommer att lägga grunden för vidareutveckling av kursmaterial i ämnet för vår externa samarbetspartner. Krav och önskemål som ställs på CI-system är att minska kostnaden för mjukvaruutvecklingsprojekt och samtidigt tillföra ökad funktionalitet i form av detaljrika artefakter som genereras när CI-systemet bygger källkod. En annan fördel är att projektledare får större insikt i hur projektet fortskrider och att utvecklare således snabbt kan åtgärda fel. Eftersom utvecklare enligt CI ska integrera kontinuerligt och dessutom använder sig av en rad olika analytiska verktyg så upptäcks fel i källkod tidigt i projekt och mer komplexa problem kan därför tidigt avvärjas. Ett annat krav som ställs på CI-system är således att mjukvaruutvecklingsgrupper förmodas prestera bättre med ett CI-system som stöd. Vi har valt att utforska metoden CI eftersom diskussioner med Edument AB (externt företag) har påvisat att det finns ett intresse och behov i industrin att bedriva ytterligare undersökning och forskning kring ämnet. Ett antal rapporter som kan vara relevanta är ”A Comparison of Two Iterations of a Software Studio 1 Course Based on Continuous Integration” och “Implementing Continuous Integration towards rapid application development” 2. 2. Uppdragsbeskrivning Vi kommer till en början att utföra en grundlig förundersökning där vi lär oss mer om CI/CD-metoden. Informationen som vi samlat på oss kommer att filtreras, delas upp och sammanställas i vad som kan utgöra en grund till en nybörjarkurs i CI. Sedan kommer vi undersöka vilka minimumkrav som ett CI-system måste uppfylla enligt standarder som framkommer från litteratur samt en marknadsundersökning. Marknadsundersökningen som utförs kommer att innefatta ca. 10 olika företag som svarar på olika frågor kring CI. Vi kommer att utforma en korrekt enkätstudie så att vi försäkrar oss om att vi får användbara svar ifrån vår marknadsundersökning till vår studie, eventuellt kommer en pilotstudie att genomföras innan den huvudsakliga marknadsundersökningen genomförs. Vi kommer att ställa upp funktionella krav och kvalitetsattribut (som är en del av icke-funktionella krav). Där kommer vi mest att fokusera på performance, usability and availability av ett CI-system. Vi kommer inte att lägga mycket vikt på testability, security and maintainability. 1 http://dl.acm.org/citation.cfm?id=2462476.2465592 2 http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=6236372 1 Både kvalitativ och kvantitativ metod kommer att användas under exjobbets gång, dvs. Creswells mixed methods. För att uppfylla krav som ställs på ingenjörer och ingenjörsverksamhet kommer vi att bygga upp ett CI-system och kravtesta detta system enligt krav som framkommit från litteraturstudien och marknadsundersökningen. Vi kommer till en början att använda oss av CI-systemet “TeamCity” för att uppfylla det externa företagets krav. I mån av tid kan vi även kravtesta andra CI-system för att få in ett mer objektivt perspektiv över den praktiska delen men vi väljer till en början att avgränsa oss till ett CI-system. Sammanfattningsvis kommer uppdraget bestå av en sammanställning av kunskap kring CI i allmänhet och en praktisk beskrivning på hur ett CI-system kan byggas upp mha. TeamCity, en av de mer populära CI-mjukvarorna. Därefter kommer en marknadsundersökning att utföras bland svenska företag. Slutligen kommer vi att bygga upp ett CI-system och kravtesta systemet enligt de krav som framkommit av litteraturstudien och marknadsundersökningen. 3. Förutsättningar - - 4. System som ska användas: ○ TeamCity, ... Vart ska arbetet genomföras: ○ MAH Aktörer: ○ MAH, Edument AB Externt företag: ○ Edument AB ○ Stora Varvsgatan 6a, Malmö ○ Tore Nestenius ○ tore@edument.se ○ 040-61 70 720 ○ Förväntas arbeta hos företag till 0% Arbetsplats på högskolan: ○ Behövs ○ Speciell utrustning: ▪ Server/servrar för uppbyggnad av CI-system ▪ Litteratur Grov tidsplanering med uppgiftsuppdelning Se bifogad fil Exjobb-tidsplanering VT14 - CI_CD.xlsx för tidsplanering. 2 Bilaga 5 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap FÖRSTUDIE 2014-03-18 Minimum requirements of a CI-system Petrus Kiendys PK Shadi Al-Zara SA 1. Avgränsning av forskningsfrågan eller huvudproblemet, förtydligande av kravspecifikationer 1.1 Bakgrund CI-system används alltmer i näringslivet vid mjukvaruutveckling för att effektivisera arbetsprocessen och tillföra ökad produktionsvärde.1 I centrum av feedbackloopen mellan utvecklare och slutanvändare ligger CI-system som bevakar arbetsprocessen, effektiviserar integration av källkod mellan ett antal olika individer i en utvecklingsgrupp och ger feedback till utvecklarna så att de kan förbättra källkoden. I takt med en ökad användning av CI-system så ställs allt högre krav på funktionaliteten som systemen ska tillföra. 1.2 Huvudproblem Syftet med examensarbetet är att utforska olika egenskaper hos CI-system och systematiskt kategorisera dessa samt definiera minimumkrav som CI-system måste uppfylla för att vara tillfredställande för ett utvecklingsteam. Vår frågeställning är således följande: 1. Vilka funktionella och icke-funktionella krav måste CI-system uppfylla för att vara till nytta för användning? 2. Kan man enligt definierade krav testa, värdera och jämföra CI-system? 1 M. Larsson and N. Lindholm, "Den agila utvecklingen. En studie baserad på den agila metodikens utformning i praktiken," Student thesis, Y, 2009 [Online] Available: MAH MUEP, http://muep.mah.se/handle/2043/8343. [Accessed: 2014-03-12]. 1 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap FÖRSTUDIE 2014-03-18 1.3 Beskrivande figurer Fig 1. Workflow för CI-system2 Följande hierarkiska trädstruktur illustrerar uppdelningen av huvudproblemet i delproblem: Fig 2: Uppdelning av huvudproblemet i delproblem och möjliga lösningsprinciper 2 http://www.programmingresearch.com/products/continuous-integration-jenkins-plug-in/ 2 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap FÖRSTUDIE 2014-03-18 1.4 Uppdelning och utförande av arbetet Examensarbetet kommer att delas upp i fyra olika delar: 1. Vi utför en analys av vilka minimumkrav som behöver uppfyllas för att ha ett välfungerande CI-system. Kraven tas fram via en litteraturstudie (DP1.1) och en marknadsundersökning (DP1.2). Vi kommer därefter att dela in kraven i specifika områden dvs. funktionella (LP1.3.1) och icke-funktionella4 (LP1.3.2) krav för att systematiskt kunna utföra ett kravtest utefter kraven. Funktionella och icke-funktionella krav kommer att definieras mha. use cases resp. quality attribute scenarios. Således kommer kravspecifikationen för CI-system vara förankrat i både vetenskap (LP1.1.2) och industriella erfarenheter (LP1.2.1). 2. När vi väl utformat en kravspecifikation för CI-system så kommer vi att bygga upp en TeamCity-server (DP2.1). Vi avgränsar oss till just en implementation för att vara säkra på att kravtest och behandling av data kan utföras i tid. I mån av tid kan vi även tänka oss implementera flera system och kravtesta dessa. 3. När TeamCity-servern är körbar kan denna testas enligt de krav som vi ställt upp (LP3.1). Vi kan då på ett mer objektivt och systematiskt sätt redogöra för TeamCitys lämplighet för användning i olika sammanhang annat än en subjektiv åsikt. Vi kommer även efter testerna titta på hur TeamCity beskrivs i dokumentation och jämförelsematriser på nätet samt titta på hur andra system (LP3.2), som vi troligtvis inte hinner mäta, beskrivs. 4. Den sista delen av examensarbetet kommer bestå av att behandla data (DP4) som vi fick fram från testfasen. Vi kommer här att diskutera och presentera data (LP4.1) samt dra slutsatser för TeamCity och CI-system utifrån denna data. En artefakt som kommer att produceras under examensarbetet är kursmaterial (LP4.2) till vår externa handledare, denna process kommer löpa parallellt med tidigare nämnda delproblem. Efter diskussioner med vår interna handledare har vi kommit fram till att mixed methods3 är att föredra som metod när vi analyserar data från marknadsundersökningen och systemtester, samt att vi ska förhålla oss till Software Architecture in Practice4 när vi utformar den tekniska specifikationen. Följande lista med kravspecifikationer har fastställts. Typbetäckningarna m/i/ö avser minimumkrav, idealkrav resp. önskemål. I tabellen finns också hänvisningar till delproblem och lösningsprinciper i figur 2 som kravspecifikationer framför allt gäller för: Krav -nr. K1 Typ m/i/ö m K2 m K3 m/i Kravspecifikation Få ut en lista på minst 5 krav för att kunna kravtesta CI-system Ha ett körbart CI-system som kan bygga källkod och köra tester Formulera 15/20 frågor som ska användas till marknadsundersökningen Gäller för DP1 DP2 DP1.2 3 Creswell, J.W. (2003). Research design: qualitative, quantitative, and mixed methods approaches. (2. ed.) Thousand Oaks: Sage. Bass, L., Clements, P. & Kazman, R. (2012). Software architecture in practice. (3. ed.) Upper Saddle River, N.J.: Addison-Wesley. 4 3 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap K4 K5 m/i ö K6 K7 m/i m/i K8 ö K9 m K10 m K11 m/i FÖRSTUDIE 2014-03-18 Få ut 10/15 svar från enkätsundersökningen Bygga upp flera CI-system som kan jämföras med TeamCity Kunna köra 5/10 build agents samtidigt Kunna avläsa resultat från kravtest i mindre/större detaljnivå Jämför data från kravtest mellan olika CI-system Jämför mätdata från test på TeamCity med dokumenterade egenskaper i både TeamCity och andra CI-system Presentera data enligt 3 olika kvalitetsattribut (performance, usability, availability) Skapa 5/10 kapitel till kursmaterialet LP1.2.1 DP2.1 LP2.1.2 DP3 LP2.1.1 LP3.1 LP3.2 LP3.2 LP4.1 LP4.2 2. Informationssökning efter vetenskapliga artiklar och yrkeskunskap Följande översikt visar sambandet mellan delproblem (DP) och lösningsprinciper (LP) från figur 2 och de vetenskapliga artiklar och den yrkeskunskap som resulterade från informationssökningen. En kort beskrivning förklarar relevansen av källorna för examensarbetet. DP, LP DP2 LP2.1.1 Lp2.1.2 DP4 Källförteckning Relevans DP2.1 Volodymyr Melymuka. TeamCity 7 Continuous Integration Essentials, A step-by-step introductory tutorial and intelligible practical guide to successfully applying Continuous Integration via TeamCity, Birmingham, 2012 Bok som beskriver hur man bygger upp en TeamCity-server (CI-system). Hög relevans. LP1.1.1 Farley, Dave; Humble, Jez. Continuous Delivery Reliable Software Releases through Build, Test, and Deployment Automation, Wesley Professional, pp.63, 2010 [Elektronisk resurs] Bok där man bl.a. behandlar olika komponenter som ingår i ett CI-system. Kawalerowicz, Marcin; Berntson, Craig. "Continuous integration in .NET", Manning Publications 2011, [Elektronisk resurs] Bok där man bl.a. behandlar olika komponenter som ingår i ett CI-system och visar hur man presenterar data. 4 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap LP1.1.1 DP2 DP1.2 LP1.2.1 DP1 DP1 DP1 FÖRSTUDIE Duvall, Paul M; Matyas, Steve; Glover, Andrew. Continuous integration: improving software quality and reducing risk, Saddle River, NJ, 2007 Saunders, M; Lewis, P; Thornhill, A. Research methods for business students, 5th ed., Pearson Education ,pp. 359-524, 2009 Amy Brown; Greg Wilson. Continuous Integration in The architecture of open source applications: Elegance,Evolution,and a Few Fearless Hacks, (volume 1), June2. 2011 “Continuous Integration- Basic Overview and Best Practices”, http://blogs.collab.net/cloudforge/co ntinuous-integration-overview-best-p ractice#.Uw5SUPldVH4 “Continuous Integration”, http://martinfowler.com/articles/conti nuousIntegration.html DP1 “Continuous Integration Strategies”, http://developerblog.redhat.com/201 3/11/08/ci-strategies-1of3/ LP2.1.1 LP2.1.2 “Introduction to Continuous Integration with Xamarin” http://docs.xamarin.com/guides/cros s-platform/ci/intro_to_ci/ Yuhoon Ki; Meongchul Song, "An Open Source-Based Approach to Software Development Infrastructures," Automated Software Engineering, 2009. ASE '09. 24th IEEE/ACM International Conference on , vol., no., pp.525,529, 16-20 Nov. 2009 LP1.1.2 2014-03-18 Bok där man beskriver CI i stort och även komponenter som används i CI-system. Bok där man förklarar hur man går till väga när man genomför en marknadsundersökning genom att förklara diverse undersökningsmetoder som används i näringslivet. Man förklarar även den praktiska relevansen av undersökningsmetoderna. Utdrag ur bok där komponenter och funktionella krav för ett CI-system beskrivs. Medelhög relevans. Webbartikel där komponenter i ett CI-system beskrivs. Väldigt hög relevans eftersom fokus för artikeln sammanfaller med vår frågeställning. Webbartikel av Martin Fowler (en av grundarna av “agile manifesto” och nykelperson i ThoughtWorks). Denna artikel omnämns och refereras upprepande gånger i både böcker och vetenskapliga artiklar. En genomgång av vad CI är och varför det bör tillämpas. Medelhög relevans. Webbartikel där man går in på en processbeskrivning för hur ett CI-system bör fungera. Hög relevans. Webbartikel där man beskriver några komponenter i olika delar av ett CI-System. Medelhög relevans. Vetenskaplig artikel där man beskriver fördelar med att använda automatiserade mjukvaruutvecklingsverktyg vid mjukvaruutveckling för mer komplexa system. Anger flaskhalsar i mjukvaruutveckling för större projekt och presenterar en 5 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap LP1.1.2 DP2.1 DP3 LP1.1.2 LP2.1.2 LP1.1.2 LP1.1.2 DP1 DP1.1 LP1.1.2 FÖRSTUDIE 2014-03-18 open-source lösning som förbättrar utvecklingsmiljön. Beskriver CI som en del av mjukvaruutvecklingsverktyg som används vid större projekt. Stolberg, S., "Enabling Agile Testing Vetenskaplig artikel i form av en through Continuous Integration," case study av hur ett CI-system Agile Conference, 2009. AGILE '09. , implementerades när man gick från vol., no., pp.369,374, 24-28 Aug. 2009 traditionell till agil utveckling och testning av mjukvara. Beskriver olika steg/komponenter i ett CI-system. Medelhög relevans. Yuksel, H.M.; Tuzun, E.; Gelirli, E.; Vetenskaplig artikel i form av en Biyikli, E.; Baykal, B., "Using case study som visar hur continuous integration and CI-system och automatiserade automated test techniques for a tester används för att utveckla robust C4ISR system," Computer and robusta C4ISR system (command & Information Sciences, 2009. ISCIS control, används för kommunikation 2009. 24th International Symposium on mellan militärbefälhavare och , vol., no., pp.743,748, 14-16 Sept. styrkor). TeamCity används som 2009 CI-system. Beskriver koncepten build agents och build configuration som används i TeamCity. Beskriver även testning utförligt. Eun Ha Kim; Jong Chae Na; Seok Vetenskaplig artikel där man Moon Ryoo, "Implementing an beskriver grundläggande steg i Effective Test Automation bygge av mjukvara som bl.a. Framework," Computer Software and involverar en VCS, en CI-server och Applications Conference, 2009. automatiserad testserver. COMPSAC '09. 33rd Annual IEEE Medelhög relevans. International , vol.2, no., pp.534,538, 20-24 July 2009 Bo Jiang; Zhenyu Zhang; Tse, T. H.; Vetenskaplig artikel där man Chen, T.Y., "How Well Do Test Case beskriver olika steg i bygge av Prioritization Techniques Support mjukvara mha. CI-system. Statistical Fault Localization," Computer Software and Applications Conference, 2009. COMPSAC '09. 33rd Annual IEEE International , vol.1, no., pp.99,106, 20-24 July 2009 Abdul, F.A.; Fhang, M.C.S., Vetenskaplig artikel där man "Implementing Continuous Integration beskriver grundläggande CI-system towards rapid application komponenter och development," Innovation arbetsprocessen. Management and Technology Research (ICIMTR), 2012 International Conference on , vol., no., pp.118,123, 21-22 May 2012 6 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap DP2.1 DP1 DP2 FÖRSTUDIE http://confluence.jetbrains.com/displ ay/TCD8 Staffan Persson. “Introducing Continuous Integration in an Enterprise Scale Environment”. Uppsala Universitet, 2008 2014-03-18 Dokumentation av TeamCity. Hög relevans. Examensarbete där man förklarar hur befintliga mjukvaruutvecklingsmiljöer kan ändras för att innefatta en CI-process. Beskriver komponenter i ett CI-system. Hög relevans. 3. Genomförbarhetsanalys Till en början tänkte vi att vårt examensarbete skulle innefatta både sociala och tekniska aspekter av att tillämpa CI-system i en verksamhet men efter diskussion och feedback från lärarlaget i samband med problemformuleringsredovisningen blev vi tvungna att omvärdera omfattningen av arbetet. Vi har därför bestämt oss att avgränsa oss till att endast innefatta en teknisk aspekt av CI-system i detta examensarbete. Detta innebär att vi kan uppfylla både MAH’s och vår externa handledares krav under arbetets gång. Som tidigare nämnt kommer examensarbetet att bestå av 4 delar (se 1.2 Huvudproblem). Genomförbarheten för att ställa upp krav för CI-system DP1 är mellanhög till hög. Vi har lyckats hitta enstaka artiklar som objektivt beskriver grundfunktionalitet och krav som CI-system ska uppfylla. Det är mycket möjligt att vi ger oss in på ett tidigare outforskat forskningsområde och kommer därför stöta på hinder men även möjlighet till att bidra till forskningen på ett unikt sätt. Genomförbarheten av DP1.2 är hög eftersom vår externa handledare kan tillhandahålla kontakter inom näringslivet, undersökningen kan även lägga grund till DP1 eftersom litteraturundersökningen påvisar att det finns väldigt lite relevanta vetenskapliga artiklar kring ämnet, däremot finns det mycket med yrkeskunskap i form av webbartiklar och böcker skrivna om ämnet. Att bygga upp ett CI-system DP2 ska kunna utföras förutsatt att vi får tillgång till hårdvara i tid, vi upskattar att genomförbarheten för DP2 är väldigt hög. Vi har redan börjat diskutera med handledare och IT-support för att få tillgång till hårdvara samt börjat orientera oss kring implementation av TeamCity. Testa CI-system enligt krav DP3, denna del är beroende av utförandet av DP1 och DP2. Förutsatt att DP1 och DP2 utförs med tillfredställande resultat uppskattar vi att genomförbarheten av LP3.1 är hög. CI-system brukar innehålla stöd för mätningar eller extensibility i form av plugins, oavsett om man använder sig av förstaparts eller tredjepartsverktyg för test så uppskattar vi att test kommer att kunna utföras. Angående LP3.2 uppskattar vi genomförbarheten till mellanhög. Vi har hittat funktionalitetsmatriser mellan olika populära CI-system, frågan återstår om dessa datan från dessa matriser sammanfaller med de krav som vi kommer att ställa upp. Behandla och presentera data DP4 & LP4.1 är givetvis beroende av föregående delproblem. Precis som med DP3 så uppskattar vi att genomförbarheten är hög förutsatt att vi har data att arbeta med från DP3. Skapa kursmaterial LP4.2 genomför vi parallellt med tidigare nämnda delproblem och uppskattar att genomförbarheten är hög. 7 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap FÖRSTUDIE 2014-03-18 Vi anser att examensarbetet är genomförbart i nuläget, vissa delar kan ta mer tid än vad vi uppskattar men på det stora hela anser vi att genomförbarheten för examensarbetet är hög. 4. Detaljplanering med ansvars- och uppgiftsuppdelning 8 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap FÖRSTUDIE 2014-03-18 5. Disposition av rapporten 1. Sammanfattning (Abstract) 2. Innehållsförteckning 3. Inledning a. Bakgrund i. Inledning till examensarbete ii. Målgrupp för examensarbete b. Syfte och frågeställning i. Varför valde vi detta ämne? c. Uppdragsbeskrivning i. Internt uppdrag ii. Externt uppdrag d. Förutsättningar och avgränsningar e. Tidigare forskning f. Metod - Hur arbetet ska genomföras i. Creswells “mixed methods” - kvalitativ och kvantitativ dataanalys ii. Funktionella och icke-funktionella krav 4. Teknisk beskrivning (Teori) - Grundlig beskrivning av teoretiska aspekter, även lite breddning åt håll som vi inte tittar närmare på a. Agila metoder - Vad är agila metoder? b. Continuous Integration - Vad är CI och varför används det? c. CI-system - Hur stödjer man arbetsprocessen CI mha. verktyg? Vilka verktyg finns det att välja mellan? d. Hur ställer man upp krav för system? e. Hur ställer man upp tester för system? 5. Utförande - Hur har vi gjort? Varför gjorde vi så? a. Hur utförde vi studien kring kravspecifikation för CI-system? b. Varför valde vi TeamCity och hur byggde vi upp CI-systemet? i. Vilka CI-system finns det, varför valde vi TeamCity? c. Vilka tester valde vi att genomföra och vad vill vi komma fram till genom testerna? 6. Resultat a. Krav för CI-system b. Uppbyggnad av ett CI-system (TeamCity) c. Tester 7. Slutsats 8. Diskussion a. För- och nackdelar med CI-system b. Stämmer resultaten överens med vår hypotes? - Är resultaten och mätdatan tillfredställande för att kunna göra en bra bedömning och komma fram till en tydlig slutsats? c. Förbättringar - Saker som kan ha gjorts bättre, alternativlösningar d. Vidare forskning - Frågeställningar som uppkom i samband med studien 9. Referenser a. appendix A i. bilaga 1: Kursmaterial till extern handledare b. appendix B 9 Examensarbete VT2013 inom högskoleingenjörsprogram ”Data & telekom” och ”Programvaruutveckling” Teknik och samhälle Institutionen för datavetenskap FÖRSTUDIE 2014-03-18 Källförteckning 1. 2. 3. 4. M. Larsson and N. Lindholm, "Den agila utvecklingen. En studie baserad på den agila metodikens utformning i praktiken," Student thesis, Y, 2009 [Online] Available: MAH MUEP, http://muep.mah.se/handle/2043/8343. [Accessed: 2014-03-12]. http://www.programmingresearch.com/products/continuous-integration-jenkins-plug-in/ Creswell, J.W. (2003). Research design: qualitative, quantitative, and mixed methods approaches. (2. ed.) Thousand Oaks: Sage. Bass, L., Clements, P. & Kazman, R. (2012). Software architecture in practice. (3. ed.) Upper Saddle River, N.J.: Addison-Wesley. 10 Bilaga 6 Tester 1 (experimental) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Task time [1] Användarens tillfredställelse Löstes uppgiften? Övrig information [villkorlig] Om uppgiften inte löstes, varför? [4] Task nr. Navigera till "build" sektion av CI-system [7] 0:49 5 1 9 Navigera till "inställningar" sektion av CI-system 7:55 3 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [8] 2:46 5 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [9] 1:09 5 1 8 Öppna en "build log" och granska tester som körts [10] 2:13 5 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 1:28 4 1 7 Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [11] 2:43 3 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [12] 5:41 3 1 15 Kompilera källkod för ett projekt [13] 0:42 5 1 Kör enhetstester för ett projekt [14] 1:34 5 1 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 4:14 1 0 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 1:13 4 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 1:50 5 1 13 Ändra säkerhetsinställningar och ångra ändringen 1:30 5 1 2 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 2:27 4 1 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [15] 5:00 5 1 Navigera till "användningsstatistik" sektion av CI-system 6:21 3 0 Minimera inverkan av fel Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.12 49:35 15 Testare identifierare 20141002_1200 10 11 Unable to locate button/interface to create and copy the build configurat 14 4 5 Incorrect input, mistook "Java version" for "Java runtime version" 3 Tester 2 (experimental) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Task time Användarens tillfredställelse Löstes uppgiften? [villkorlig] Om uppgiften inte löstes, varför? Övrig information Task nr. Navigera till "build" sektion av CI-system [22] 1:39 5 1 9 Navigera till "inställningar" sektion av CI-system 3:33 4 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [23] 5:04 4 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [24] 1:47 5 1 8 Öppna en "build log" och granska tester som körts [25] 5:18 3 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 1:00 5 1 7 2:16 4 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [27] 6:49 2 1 15 Kompilera källkod för ett projekt [28] Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [26] 1:23 5 1 10 Kör enhetstester för ett projekt [29] 3:20 3 1 11 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 2:30 4 1 14 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 0:54 5 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 1:01 5 1 13 Ändra säkerhetsinställningar och ångra ändringen 2:36 5 1 2 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 3:17 3 1 4 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [30] 5:23 4 1 5 Navigera till "användningsstatistik" sektion av CI-system 0:52 5 1 3 Minimera inverkan av fel Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.18 48:42 17 Testare identifierare 20141006_1300 Tester 3 (experimental) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Användarens tillfredställelse Löstes uppgiften? [villkorlig] Om uppgiften inte löstes, varför? Övrig information Task nr. 0:47 5 1 9 Navigera till "inställningar" sektion av CI-system 1:25 5 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [38] 1:52 4 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [39] 1:25 5 1 8 Öppna en "build log" och granska tester som körts [40] 3:56 3 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 0:51 5 1 7 Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [41] Minimera inverkan av fel Task time Navigera till "build" sektion av CI-system [37] 3:46 4 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [42] 3:18 5 1 15 Kompilera källkod för ett projekt [43] 1:32 4 1 10 Kör enhetstester för ett projekt [44] 1:21 5 1 11 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 3:22 3 1 14 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 2:41 4 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 1:01 5 1 13 Ändra säkerhetsinställningar och ångra ändringen 1:53 4 1 2 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 2:12 3 1 4 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [45] 2:23 4 1 5 Navigera till "användningsstatistik" sektion av CI-system 1:18 5 1 3 Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.29 35:03 17 Testare identifierare 20141007_1800 Tester 4 (experimental) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Task time Användarens tillfredställelse Löstes uppgiften? [villkorlig] Om uppgiften inte löstes, varför? Övrig information Task nr. Navigera till "build" sektion av CI-system [52] 1:55 4 1 9 Navigera till "inställningar" sektion av CI-system 1:53 5 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [53] 2:06 4 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [54] 1:30 5 1 8 Öppna en "build log" och granska tester som körts [55] 3:26 4 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 2:51 4 1 7 Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [56] 2:52 5 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [57] 5:57 4 1 15 Kompilera källkod för ett projekt [58] 1:02 5 1 10 Kör enhetstester för ett projekt [59] 2:41 4 1 11 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 3:37 4 1 14 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 2:44 4 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 1:22 5 1 13 Ändra säkerhetsinställningar och ångra ändringen 2:46 4 1 2 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 4:59 3 1 4 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [60] 1:27 4 1 5 Navigera till "användningsstatistik" sektion av CI-system 1:37 5 1 3 Minimera inverkan av fel Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.29 44:45 17 Testare identifierare 20141008_1500 Tester 5 (experimental) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Task time Användarens tillfredställelse Löstes uppgiften? Övrig information [villkorlig] Om uppgiften inte löstes, varför? [64] Task nr. Navigera till "build" sektion av CI-system [67] 1:29 5 1 9 Navigera till "inställningar" sektion av CI-system 2:39 4 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [68] 2:53 4 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [69] 1:20 5 1 8 Öppna en "build log" och granska tester som körts [70] 2:17 5 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 1:20 5 1 7 3:21 4 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [72] 4:24 4 1 15 Kompilera källkod för ett projekt [73] Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [71] 1:14 5 1 10 Kör enhetstester för ett projekt [74] 1:09 5 1 11 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 3:46 4 1 14 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 1:38 5 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 1:38 5 1 Ändra säkerhetsinställningar och ångra ändringen 2:30 4 1 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 3:07 1 0 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [75] 1:50 5 1 5 Navigera till "användningsstatistik" sektion av CI-system 1:53 5 1 3 Minimera inverkan av fel Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.41 38:28 16 Testare identifierare 20141009_1600 13 2 The tester was unable to locate the element that disables visibility of a pro 4 Tester 6 (control) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Task time Användarens tillfredställelse Löstes uppgiften? [villkorlig] Om uppgiften inte löstes, varför? Övrig information Task nr. Navigera till "build" sektion av CI-system [82] 0:28 5 1 9 Navigera till "inställningar" sektion av CI-system 1:45 4 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [83] 2:10 4 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [84] 0:52 5 1 8 Öppna en "build log" och granska tester som körts [85] 0:40 5 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 0:41 5 1 7 Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [86] 1:03 5 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [87] 2:18 5 1 15 Kompilera källkod för ett projekt [88] 1:16 5 1 10 Kör enhetstester för ett projekt [89] 1:34 4 1 11 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 1:42 5 1 14 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 0:43 5 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 0:34 5 1 13 Ändra säkerhetsinställningar och ångra ändringen 1:16 5 1 2 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 1:35 5 1 4 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [90] 0:34 5 1 5 Navigera till "användningsstatistik" sektion av CI-system 1:08 5 1 3 Minimera inverkan av fel Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.82 20:19 17 Testare identifierare 20141003_1600 Average (experimental) Mätning av respons Huvudområde Inlärning av systemets funktioner Respons GUI:t är tydligt och lättanvänt GUI:ns design är baserad på “progressive disclosure” Uppgift Användarens tillfredställelse Löstes uppgiften? [villkorlig] Om uppgiften inte löstes, varför? Övrig information Task nr. 1:19 4.8 1 9 Navigera till "inställningar" sektion av CI-system 3:29 4.2 1 1 Läs ett incheckningsmeddelande från centralkatalogen via CI-systemet [98] 2:56 4.2 1 6 Öppna en källkodsfil och granska ändringar som lagts till i valfri revision [99] 1:26 1 8 Öppna en "build log" och granska tester som körts [100] 3:26 4 1 12 Fäll ut och fäll ihop detaljer kring incheckningar 1:30 4.6 1 Det är enkelt att automatisera funktioner som ofta kommer att använd Lägg till en "trigger" i en "build configuration" [101] Minimera inverkan av fel Task time Navigera till "build" sektion av CI-system [97] 5 7 2:59 4 1 16 Lägg till en "build step" i en "build configuration" och kör ett valfritt "build script" [102] 5:13 3.6 1 15 Kompilera källkod för ett projekt [103] 1:10 4.8 1 10 Kör enhetstester för ett projekt [104] 2:01 4.4 1 11 Återanvändning av data/kommandon Skapa en ny "build configuration" genom att kopiera en befintlig "build configuration" 3:29 3.2 0.8 14 Dialogrutor och säkringar Ta bort "build configuration" som skapades i föregående uppgift(er) och kontrollera att bekräftelseruta dyker 1:50 4.4 1 17 Möjlighet att “ångra” ändringar Stoppa en pågående "build" 1:22 5 1 13 Ändra säkerhetsinställningar och ångra ändringen 2:15 4.4 1 2 Anpassning av systemet för användarens beh Systemets utseende och funktionalitet kan ändras Dölj ett projekt från "Projekt" sektionen av CI-systemet 3:12 2.8 0.8 4 Inge förtroende och tillfredsställelse Kontrollera om kodbasen för ett visst projekt är stabil (grön) eller bruten (röd) [105] 3:12 4.4 1 5 Navigera till "användningsstatistik" sektion av CI-system 2:24 4.6 0.8 3 Systemets tillstånd åskådliggörs tydligt för användaren Genomsnitt för användarens tillfredställels Total tid för utförande av samtliga tasks Totalt antal uppgifter som löstes (max: 1 4.26 43:18 16.4 Testare identifierare avg_exp Bilaga 7 Usability test - user form (TeamCity) Please fill in this form as you're doing the usability test. This form contains all tasks that you need to complete. We will monitor your progress through screen capture software during the test. You may go back to previous tasks to read the task descriptions once again but you may not change previous answers that you have submitted. To provide clarification, the help text of each task is simplified by a set number of steps, denoted by (#), ie. "(1) perform step 1, (2) perform step 2." If you are unable to complete a specific task, please explain why you were unable to complete that task. Please be aware that this is a usability test that is used to measure the usability of TeamCity and is not targeted at measuring your ability as a tester to solve problems and perform tasks, so please do not feel under pressure to perform. Simply read the task instructions and do your best to complete the tasks. The test contains 17 tasks that you will perform, the 17 tasks are structured into 3 main parts: - Interaction with the UI & VCS, changing settings - Compiling and testing code, reading logs - Setting up a custom build configuration After completing all of the tasks a short series of questions may be answered in a 1-5 Likert scale format to convey your overall impression of TeamCity from a usability standpoint. Feel free to get acquainted with the interface of TeamCity and TeamViewer before you start taking the test. An assistant will be offering assistance during the test if needed, please do not hesitate to type any questions or concerns into the TeamViewer chat. If you are unable to complete a task and subsequent tasks depend on the completion of that specific task, the assistant will set up TeamCity so that you can proceed with the test. The assistant will communicate with you through chat and voice when needed. Please answer a few short questions below before proceeding with the test. When you're ready, go to the next page. * Required 1. Your email * 2. Occupation * What is your job title? What is your task assignment (what is it that you do at your workplace)? 3. Experience with CI-systems (build servers) * Have you worked with CI-systems (build servers) before? Popular CI-systems include TeamCity, Hudson, Jenkins, Bamboo and CruiseControl. Mark only one oval. Yes No After the last question in this section, stop filling out this form. 4. Experience with which CI-systems? If you answered "Yes" to the question above, please list the CI-systems that you have experience with: 5. Experience with TeamCity * Have you worked with TeamCity before? Mark only one oval. Yes No 6. Notification of study results * Would you like to be notified of the results of this study? Mark only one oval. Yes No 7. Task 1: Navigate to the " settings" section of TeamCity You are currently in the "Overview page". (1) Navigate to "Administration". (2) Look at the sidebar to the left. (3) Look at the 3 items nested under "Integrations". Which item is located in-between "Issue Tracker" and "Tools"?: 8. Check all that apply. Unable to complete task 9. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 10. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 11. Task 2: Change " Authentication" settings and revert the changes You are currently in the "Administration page". (1) Navigate to "Authentication". (2) Change the guest user username to "guest123" and (3) save the changes. Next, (4) revert the changes and (5) confirm that the default settings were restored. Were you able to successfully make changes and revert the changes? Mark only one oval. Yes No (please explain why below) 12. Check all that apply. Unable to complete task 13. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 5 low satisfaction high satisfaction 14. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 15. Task 3: Navigate to " Usage Statistics" (1) Navigate to "Usage Statistics". What "java runtime version" is the server running? (Hint: feel free to use ctrl+F) 16. Check all that apply. Unable to complete task 17. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 18. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 19. Task 4: Hide a visible project (1) Navigate back to the "Overview page" (the first page you were presented with) and (2) hide the project "dt3-robotlego-2012ht-white". Only "ci-research-teamcity-test-project" should be visible. Check all that apply. Done 20. Check all that apply. Unable to complete task 21. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 22. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 23. Task 5: Verify if a project is stable or broken Judging by what you can see on the current page ("Overview page"), (1) is the current build of "ci-research-teamcity-test-project" stable or broken? (You may click on different elements on this page, but do not navigate from the "Overview page") Mark only one oval. Stable Broken 24. Check all that apply. Unable to complete task 25. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 5 low satisfaction high satisfaction 26. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 27. Task 6: Read a commit log message (1) Navigate to "Changes" to pull information from the connected VCS. What is the commit log message of revision 29, committed "14 Sep 14 19:11"? (Hint: feel free to copy-paste the message instead of typing it manually, try right-clicking and selecting "copy" if ctrl+C is unresponsive) 28. Check all that apply. Unable to complete task 29. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 30. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 31. Task 7: Expand the details of a revision (1) Expand revision 29 and specify the name of the .java file that was edited: test/packdemo/______ 32. Check all that apply. Unable to complete task 33. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 34. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 35. Task 8: Review code changes of a revision (1) Open the changed file of revision 29 (test/packdemo/Test01.java) and specify what line in that .java source code file was modified. An example of the "code difference view" is shown above (lines 22-27 were removed and lines 37-43 were added). Line ____ was modified in Test01.java for revision 29: 36. Check all that apply. Unable to complete task 37. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 low satisfaction 3 4 5 high satisfaction 38. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 39. Task 9: Navigate to the " build" section The "Build page" of TeamCity is the same page as the “Overview page", (1) navigate to this page. Check all that apply. Done 40. Check all that apply. Unable to complete task 41. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 5 low satisfaction high satisfaction 42. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 43. Task 10: Compile the source code for a project Source code is compiled by clicking on the "run" button and triggering a build. (1) Trigger a build and wait for it to finish. Check all that apply. Done 44. Check all that apply. Unable to complete task 45. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 46. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 47. Task 11: Run unit tests for a project Unit tests are also run by triggering a build. (1) Trigger another build and wait for it to finish. Check all that apply. Done 48. Check all that apply. Unable to complete task 49. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 low satisfaction 5 high satisfaction 50. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 51. Task 12: Open up a build log and verify unit test results (1) Navigate to the "Build Log" from the "Overview page" by accessing (clicking on) a specific build. Builds are denoted by a hashtag, f.e. #3 or #25. (2a) The build step "Step 1/1: Ant" should contain information about the unit tests that were performed. Alternatively, you may (2b) switch from the "Build Log" tab to the "Tests" tab. Please specify the name of any of the 2 unit tests that were run: testSt_____ or testCa______ 52. Check all that apply. Unable to complete task 53. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 5 low satisfaction high satisfaction 54. If you were unable to perform the task, please explain why Why were you unable to perform the task? (What was the main obstacle in performing this task, what made it difficult to perform this task?) 55. Task 13: Stop a running build (1) Go back to the "Overview page" and (2) start a build. Now, (3) stop it before it finishes running. Were you prompted with a confirmation dialog when you stopped the build? Mark only one oval. Yes No 56. Check all that apply. Unable to complete task 57. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 58. If you were unable to perform the task, please explain why Were you able to perform this task with ease? What is your overall satisfaction of performing this task? 59. Task 14: Create a new build configuration (1) Navigate to "Administration" and (2) click on the "ci-research-teamcity-test-project" to access the general settings of the project. You should now be located in "Administration/<Root project>/ci-research-teamcity-test-project". As you can see there is currently one build configuration called "buildconfig3". (3) Copy that build configuration and (4) name your new build configuration "buildconfig4". (5) Navigate back to the general settings of your project following the same instructions given at the start of this task. You should now see two build configurations, "buildconfig3" and "buildconfig4". Check all that apply. Done 60. Check all that apply. Unable to complete task 61. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 low satisfaction 5 high satisfaction 62. If you were unable to perform the task, please explain why Were you able to perform this task with ease? What is your overall satisfaction of performing this task? 63. Task 15: Add a build step to your build configuration (1) Click on "buildconfig4" to access the settings of that build configuration. The sidebar on the left-hand side provides access to various settings and aspects of the build configuration. (2) Add a build step to the build configuration and (3) choose Command Line as the build runner type from the list. In the "Enter build script content" field you can (4) enter the following: "@echo Hello World!". Once this has been done and you have (5) saved your work you can (6) navigate to the "Overview page" and (7) run "buildconfig4" and then (8) access the "Build Log" to verify the results of your work. (9) Expand "Step 2/2: Command Line" and specify the message of the third line (above "Process exited with code 0"): 64. Check all that apply. Unable to complete task 65. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 2 3 4 5 low satisfaction high satisfaction 66. If you were unable to perform the task, please explain why Were you able to perform this task with ease? What is your overall satisfaction of performing this task? 67. Task 16: Add a schedule trigger to your build configuration (1) Navigate back to the settings of "buildconfig4". (2) Add a new trigger to your build configuration ("buildconfig4"). (3) Choose a "schedule trigger" from the list. (4) Change some default settings around so that the build triggers "weekly" on "Tuesday" at "07:00". (5) Save the trigger settings and a new trigger should now appear in the list of "Triggers". Check all that apply. Done 68. Check all that apply. Unable to complete task 69. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 70. If you were unable to perform the task, please explain why Were you able to perform this task with ease? What is your overall satisfaction of performing this task? 71. Task 17: Delete a build configuration (1) Navigate back to the general settings of the project "ci-research-teamcity-test-project" where an overview of build configurations are presented. (2) Delete "buildconfig4". Were you prompted with a confirmation dialog when you were about to delete the build configuration? Mark only one oval. Yes No 72. Check all that apply. Unable to complete task 73. User satisfaction * Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Mark only one oval. 1 low satisfaction 2 3 4 5 high satisfaction 74. If you were unable to perform the task, please explain why Were you able to perform this task with ease? What is your overall satisfaction of performing this task? Conclussion and impression of TeamCity (from a usability standpoint) 75. How well does TeamCity support " Learnability" ? Is it easy to learn and use TeamCity? Is the design clear and does it enable you to remember how to "do things" in TeamCity? Mark only one oval. 1 2 3 4 5 low learnability high learnability 76. Check all that apply. Don't know / no comment 77. How well does TeamCity support " Efficiency of use" ? Is it easy to do certain things without "unecessary steps"? Can you cut down on time by making use of certain functionality (f.e. easy to edit, copy or delete a large number of objects)? Mark only one oval. 1 2 3 4 5 low efficiency of use high efficiency of use 78. Check all that apply. Don't know / no comment 79. How well does TeamCity support " Reliability" ? Is TeamCity reliable? If you accidentally make an error, is it easy to undo/revert changes and recover from the error? Mark only one oval. 1 2 3 4 5 low reliability high reliability 80. Check all that apply. Don't know / no comment 81. How well does TeamCity support " Satisfaction" ? What is your overall satisfaction with using TeamCity? Is it usable? Mark only one oval. 1 2 low satisfaction 82. Check all that apply. Don't know / no comment 3 4 5 high satisfaction Bilaga 8 Demo01.java 1 /** 2 * @author Petrus K. 3 */ 4 package packdemo; 5 6 public class Demo01 { 7 8 9 /** Demo methods **/ 10 public String demoStringConcatenate(String str1, String str2) { 11 return str1 + str2; 12 } 13 14 public int demoCalcSum(int int1, int int2) { 15 return int1+int2; 16 } 17 18 19 20 /** run method **/ 21 public void run() { 22 System.out.println("running Demo01"); 23 System.out.println("demoStringConc:\t"+demoStringConcatenate("hello", "world")); 24 System.out.println("demoCalcSum:\t"+demoCalcSum(5, 10)); 25 System.out.println(); 26 } 27 28 29 /** main method **/ 30 public static void main(String[] args){ 31 Demo01 d1 = new Demo01(); 32 d1.run(); 33 34 Demo02 d2 = new Demo02(); 35 d2.run(); 36 } 37 } 38 Page 1 Demo02.java 1 /** 2 * @author Petrus K. 3 */ 4 package packdemo; 5 6 public class Demo02 { 7 8 /** Demo methods **/ 9 private void demoPlaceholder() { 10 System.out.print("Demo02 isn't doing anything.."); 11 new UnsupportedOperationException("Demo02 isn't doing anything.."); 12 } 13 14 /** run method **/ 15 public void run() { 16 System.out.println("running Demo02"); 17 System.out.print("demoPlacehold:\t"); 18 demoPlaceholder(); 19 System.out.println(); 20 } 21 22 } 23 Page 1 Test01.java 1 package packdemo; 2 3 import static org.junit.Assert.*; 4 import org.junit.*; 5 6 public class Test01 { 7 8 Demo01 d1 = new Demo01(); 9 10 /** setup and teardown methods **/ 11 // this method does a onetime setup before all tests are run in this test class 12 @BeforeClass 13 public static void setUpBeforeClass() throws Exception { 14 System.out.println("running Test01"); 15 System.out.println("no. of test cases in this suite: "+suite().countTestCases()+"\n"); 16 } 17 18 19 /** Test cases **/ 20 @Test 21 public void testStringConcatenate() { 22 assertEquals("something is wrong with Demo01.demoStringConcatenate", 23 "hello", d1.demoStringConcatenate("he", "llo")); 24 System.out.println("testStringConcatenate has passed successfully"); 25 } 26 27 @Test 28 public void testCalcSum() { 29 assertEquals("something is wrong with Demo01.demoCalcSum", 30 30, d1.demoCalcSum(10, 20)); 31 System.out.println("testCalcSum has passed successfully"); 32 } 33 34 35 /** custom methods used by this class **/ 36 public static junit.framework.Test suite() { 37 return new junit.framework.JUnit4TestAdapter(Test01.class); 38 } 39 40 } 41 Page 1 build_custom.xml 1 <?xml version="1.0" encoding="UTF8" standalone="no"?> 2 <! Author: Petrus K. 3 Description: A custom ant build script based on an autogenerated script by Eclipse 4.4.0 4 More info: http://ant.apache.org/manual/using.html 5 > 6 7 <! project attributes > 8 <project basedir="." default="build" name="ciresearchteamcitytestproject"> 9 <description> 10 simple ant build script for demonstrational purposes 11 </description> 12 13 <! properties > 14 <property name="src.dir" location="src"/> 15 <property name="bin.dir" location="bin"/> 16 <property name="test.dir" location="test"/> 17 <property name="test.report.dir" location="testreport"/> 18 <property name="lib.dir" location="lib"/> 19 20 <! paths > 21 <path id="classpath"> 22 <pathelement location="lib/junit4.11.jar"/> 23 <pathelement location="lib/hamcrestcore1.3.jar"/> 24 <pathelement location="${bin.dir}"/> 25 </path> 26 27 <! targets > 28 <! TARGET init: initializes file and folder structures before compilation > 29 <target name="init" description="initializes file and folder structures before compilation"> 30 <mkdir dir="${bin.dir}"/> 31 <mkdir dir="${test.report.dir}"/> 32 33 <echo message="init completed"/> 34 </target> 35 36 <! TARGET build: compiles the source > 37 <target name="build" depends="init" description="compiles the source"> 38 <javac srcdir="${src.dir}" destdir="${bin.dir}" includeantruntime="false" compiler="modern"> 39 <classpath refid="classpath"/> 40 </javac> 41 <javac srcdir="${test.dir}" destdir="${bin.dir}" includeantruntime="false" compiler="modern"> 42 <classpath refid="classpath"/> 43 </javac> 44 45 <echo message="build completed"/> 46 </target> 47 48 <! TARGET clean: cleans the compiled files > 49 <target name="clean" description="cleans the compiled files"> 50 <delete dir="${bin.dir}"/> 51 <delete dir="${test.report.dir}"/> 52 53 <echo message="clean completed"/> 54 </target> 55 56 <! TARGET run: runs the demo project > 57 <target name="run" depends="build" description="runs the demo project"> Page 1 build_custom.xml 58 <java classname="packdemo.Demo01" failonerror="true" fork="yes"> 59 <classpath refid="classpath"/> 60 </java> 61 62 <echo message="run completed"/> 63 </target> 64 65 <! TARGET test: runs JUnit tests > 66 <target name="test" depends="build"> 67 <junit printsummary="withOutAndErr" fork="true" haltonfailure="yes"> 68 <classpath refid="classpath"/> 69 <classpath> 70 <pathelement location="${bin.dir}" /> 71 </classpath> 72 <formatter type="xml"/> 73 <batchtest todir="${test.report.dir}"> 74 <fileset dir="${test.dir}"> 75 <include name="**/*Test*.java" /> 76 </fileset> 77 </batchtest> 78 </junit> 79 </target> 80 81 </project> Page 2 Bilaga 9 Systemspecifikationer för CIserver (TeamCity) Hårdvara: ● CPU: ● RAM: ● HDD: ● Nätverkskort: ● Bandbredd: Inter® Core™ 2 CPU 6300 @ 1.86GHz 1.87GHz, x64-based 4.00 GB 931 GB Intel® 82566DM Gigabit Network Connection 1000.00 Mbit/s Mjukvara och miljö: ● OS: ● TeamCity: ● XAMPP: ● Eclipse Luna: ● Apache Ant: ● TeamViewer: ● TortoiseSVN: Windows 8 Enterprise (2012), 64-bit 8.1.1 (build 29939) 1.8.2 4.4.0 1.9.4 9.0 1.8.8