Linköpings universitet | Institutionen för datavetenskap Examensarbete på grundnivå, 15hp | Datateknik Vårterminen 2017 | LIU-IDA/LITH-EX-G--17/049--SE Utveckling av en webbapplika(cid:2210)on för avtalshantering med ramverket Ruby on Rails Development of a web applica(cid:2209)on for contract management usingtheframeworkRubyonRails AdamLindberg Chris(cid:2210)anThorarensen FransSkarman JohannesPalmMyllylä JonathanBränning MalcolmVigren RasmusThuresson Handledare:SimonMehari Examinator:Kris(cid:2210)anSandahl Linköpingsuniversitet SE–58183Linköping 013-281000,www.liu.se Upphovsrätt De(cid:130)adokumenthålls(cid:2210)llgängligtpåInternet–ellerdessfram(cid:2210)daersä(cid:130)are–under25årfrånpublice- ringsdatumunderförutsä(cid:130)ninga(cid:130)ingaextraordinäraomständigheteruppstår.Tillgång(cid:2210)lldokumen- tetinnebär(cid:2210)llståndförvarochena(cid:130)läsa,laddaner,skrivautenstakakopiorförenskiltbrukocha(cid:130)an- vändadetoförändratförickekommersiellforskningochförundervisning.Överföringavupphovsrä(cid:130)en vidensenare(cid:2210)dpunktkaninteupphävade(cid:130)a(cid:2210)llstånd.Allannananvändningavdokumentetkräver upphovsmannensmedgivande.Föra(cid:130)garanteraäktheten,säkerhetenoch(cid:2210)llgänglighetenfinnslös- ningaravtekniskochadministra(cid:2210)vart.Upphovsmannensideellarä(cid:130)innefa(cid:130)arrä(cid:130)a(cid:130)blinämndsom upphovsmanidenomfa(cid:130)ningsomgodsedkrävervidanvändningavdokumentetpåovanbeskrivna sä(cid:130)samtskyddmota(cid:130)dokumentetändrasellerpresenterasisådanformellerisådantsammanhang somärkränkandeförupphovsmannensli(cid:130)eräraellerkonstnärligaanseendeelleregenart.Föry(cid:130)erli- gareinforma(cid:2210)onomLinköpingUniversityElectronicPressseförlagetshemsidah(cid:130)p://www.ep.liu.se/. Copyright ThepublisherswillkeepthisdocumentonlineontheInternet–oritspossiblereplacement–fora periodof25yearsstar(cid:2210)ngfromthedateofpublica(cid:2210)onbarringexcep(cid:2210)onalcircumstances.Theonline availability of the document implies permanent permission for anyone to read, to download, or to printoutsinglecopiesforhis/hersownuseandtouseitunchangedfornon-commercialresearchand educa(cid:2210)onalpurpose.Subsequenttransfersofcopyrightcannotrevokethispermission.Allotheruses ofthedocumentarecondi(cid:2210)onalupontheconsentofthecopyrightowner.Thepublisherhastaken technicalandadministra(cid:2210)vemeasurestoassureauthen(cid:2210)city,securityandaccessibility.Accordingto intellectual property law the author has the right to be men(cid:2210)oned when his/her work is accessed asdescribedaboveandtobeprotectedagainstinfringement.Foraddi(cid:2210)onalinforma(cid:2210)onaboutthe LinköpingUniversityElectronicPressanditsproceduresforpublica(cid:2210)onandforassuranceofdocument integrity,pleaserefertoitswwwhomepage:h(cid:130)p://www.ep.liu.se/. AdamLindberg Chris(cid:2210)anThorarensen FransSkarman ©JohannesPalmMyllylä JonathanBränning MalcolmVigren RasmusThuresson Sammanfattning Denna rapport behandlar utvecklingen av en webbapplikation för avtalshantering med arbetsnamnet Boardeaser Contracts. Applikationen utvecklades av studenter på Tekniska högskolan vid Linköpings universitet på uppdrag av Boardeaser AB. Rapporten syftar till att ge en överblick gällande utvecklingsarbetet och resultat samt ge svar på uppsatta frågeställningar. Applikationen har utvecklats med ramverket Ruby on Rails. Rapporten går igenom grundläggande teori gällande ramverket samt de mjukvarupaket som använts för implementationen. Rapporten behandlar också den övergripande utvecklingsmetoden samt metod för erfarenhetsfångst. Projektets resultat blev en fungerande webbapplikation med önskad funktionalitet. Resultat och metoder diskuteras och kritiseras, det ges även förslag på alternativa metoder. Arbetet sätts i ett vidare sammanhang när bland annat applikationens energiförbrukning diskuteras. Rapportens slutsatser är kortfattat att den metod som beskrivs i rapporten går att använda för att utveckla en applikation som skapar värde för kunden. Det konstateras också att Ruby on Rails lämpar sig relativt väl för utveckling av webbapplikationer. Varje medlem i projektgruppen har också skrivit ett individuellt bidrag till rapporten. Där utreds olika områden relaterade till projektet mer detaljerat. Dessa bidrag hittas i slutet på rapporten. Författarens tack Tack till Erik Södermark och Jakob Waller på Boardeaser AB för att de varit ständigt tillgängliga för rådgivning gällande utvecklingen av applikationen. Projektgruppen vill även tacka handledare Simon Mehari och kursledningen för kursen TDDD96 vid Linköpings universitet år 2017 för en väl genomförd kurs. iv Ordlista Ord Betydelse Dynamisk typning Ettkänneteckenhosettprogrammeringsspråksominnebärbland annatattprogrammerarenintespecifierardatatypenhosvariabler och funktioner. Front-end Front-end består inom webbutveckling av den del som användare interagerar med på en webbapplikation. Git Ett versionshanteringsprogram. Git-repository EndatastrukturdärGitlagrarinformationomallafileriettpro- jekt. GitHub En webbsida som tillhandahåller lagring av kod versionshanterad med Git. Google Hangouts En plattform för kommunikation på nätet. HTTP HTTP är ett grundläggande protokoll för datakommunikation på webben. Make Makeärettverktygsombyggerprogramochtillhörandefilerfrån programkod. Hur byggandet ska gå till specifieras i en eller flera Make-filer (eng. Makefiles) Migration Migrations är inom Ruby on Rails ett verktyg för att enkelt göra ändringar i en existerande databas. En fil som talar om vilken ändring som ska ske kallas också migration. Open source Programvara där källkoden finns tillgänglig för allmänheten. Pull Request En funktion i GitHub som möjliggör jämförelse av två utveck- lingshistoriker innan koden för dessa förs samman. Rails Används i rapporten som förkortning till Ruby on Rails. Ramverk Inom mjukvaruutveckling tillhandahåller ett ramverk grundfunk- tionalitet som kan utökas av utvecklaren. Ruby on Rails Ett ramverk som används vid utveckling av webbapplikationer. Trello Trello är ett webbaserat verktyg för att organisera ett projektar- bete på en anslagstavla. Anslagstavlan talar om vem som jobbar med vad samt vilken status alla aktiviteter har. v Innehåll Sammanfattning iii Författarnas tack iv Innehåll vi Figurer ix Tabeller x 1 Introduktion 1 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 Frågeställningar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Begränsningar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Bakgrund 3 3 Teori 4 3.1 Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 Ruby on Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.3 Rake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.4 Model-View-Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.5 RubyGems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.6 AWS S3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.7 HTML och Slim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.8 Sass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.9 Scrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.10 CoffeeScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.11 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.12 Heroku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.13 Rails ActionMailer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.14 AmCharts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.15 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4 Metod 9 4.1 Utvecklingsmetod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2 Metod för erfarenhetsfångst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5 Resultat 14 5.1 Systembeskrivning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.2 Systemanatomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.3 Tester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 vi 5.4 Gemensamma erfarenheter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.5 Individuella bidrag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 6 Diskussion 22 6.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 6.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 6.3 Arbetet i ett vidare sammanhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 7 Slutsats 27 7.1 Hur kan Boardeaser Contracts implementeras så att värde skapas för kunden? . 27 7.2 Vilka erfarenheter kan dokumenteras från arbetet med Boardeaser Contracts som kan vara intressant för framtida projekt? . . . . . . . . . . . . . . . . . . . . . 28 7.3 Vilket stöd kan man få genom att skapa och följa upp en systemanatomi? . . . 28 7.4 HurvällämparsigramverketRubyonRailsförutvecklingavwebbapplikationer? 28 A Adam Lindberg – Arkitektur vid utveckling i Ruby on Rails 29 A.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 A.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 A.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 A.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 A.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 A.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 A.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 B Christian Thorarensen – En övergripande jämförelse mellan webbutveck- lingsramverken Ruby on Rails och Django 36 B.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 B.2 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 B.3 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 B.4 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 B.5 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 B.6 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 C Frans Skarman – Enhets- och integrationstestning som hjälpmedel vid mjukvaruutveckling 45 C.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 C.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 C.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 C.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 C.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 C.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 C.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 D Johannes Palm Myllylä – Scrum ur perspektivet studentprojekt 53 D.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 D.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 D.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 D.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 D.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 D.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 D.7 Slutsats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 E Jonathan Bränning - Databaser och Ruby on Rails-utveckling 63 E.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 E.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 E.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 E.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 E.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 E.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 E.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 F Malcolm Vigren – En jämförelse mellan LaTeX och Microsoft Word för dokumentskrivning 70 F.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 F.2 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 F.3 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 F.4 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 F.5 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 F.6 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 G Rasmus Thuresson - Versionshantering i projektet 79 G.1 Inledning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 G.2 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 G.3 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 G.4 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 G.5 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 G.6 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Litteratur 85 Figurer 3.1 Designmönstret Model-View-Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5.1 Skärmbild från indexvyn i Boardeaser Contracts . . . . . . . . . . . . . . . . . . . . . 15 5.2 Skärmbild av sökfälten för avancerad filtrering . . . . . . . . . . . . . . . . . . . . . . 15 5.3 Gantt-schemats utseende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.4 Systemanatomi över Boardeaser Contracts. . . . . . . . . . . . . . . . . . . . . . . . . 19 6.1 Utdrag från servern vid inladdning av indexvyn . . . . . . . . . . . . . . . . . . . . . 25 A.1 Gruppmedlemmarnas svar på fråga 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 A.2 Gruppmedlemmarnas svar på fråga 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 A.3 Gruppmedlemmarnas svar på fråga 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 A.4 Gruppmedlemmarnas svar på fråga 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 E.1 Exempel på relationer i relationsdatabas . . . . . . . . . . . . . . . . . . . . . . . . . 67 G.1 Illustration av förgrening med ny funktionalitet. . . . . . . . . . . . . . . . . . . . . . 80 ix Tabeller 4.1 Beskrivning av olika integritetsnivåer i projektet . . . . . . . . . . . . . . . . . . . . . 12 B.1 Stöd för front-end-språk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 B.2 Stöd för databashanterare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 B.3 IDE-programvara för Rails eller Django . . . . . . . . . . . . . . . . . . . . . . . . . . 41 B.4 Design och funktionalitet för Rails och Django . . . . . . . . . . . . . . . . . . . . . . 41 B.5 Stöd för serverprogramvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 B.6 Webbapplikationer med tillhörande ramverk och ranking för webbtrafik[ref:alexa] 42 B.7 Årtal tillgängligt för allänheten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 C.1 Beskrivning av olika integritetsnivåer i projektet . . . . . . . . . . . . . . . . . . . . . 46 C.2 Lista av fel i backend-delen som klassificerats som buggar . . . . . . . . . . . . . . . 49 C.3 Lista av fel i frontend-delen som klassificerats som buggar . . . . . . . . . . . . . . . 50 C.4 Harduanväntprojektetstesterförattsetillattändringarinteharförstörtgammal funktionalitet? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 C.5 Har du skrivit och använt nya tester medan du har utvecklat en funktion? . . . . . 51 C.6 Om du inte skrivit tester för projektet, varför inte? . . . . . . . . . . . . . . . . . . . 51 C.7 Om du fick göra om projektet, skulle du ändra mängden test som gjorts? . . . . . . 51 E.1 Funktionalitet för olika databaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 F.1 Jämförelse av verktygens innehållsmässiga funktioner. . . . . . . . . . . . . . . . . . . 73 F.2 Jämförelse av produktivitetsfunktioner. . . . . . . . . . . . . . . . . . . . . . . . . . . 74 G.1 Gits kommandon och SVN:s motsvarigheter . . . . . . . . . . . . . . . . . . . . . . . 81 x
Description: