En sluttrapport for Lønnsomhetskalkulator Framlagt som en del av fullførelsen av BACHELOR I ANVENDT DATATEKNOLOGI Av Magnus Reisæter Avgangsåret 2015 Student 189106 Anthony Davies Avgangsåret 2015 Student 189121 Alexander Evensen Avgangsåret 2015 Student 189104 Stian Rydje Avgangsåret 2015 Student 189127 Morten Nordengen Avgangsåret 2015 Student 189098 Fakultet for teknologi, kunst og design (T.K.D.) Høgskolen i Oslo og Akershus 1.1 Forord Dette prosjektet er et produkt av et semesters arbeid på Høgskolen i Oslo og Akershus, avdeling for ingeniørutdanning. Prosjektet har vært utfordrende og ambisiøst. Arbeidet har resultert i et fullverdig produkt som i stor grad tilfører verdi til et allerede etablert produkt i EVRY sin portefølje. Det ferdige produktet er et resultat av et meget godt samarbeid mellom oss som gruppe, våre veiledere ved HiOA, veiledere fra EVRY, og andre som har kommet med råd og veiledning underveis. Vi ønsker å rette en stor takk til alle personene i EVRY som har tatt seg tiden til å bidra på hver sin måte under prosjektet. En spesiell takk til Andreas Røe som har fungert som veileder og nettverksbygger internt i selskapet. Du har gitt oss en stor mengde inspirasjon med all den erfaringen du besitter fra din tid i bransjen, og ditt innovative tankesett. Vi har følt oss hjemme hos dere fra første dag. Takk til Rune Gjørøy, selger, for verdifulle tilbakemeldinger angående salgsprosessen, og innspill på grensesnitt. Takk til Odd Egil Orøy, produkteier, for kontinuerlig oppfølging, og din tillit til oss når det kom til å ta avgjørelser underveis. Signert Oslo Dato Magnus Reisæter Alexander Evensen Anthony Davies Morten Nordengen Stian Rydje 2 Kapittel 1: Presentasjon Forord 1.1 Innledning 1.2 Om gruppen 1.2.1 Om oppdragsgiver 1.2.2 Ord fra oppdragsgiver 1.2.3 Bakgrunn for oppgaven 1.3 Bedriftens målsetninger 1.3.1 Spesifikke føringer 1.3.1.1 Gruppens målsetninger 1.3.2 Hvordan vi fikk oppgaven 1.3.3 Beskrivelse av applikasjonen 1.4 1.2 Innledning Hensikten med en presentasjonsrapport er å presentere oppdragsgiver og oppdragstaker for leseren av rapporten. Vi ønsker å gi leseren et innblikk i hva oppgaven går ut på, og hvilke målsetninger partene har under prosjektets varighet. 3 Det anbefales å starte med dette kapittelet, da det vil bli antatt at rapporten er gjennomgått i kronologisk rekkefølge. En god forutsetning for å lese rapporten er å ha noe kjennskap til dagsaktuell teknologi og rammeverk. Oppgavespesifikke fremmedord vil bli forklart i en vedlagt ordliste. Underveis kan leseren av rapporten være tjent med å følge stegene som blir forklart i selve applikasjonen som er tilgjengelig på: http://anvend.me/lonnsomhetskalkulator/lonnsom-latest/ 1.2.1 Om gruppen Vi er fem studenter fra studiet Anvendt Datateknologi ved Høgskolen i Oslo og Akershus. Gjennom kontinuerlig bra samarbeid gjennom bachelorstudiene har vi fått en gruppe som kjenner hverandre bra på godt og vondt. Hvert enkeltmedlem har sine sterke og svake punkter, og sammen i et team får vi utnyttet dette på en god måte. Til felles har vi ambisjonsnivå, interessen for teknologi og mål om selvstendig utvikling i fagfeltet. Figur 1 - Organisasjonskart 4 1.2.2 Om oppdragsgiver EVRY ASA, tidligere EDB ErgoGroup ASA, er et norsk informasjonsteknologiselskap etablert 14. oktober 2010 gjennom en sammenslåing av EDB Business Partner og ErgoGroup, som gjør konsernet til Norges største IT-selskap. Selskapet har 10.000 ansatte fordelt på 135 kontorer i 16 land, og en årlig omsetning på circa 13 milliarder kroner (EVRY Annual Report, 2013 ). EVRY Retail implementerer morgendagens løsninger med flere kanaler for kommunikasjon mellom forhandlere, daglivarekjeder og deres kunder. EVRY er markedsledende på innhold og dokumentformidling og utvikler egne løsninger for distribusjon. Store deler av applikasjonsporteføljen er bygget på Open Source og forvaltes internt. Enheten har en tverrfaglig sammensetning av utviklere, arkitekter, prosjektleder og domenekunnskap innenfor våre fagfelt. EVRY har en ambisiøs vekststrategi. Enheten består i dag av 90 medarbeidere i Norge. EVRY Retail betjener til daglig mer enn 900 kunder som alle har det til felles at de har forbrukere som sluttkunde. EVRY Retail hadde en omsetning på ca. 250 MNOK i 2012( EVRY Annual Report, 2012). 5 1.2.3 Ord fra oppdragsgiver Anthony Davies , Morten Nordengen, Alexander Evensen, Magnus Reisæter og Stian Rydje har våren 2015 arbeidet hos EVRY AS med å utvikle en løsning for å kalkulere lønnsomhet ved bruk av vår tjeneste Multikanal – kalt Lønnsomhetskalkulator. Som en del av arbeidet har gruppen også testet å bruke markedsaktuelle arbeidsmåter og tekniker som Lean Startup og Business Canvas til å strukturere arbeidet sitt. De har gjort refleksjoner gjengitt i rapporten, som har vært lærerik også for EVRY sine medarbeidere som har vært involvert i prosjektet EVRY er tilfreds med hvordan gruppen har jobbet selvstendig gjennom perioden denne våren. De har etter felles ønske brukt mye tid hos oss, som har vært viktig for å kunne ta kjappe diskusjoner og fatte avgjørelser – og for å unngå unødvendig tidsbruk til mailutveksling og formell kommunikasjon. Gruppen har selv tatt initiativ til å sette opp møter, intervjuer og avtaler de har hatt bruk for og kommunisert ryddig gjennom ukentlige statusmøter. Vennlig hilsen Andreas Røe Avdelingsleder Utvikling 1.3 B akgrunn for oppgaven Forretningsvertikalen Information Logistics (IL) har en portefølje av systemer innen området “Information Logistics” og distribuerer store mengder dokumenter og meldinger både til privatpersoner og foretak. Til privatpersoner er dette ofte regninger, lønnsbrev, årsoppgaver og 6 innhold som gjerne kan distribueres elektronisk. Fordelene med elektronisk distribusjon kan være blant annet økonomisk lønnsomhet, miljøøkonomisk lønnsomhet og å møte kunder der de forventer å få informasjon. Illustrasjonen under viser i grove trekk en logisk beskrivelse av flyt i disse systemene Figur 2 - Modell av multikanal. Tjenestens hovedstruktur er vist i figuren over. Kunden sender en eller flere filer som skal benyttes for å skape dokumentene og sørge for at de distribueres til fakturahotell og rett mottager i ønsket kanal. Tjenesten har basisfunksjonalitet og en rekke opsjoner som kan bestilles. I figuren over er basistjenesten vist med blått, og opsjonene er vist med grønt. Basistjenesten sørger for å distribuere dokumentene til fakturahotell samt til valgt utgående kanal basert på innhold i filen som kommer fra kunden. Det holdes oversikt over hvilke dokumenter som er distribuert hvor, samt oversikt over leveringskvitteringer fra de forskjellige kanaler. Det kan bestilles en rekke opsjoner: ➢ Oppsett og konfigurering av utkanaler som nettbank, SMS, e-post, print, digipost og EHF. ➢ Produksjon av visuelt format (PDF) for fakturahotell eller andre kanaler. 7 ➢ Oppsett av regler for én til én kommunikasjon og inkludering av forskjellige tekst- og designelementer basert på segmentering av mottagere. ➢ Remote Collaboration som gjør det mulig for flere aktører og “eie” deler av dokumentet. 1.3.1 Bedriftens målsetninger EVRY tilrettelegger en database som inneholder statistikk over distribusjoner for gitte utstedere. I tillegg til databasen gis en mal for et Business Case som synliggjør hva distributører tjener av økonomisk inntjening ved å ta i bruk siste versjon av løsningen og overføre dagens papirbaserte distribusjon til elektroniske kanaler som eFaktura, digipost og e-post. Denne informasjonen skal være nødvendig bakgrunnsinformasjon for oss som gruppe til å lage en applikasjon som kan generere verdi for selger basert på innholdet i databasen og Business caset. Applikasjonen skal kunne brukes til å formidle markedsføringsbudskapet ovenfor aktuelle kunder. Forventet leveranse er en kjørende applikasjon som utfører funksjonalitet beskrevet over, sammen med en erfaringsrapport om bruk av Lean Startup til å gjennomføre oppgaven. 1.3.1.1 Spesifikke føringer for oppgaven ➢ Bruke Lean Startup og Lean Canvas til å synliggjøre oppgavens omgivelser og styre gjennomføringen av prosjektet. ➢ Gruppen skal i periodene utdanning tillater det jobbe i EVRY sine lokaler på Fornebu. ➢ Ingen tekniske begrensninger utover koblingen til database (Oracle) og at løsningen skal kunne kjøre på RedHat Linux. 8 1.3.2 Gruppens målsetninger Målet med prosjektet er å utvikle en applikasjon som kan generere markedsføringsverdi for produkteier og andre ansatte i EVRY i forbindelse med deres arbeid. Hensikten med applikasjonen er å kunne gi selger konkrete tall på hvilke besparelser kunden kan få ved å sette ut dokumentdistribusjonen til EVRY. Gevinsten i dette er at salgsbudskapet blir sterkere, og kunden får konkrete tall å relatere til. Dagens system ville krevd mye manuelt arbeid for å få generert et presist kostnadsbilde for kunden. Derfor ønsker vi å utvikle en løsning som gjør at brukeren enkelt kan medbringe seg et salgsbudskap som kan framvises på mobil, nettbrett eller PC. Løsningen som skal utvikles vil ha muligheter for utvidelse som legger til rette for videreutvikling internt i EVRY. Sammen med applikasjonen ønsker vi å levere grundig dokumentasjon på produktet. 1.3.3 Hvordan vi fikk oppgaven Høsten 2014 var vi med på Dagen@IFI som arrangeres av studentene ved Institutt for Informasjonsteknologi ved Universitet i Oslo. Her traff vi mange interessante oppdragsgivere. Vi fikk god kontakt med flere, og fulgte opp med å maile rundt relevant info om gruppen til de aktuelle oppdragsgiverne. Vi hadde også opprettet en åpen søknad som vi delte gjennom venner og sosiale medier. Rundt juletider fikk vi innkalling til et møte hos EVRY på Fornebu. Her gjennomgikk vi oppdraget de ønsket løst, og vi argumenterte for hvorfor vi var de rette til å løse det. Oppgaven berørte retail-segmentet av EVRY sine arbeidsområder. Dette passet oss veldig godt, da to av 9 gruppemedlemmene har meget god kjennskap til fagfeltet med nesten fem års samlet erfaring med drift og support i en av de største aktørene innenfor retail i Norge. Vi takket ja til oppgaven grunnet interessen for utviklingsmetodikken, vår tro på at oppgaven var overkommelig innen vårt tidsperspektiv, og var veldig fornøyd da EVRY hadde lyst til å satse på oss når det kom til gjennomføringen. 1.4 Beskrivelse av applikasjonen Figur 3 - Skjermdump, førsteside av applikasjon. Vår applikasjon er en lønnsomhetskalkulator som gjennom fem steg viser bedrifter som allerede benytter en eller flere av EVRYs kanaler hvordan de kan oppnå økonomiske besparelser ved å bedre utnytte disse kanalene samtidig som den viser nye og aktuelle kunder hva de sparer ved å gå over til EVRY sine løsninger. Applikasjonen fungerer som et hjelpemiddel for en selger som er ute hos kunden ved at den på en enkel og visuell måte viser kunden konkrete tall, og vil derfor gi selger et tydeligere salgsbudskap, men skal også fungere som et markedsbudskap som skal kunne sendes/ligge tilgjengelig for potensielle kunder slik at de selv kan gå igjennom applikasjonen selv. Om de skulle konkludere med at det EVRY tilbyr er noe som de og deres bedrift kunne tenke seg å lære mer om, kan de velge om de vil bli kontaktet av en selger/kontaktperson hos EVRY. 10 Kapittel 2: Innhold (Kravspesifikasjon) Forord 2.1 Innledning 2.2 2.2.1 Bakgrunn for oppgaven Systemkrav 2.3 Oppdragsgivers krav til funksjonalitet 2.3.1 Ønsket tilleggsfunksjonalitet 2.3.2 Tekniske krav 2.3.3 Krav til koden 2.3.4 Grensesnit t 2.4 Generelt om design 2.4.1 Bruk av branding og fonter 2.4.2 Dokumentasjonskrav 2.5 Konklusjon 2.6 11 2.1 Forord Hensikten med å spesifisere krav til applikasjonen er å gi utviklere og oppdragsgiver en fastsatt enighet og forståelse av hvilke krav applikasjonen skal oppfylle. Kravspesifikasjonen definerer en klar ramme på det som angår funksjonalitet og tilhørende design. Vi følger utviklingsmodellen Lean Startup som nevnt i flere andre deler av rapporten. Utviklingsprosessen foregår kombinert med bruk av Trello. Dette vil si at vi leverer produktet i inkrementer fortløpende, slik at deler av funksjonaliteten blir implementert underveis. Funksjonaliteten får godkjenning av produkteier, og blir med andre ord godkjent av kunden. Kravene til prosjektet blir gitt som enkeltfunksjoner, og anmodninger om å vinkle design i en retning av andre eksisterende løsninger. Implementasjon av funksjonaliteten blir forklart i prosess- og produktrapportene. Kravene som blir satt blir i hovedsak delt i to forskjellige kategorier - must have og nice to have . Naturlig nok blir minimumskravene som er must have prioritet 1, mens ekstrafunksjonalitet som er nice to have blir ansett som funksjonalitet eller andre fix som kan implementeres om det er ressurser til det. Kravspesifikasjonen har fungert som et veiledende dokument for gruppen, og har endret seg hyppig underveis i prosjektets løp. Dette kommer av at vi har vært gode til å selge våre egne forslag når det kom til funksjonalitet til produkteier, men også fått oppdaterte kriterier fra produkteier. 2.2 Innledning Prosjektet gjennomføres som et avsluttende hovedprosjekt av oss som studenter ved Høgskolen i Oslo og Akershus avdeling for ingeniørutdanningen for EVRY. Det skal produseres en applikasjon som kan kjøres på alle enheter som er etter dagens standard. Applikasjonen utvikles med tanke for at den vil kjøre på mobile enheter som nettbrett og smarttelefoner, men også kunne kjøre feilfritt på desktop. 12 Applikasjonen skal ha samme funksjonalitet på desktop- og mobile enheter. Det vil bli en forskjellig opplevelse å bruke applikasjon på forskjellige plattformer, dette for å tilpasse opplevelsen for små skjermer, og for å utnytte større skjermer for plattformer som har det. Helhetsinntrykket skal bevares, og gå på tvers av plattformer. EVRY har mulighet, og vil videreutvikle applikasjonen etter vårt opphold om vi ikke skulle bli ferdig. På grunn av at det stadig kommer fram mer funksjonalitet som ønskes implementert, så er det mulig at det dukker opp ønsket funksjonalitet i etterkant. Innledningsvis hadde vi en meget løs kravspesifikasjon fra EVRY sin side om funksjonalitet. Den bestod bare av kompabilitet ovenfor rammeverk, og hadde ingen spesifikke krav til funksjonalitet. Det ble tegnet en rød linje av hva EVRY ønsket applikasjonen skulle kunne gjøre, men utover det fikk vi frie tøyler. For å kunne kjøre oppgaven i kombinasjon med Lean Startup var det helt nødvendig å ha en kravspesifikasjon som var på grensen til ikke-eksisterende for å kunne gi Lean Startup hensikt. Dette medførte at kravspesifikasjonen ble til underveis i utviklingsprosessen. Krav til design og kode har blitt satt i samarbeid med EVRY i løpet av prosjektets varighet. 2.2.1 Bakgrunn for oppgaven Som opplyst om i presentasjonen i første kapittel er formålet med applikasjonen å genere verdi for selger via et salgsbudskap i form av en lønnsomhetskalkulator. Applikasjonen gjør utregninger på hva en eksisterende eller potensiell kunde kan tjene på å utsette blant annet print, faktura og oppbevaring av disse i fakturahotell. Applikasjonen baserer seg på kostnadene som er markedsstandard for nevnte tjenester. Det er per i dag ingen applikasjon som gjør tilsvarende utregninger for potensielle kunder eller selger. Derfor er det framlagt et ønske fra EVRY om å utvikle en applikasjon som på en fin måte kan framlegge gode salgsargumenter gjennom utregninger og informasjon rundt tjenestene EVRY kan tilby. 13 2.3 Systemkrav EVRY sine innledende krav til applikasjonen var at den var kjørbar på Red Hat Linux og kunne benyttet seg av en tilkobling til en Oracle-database. Utover dette hadde vi relativt frie tøyler, men vi vil likevel spesifisere hvilke ønsker om funksjonalitet som er kommet fram underveis. 2.3.1 Kundens krav til funksjonalitet Følgende funksjonalitet er krav vi har satt i samarbeid med produkteier. Ønsket funksjonalitet er resultater av hva som kom fram som ønskelig under intervjuer med brukerne. Utregning: ➢ Applikasjonen skal kunne gjøre en utregning på spesifiserte tall over kostnader for ulike tjenester. Dette innebærer at utregningen skal kunne være fleksibel ovenfor input, og utregningen skal endres dynamisk med user input. Omdirigering av printkanal til digitale kanaler: ➢ Utregningen skal vise mulig besparelse over å flytte papirbaserte fakturaer til digitale kanaler som digipost og eFaktura. Utnyttelse av whitespace: ➢ Applikasjonen skal kunne gjøre en utregning på hva en kunde kan spare på å utnytte det hvite rommet på en faktura som ikke blir utnyttet. Besparelsen kommer hvis kunden kan utnytte whitespace i den grad at det ikke lenger er behov for å sende ut en individuell forsendelse med eksempelvis et markedsbudskap eller tilleggsinformasjon. 14 Utnyttelse av konvolutt: ➢ Applikasjonen skal gjøre en utregning på hva en kunde kan spare på å utnytte hver enkelt konvolutt til sitt potensiale. Dette innebærer å legge ved ekstra markedsbudskap i form av reklame eller lignende i samme forsendelse. Ønsket scenario er at kunden skal slippe å måtte sende en individuell forsendelse for å oppnå det samme som kunne blitt oppnådd i en konvolutt. Dette er mulig ved og ikke overskride kriteriene for vektklassen konvolutten sendes i. Feilhåndtering i forbindelse med digitale kanaler: ➢ Denne funksjonaliteten innebærer å kunne spare kunden for kostnaden som tilhører og manuelt måtte gå over alle digitale forsendelser som feiler. I praksis vil applikasjonen sende digitale forsendelser på print/papir hvis noe skulle gå galt under den digitale forsendelsen. Portooptimalisering: ➢ Grunnet EVRY sin allerede store portefølje av kunder, vil man kunne oppnå en besparelse med å sende store volum med forsendelser gjennom EVRY. I praksis vil man få rabatter fra posten hvis man sender et volum som overgår en satt sum. Derfor vil mindre kunder oppnå den samme rabatten når de sendes sammen med kunden som sender ut større volum. Applikasjonen skal informere kunden om denne muligheten, og hva den er verdt for kunden. 2.3.2 Ønsket tilleggsfunksjonalitet Følgende krav er funksjonalitet som har blitt ansett som nice to have av oss og produkteier under utviklingsprosessen. Funksjonaliteten er ikke nødvendigvis implementert i applikasjonen, men det vil være hensiktsmessig å utforske mulighetene for implementasjon i framtiden. 15 Komme i kontakt med selger: ➢ Funksjonaliteten innebærer at en potensiell kunde kan på egenhånd gjennomgå løpet i applikasjonen. Informasjonen og utregningene skal bli lagret og bli sendt til en e-postkonto hos EVRY, og brukeren skal ha mulighet for å hake av for å bli kontaktet av en selger. 2.3.3 Tekniske krav ➢ Applikasjonen skal kunne kjøres på en Red Hat Linux server. ➢ Applikasjonen skal kunne kjøres på Android-enheter som kjører operativsystemversjon 4.0 eller nyere. ➢ Applikasjonen skal kunnes kjøres på iOS-enheter som kjører operativsystemversjon 6.0 eller nyere. ➢ Applikasjonen skal kunne kjøres på Desktop-enheter som kjører de mest kjente nettlesere. ○ Internet Explorer release: 10.0 eller nyere ○ Chrome release: 42.0.2311.90 eller nyere. ○ Mozilla Firefox release: 37.0.2 eller nyere. ○ Opera release: 28 eller nyere. ○ Safari release: 6.2.5 eller nyere. ➢ Utregningene skal skje skjult for brukeren, og formelen skal ikke være direkte synlig for kunden. ➢ Brukere skal oppleve applikasjonen som responsiv, dynamisk og hurtig. ➢ Bruk av nettverksressurser skal være minimal. ➢ Det skal være enkelt å navigere fram og tilbake i applikasjonen. 2.3.4 Krav til koden Alle kommentarer og kode skal skrives på norsk, og dette skal være en konsekvent regel. Ellers skal det tilstrebes at koden er mest mulig oversiktlig, slik at koden lett kan overtas og vedlikeholdes. Ryddig kode gjør det også lettere å videreutvikle for EVRY etter prosjektets varighet. 16 Det skal tilstrebes å navngi klasser, metoder og variabler med så selvforklarende navn at omfattende kommentering ikke er nødvendig. Koden skal struktureres slik at utvidet funksjonalitet lett kan implementeres. 2.4 Grensesnitt Vi har under hele løpet forsøkt, etter beste evne, at applikasjonen skal ha et design som tilsvarer det EVRY bruker på sine andre offentlige grensesnitt. Dette innebærer å bruke tilsvarende fonter og logoer som blir brukt på deres hjemmeside. Dette er et valg vi selv har fattet, da det allerede fantes eksisterende arkiver med det vi måtte trenge av logoer og lignende. Det ga oss også en fin linje vi kunne følge. 2.4.1 Generelt om design Vi har i hovedsak tatt egne avgjørelser på hvordan applikasjonen skal se ut, og har fått gode tilbakemeldinger på produkteier på de avgjørelsene vi har tatt. Oppsummert har vi prøvd å innfri følgende punkter: ➢ Applikasjonen skal ha et logisk design på både Desktop og mobile enheter. ○ Elementer skal ha en størrelse som tilsvarer normalen i markedet. ➢ Navigasjon skal oppleves som enkel og feiltolerant. Det skal være intuitivt å navigere seg gjennom prosessene i applikasjonen. ➢ Grafiske elementer skal ha et flatt utseende, og det skal ha et moderne preg i forhold til dagens standarder. ➢ Brukere skal sitte igjen med et helhetlig inntrykk av at applikasjonen er ferdigutviklet til enhver tid. 17 ○ Det skal ikke finnes døde lenker, synlig kode, kryptiske feilmeldinger. ➢ Ikonet for applikasjonen skal være i tråd med andre applikasjoner på sitt respektive operativsystem. ➢ Hvis brukeren skal motta push-meldinger, skal meldingen være kortfattet og i tråd med grunnlaget for varslingen. ➢ Designet skal være lett å oppdatere med tidens gang. ○ Moderne design står ikke stille, derfor kan ikke applikasjonen gjøre det heller. Dette må være lett å vedlikeholde over lengre tid for å holde designet tidsriktig. 2.4.2 Bruk av branding og fonter ➢ Det skal konsekvent brukes farger som er å finne i det sentrale designet som EVRY fører. ➢ Det skal konsekvent brukes samme font som er å finne i tekst på EVRY sine applikasjoner og sider. ➢ Ved bruk av logoer skal det brukes bilder som er skalert riktig. ○ Det vil si at bildet ikke skal være for stort, og ikke for lite for enheten bildet kjøres på. 2.5 Dokumentasjonskrav Kravene til dokumentasjonen fra oppdragsgiver er: ➢ Dokumentasjonen skal kun publiseres etter need to know prinsippet. ○ Herunder faller kontaktpersoner i EVRY og veileder og sensor ved Høgskolen i Oslo og Akershus. ➢ Dokument- og informasjonsforvaltning skal skje i tråd med taushetserklæringer som er undertegnet av samtlige gruppemedlemmer. ➢ Dokumentasjon i form av sluttrapport skal ikke diskuteres med andre personer enn de nevnte før sluttproduktet er lansert. 18 2.6 Konklusjon Kravspesifikasjon har vært til stor hjelp i prosessen med å konkretisere prosjektets omfang og rammer. Grunnet naturen i Lean Startup har vi aldri operert med en kravspesifikasjon som var satt i stein. Kravspesifikasjonen har i motsetning til andre planmetodikker vært fleksibel og tilgjengelig for tilpasninger. Vi gjorde det enkelt for oss selv med å følge samme designveien som allerede finnes på EVRY sine hjemmesider. Dette la et godt fundament for designet, og vi slapp på denne måten å oppfinne kruttet på nytt. Funksjonalitetsmessig har kravene dukket opp underveis, og dette har prosjektet taklet godt takket være bruken av smidig utviklingsmetodikk. Dette sørget også for at produktet var brukbart når vi leverer det fra oss, siden det fortsatt kan gjøres implementasjoner inkrementelt. Det ferdige produktet skal tilfredsstille alle de krav vi har oppført som første prioritet( need to have) . Dette gjelder for det som måtte angå funksjonalitet, design og kode. Ekstrafunksjonalitet kan ved behov implementeres som inkrementer i etterkant. Det ferdige produktet vi leverer fra oss har i skrivende stund ingen ekstrafunksjonalitet som ikke er implementert. Vi har derimot ingen tvil om at det er rom for utvidet bruk av applikasjon, og håper det vil fortsette å komme oppdateringer til applikasjon, slik at den kan få utvidet levetid. Basert på det som er nevnt mener vi at overleverer et produkt som innfrir alle krav som er stilt underveis, og det har overgått våre egne og produkteiers forventninger. 19 Kapittel 3: Prosess Forord 3.1 Planlegging og metode 3.2 Forløp til prosjektstart 3.2.1 Arbeidsteknikker og utviklingsmetodikk 3.2.2 Lean Startup 3.2.2.1 Lean Canvas 3.2.2.2 Trello 3.2.2.3 Kommunikasjon mot produkteiere 3.2.3 Prosjektstyringsdokumenter 3.2.4 Arbeidsplan 3.2.4.1 Fremdriftsplan 3.2.4.2 Arbeidslogg 3.2.4.3 3.2.5 Arbeidsforhold Telenor Fornebu 3.2.5.1 Pilestredet 35 3.2.5.2 Verktøy 3.3 Versjonskontroll 3.3.1 Prosjekthåndtering 3.3.2 Dokumentasjon 3.3.3 20 Utviklingsverktøy 3.3.4 Utvidelser og rammeverk 3.3.5 Utviklingsprosessen 3.4 Konseptutvikling 3.4.1 Datainnsamling 3.4.2 Målgruppe og behov 3.4.3 Gruppemøter og brainstorming 3.4.4 Presentasjon av Minimum Viable Product 3.4.5 Utvikling for web 3.5 Fordeler og ulemper med web 3.5.1 Implementering av funksjonalitet 3.5.2 Testing 3.6 Utforming av brukergrensesnitt 3.7 Navigasjonsvalg 3.7.1 Fargevalg 3.7.2 Grafikk 3.7.3 Personvern 3.8 Kravspesifikasjons og dens rolle 3.9 3.9.1 Bakgrunn for kravspesifikasjon Rammekrav 3.9.1.1 Fortløpende endringer 3.9.1.2 3.9.2 Vår erfaring med kravspesifikasjon 21 Oppfyllelse av krav og/eller måloppnåelse 3.9.2.1 Tilbakemelding fra oppdragsgiver og kunde 3.9.2.2 Konklusjon 3.9.3 3.1 Forord Denne rapporten skal beskrive prosessen bak utviklingen av Lønnsomhetskalkulatoren. Leseren vil være tjent med å ha lest presentasjonsdokumentet og gjort seg kjent med helheten i dokumentasjonen. Leseren av rapporten bør også være kjent med teknologiene og de tekniske aspektene prosjektet er bygget på. For oppklaring rundt teknologier og tekniske faguttrykk, så henvises leseren til ordlisten, ettersom faguttrykk vil bli brukt uten en tilhørende forklaring i hovedrapporten. Prosessene blir gjennomgående beskrevet for hvordan arbeidet har foregått gjennom hele hovedprosjektet for vår gruppe. Den består av fire kapitler: ➢ Planlegging og metode: Her inngår planleggingen, hvordan vi har jobbet med hverandre, vår kommunikasjon med oppdragsgiver, prosjektstyring og hvordan vi har fordelt arbeidet oss i mellom. Herunder vil det også bli begrunnet valg av verktøy og teknologi som er blitt tatt i bruk. ➢ Utviklingsprosessen: Beskriver prosessen fra oppstart til programmering, funksjonalitet og design. Her vil vi gjøre rede for de valgene vi har tatt, og vi vil også gå inn på problemene som har møtt oss på veien til et ferdig produkt. ➢ Kravspesifikasjon: Hvilke krav som var satt av arbeidsgiver til vårt ferdige produkt, og hvordan vi har forholdt oss til det. ➢ Avsluttende del: Her vil vi presentere våre tanker rundt utbytte av å gjennomføre et hovedprosjekt, og hvor fornøyd vi ble med det endelige produktet. 22 3.2 Planlegging og metode God planlegging og utnyttelse av tilgjengelige ressurser er kritisk for å gjøre et godt prosjekt. I dette kapittelet vil vi beskrive metodikk, teknikker, verktøy og andre ressurser som i stor grad har bidratt til å gjøre prosjektet til en suksess. 3.2.1 Forløp til prosjektstart Det første gruppemøtet fant sted tidlig på høsten 2014. Agendaen for møtet var å kartlegge tanker og ideer. Vi ønsket å drøfte hva type prosjekt vi ønsket å gjennomføre. Møtet var preget av god flyt av ideer, og stort pågangsmot for året som la foran oss. Det ble også diskutert aktuelle arbeidsgivere som vi så for oss kunne sitte på et aktuelt prosjekt av ønsket størrelse. Vi var avhengige av å treffe spikeren på hodet når det kom til prosjektets omfang. Skulle vi bomme på dette punktet, ville begge ytterpunkter vært uheldig det kommende året. Ønskelig ville vi sitte med et prosjekt som kunne fore oss med stor arbeidsmengde i løpet av hele semesteret. Var prosjektet for lite, ville vi hatt problemer med å få delegert tilstrekkelig arbeid til hvert av gruppemedlemmene. Om prosjektet skulle vise seg å være for omfattende, ville vi fått problemer med å etterlate oss et produkt vi stolt kunne sette våre navn på. Vi anså det også som et stort pluss om bedriften hadde tidligere historie med å utlyse prosjekter til bachelorstudenter. Dette var lett å undersøke med å gjennomgå tidligere prosjektoppgaver som ligger tilgjengelig på HiOA sine sider. Søknadsprosessen foregikk i stor grad gjennom å sende rundt vår åpne søknad gjennom våre egne nettverk og sosiale medier. Når vi fikk interessenter på den åpne søknaden, ble vi i de fleste tilfeller anmodet om å sende et lite skriv om gruppen sammen med karakterer. 23 Når vi ble kalt inn til EVRY for et møte i desember, tok vi raskt en avgjørelse om at dette var en oppgave vi gjerne ønsket å jobbe med. Det grunnet i EVRY sin lange historie med å engasjere bachelorstudenter til å løse reelle prosjektoppgaver. Utviklingsmetodikken som var fastsatt var også en inspirasjonsfaktor, sammen med det at produktet vi skulle lage skulle produksjonssettes. Det faktum at vi traff riktig arbeidsgiver på første møte med næringslivet var veldig motiverende, og vi fikk bedre tid til å lese oss opp på teknologier og metodikk som inngikk i oppgaven før semesterstart. 3.2.2 Arbeidsteknikker og utviklingsmetodikk Smidig utvikling har de siste årene overtatt rollen som den mest brukte modellen for utviklingsprosjekter. Ord og utrykk som Scrum, Extreme Programming, Kanban og Lean er gjengangere i utviklingsmiljøer verden over. Dette er metodikker som er blitt godt tatt imot av næringslivet, og blir i dag anerkjent som en hjørnestein i en effektiv utviklingsprosess. Det er ingen enkel jobb å definere hva smidig utvikling er, og når det skal brukes, men kjernen av metodikken er: ➢ Individer og samspill framfor prosesser og verktøy. ➢ Fungerende system framfor utførlig dokumentasjon. ➢ Samarbeid med kunden framfor kontraktsforhandlinger. ➢ Å reagere på endringer framfor å følge en plan. Utviklingsmetodene var ikke fremmede for noen av oss, da de har overtatt største delen av pensum som foreleses på skoler rundt om i hele verden. Det er også et tema som blir skrevet bøker om, samt at det det er mye å lese om i forskjellige mediumer for utviklere. Når det kom til valg av utviklingsmetodikk, så var det ikke opp til oss, da det allerede var spesifisert i oppgaven vi fikk av EVRY. Dette synes vi absolutt ikke var negativt, det var mer et krav fra vår side at vi fikk lov til å jobbe etter en smidig modell. Det begrunner vi med at vi har relativt liten tid, 24 og var med prosjektstart ikke helt sikre hva vi egentlig skulle lage. Prosjektet var som skapt for å følge en smidig utviklingsmodell. Alternativet ville vært å følge en klassisk fossefallsmetode, og dette ville ikke gjort mye rom for feiling underveis. Fossefallsmetoden legger alt for mye vekt på detaljert planstyring for et prosjekt med varighet på kun ~fem måneder. Bruk av Lean Startup tilrettelegger i stor grad for programmering i par, brukerinteraksjon underveis i utviklingsløpet, og inkrementell utvikling under hele prosjektets varighet. Vi har valgt å kombinere bruken av Lean Startup med prosjektstyringsverktøyet Trello for å kunne utnytte tiden vi har til rådighet best mulig. Vi vil komme tilbake på hva Trello kan gjøre for prosjektstyring. 3.2.2.1 Lean Startup Hovedessensen i Lean Startup er at du har en idé. I vårt tilfelle skulle vi komme opp med en idé som kunne svare på oppgaveteksten som produkteier var villig til å satse på. Deretter vil man på den letteste, kjappeste, minst ressurskrevende måten framstille idéen for den som skal kjøpe den. Man må som gruppe erkjenne at forslaget ikke er annet enn antakelser på hvordan vi tror problemet bør bli løst. Tusenkronersspørsmålet er om ideen er god nok eller ikke. Vi kan med andre ord ikke faktisk vite om vår måte å gjøre det på ville fungert i markedet. Som gruppe har vi synset fram og tilbake, og hatt dialog oss imellom, men ingen av oss kan sitte på fasiten. Du kan også snakke med andre involverte i bruken av produktet, men det er ikke sikkert de er enige om hva som er beste løsning de heller. 25 Figur 4 - Illustrasjon av Lean Startup. Lean Startup en metodikk som hjelper deg fra stadiet hvor tror du har en god løsning, til du vet du har en god løsning. Det som står aller mest sentralt i metoden er læring gjennom eksperimentering. (Lean Startup avmystifisert, David Sagen, 2014). Dette vil si at vi prøver ut ulike sider av ideene man har kommet opp med i praksis. Da blir det mest naturlig å innkalle de som skal bruke produktet til en gjennomgang av vår hypotese på løsningen på problemet. Målet vårt da er enten å få hypotesen til å holde vann (brukerne har lyst på produktet), eller at hypotesen skal feile(brukerne har ikke lyst på produktet), slik at man som gruppe kan prøve ut andre ideer og hypoteser. Poenget ligger iå gjøre dette så tidlig som mulig, og så lite ressurskrevende som overhodet mulig, før man virkelig satser på en idé. På denne måten kan vi få en bekreftelse på at det vi lager, finnes det en brukergruppe for som er villig til å kjøpe det vi lager. Det er kritisk å gjøre det så tidlig som mulig, slik at man ikke bruker unødige ressurser på å lage et produkt som det ikke finnes kjøpere til. 26 Denne prøve seg fram metodikken skal man gjøre om og om igjen, på en hypotese av gangen. Ønsket sluttsituasjon etter hypotesetesting er at man som gruppe kan være sikker på at man har et produkt det er etterspørsel etter, og man vil mye større sannsynlighet for å lykkes. 3.2.2.2 Lean Canvas Figur 5 - Lean Canvas. Et Lean Canvas er et strategisk styringsverktøy for å utvikle nye eller dokumentere eksisterende businessmodeller. Det er en visuell framstilling med elementer som beskriver produktets verdiforslag. 27 Business Model Canvas var originalt utgitt av Alexander Osterwalder basert på hans tidligere arbeid på Business Model Ontology. Siden utgivelsen av Osterwalders arbeid i 2008, har det også oppstått spesifikke nisjer, slik som Lean Canvas som vi har benyttet oss av(The Business Model Canvas, juli 2008). Lean Canvas som det står i dag er videreutviklet av Ash Maurya. Han utformet Lean Canvas for å gjøre det mer interaktivt, samtidig som det skulle fokusere på entreprenørskap. Metaforen han hadde i tankene var å bygge en taktisk plan eller blueprint fra bunnen og opp. Dette skal veilede entreprenøren fra idémyldring til han sitter igjen med en oppstartsbedrift med suksess i markedet(Ash Maurya, 2012). Problem ➢ De fleste oppstartsbedrifter feiler ikke på grunn av hva de ikke får til å lage det de hadde planlagt, men fordi de kaster bort tid, ressurser, og putter innsats i å bygge feil produkt. Løsning ➢ Når man har forstått problemet, det er da man er i beste posisjon til å komme opp med en mulig løsning. I vårt canvas har vi valgt å svare på hvert av de tre største problemene med en egen løsning. Dette gjorde vi for å ha et godt utgangspunkt til å skape et Minimum Viable Product(MVP). Unike verdiforslag ➢ Ved å feile med å identifisere de unike verdiene med produktet kan det gå rett vest for prosjektet. Det kan lede til bortkastede aktiviteter som for tidlig optimalisering, eller å bruke for mye av tiden til disposisjon på feil mål. De unike verdiforslagene burde fokusere på løsningene, og burde over tid bevege seg over til å bli nøkkelpunktene for videre vekst for produktet i markedet. Urettferdige fordeler ➢ En ekte urettferdig fordel er noe som ikke enkelt kan bli kopiert eller kjøpt. Det har vi i vårt prosjekt, da produktet vi utvikler allerede har eksisterende brukere. Dette 28 er en fordel vi må utnytte for hva den er verdt, da de eksisterende brukerne ofte har en klar indikator hva på hvilke løsninger som er verdt å løse. Kundekanaler ➢ Det er en god idé å starte ethvert produkt med en direkte kontakt med kunden/brukeren av produktet. Vi har hatt kunne snakket med produkteier, selgere, og andre personer som er enten direkte eller indirekte i kontakt med produktet når det er ferdig. Det har gitt utvilsomt gitt oss uvurderlige tilbakemeldinger på om vi er på rett vei med det vi gjør. 3.2.2.3 Trello Figur 6 - Trello, prosjektstyringsverktøy. Trello er et prosjektstyringsverktøy. Vi ble tipset av vår kontaktperson hos EVRY, Andreas, om å ta i bruk dette for å holde oversikt over kortsiktige mål og arbeidsoppgaver. Brettet består av flere lister som inneholder ett eller flere kort. Brettet representerer prosjektet, og deretter kan man opprette lister, som man så kan fylle ut med kort. Kortene skal inneholde arbeidsoppgaver som kan gjennomføres på noen timer, og ikke mer. Hvis oppgaven kortet representerer har lengre varighet, burde den brytes opp i flere deloppgaver. På denne måten får 29 man en konstant følelse av noe blir gjort, som er en veldig god følelse i seg selv, og virker inspirerende på gruppen. Alle medlemmer av prosjektet kan opprette lister og kort, og enten tildele seg selv oppgaven, eller tildele den til noen andre. Det finnes også muligheter for å kommentere på et kort, laste opp vedlegg med mer. Trello er nettbasert, og plattformuavhengig, så vi dro god nytte av å kunne også bruke Trello på mobil og nettbrett. Dette var et meget godt verktøy for å kunne utnytte arbeidskapasiteten til hele gruppen. Slik unngår man følelsen av at man ikke har noe å gjøre, da man alltids kan sjekke Trello for nye arbeidsoppgaver. Alternativt ville vi måtte satt oss ned og laget en langtidsplan med langsiktige mål. Dette ville vært en metode som gikk dårlig overens med Lean Startup metodikken, da gjøremålene høyst trolig ville bli endret underveis i prosessen. Da ville scenarioet vært at vi jobbet etter en plan som ikke stemte overens med de faktiske gjøremålene vi hadde på agendaen, som ville vært uheldig og meningsløst. Da ville alternativet være å utforme en ny plan hver gang det oppsto en endring. Ved å bruke Trello unngår vi tidsbruken på å utforme en omfattende utviklingsplan, og vi kan forholde oss til små iterasjoner som vi hele tiden kan holde oppdatert og fordele. Oppsummert, så anser vi det å jobbe etter en smidig utviklingsmetodikk som noe spennende, hektisk og meget lærerikt. Tidligere oppgaver i regi av studiet har vært preget av krav om planer over veien fra A til Å fra starten av prosjektfasen. Så ved å ta i bruk Lean Startup i kombinasjon med Trello, så har vi fått kjenne på hvordan det er å levere iterasjoner og jobbe mot konkrete delmål underveis gjennom hele prosjektet. Trello gir brukerne en mestringsfølelse underveis, og det bygger selvtillit hos enkeltpersoner og gruppe når man ser at man leverer varene. Vi valgte og ikke inkludere personell fra EVRY på vårt Trello brett. Dette fordi vi ønsket å presentere endringene og progresjonen underveis for å kunne begrunne valgene vi hadde tatt på en ordentlig måte. 30 3.2.3 Kommunikasjon mot produkteier Gjennom hele utviklingsprosessen har vi hatt et kontinuerlig godt samarbeid med produkteier og veileder ved EVRY. Møte med veileder Andreas Røe, har vært et fast møte i loungen på Fornebu klokken 10 hver mandag. Her tar vi opp hva vi har gjort foregående uke, og hva vi tenker å gjøre i uken som kommer. Andreas har under disse møtene kommet med gode forslag til oss på hvordan han ville ha løst problemet. Han har også vært god på å trekke tråder mellom vårt prosjekt, og erfaringer har han fra næringslivet, som har virket veldig motiverende for oss som en gruppe. Dette ukentlige møtet har også vært tidspunktet hvor det ville vært aktuelt å ta opp om vi hadde noen problemer med arbeidet, eller om vi sto fast på et spesifikt punkt. Kommunikasjonen mot produkt eier, Odd Egil Orøy, har skjedd i snitt annenhver uke etter vi startet med utviklingen. Da kaller vi som gruppe inn til møte, og framlegger hva vi har gjort siden sist. Presentasjonen blir ledet av en av oss på gruppen, og produkteier får lede den andre halvdelen av møtet. Da kommer gjerne tilbakemeldinger på det produkteier har fått se, og hva han ønsker å se videre. Det er disse tilbakemeldingene som har vært største faktoren på hvordan prosjektet blir til syvende sist. Situasjoner har oppstått der vi har vært uenige om hva vi mener det burde satses på, men i dette tilfellet så har produkteier siste ord, og det er vi innforstått med. I tillegg til møtene med produkteier og veileder ved EVRY, har vi også hatt møter med Siri Fagernes, veileder fra HiOA. Siri har hatt mest fokus på fokusering på rapporten, og det med å huske på at man er der for å lære. Hun har under hele prosjektet vært imøtekommende og oppfordret til løpende kommunikasjon. Alt i alt, synes vi at våre veiledere, representert fra HiOA og EVRY har gjort en strålende jobb gjennom hele prosjektet. Kommunikasjonen har vært bra, og vi har alltid fått den hjelpen vi har forespurt. En spesiell takk til Andreas, som har virkelig fått oss varme i trøya på Fornebu, det har gjort at prosjektet føles enda mer reelt som en arbeidssituasjon. 31 3.2.4 Prosjektstyringsdokumenter 3.2.4.1 Arbeidsplan Trello fungerte som vårt hovedprosjektstyringsdokument. Verktøyet ble brukt til å føre opp arbeidsoppgaver, milepæler, og andre ting som trengte å bli gjort. Gjøremålet med høyest prioritet, lå øverst i hierarkiet. Vi opererte med satte milepæler fra oppstart, men arbeidsoppgavene ble opprettet som kort i Trello underveis som det ble synlig at det var noe som måtte bli gjort. Og deretter ble oppgavene løst i rekkefølge i henhold til prioritet. Figur 7 - Timebox. Prosessplanlegging. 3.2.4.2 Framdriftsplan Timebox-modellen fungerte som en oversikt om hvor vi skulle og burde være innenfor de gitte tidsrammene. I et prosjekt som dette, så er tid vår kapital. Denne metaforen gjorde det lettere å forstå viktigheten av å holde seg innenfor rammene. Eksempelvis så har man ikke råd til å ta i bruk for mye tid på å holde brukerintervjuer, siden man da vil risikere å gå tom for tid under andre stadier. Timeboxen er satt opp med de estimatene vi trodde vi trengte for hvert stadie. Vi opplevde et happy accident under fase 3(Teste MVP/Finne beste MVP). Her antok vi at vi kom til å gå et par 32 runder med presentasjon av MVP, før produkteier sa seg fornøyd. Dette viste seg å ta mindre tid enn estimert, som ga oss mer tid disponibelt til siste fase, videre utvikle MVP. 3.2.4.3 Arbeidslogg Arbeidsloggen vår er en god blanding av commit-log på Git, og statusoppdateringer på prosjektstyringssiden. Vi har forsøkt å gi utfyllende kommentarer på commnits i Git for å kunne holde en god oversikt over endringer gjort i selve koden. Git sine innebygde verktøy gir en særs god oversikt for brukeren for å kunne se spesifikt hva som er endret. Kommentaren gjør det greit for andre gruppemedlemmer og utenforstående for å få en kjapp beskrivelse av hva endringene utgjør i praksis. Statusoppdateringer på prosjektstyringssiden har fungert som en mer overordnet logg over dagens gjøremål i sin helhet, hvilke utfordringer vi har overkommet, og hvilke vi møter til morgendagen. Her har vi også publisert sammendrag av møter vi har hatt med produkteier og andre involverte. 3.2.5 Arbeidsforhold Vi har nesten utelukkende jobbet på Fornebu, og kun jobbet på skolen i forbindelse med møter med veileder fra HiOA. Slik har det vært fordi det var et ønske fra EVRY sin side at vi arbeidet i deres lokaler. Det har også vært med praktisk rett og slett på mer tilgang på plass til fem stykker. Man skal heller ikke legge skjul på at lokalene i Snarøyveien 30 holder en høy standard, og har en del bonuser som gratis kaffe og veldig rimelig lunsj. Figur 8 - Kart over arbeidslokasjon. 33 3.2.5.1 Telenor Fornebu Vi fikk utdelt adgangskort etter juletider 2014. Adgangskortene ga oss tilgang til store deler av bygget, ekskludert Telenor-biten av bygget. Vi fikk tilgang til å booke møterom, og vi fikk også tilgang til stort felles areal i 5. etasje, hvor avdelingen Retail jobber til daglig. Det er her vi tilbrakt mesteparten av tiden vår, siden ved å sitte så åpent og synlig, så var det lettere å komme i kontakt med andre ansatte. 3.2.5.2 Pilestredet 35 På HiOA møtte vi veileder, Siri Fagernes, i den administrative delen av bygget. Utover dette benyttet vi oss lite av lokalene. Det hendte at vi møttes der for å diskutere fremgang og andre grupper sine bachelorprosjekter. 3.3 Verktøy Vi har benyttet oss av følgende verktøy og hjelpemidler for å løse oppgaven: 3.3.1 Versjonskontroll Et versjonskontrollsystem er et system eller verktøy som står for å dele work in progress filer under prosjektfasen. Dette har som hovedoppgave i å sørge for at alle jobber med samme versjon av filer, og endringene berører alle. Det er helt essensielt at man tar i bruk en form for versjonskontroll i prosjekter hvor det er flere utviklere som jobber med det samme. 34 Figur 9 - GitHub logo. Git (Github) Github er et web-basert Git pakkebrønn vertstjeneste, som tilbyr alle distribuerte revisjonskontroll og kildekodekontrollstyring funksjonaliteten til Git, samtidig som de legger til egne tilleggsfunksjoner. Github tilbyr et web-basert grafisk grensesnitt for desktop og mobil. Vi har brukt verktøyet for versjonskontroll og samarbeidsmuligheter på koding. 3.3.2 Prosjekthåndtering Figur 10 - Trello logo. Trello Trello er et gratis web-basert prosjektstyringsverktøy som originalt var utvikling av Fog Creek Software i 2011, men utviklet seg til et eget selskap i 2014. Vår bruk av Trello er beskrevet grundigere tidligere i dette dokumentet. 35 3.3.3 Dokumentasjon Figur 11 - Google Docs logo. Google Docs Google Docs er et verktøy som lar deg opprette og redigere tekstdokumenter. Man har også mulighet for å plassere grafikk. Vi anser Google Docs til å ha samme tyngde som den gamle traveren Microsoft Word. Google Docs er i motsetning til Word - gratis og web-basert. Man har mulighet til å dele dokumenter seg i mellom, og derfor får man innebygd versjonskontroll av dokumentet man arbeider i med på kjøpet. Figur 12 - Google Drive logo. Google Drive Google Drive er en skybasert tjeneste som tar seg av lagring og fildeling mellom angitte medlemmer av en gruppe. Dette fungerer veldig godt i samarbeid med Google Docs. Alle Google sine verktøy har også utmerkede smarttelefon-applikasjoner som gjør at du kan få unna arbeid på farten. 36 3.3.4 Utviklingsverktøy Figur 13 - Sublime Text logo. Sublime Text Sublime Text er en kross-plattform tekst- og kilderedigeringsprogram. Sublime er et proprietært programvare. Det har støtte for en rekke plugins, som er utviklet og vedlikeholdt av åpen kildekode entusiaster verden over. Figur 14 - Dploy logo. Dploy.io Dploy er et utrullingsverktøy. Applikasjonen brukes til å iverksette en utrulling. Dploy innhenter selv endringer i filer og repositories siden sist utrulling, noe som gjør det kjapt og enkelt å gjøre utrullinger. Videre laster den opp filene dine, kjører SSH kommandoer, og loggfører hva den gjør. Man kan selv velge hvordan man vil bli gjort oppmerksom på endringene, men vi har valgt å motta mail som notifikasjon på endringer. 37 Figur 15 - Protoshare logo. ProtoShare ProtoShare et kollaborativt verktøy utviklet av Site9. Det blir brukt for å lage, gjennomgå, og finpusse web- og mobile applikasjoner. Vi har brukt dette verktøyet til å utvikle MVP, og for å lage skisser til endelig produkt. Det flotte med ProtoShare er at du kan lage interaktive prototyper som framstår som avanserte, uten å ha nødvendigvis brukt mye tid på det. 3.3.5 Utvidelser og rammeverk Figur 16 - Bootstrap logo. Bootstrap Bootstrap er en gratis og åpen samling av verktøy for å lage nettsider og webapplikasjoner. Det inneholder HTML- og CSS-baserte designmaler for typografi, skjemaer, knapper, navigasjon og andre grensesnittkomponenter. Det har sine røtter i utviklingen av Twitter, med mål om å ha en mer uniform kode og design. Inspirasjonen var å få ned vedlikeholdskostnader i form av tid og penger. 38 Figur 17 - jQuery logo. jQuery jQuery er et JavaScript-bibliotek utviklet for å forenkle klientskripting av HTML. Det ble lansert i 2006 i New York av John Resig. jQuery er det mest populære JavaScript-biblioteket i bruk, og brukes på 46 % av de 10.000 mest besøkte nettstedene(W3 Techs, 2010). jQuery er fri, åpenkilde programvare, lisensiert under MIT-lisensen. jQuery syntaks er laget for å gjøre det lettere å navigere et dokument, velge DOM-elementer, opprette animasjoner, og behandle hendelser. Figur 18 - HTML5 logo. HTML5 HyperTextMarkupLanguage(HTML) er et markeringsspråk for formatering av nettsider med hypertekst og annen informasjon som kan vises i en nettleser. HTML blir brukt til å strukturere informasjon - angi noe tekst som overskrifter, avsnitt, lister og så videre - og kan, i en viss grad, brukes til å beskrive semantikk i et dokument. 39 Figur 19 - CSS3 logo. CSS3 Cascading Style Sheets(CSS) er et språk som brukes til å definere utseende på filer skrevet i HTML. Prinsippet er at HTML-filen utelukkende skal beskrive struktur og semantikk, mens oppsett, farger og annen stilinformasjon skal beskrives ved hjelp av CSS. Stilinformasjonen kan integreres i selve dokumentet eller skilles ut som en egen fil med endelsen .css. Styrken til CSS, er at et ubegrenset antall HTML filer kan styres av en enkelt .css-fil. Derfor har utvikleren også muligheten til å endre på alle .html-filene som er linket opp til en enkelt .css-fil. Figur 20 - iOS 8 logo. iOS 8 iOS er et mobilt operativsystem som kjører på alle enheter utgitt av Apple. Operativsystemet har omlag 1,2 millioner applikasjoner tilgjengelig for kjøp og nedlasting i sin App Store ( Wong, H. 2014). iOS har en markedsandel på 21 % i følge tall fra Q4, 2013(McCracken, H, 2013). Vi har brukt Apple-enheter for å teste ut vår applikasjon på enheter som kjører iOS. 40 Figur 21 Android 5.0 Lollipop logo. Android 5.0 Lollipop Android er et mobilt operativsystem for smarttelefoner og nettbrett, og er opprinnelig utviklet av Android Inc, som ble kjøpt opp av Google i 2005. Android er basert på en modifisert versjon av Linux-kjernen. Google ga ut mesteparten av Android-koden under Apache-lisensen, en fri programvare og åpen-kildekodelisens. Det er verdens mest brukte operativsystem. Vi har brukt Android-enheter for å teste ut vår applikasjon som kjører nyeste versjon av Android. Figur 22 - FitText logo. FitText - jQuery plugin FitText gjør størrelsen på fonter fleksible. Vi har brukt denne pluginen på våre flytende og/eller responsive elementer for å oppnå skalerbare overskrifter som fyller bredden til sitt parent-element. 41 Figur 23 - jQuery mobile logo. jQuery Mobile jQuery Mobile er et touch-optimalisert web-rammeverk/mobil-rammeverk, mer spesifikt et JavaScript bibliotek, som for tiden utvikles av jQuery prosjektteamet. Utviklingen fokuserer på å lage et rammeverk som er kompatibelt med en rekke smarttelefoner og nettbrett. Dette er nødvendig, da disse enhetene har en stadig voksende brukermasse. Vi har tatt i bruk enkelte funksjoner som finnes i dette biblioteket for å oppnå en god kross-plattformløsning. jQuery Session-Plugin En plugin til jQuery for lagring av sesjonsvariabler og informasjonskapsler med støtte for cross-protokoll lagring. 3.4 Utviklingsprosessen Dette kapittelet skal beskrive utviklingsprosessen som har pågått under utviklingen av applikasjonen i flere faser. Innledningsvis vil vi beskrive første fase; konseptutvikling. Deretter vil vi i kronologisk rekkefølge ta for oss fasen som omhandler implementering og funksjonalitet, etterfulgt av fasen som tar for seg brukergrensesnittet. Kapittelet vil også ta for seg utfordringer og komplikasjoner vi har møtt i forbindelse med implementering av funksjonalitet. 42 3.4.1 Konseptutvikling Helt siden vi møtte for første gang med EVRY, og fikk framlagt oppgaveteksten, så har vi hatt en klar visjon om hva produktet skal gjøre for brukeren. Applikasjonen vi skulle utvikle skulle ha et overordnet mål, og det var å kunne produsere et salgsbudskap som kunne gjøre selger av produktet lettere. Applikasjonen skulle med andre ord gjøre det lettere å selge et eksisterende produkt i EVRY sin portefølje. Vi sto veldig fritt i valg av teknologi og design. De eneste kriteriene var at applikasjonen skulle kunne kjøre på Red Hat Linux, og kunne benytte seg av en Oracle databasetilkobling. Designmessig sto vi helt fritt, men fra starten av har vi hatt en dragning mot å legge oss litt på samme stil som EVRY sine hjemmesider og branding generelt. Prosessmessig var det også stilt et krav til at vi skulle utvikle etter Lean Startup modellen. Dette var et krav som ble stilt oss, da EVRY ønsket å utforske hvordan en slik metodikk fungerte i en slik setting vi var i. 3.4.2 Datainnsamling Akkurat som vitenskapsmenn benytter seg av vitenskapelige metoder for å finne ut hvordan en ting fungerer, kan vi som bachelorstudenter benytte oss av Lean Startup metoder for å finne ut hvilken business modell som vil fungere for oss. Metodikken praktiserer: ➢ Datainnsamling. Observer og intervju personene som skal er logiske brukere for applikasjonen du skal utvikle. Målet skal være å innhente kvalitativ innsikt i deres situasjon, utfordringer og måten de bruker applikasjoner på. Underveis vil man også være avhengig av å innhente et kvantitativt datagrunnlag for nærmere innsikt i brukermønster. 43 ➢ Utform hypoteser. Basert på observasjonene og innsikten man har innhente under datainnsamlingen, kan man utforme en hypotese på problemene brukerne har, og løsningen vi kan tilby. En hypotese skal inneholde et problem den ønsker å løse. ➢ Utfør eksperimenter. Man må erkjenne at i alle fall noen av hypotesene kommer til å feile. Det vil si at brukeren enten ikke anser løsning som hypotesen fremlegger som god nok, eller at de ikke kjenner seg igjen i problemet. Derfor er det viktig at hypotesene er utviklet på en måte som kan gjøre at de er målbare, og at de er i stand til å feile. ➢ Tilpass og ta læring. Når man har utført disse stegene, så må man analysere utfallet og produsere nye hypoteser basert på lærdommen fra tidligere forsøk. 3.4.3 Målgruppe og behov Multikanal er en tjeneste som er beskrevet grundig innledningsvis i oppgaven. Tjenesten har per i dag en betydelig kundeportefølje som inkluderer samtlige dagligvarekjeder i Norge, flere av de store bankene, samt andre telekomaktører. Eksisterende brukere er likevel ikke våre sluttbrukere. Våre sluttbrukere blir in-house selgere fra EVRY, og potensielle nye kunder. Multikanal har til nå satset på segmentet med bedrifter som er av en viss størrelse, siden de har flere fakturaer i omløp. Selgere og produkteier har etterspurt en måte som kan gjøre det lettere å selge og markedsføre Multikanal, så det er det behovet for applikasjon skal stå for. 3.4.4 Gruppemøter og brainstorming Etter datainnsamlingen, som i vårt tilfelle i hovedsak besto av intervjuer, så satt vi av tid til noen møter til brainstorming innad i gruppen. På disse møtene diskuterte vi hva som var de største 44 problemene som var verdt å løse. Vi tok informasjonen vi hadde opparbeidet under intervjurundene, og omgjorde dette til hypoteser. Hypotesene skulle vi omgjøre til en MVP som vi kunne demonstrere for produkteier. Vi hadde på dette stadiet nok bakgrunnsinformasjon til å utvikle flere hypoteser, og herunder flere MVPer. Men siden vi ville teste én og én MVP, så forlot vi brainstormingsprosessen for å kunne teste hypotesen. Vi forlot brainstormingstadiet tidlig med en klar hensikt. Hensikten var å ta læring i tilbakemeldingene på presentasjonen, for og deretter kunne gå tilbake i tenkeboksen, og deretter utvikle nye MVPer som traff bedre på problemstillingen. 3.4.5 Presentasjon av konsept for produkteier Den 23. februar hadde vi et møte med Odd Egil. Her skulle vi presentere vårt forslag til en løsning på oppgaven. Forslaget kom i form av en MVP. Konseptet som ble framvist var et resultat av intervjurundene vi hadde hatt, og problemene vi hadde bestemt oss for å prøve å løse. Komponentene som utgjør grensesnittet skulle gjenspeile et profesjonelt design som har likhetstrekk med EVRY sine nettsider og generell branding. Fargevalg er tatt med støtte i samme beslutning. Forsiden var seende slik ut, med en innledning for bruker, og en indikasjon på hvor mange steg det finnes i applikasjonen. Branding er tatt direkte fra EVRY sin samling av logoer på deres intranett. 45 Figur 24 - Skjermdump. Førsteside MVP. I grove trekk inneholdt vår MVP følgende: ➢ En velkomstskjerm med informasjon om hva hensikten med applikasjonen er. ➢ En toppmeny med faner som indikerer hvor i prosessen man er. Delt inn i tre forskjellige faner. ➢ En hovedside hvor bruker kunne utfylle ut sine gjeldende verdier over hvilke forsendelser de opererer med i dag, og størrelsen på volumet i forsendelsen. ➢ En siste side hvor brukeren får oppsummert sine muligheter på det som angår besparelser de kan utnytte hvis de hadde satt ut fakturering til EVRY. 46 3.5 Utvikling for web I dette kapittelet beskrives utvikling av funksjonalitet og brukergrensesnitt. Vi vil skrive om de utfordringene vi møtte i forbindelse med dette. Det vil også bli omtalt forhold som har påvirket applikasjonens utviklingsløp på det positive og negative. Det ble logisk å inkludere utfordringene i beskrivelsen av funksjonaliteten for å forstå problemene bedre. 3.5.1 Fordeler og ulemper med utvikling for web Den aller største fordelen med å utvikle web-applikasjoner er at man utvikler til alle plattformer på tvers av operativsystem. Vi har utviklet en applikasjon som kan fungere like godt på iOS og Android, som på Windows Phone eller et annet OS. På denne måten har vi redusert tiden vi måtte ha investert vesentlig for å ha laget en egen applikasjon for hvert OS. I tillegg til dette kan man publisere applikasjonen raskt og enkelt, uten noen mellomledd som skal godkjenne eller ha noe bakgrunnskunnskap om applikasjon. Eksempelvis slik som iOS sin app-store eller Google Play. Oppdateringer og vedlikehold av løsningene er like enkle. Det er heller ingen tredjepart som skal ha en del av salgssummen dersom man ville publisert den for nedlastning. Det er vanlig at applikasjonsbutikker tar opptil 30 % av salgssummen når en bruker kjøper den via en app-store. En annen fordel er at veldig mange utviklere kjenner HTML godt, så det finnes mange ressurser og kunnskap tilgjengelig i form av bøker og informasjon på nettet. En webapplikasjon kan også utvikles slik at det framstår som en “native” applikasjon, og kan få sitt eget ikon på hjemmeskjermen til brukerens mobil eller skrivebord. 47 Webapplikasjoner har også sine utfordringer. En av hovedutfordringene er at det finnes mange ulike nettlesere på tvers av operativsystemene, som alle har ulik støtte for funksjonalitet levert av HTML5. Dette er en ganske stor utfordring når det kommer til å lage en løsning som fungerer likt på tvers av alle nettlesere og operativsystemer. Dette er en kostnadsdriver som sluker tid i jakten på å finne en løsning som fungerer bra på alle operativsystemer og/eller nettlesere. En annen nedside med webapplikasjoner er at de ikke vil fungere hvis brukeren ikke har tilgang til internett. I og med at teknologien baserer seg på web, er det verre å lage en løsning som fungerer like godt uten nettilgang. En mobil enhet kan ha mange ulike tjenester som en native applikasjon kan benytte fritt. Tjenester som kamera, stedstjenester, kontaktliste, kompass og mye mer. En webapplikasjon kan også benytte seg av en del av disse tjenestene, men ikke i samme grad som en native applikasjon ville kunnet. Inntil videre vil det være en stor fordel for native applikasjoner å benytte mulighetene som ligger i en mobil enhet. Som tidligere nevnt er en av fordelene til webapplikasjoner publiseringsmåten. Det er likevel ikke alle aspektene med publiseringsmetoden som er utelukkende positive. Brukere av mobile enheter er vant til å finne applikasjoner i applikasjonsbutikken tilhørende sitt operativsystem. Mangelen på en sentral applikasjonsbutikk for webapplikasjoner er en ulempe for publisering av webapplikasjoner. 3.5.2 Implementering av funksjonalitet Enkeltutsendelse, månedlig- og årlige utsendelser. Kort tid etter utviklingen startet ble vi enig om at det er logisk å gi brukeren valget mellom å se tall for enkeltutsendelser, månedlig- og årlige utsendelser. Det første bildet brukeren vil møte i applikasjonen er valget mellom disse. Valget brukeren tar vil spille inn på utregningen som følger i de neste stegene i Lønnsomhetskalkulatoren. Implementeringen av selve førstesiden var relativt enkelt, men det lå større utfordringer i utregningen som det er skrevet mer om i Produktrapporten. 48 Siden dette er første steg i applikasjonen har det blitt lagt ned en innsats i å få den til å se bra ut. Skape et godt førsteinntrykk. Vi har valgt å kjøre et flatt grensesnitt, som ser moderne ut. Figur 25 illustrerer hvordan førstesiden ser ut på en mobil enhet. Figur 25 - Skjermdump. Førsteside applikasjonen. Utsendelsessiden, allokering av utsendelsesvolum. Utsendelsessiden spiller ballen videre til brukeren. Her er det tenkt at brukeren selv skal fylle ut sin bedrifts gjeldende allokering av utsendelser fordelt på kanaler. Dette har sin hensikt med å gi brukeren et overblikk over sin bedrifts gjeldende kostnader per dags dato. Vi viderefører det flate designet fra førstesiden, og samme fargevalg og fonttype. 49 Figur 26 - Skjermdump. Utsendelsessiden. Skritt 1. Løsningen er implementert som faner, for å spare den dyrebare skjermplassen på mobile enheter. Feltet til venstre i bildet er automatisk fylt ut med markedsledende priser på enkeltutsendelse av en printet, konvoluttert og sendt A4-side. Her er det påtenkt at brukeren selv skal fylle ut hva sin bedrift i dag betaler for samme tjenesten. Det har vært utfordringer i å tilpasse denne funksjonaliteten for å fungere tilfredsstillende på tvers av nettlesere og ulike plattformer. Utfordringene har vært i største grad å få det til å se pent og intuitivt ut. I den sammenheng har vi måttet lese oss opp på jQuery-mobile og hvordan vi kan bruke dette for å få et pent grensesnitt på mobile enheter. Framgangsmåten er den samme på alle kanalvalgene, og utregningsmodulen regner sammen brukerens totale volum av forsendelser, og hva det koster han i dag. Prisene som står som 50 ferdigutfylt er hva som er veiledende priser i markedet i dag, om brukeren ikke skulle være sikker på hans kostnader knyttet til dokumentdistribusjon - kun volumet. Sluttsummen i bunnen av siden er generert på datagrunnlaget utfylt av brukeren og videresendes til neste side for å gjøre utregninger på datagrunnlaget som nå eksisterer. Automatisering av kanalvalg. Denne siden gir brukeren mulighet til å velge om han/hun har lyst til å benytte seg av opsjonen automatisering av kanalvalg- og flytte eksisterende printvolum over til elektroniske kanaler. Den første delen med kanalvalg hadde vi ingen utfordringer med å implementere, da den enkelt spør om brukeren vil la Multikanal ta seg av feilhåndtering om elektroniske kanaler skulle feile. Figur 27 - Skjermdump. Automatisering av kanalvalg. Skritt 2. 51 Det neste punktet på samme siden er et valg vi gir til brukeren om å flytte utsendinger fra printkanalen over til elektroniske kanaler. Det var en krevende prosess å videreføre volumet som blir angitt på den forrige siden(Figur 26), for og deretter gjøre prosentregning på det samme datagrunnlaget. Her måtte datagrunnlaget beholde sin integritet for å kunne gjøre nøyaktige beregninger på gjenstående utsendelser som fantes i form av printkanalen. Det kunne ikke være mulig å flytte mer enn 100 % over til elektroniske kanaler, så derfor ble det implementert omfattende funksjoner som behandlet reglene satt for brukerens evne til å overskride 100 %-grensen. Figur 28 - Skjermdump. Flytting fra print til elektroniske kanaler. Skritt 2 52 Optimalisering av porto Portooptimalisering er også en opsjon brukeren kan velge å benytte seg av. Ingen utfordringer med implementering, men i back-end generer denne siden enda en variabel for utregningen. Hvis kunden ønsker å benytte seg av portooptimalisering, vil det trekkes fra 20 % på det gjenstående volumet for printkanalen. Her var det viktig at vi gjorde utregningen på det oppdaterte datagrunnlaget som oppsto etter flytting av print til elektroniske kanaler. Figur 29 - Skjermdump. Optimalisering av porto. Skritt 3. Markedsbudskap sammen med forsendelser Brukeren kan velge å sende ut markedsbudskap sammen med sitt eksisterende printvolum. I praksis vil dette si at dersom det er plass til et ekstra ark i en konvolutt som skal sendes ut, og det ekstra arket ikke medfører at forsendelsen får en høyere portokostnad, så kan man spare 50 % på og ikke å sende det ekstra arket separat. Det ekstra arket kan inneholde reklame, eller annen form for budskap som bedriften ønsker å få sendt ut til kunden. I praksis for utregningen, så vil utregningen bli: 53 Figur 30 - Utregning på utnyttelse av konvolutt. Det gis også brukeren mulighet til å velge å la Multikanal utnytte whitespace . Dette er tomme områder på et printet område som er blanke. Disse områdene kan brukes til å bringe ut markedsbudskap og informere om kampanjer. Figur 31 - Skjermdump. Markedsbudskap. Skritt 4. 54 Figur 32 - Utnytting av whitespace. Under implementasjonen av eksempelframvisningen var det viktig at den ikke fungerte som en pop-up, da dette er generelt noe brukere flest ikke liker. Det er også verdt å merke seg at en økende andel brukere på web benytter seg av programvare som blokkerer pop-ups. Eksakt hvordan vi løste det kan man lese om i produktrapporten. Oppsummering Oppsummeringssiden gir brukeren oppdatert informasjon om hvilke valg han/hun har tatt under gjennomføringsløpet til Lønnsomhetskalkulatoren. Implementeringsmessig har det ikke vært noen stor utfordring å videreføre valgene som er blitt tatt, da mange av valgene kan fungere som boolske variabler. Ja- eller nei spørsmål. Det gis også mulighet om å få oppsummering tilsendt på e-post, og om du ønsker å bli kontaktet av en representant fra EVRY. Implementasjonen av funksjonen som sender mail beskrives nøye i Produktrapporten. 55 Figur 33 - Oppsummering. Skritt 5 Figur 34 - Sluttside. 56 3.6 Testing Testing og tilhørende prosesser er beskrevet grundig i Testrapporten. 3.7 Utforming av grensesnitt I vårt studie, Anvendt datateknologi, har man et stort fokus på universell utforming. Det man utvikler skal være tilgjengelig for så mange brukergrupper som mulig, om ikke alle. Derfor har vi under utviklingen av Lønnsomhetskalkulatoren hatt et stort fokus på dette. Vi har tatt hensyn til at en større del av brukere nå surfer på mobil og nettbrett og har derfor tatt i brukt en utviklingsmetode som heter “mobile-first”. Dette er en metode der man i stor grad utvikler produktet til at det først og fremst skal fungere optimalt på mobile enheter. Siden produkteier også ville ha en løsning som virker like godt på desktop, var dette noe vi også måtte ta hensyn til i stor grad. 3.7.1 Navigasjonsvalg Vår forside består av 4 navigasjonsvalg som består av: ➢ En infoknapp som ligger øverst i høyre hjørne ➢ De 3 ulike typene utsendelser - Enkeltutsendelser, månedlige utsendelser og årlige utsendelser. 57 Figur 35- Førsteside. Desktop. Infoknappen valgte vi å legge oppe i høyre hjørne fordi dette gjør at knappen er enkel å se, samtidig som man slipper å scrolle/lete etter den. Dette valget falt også naturlig for oss fordi vi allerede hadde valgt et design som hadde overskriften plassert oppe til venstre. Hvis man trykker på informasjonsknappen vil et pop-up vindu dukke om med informasjon om siden man er på og forklare hva formålet med siden er, hvordan man oppnår dette formålet og annen tilleggsinformasjon som kan være nødvendig Figur 36 - Informasjon på førstesiden. Desktop. 58 I bildet over ser man de 3 andre navigasjonsvalgene på vår forside, nemlig de 3 ulike typene utsendelser. Her velger bruker hvilken type utsendelser den vil angi senere i prosessen og blir dermed sendt videre til valgt utsendelse. Figur 37 - Kanalvalg. Desktop. Her ser man et bilde av siden man kommer til etter man har valgt type utsendelse på forsiden. Her skal brukeren selv interagere ved å sette i de verdiene de vil. I dette eksempelet har vi valgt å vise siden for enkeltutsendelser. Man ser igjen at vi har valgt å sette informasjonsknappen øverst i høyre hjørne. Vi valgte å gjøre dette fordi det gir en følelse av kontinuerlighet og en rød tråd i gjennom hele prosessen. Figur 38 - Fremgangsindikator. Desktop. 59 Videre har vi valgt å ha en fremgangsindikator ligger sentralt i toppen av alle sidene foruten forsiden for og hele tiden gi brukeren en pekepinn på hvor langt han/hun er i prosessen. Figur 39- Interaktivt design. Desktop. Her ser man et nærmere bilde av selve slideren. Vi valgte nettopp denne løsningen fordi den fungerer like godt på mobile enheter som på desktop. Den gjør det intuitivt og enkelt for brukere som ikke har et stort tastatur tilgjengelig, som for eksempel mobiltelefoner. Figur 40 - Manuell spesifisering av verdi. Desktop. Man kan også manuelt sette verdien på både enhetspris som ligger i venstre input-boks. Denne boksen inneholder tall som er satt som standard. Disse prisene er markedsstandarder og kan derfor stemme overens med de tallene brukeren allerede bruker. Dette kan spare brukeren for noen tastetrykk som igjen gjør hele prosessen lettere. Til høyre kan man manuelt endre antall utsendelser ved å skrive inn verdien man ønsker isteden for å dra i slideren. Hvis man skriver inn et tall vil slideren flytte seg og motsatt. 60 Antall utsendelser, altså tallet man får ved å dra i slideren eller skriver inn manuelt, valgte vil å legge til venstre der hvor navnet på kanalen tidligere stod. Den blå skriften fungerer også som knapper til de ulike kanalene slik at man ikke trenger å gå igjennom kanalene i den rekkefølgen vi har satt den opp, og gir også brukeren mulighet til å hoppe fritt frem og tilbake mellom de ulike kanalene. Nederst på siden har vi lagt 2 knapper - neste og tilbake som lar brukeren navigere tilbake til forsiden eller frem til neste skritt i prosessen som er automatisering av kanalvalg. Figur 41- Automatisering av kanalvalg. Desktop. Automatisering av kanalvalg er side der brukeren må ta 2 valg, nemlig om han/hun ønsker muligheten til automatisk routing til print dersom en av de elektroniske kanalene feiler. Denne opsjonen gjør slik av hvis en av de elektroniske kanalene, nærmere bestemt epost, sms, efaktura, digital postkasse og EHF skulle feile under en utsendelse, vil trafikken som var tiltenkt den kanalen som feilet bli sendt automatisk til print, noe som kan spare bruker for arbeid og ressurser. Den andre opsjonen man kan velge er om man ønsker å flytte en prosentdel av utsendelsen/utsendelser fra print til en eller flere av de elektroniske kanalene. Dette kan gi bruker økonomiske besparelser grunnet at print er dyrere med tanke på diverse kostnader som for eksempler papir og blekk. Brukeren må ta valget ved hjelp av radioknapper. Vi valgte radioknapper fordi de er enkle å treffe på desktop og mobile enheter. Vi gjorde dette enda enklere ved å gjøre slik at man kan trykke på 61 hele feltet rundt ja eller nei, og ikke bare akkurat der knappen er. Dette vil være til stor hjelp til brukere med begrenset motorikk eller andre begrensinger. Hvis brukeren vil flytte utsendelser fra print til en eller flere av de elektroniske kanalene trykker han/hun ja på dette punktet og da vil dette være det som møter brukeren Figur 42 - Slider-navigasjon. Desktop. Her valgte vi igjen å gå for slider løsningen fordi den som tidligere nevnt fungerer utmerket på mobil og desktop, men også for å gi brukeren følelse om at det går en rød tråd igjennom hele løsningen. Vi håpet at dette ville gi brukeren følelsen: “ dette har jeg vært borti før, så dette vet jeg hvordan jeg gjør”, noe vi mener vi har fått til. Som på alle de andre sidene fungerer EVRY logoen som en hjem knapp og det er plassert en informasjons knapp oppe i høyre hjørne. Når man så trykker på neste knappen kommer man til neste steg i prosessen, nemlig portooptimalisering. Denne siden har som formål å informere brukeren om hva portooptimalisering er, og hva brukeren og/eller brukerens bedrift kan spare på å inkorporere dette i sin virksomhet. 62 Figur 43 - Portooptimalisering. Desktop. På denne siden fungerer fortsatt EVRY logoen som en knapp som tar deg tilbake til forsiden, samtidig som infoknappen fortsatt har samme funksjon som tidligere, men informasjonen den inneholder varierer fra side til side. Nytt på denne siden er radioknappene som gir brukeren valget mellom ja og nei. Dette falt som en selvfølge for oss fordi her er brukeren nødt til å bestemme seg om han/hun vil ta med seg tallene fra portooptimalisering videre i prosessen eller ikke. Vi valgte å forhåndsvelge “Ja” valget fordi vi og EVRY tror at dette kan bidra til at flere velger å la den stå på “Ja”. Nederst på siden har vi igjen lagt frem og tilbake knappene for å gi brukeren en følelse av kontinuitet. Neste steg i prosessen er whitespaceutnyttelse og utnyttelse av konvolutt. 63 Figur 44 - Markedsbudskap. Desktop. Denne siden følger samme mønster som de andre sidene ved bruk av 3 store mobilvennlige knapper samtidig som EVRY logoen, informasjonsknappen og frem/tilbake knappene har samme funksjon som tidligere. Nytt på denne siden er at vi har lagt inn tilleggsinformasjon ved bruk av fremhevet blå tekst som gir brukeren mer informasjon om hva whitespace er, og hva det brukes til. Her valgte vi en pop-up løsning mye med tanke på plassen vi hadde til rådighet på de mobile enhetene, samtidig som den ga den effekten vi ville at den skulle ha. Det siste skrittet i prosessen er en oppsumeringsside hvor man får en oversikt over hva man har valgt av opsjoner tidligere i prosessen. De opsjonen man har valgt tidligere i prosessen er huket av, mens de man de man valgte og ikke ta med beregningen vil ikke være huket av. Vi valgte å sette en regel på denne siden som sa at bruker ikke skal få lov til å legge til eller fjerne ulike opsjoner fra beregningen, på grunn av dette ville ha medført masse arbeid som ville gjort at vi ikke ville blitt ferdig i tide. 64 Figur 45 - Oppsummering. Desktop. 3.7.2 Fargevalg Når det kom til fargevalg har vi prøvd å gjøre vår løsning så ren og enkel som mulig, samtidig som vi prøvde å inkorporere fargen til EVRY. EVRY bruker en mørk blåfarge over en hvit bakgrunn, eller hvit skrift over den samme blåfargen i sin logo, men etter å ha tilbrakt litt tid med de ansatte på Fornebu og diverse presentasjoner senere så vi at de også brukte en lyseblå farge mye. Denne fargen blir også brukt i stor grad på hjemmesiden til EVRY. Vi valgte derfor å prøve å bruke disse der vi så behov, uten å gjøre vår løsning mindre lesbar for alle de tiltenkte brukergruppene. Med det mener vi at vi har tatt hensyn til diverse konsepter slik som svart på hvit kontrast, farger som er lite forstyrrende eller distraherende. Hvis brukeren velger å trykke på informasjonsknappen valgte vi som tidligere nevnt å vise denne ved hjelp av et pop-up vindu, noe som gjør at skjermen bak blir noe faset ut. Dette bidrar til at brukeren lettere kan fokusere på den informasjonene den er ute etter. 65 Figur 46- Portooptimalisering. Desktop. 3.7.3 Grafikk Når det kom til grafikk, fikk vi helt frie tøyler, men siden vi ville ha en løsning som fungerte like godt på mobile enheter som på Desktop, var dette noe vi måtte ta hensyn til. Derfor har vi gått for et grafisk grensesnitt som er rent og ryddig, med få forstyrrende elementer som tar opp unødvendig plass. Dette ble spesielt viktig når det kom til mobilversjonen. Størrelsen på en skjerm til en smarttelefon kan i dag variere fra 3” til circa 5,5”. Dette ga oss ikke voldsomt mye plass å jobbe med, så derfor valgte vi et design med en grafikk som var relativt minimalistisk for å kunne utnytte den plassen vi hadde tilgjengelig så godt og effektivt som mulig. Vi mener at ved å velge dette designet og denne grafikken at brukeren vil få en enkel, ryddig og profesjonell brukeropplevelse. 66 3.8 Personvern Dagens samfunn har økende oppmerksomhet på personvern, og personvernets rolle blir stadig viktigere. Dette gjelder særlig applikasjoner som vår, som tar i bruk internett. Internettet åpner for større muligheter for en ondsinnet tredjepart som kan ha som hensikt å stjele personopplysninger eller annen informasjon. Derfor er det særs viktig å respektere brukeren og verne om deres personopplysninger på en måte som tilfredsstiller retningslinjene anlagt av Datatilsynet. Lønnsomhetskalkulatoren behandler ingen data som blir betegnet som sensitive i henhold til Personopplysningsloven, men den behandler data som anses som personlige i henhold til samme loven. Vi har ikke hatt et stort behov for å sette av mye tid eller ressurser i forbindelse med opplysningene. Dette er fordi vi ikke lagrer noen opplysninger på server, de blir kun videresendt på mail til hver respektive part. Brukeren og EVRY. Brukeren må selge godkjenne at opplysningene blir sendt til EVRY. Vi har ikke hatt noen store utfordringer i forbindelse med sikkerhet og personvern, da det finnes etablerte sikre løsninger på kommunikasjon over epost. 3.9 Kravspesifikasjon og dens rolle Kravspesifikasjonen er i stor grad bestemt av oppdragsgiver og er med på å definere prosjektets rammer applikasjonens funksjonalitet. I vårt prosjekt har kravspesifikasjonen hatt i stor grad en dynamisk rolle. Dynamisk i den forstand at den har blitt endret fortløpende under utviklingsprosessen. Grunnen til dette var ikke at vi eller oppdragsgiver ikke klarte å se for oss et ønsket sluttprodukt, men fordi det vi ønsket en smidig utviklingsprosess der kunden kunne sitte igjen med best mulig produkt etter prosjektets varighet. 67 Ved å følge denne prosessen ville produktet ha en verdi selv om ikke all funksjonalitet ble implementert. 3.9.1 Bakgrunn for kravspesifikasjon Vår kravspesifikasjon som framlegges i sin helhet i kapittel 2, er et resultat av bruken av Lean Startup i forbindelse med utvikling av applikasjonen. Følgende av å bruke Trello kombinert med en smidig utviklingsmetode er at kravspesifikasjonen har erfart en del endringer underveis. Dette gjelder i hovedsak endringer i forbindelse med funksjonalitet som har blitt rangert fra must have og nice to have. Hvordan vi synes opplevelsen av Trello har vært og hvordan det er blitt brukt er beskrevet grundigere i prosessrapporten. 3.9.1.1 Rammekrav Rammekravene til applikasjonen ble definert i første fase av prosjektet. Oppdragsgiver hadde allerede en klar formening om hva applikasjonen skulle gjøre, men de lot det være opp til oss hvordan vi skulle gjøre det. Det var ønskelig fra flere hold at applikasjonen skulle være meget godt tilpasset for bruk på mobile enheter, uten av at det skulle gå på kompromiss med følelsen av å kjøre applikasjonen på en vanlig laptop(13”-24”). Vi bestemte selv at vi ville kjøre et gjennomgående design som reflekterer at applikasjonen er utviklet av EVRY, med tilhørende branding og fontbruk. Fra et teknisk aspekt har vi også satt et krav til oss selv om å skrive kode som skal være enkel og oversiktlig. Dette er for å gjøre det lettere å vedlikeholde koden til applikasjonen, og tilrettelegge for et langt livsløp for vårt eget produkt. 68 3.9.1.2 Fortløpende endringer Ettersom vi har jobbet etter smidige utviklingsprinsipper gjennomgående, så har kravspesifikasjonen vært under kontinuerlig endring. Underveis i prosessen kom deg stadig opp nye anmodninger om ønsket funksjonalitet fra produkteier, og ønskede endringer fra vår side. I noen tilfeller kunne det være konkret funksjonalitet som vi mener burde implementeres, og andre ganger kan det være presisering på punkter som allerede er spesifisert i den eksisterende kravspesifikasjonen. Disse endringene ble fortløpende oppdatert eller lagt til i kravspesifikasjonen. 3.9.2 Vår erfaring med kravspesifikasjon Kravspesifikasjonen har vært fungert som et dokument med generelle retningslinjer for hva som skulle utvikles og hvordan grensesnittet skulle utformes. Kravspesifikasjonen har i stor grad forenklet planleggingen av utviklingen. Det har også vært betryggende å ha noe spesifikt å forholde seg til under et klassisk hektisk utviklingsløp som smidig metodikk ofte forbindes med. Funksjonaliteten tilhørte også kravspesifikasjonen, men kravet til funksjonalitet var i kontinuerlig endring grunnet vårt ønske og krav satt av EVRY til å følge Lean Startup. Vi har også fått et innsyn i hvordan et utviklingsprosjekt på et lite team blir gjort hos et privat IT-selskap, som vi er sikre på at kan være en god erfaring videre i livet. 3.9.2.1 Oppfyllelse av krav og/eller måloppnåelse Vi har fullført alle tekniske, funksjonelle, kodemessige og designrelaterte krav. Det foreligger ingen ønsket tilleggsfunksjonalitet fra oppdragsgiver som ikke er fullført. Det er ytret ønske fra 69 oppdragsgiver at de selv vil kunne bruke produktet på LinkedIn for promotering, og brukerrettet annonsering. Dette er et mål som EVRY må selv stå ansvarlig for å implementere, men som vi har vært frampå med å få satt produktet i drift. 3.9.2.2 Tilbakemeldinger fra oppdragsgiver Oppdragsgiver har utelukkende gitt oss positive tilbakemeldinger på hvordan vi har løst oppfyllingen av krav. Vi har gjennom møter og dialog kommet til enighet om hva som er reelt å oppnå i forhold til funksjonalitet i de gitte tidsrammene, men oppdragsgiver har likevel vært imponert over produksjonsnivået. 3.9.3 Konklusjon Den flytende kravspesifikasjonen har spilt en stor rolle for utviklingen i prosjektet. Spesialt når det kommer til rammesetting og omfanget av oppgaven. Funksjonalitetskrav er blitt innfridd, og det foreligger per dags dato ingenting ufullstendigheter med produktet. Vi mener det er rom for å strømlinjeforme designet enda mer opp i mot EVRY sine standarder på produkter som er i drift, men siden design av natur er preget av trender så vil dette være noe som alltid vil ha behov for oppdateringer om produktet skal beholde sitt moderne preg. 70 Kapittel 4: Produktrapport Forord 4.1 Datagrunnlag 4.2 Introduksjon til Lønnsomhetskalkulatoren på web 4.2.1 For virksomheter 4.2.1.1 Innlogging til tjenesten 4.2.1.2 For privatpersoner 4.2.1.3 Beskrivelse av applikasjonen 4.3 Lisenser 4.3.1 Funksjonalitet 4.3.2 Design 4.3.3 Info til bruker 4.3.4 Feilhåndtering 4.3.5 Dataintegritet 4.3.6 Ytelse 4.3.7 71 4.1 Forord V forutsetter at leseren har lest presentasjonen av prosjektet i forkant av Produktrapporten. Hvis nevnte kriterier er utført, kan dette dokumentet leses uavhengig og selvstendig. Oppbygningen i rapporten(e) er bygd opp slik for å gi leseren et bedre innblikk i hva vår oppgave handler om, samt gi informasjon om gruppen og vår arbeidsgiver. Produktrapporten gir utfyllende informasjon om de tekniske aspektene rundt produktet. Vi vil benytte samme begreper som vi ville gjort ovenfor hverandre og arbeidsgiver, så Produktrapporten vil gi mest uttelling hvis leseren har en relativt oppdatert datateknisk forståelse. Vi henviser til ordlisten om det skulle oppstå begrep som oppfattes som uklare. 4.2 Datagrunnlag Vårt datagrunnlag har vært basert på informasjonen vi har fått fra oppdragsgiver, og eksisterende priser de kjører mot kunder av Multikanal i dag. Vi har valgt å benytte oss av datagrunnlaget som danner prisbildet på distribusjon før eventuelle rabatter for kunder med volumer store nok til å danne sin egen prisgruppe. Vi har valgt å benytte oss av ikke-rabaterte tall, som i de fleste tilfeller vil generere tall for en mindre besparelse enn det som er aktuelt. Dette er fordi vi og oppdragsgiver kom til enighet om at det er bedre at selger kan komme med et bedre tilbud enn den aktuelle kunden selv har fått generert ved bruk av Lønnsomhetskalkulatoren. I motsetning til å komme med en skuffende melding om at det blir dyrere. 72 4.2.1 Introduksjon til Lønnsomhetskalkulatoren på web Web-baserte applikasjoner er en av de ledende plattformene å lansere en applikasjon på. (Edwards, J., 2014). En web-applikasjon baserer seg som mobile applikasjoner på tjenere og klienter. Lønnsomhetskalkulatoren baserer seg i stor grad på klienten, men man er fortsatt avhengig av tjeneren for at brukeren skal få tilgang til applikasjonen samt for utsending av epost. Klienten vil fortsatt ha tilgang til store deler av funksjonaliteten hvis applikasjonen lagres i cache på klientens maskin, men brukeren vil møte begrensninger hvis koblingen mellom klient-tjener blir brutt. Dette bruddet kan være i form av at brukeren ikke lenger er koblet til internett, eller at tjeneren skulle gå ned. Det har vært stort fokus på at det skal enhver tid foreligge et uniformt grensesnitt på tvers av klientene. Uavhengig av hvilken plattform de velger å bruke for å benytte seg av applikasjonen. Dette har vi lagt fokus på for å fremme portabilitet, som var hovedgrunnlaget for å velge å utvikle en web-applikasjon i utgangspunktet. Disse valgene går hånd i hånd på hvordan man skal løse skalerbarheten for applikasjonen, når man hele tiden utvikler for alle mulige plattformer og skjermstørrelser. 4.2.2.1 For virksomheter Det er flere mulige måter en virksomhet kan bli kjent med applikasjonen på. Vi vil gjennomgå de måtene vi anser som mest sannsynlige. Promotering på EVRY sine hjemmesider. Eksisterende og potensielle nye brukere vil oppdage linken og bli interessert gjennom promotering på EVRY sin hjemmeside. EVRY sin hjemmeside har allerede en eksisterende brukergruppe, så der er man sikker på at promotering vil bli sett. 73 Annonsering rettet mot brukergrupper på LinkedIn. Vår oppdragsgiver har diskutert med oss hvordan vi kan implementere applikasjonen som en annonse på LinkedIn. Annonsen ville vist til hvilke resultater Multikanal har kunne gitt andre virksomheter, med mulighet for at de som ser annonsen kan finne ut hva Multikanal kan gjøre for dem. Måten de skal finne ut hva de kan spare, er å bruke vår applikasjon. Virksomheten blir kontaktet av EVRY - som henviser til applikasjonen. EVRY sine selgere prøver kontinuerlig å sikre seg markedsandeler i dokumentdistribusjonsmarkedet. Selgeren vil kontakt en potensiell bedrift for å prøve å selge Multikanal, og vil i denne sammenheng kunne bruke Lønnsomhetskalkulatoren for å forsterke salgsbudskapet sitt. Jungeltelegrafen - applikasjonen får friksjon i bedriftsmiljøet. Hvis brukerne av applikasjonen er fornøyd med den, så er det sannsynlig at de vil kunne fortelle kollegaer eller andre personer og/eller virksomheter kan være potensielle nye kunder. Dette er trolig den kanalen vi tror vil kunne bringe flest brukere. Siden applikasjonen er så portabel og mobiltilpasset, vil det være raskt og enkelt å kunne åpne applikasjonen på mobil eller nettbrett på farten for å vise frem. 4.2.2.2 Innlogging til tjenesten Vi har tatt en beslutning på og ikke implementere en innlogging for brukere. Løsningen vil være åpen for alle, og vi vil ikke ha et eget administratorpanel i back-end. Det er flere grunner til dette som har overbevist oss om at den åpne løsningen er den beste for vår applikasjon. Førsteinntrykk Hvis brukeren har sitt første møte med applikasjonen i et registreringsskjema, så er det høyst sannsynlig at interessen for applikasjonen ikke er stor nok til å generere gjennomføringsvilje til å registrere seg. Da risikerer vi å miste potensielle brukere av applikasjonen før vi har vist hva den 74 var god for. I den sammenhengen vil Multikanal også kunne miste potensielle brukere, og da gjør jo applikasjonen vår det stikk motsatte av hva den er laget for å utrette. Brukervedlikehold Hvis brukere skulle ha egne kontoer, må man se seg nødt til å ha noen ansvarlige for brukervedlikehold. Det ville krevd ressurser for å implementere sikkerhetstiltak på den eksisterende brukerdatabasen, og driften av denne. Det kunne oppstått behov for support over telefon eller lignende, for gjenoppretting av passord og glemte brukernavn. Nødvendighet Dette er kanskje det punktet som veier mest. En egen konto for hver bruker er det ikke behov for. Det er ikke behov for at brukeren skal logge inn og ut, da det ikke er noen framgang som anses som nødvendig å lagre. Å gjennomføre første til siste steg i Lønnsomhetskalkulatoren vil trolig ta noen minutter for den gjennomsnittlige brukeren. I etterkant av gjennomføring har brukeren mulighet til å lagre sine resultater i den forstand at han får den tilsendt på mail. 4.2.2.3 For privatpersoner Privatpersoner vil i stor grad være påvirket av samme markedsføring som virksomheter for å komme i kontakt med applikasjonen. Det er lite trolig at privatpersoner vil bli kontaktet av EVRY personlig, da det er svært få privatpersoner som hadde hatt nytte av sluttproduktet Multikanal. Likevel så tilhører jo ofte privatpersoner en eller annen form for virksomhet, så det er absolutt ikke forkastede ressurser og brukt på å markedsføre på denne brukergruppen. De vil i samme grad som virksomheter bli truffet av annonser, jungeltelegrafen og friksjon i markedet hvis de tilhører et miljø som har et behov for dokumentdistribusjonstjenester. En annen verdi vi ser for privatpersoner er for EVRY sine egne ansatte. Dette er ikke en verdi som kan måles i kroner og øre, men kan skape en tilhørighet og stolthet for de det måtte gjelde. Det er 75 nok ikke veldig lett å forklare et familiemedlem eller en venn om dokumentdistribusjon, og derfor kan den det måtte gjelde vise fram Lønnsomhetskalkulatoren for å beskrive hva eller hun jobber med. 4.3 Beskrivelse av applikasjonen Følgende kapittel vil ta for seg en beskrivelse av applikasjonen og dens funksjoner på et teknisk plan, med konkrete eksempler i form av kode. 4.3.1 Lisenser Applikasjonen er utviklet av oss, men eies av EVRY ASA. Derfor er videre modifisering helt opp til EVRY ASA ene og alene. Verktøy og rammeverk vi har benyttet oss av er lisensiert under: ➢ GNU General Public License, version 3. ○ https://www.gnu.org/licenses/gpl.html ➢ The MIT License. ○ http://opensource.org/licenses/MIT ➢ Creative Commons Attribution 4.0 International Public License. ○ https://creativecommons.org/licenses/by/4.0/legalcode 4.3.2 Funksjonalitet Selve utregningen for besparelse, som er den viktigste funksjonen i Lønnsomhetskalkulator starter i steg nummer to, utsendelses-siden og avsluttes på siste side, sluttside. Vi vil nå gå gjennom funksjonalitet på de fem forskjellige stegene som til slutt vil vise besparelsen. 76 Første side - utsendelse Hovedfunksjonene på dette steget er å regne ut grunnkostnaden til utsendelser basert på enhetspriser og antall utsendelser av hver type. For å få til dette, finner vi seks såkalte sliders på siden. Sliderne er egentlig HTML5-range inputs, som tolkes av en jQuery Mobile modul som står for transformeringen til funksjonelle “baner med håndtak”. I tillegg til banen, vil jQuery mobile modulen legge til et input/output felt som viser brukeren nåværende verdi der håndaket er, samtidig som håndtaket oppdateres dersom man skriver inn tall i feltet. < input class = "add" type = "range" name = "slider-2" id = "slider-2" data-highlight = "true" min = "0" max = "250000" value = "0" data-unit-price = "2.5" /> Eksempel på kall av slider. Vi har gjort det slik, at hver gang et håndtak tilhørende en slider blir rørt, vil en funksjon kjøres. Dette gjøres ved å legge alle sliders inn i en variabel, og legge til en on.change-funksjon på variabelen. Denne funksjonen ganger så verdien til håndtaket der det er når det “slippes” med data-unit-price. Denne summen blir så lagt til i en totalsum, som er summen av alle håndtakene sine verdier ganget med sin tilhørende data-unit-price. Denne verdien er viktig senere i løsningen, da den er grunnlaget for utregningen av hvor mye en bruker til slutt kan spare. 77 varp =$ ( 'input[name|="slider"]' ); p . on ( 'change' , function ( e ){ vartotalsum = 0; varprice = 0; varprisforskjell = 0; totaluser = 0; p . each ( function ( slider ){ varvalue =$ ( this )[ 0 ]. value; varunitPrice =$ ( this ). data ( 'unit-price') totalsum +=isNaN ( this . value ) ||$ . trim ( this . value ) === '' ? 0 : parseFloat ( this . value ); price +=isNaN ( this . value * unitPrice ) ||$ . trim ( this . value * unitPrice ) === '' ? 0 :parseFloat ( this . value * unitPrice ); totaluser = ( total + total2 + total3 + total4 + total5 + total6 ); }); Utregning av grunnkostnad som initieres av berøring på en slider. Dersom en bruker ønsker å sette egne enhetspriser for de forskjellige sliderne, gjøres dette i et input-felt som ligger rett til venstre for slideren den tilhører. Dette feltet oppdaterer prisene både ved “keyup” og “change” da det finnes flere måter for å legge verdier inn i et input-felt. $ ( "#pris1" ). on ( "change" || "keyup" , function ( e ){ }); pris1 = this . value; Eksempel på hvordan priser blir satt For å gjøre løsningen bedre tilpasset mobil og enheter med liten skjerm, har vi i flere tilfeller brukt Bootstrap sin collapse-plugin. Denne gjør det mulig å gjemme og vise innhold ved interaksjon. På utsendelser-siden har vi brukt denne pluginen til å pakke hver distribusjonskanal inn i hver sin boks. Kun en boks vises av gangen, og eventuelt åpne bokser vil lukkes når en bruker velger en 78 annen kanal. Dersom bruker vil aksessere en annen kanal kan det gjøres ved å klikke på panelet til en annen boks, eller gå til neste kanal ved å trykke inn “neste-kanal” knappen. //Når siden lastes skal første panel være "åpent" $ ( collapse1 ). parents ( '.panel-default' ). addClass ( 'active' ); //Når neste-knappen trykkes på skal det aktive panelet lukkes og neste åpnes og få fokus $ ( '#neste1' ). click ( function (){ $ ( "#collapse1" ). collapse ( 'hide' ); $ ( "#collapse2" ). collapse ( 'show' ); $ ( '.panel-default' ). removeClass ( 'active' ); $ ( collapse2 ). parents ( '.panel-default' ). addClass ( 'active' ); }); //gjør hele panelet sin heading klikkbar isteden for kun link $ ( '#panelheading1' ). click ( function (){ $ ( "#collapse1" ). collapse ( 'show' ); $ ( '.panel-default' ). removeClass ( 'active' ); $ ( collapse1 ). parents ( '.panel-default' ). addClass ( 'active' ); }); //Sørger for at det alltid maks er èn collapse "åpen" til enhver tid $ ( '#accordion' ). on ( 'show.bs.collapse' , function () { $ ( '#accordion .in' ). collapse ( 'hide' ); }); Eksempel på bruk av Bootstrap collapse-funksjon Når en bruker velger en annen kanal, vil antall utsendelser bli satt i tittelen på den aktuelle boksen. Dette gjør at brukeren fortsatt har relevant info om kanalen, samtidig som nå “overflødig” funksjonalitet og info blir gjemt for å spare plass. 79 $ ( '#collapse1' ). on ( 'hide.bs.collapse' , function (){ if ( titteltall1 == 0 ) { $ ( '#collapsetittel1' ). html ( "<span class='text-warning'></span>" + " Antall utsendelser av print: " + "<FONT COLOR='#9F6000'>" + titteltall1 + "</font>" );} else { $ ( '#collapsetittel1' ). html ( "<span class='text-success'></span>" + " Antall utsendelser av print: " + "<span class=text-success>" + titteltall1 + "</span>" );} }); Funksjon for å sette antall i tittel på collapse-boks Når brukeren har gjort sitt sine valg på utsendelser-siden, trykker man på knappen for “neste side”. Verdier som er viktige for utregningen lagres da som sesjonsvariabler og informasjonskapsler hos brukeren. Disse verdiene hentes så ut senere i løsningen og brukes videre i utregningen. JavaScript/jQuery har ingen standardisert innebygget metode for slik lagring, så vi har valgt å bruke en plugin kalt jQuery Session til å ta seg av dette. Variabler kan da enkelt settes og hentes med hver sin enkle kommando. //Sette en variabel $ . session . set ( "prisPrintSession" ,pris1 ); //hente en variabel $ . session . get ( "prisPrintSession" ); Hvordan sette og hente variabler i jQuery-session plugin Andre side - Automatisering Hovedfunksjonen på denne siden er at bruker kan flytte antall utsendelser fra print over til elektroniske kanaler. Antall print valgt i forrige steg hentes ut og brukes som grunnlag for overflytting. Dersom brukes huker av på en radio-knapp for at man ønsker å flytte utsendelser, vil en boks med forskjellige sliders vises. En maks sum blir satt til antall print som tidligere ble valgt, og funksjon kjøres for å passe på at antall overflyttinger til elektroniske kanaler ikke overstiger denne. Dersom antall overflyttinger til sammen når antall print satt i forrige skritt, vil man ikke kunne 80 flytte et håndtak “høyere”. Drar man et annet håndtak lavere, vil man igjen kunne dra de andre håndtakene høyere til man igjen treffes på maksgrensen. Den samme funksjonen vil også regne ut hvor mye prosent de forskjellige overflyttingene representerer og brukeren vil umiddelbart se hvor mye som nå blir flyttet. //Sjekk at total verdi for sliders ikke overstiger antall print if ( totalAlle >sjekkTotal ) { if ( hentSlider == "range1" ) { altVerdi =sjekkTotal -total2 -total3 ; $ ( "input#range1" ). val ( altVerdi ). slider ( "refresh" ); } if ( hentSlider == "range2" ) { altVerdi =sjekkTotal -total1 -total3 ; $ ( "input#range2" ). val ( altVerdi ). slider ( "refresh" ); } if ( hentSlider == "range3" ) { altVerdi =sjekkTotal -total1 -total2 ; $ ( "input#range3" ). val ( altVerdi ). slider ( "refresh" ); } } Funksjon for å sørge for at verdier ikke overstiger maks antall print. Tredje side - Portooptimalisering Dette steget har kun én funksjon, og det er å kartlegge om bruker ønsker portooptimalisering eller ei. Dette velges ved hjelp av en radio-knapp og verdien blir tatt med videre i utregningen på samme måte som tidligere. Alternativet “ja” kan kun velges dersom brukeren har utsendelser på Print, da det er kun denne typen som har porto. En funksjon kjøres derfor for å sjekke at utsendelser til denne kanalen er høyere enn null. Dersom en bruker prøver å velge “ja” når utsendelser på print er null, vil man få beskjed om hvorfor valget ikke kan gjøres, og “nei” blir valgt isteden. 81 //Sjekker at bruker har fler enn 0 utsendelser før man får lov til å gå til neste side if ( antallPrint > 0 ){ $ ( "#portoJa" ). prop ( "checked" , true ); } else{ $ ( "#portoNei" ). prop ( "checked" , true ); $ ( "#portoJa" ). click ( function (){ swal ({ html : true ,title : "Oops!" , text : "Dette alternativet kan ikke velges når antall printutsendelser tidligere er satt til 0" }); $ ( "#portoJa" ). prop ( "checked" , false ); }) } Funksjon for å sjekke om antall print er høyere enn 0. Fjerde side - utnyttelse I likhet med forrige side, har dette steget som formål å ta med brukervalg videre for utregning på siste side. Dersom man velger “ja”, vil en boks vises med nye, spesifikke alternativer. Her har igjen brukt Bootstrap sin collapse-plugin for å spare skjermplass. //Dersom bruker huker av på radiobutton "ja" vil innhold i "collapse 1" vises $ ( '#markedja' ). click ( function (){ $ ( "#collapse1" ). collapse ( 'show' ); $ ( "#whitespaceja" ). prop ( "checked" , true ). trigger ( "click" ); $ ( "#arkja" ). prop ( "checked" , true ). trigger ( "click" ); $ ( ".obligatorisk" ). text ( '' ); $ ( ".obligTekst" ). text ( "" ); }); Bruk av collapse for å spare skjermplass. 82 Femte side - oppsummering I dette steget vil brukeren få en oppsummering basert på alle valg som har blitt gjort. Verdier hentes da fra sesjonsvariabler og informasjonskapsler og danner bakgrunn for statusen til ulike sjekkbokser. Et eksempel vil være dersom en bruker tidligere har valgt “ja” på portoptimalisering, vil en sjekkboks på oppsummeringssiden vise dette valget. if ( onskePorto === "true" ){ //Denne gjør slik at portooptimalisering er huket av om man har valgt dette på portooptimalisering.html $ ( '#portooptimalisering' ). prop ( "checked" , true ). checkboxradio ( "refresh" ); } Eksempel på sjekk som setter status på sjekkboks for porto I dette steget vil man ikke lenger ha mulighet til å påvirke utregningen, og statusen i sjekkboksene kan derfor ikke endres. En funksjon sørger derfor for at ingen sjekkbokser på dette steget endrer status dersom den blir trykket på. Bruker vil også få beskjed om at man må gjøre en ny utregning hvis man vil endre valg. $ ( ".ui-checkbox" ). click ( function ( event ){ event . stopImmediatePropagation (); event . preventDefault (); swal ({html : true , title : "Gjøre endringer?" , text : "<strong class='text-warning'>obs!</strong> For å gjøre endringer, må du starte på nytt.", }); }); Funksjon for å hindre at sjekkbokser kan endres På oppsummeringssiden vil også den viktigste beregningen skje, nemlig hvor mye en bruker kan spare basert på valg gjort i løsningen. Derfor blir alle nødvendige sesjonsvariabler og informasjonskapsler hentet ut på denne siden. Utregning blir så gjort på bakgrunn av valg som er 83 gjort av bruker sammen med beregningsmekanismen vi har kommet frem til i samarbeid med EVRY. Siste side - sluttside På siste side er målet å formidle besparelser til bruker samt innsamling av data til EVRY. Besparelsen vises på siden, og kommer med i en epost dersom det blir skrevet inn en epostadresse. Det vil da bli sendt ut to eposter, én til EVRY og én til adressen som bruker skriver inn. Verken jQuery eller JavaScript har noen innebygget funksjonalitet for å sende ut epost. For å løse dette har vi benyttet Node.js og en modul som heter Nodemailer. Node.js kjøres, i motsetning til jQuery, på server. Derfor må dataene fra lønnsomhetskalkulator sendes til server før eposten kan bli generert. Dette blir gjort via en POST-melding fra denne siden. Post meldingen vil da inneholde alle sesjonsvariabler som har blitt satt, da disse er verdifulle for den som går gjennom eposten hos EVRY. varmailPost =$ . post ( 'http://anvend.me:3000/mail' , { mottaker :mottaker ,utsendelseType : utsendelseType ,prisPerPrint :prisPerPrint ,prisPerEfaktura :prisPerEfaktura , prisPerDigipost :prisPerDigipost ,prisPerEpost :prisPerEpost } ); En liten del av POST-meldingen som sendes til server. Mottak av data og utsending av epost - serverside På serversiden har vi laget et Node.js-program som lytter etter data på port 3000. Dette er da porten som data blir sendt ut på etter at utregningen er gjort ferdig i Lønnsomhetskalkulator. Når dataene kommer inn, vil programmet generere to eposter, én til epostadressen som mottakeren selv har skrevet inn og én til EVRY. Eposten som blir sendt ut vil inneholde et sammendrag av brukerens valg, samt ferdig utregning, men vil være litt forskjellig avhengig av om den går til en bruker, eller til EVRY. Eposten som går til EVRY vil inneholde alle sesjonsvariablene som ble sendt inn til programmet, og eposten til brukeren vil inneholde en liten takkemelding, litt info, samt den utregnede besparelsen. Programmet bruker SMTP-protokoll og Gmail til utsending slik det er satt opp nå, min vil senere bli konfigurert av EVRY til å bruke deres egen epostutsendingsmekanisme. 84 Hvordan den ferdige eposten vil se ut er også opp til EVRY, og vil bli bestemt før den rulles ut på deres servere. Eksempel på eposter sendt fra programmet i dag kan sees på vedlegg C og D. 4.3.3 Design Typografi Gjennomgående i hele applikasjonen blir det brukt samme font som på EVRYs egne websider. Fonten er ikke standard i det fleste nettlesere, men lastet automatisk ned fra vår server ved hjelp av en CSS regel kalt @font-face. @font - face { font - family :evry ; src :url ( ITCAvantGardeStd - Bk . otf) ;} Eksempel på bruk av @font-face regel Mye av designet i løsningen blir automatisk generert etter regler som er satt av jQuery, jQuery mobile og Bootstrap. Det er derimot ikke overalt i løsningen at standard designregler passer optimalt. Dette har vi løst på følgende måter som vil bli beskrevet under. Egne CSS filer Vi har opprettet egne CSS-filer som blir lastet inn etter CSS-filene til Bootstrap og jQuery Mobile. CSS følger regler, ofte kalt “CSS specificity” for å bestemme hvilke egenskaper som skal gjelde. Dette betyr at et element, for eksempel en knapp kan bli “tilbudt” mange egenskaper. Det er da den regelen som veier “tyngst” som bestemmer elementets endelige egenskaper. Ved å legge våre CSS-filer under de andre CSS-filene i koden, blir våre CSS-filer lastet sist. Dette gjør at regler og egenskaper i disse CSS-filene sees på som viktigere. Disse vil da overkjøre tidligere satte egenskaper og regler, slik at resultatet, utseende og egenskaper blir slik vi ønsker. Egenskaper som er spesifisert 85 i disse egne CSS-filene er egenskaper som vi ønsker at kun skal gjelde på en enkelt side, eller et enkelt/få element(er). <link rel = "stylesheet" href = "css/bootstrap.min.css"> <link rel = "stylesheet" href = "css/indexcss.css"> “Egen” CSS-fil nederst. Modifisering av nedlastede CSS-filer Der vi ønsket at egenskaper skulle gjelde på flere sider eller alle elementer av samme type, er dette blitt definert direkte inn i nedlastede CSS-filer. Ved flere anledninger, har vi gått direkte inn i kildekoden og endret egenskaper. Et godt eksempel på dette er standardfargen på alle knapper. Denne fargen er definert i jQuery Mobile sin CSS-fil. Her har vi gått direkte inn i kildekoden til filen og endret til en farge som kjennetegner EVRY. . btn - primary { color : #fff; background-color:#0092c1; border-color:#2e6da4} Endring av kildekode i jQuery-mobile CSS-fil. Egne regler for forskjellige skjermstørrelser og skjermorientering Vi har hele veien vært opptatt av at løsningen skal fungere godt på små skjermer. Derfor har vi ved flere anledninger benyttet oss av en regel i CSS kalt @media only. Denne gjør at man kan spesifisere egenskaper på bakgrunn av skjermstørrelse og skjermorientering. Et godt eksempel på dette er at vi ønsker mindre luft mellom knapper på førstesiden dersom en bruker holder en enhet i landskapsmodus. Dette er fordi man har mindre skjermplass i høyden i denne orienteringen. Vi kan dermed forhindre scrolling ved å skrive inn én enkelt kodesetning for å overstyre standardegenskapen som blir satt av Bootstrap og jQuery mobile. 86 @mediaonly screen and ( max - device - height : 1000px ) and ( orientation :landscape ){ . row { padding : 5px; } Eksempel på bruk av @media only regel. 4.3.4 Info til bruker En annen viktig del av dette verktøyet er å gi brukeren informasjon om tjenester som tilbys gjennom EVRYs distribusjonssystem Multikanal. Siden løsningen er ment til å fungere godt på små skjermer, var vi nødt til å finne en metode for at løsningen skulle kunne gi nok informasjon og samtidig forhindre endeløs scrolling. Til dette formålet har vi benyttet oss av en jQuery plugin kalt SweetAlert. Denne vil kunne legge seg midt på skjermen, i forgrunnen slik at den er i fokus. Gjennom hele løsningen vil man kunne finne info-ikoner som man kan trykke på og disse vil trigge forskjellige SweetAlerts som vi selv har definert med relevant info. $ ( "#infoEfakt" ). click ( function (){ swal ({ html : true ,title : "eFaktura" , text : "eFaktura er en elektronisk faktura som sendes fra fakturautsteder til fakturamottaker i form av en elektronisk fil i stedet for den tradisjonelle papirfakturaen" }); }); Eksempel på info til bruker i plassert i en Sweet-Alert Et annet viktig punkt, er at løsningen i veldig stor grad baserer seg på JavaScript, og vil derfor være ubrukelig dersom en bruker har skrudd av denne funksjonaliteten, eller ikke har den i sin web-browser. Derfor gir vi bruker beskjed om at JavaScript må være aktivert allerede på første side. Dette gjøres ved hjelp av en melding lagt i en <noscript>-tag. Denne taggen er innebygget i HTML5 og vil vises til brukeren dersom JavaScript er deaktivert. 87 <!-- Gir brukere som har JS deaktivert en melding at løsningen ikke vil fungere--> <noscript> <div style = " border : 1pxsolid purple ;padding : 10px "> <span> Oops! Denne løsningen krever JavaScript for å fungere. </span> </div> </noscript> Eksempel på bruk av noscript-tag 4.3.5 Feilhåndtering Feilhåndtering i løsningen kan sies å være to-delt. Den første, og viktigste delen er informasjon til brukeren om hvor feilen ligger. For tekstlige beskrivelser av feil har vi benyttet SweetAlert, slik at brukeren ikke kan unngå å legge merke til feilen. Dessuten blir det lagt til stjerner ( * ) i selve html dokumentet for å vise hva som må endres av brukeren for å kunne komme til neste steg. if ( $ ( 'input[name=marked]:checked' ). length <= 0 ){ swal ({ html : true ,title : "Oops!" , text : "Du må velge om du ønsker å sende ut markedsbudskap med dine utsendelser" }); $ ( ".obligatorisk" ). text ( '*' ); $ ( ".obligTekst" ). text ( "Felt merket med * er obligatorisk" ); } Funksjon for å vise bruker hvor en eventuell feil ligger Den andre delen av feilhåndtering er rett og slett å forhindre at brukeren kan gjøre feil. Et godt eksempel på dette er at brukeren ikke blir sendt til neste side, til tross for at man har trykket på “neste-knappen” dersom man ikke har gjort et viktig valg på siden. Dette betyr derfor at visse krav må være oppfylt, i dette eksempelet et valg må være gjort før brukeren vil få mulighet til å nå neste side. 88 $ ( "#neste" ). click ( function (){ if ((! $ ( 'input[name=printroute]:checked' ). is ( ":checked" )) || (! $ ( 'input[name=elektroute]:checked' ). is ( ":checked" ))){ swal ({ html : true ,title : "Oops!" , text : "Du må gjøre valg i felt merket med <strong class='text-danger'>*</strong>" }); $ ( "#oblig1" ). text ( '*' ); $ ( "#oblig2" ). text ( '*' ); $ ( ".obligTekst" ). text ( "Felt merket med * er obligatorisk" ); } else{ window . location . href = 'porto.html'; } }); Eksempel på sjekk av input før man kan nå neste side. Et annet godt eksempel på hindring av brukerfeil, er sjekk av input. Dette gjøres for eksempel på input-feltene for enhetspris på utsendelser-siden. Her vil kun at bruker skal kunne skrive inn tall, da utregningen kan bli feil om bokstaver og andre tegn blir skrevet inn. En funksjon sørger for dette ved å inneholde tre klausuler: 1. Kun ett kommategn 2. Kun tall fra 0 - 9 3. Maks fem tegn Funksjonen kjøres ved hvert tastetrykk, og returnerer enten true eller false. Dersom et tastetrykk overholder regler som er satt, vil funksjonen returnere true og tegnet vil bli satt inn i input-feltet. Dersom tastetrykket ikke overholder regler, vil det returneres false, og tegnet vil ikke bli satt inn i input-feltet. 89 $ ( '.bredInput' ). keypress ( function ( event ){ returnerNummer ( event , this) }); functionerNummer ( evt ,element ){ vartastekode = ( evt . which ) ?evt . which : event . keyCode if( ( tastekode != 44 ||$ ( element ). val (). indexOf ( '.' ) != - 1 ) && ( tastekode < 48 ||tastekode > 57 )) return false; else if (( $ ( element ). val (). length ) >= 5) return false; return true; } Funksjon for å hindre at bruker taster inn feil. 4.3.6 Dataintegritet En stor utfordring ved løsninger som hovedsakelig er klientbaserte, er dataintegritet. Siden utregninger skjer på klientsiden, har brukeren mulighet til å manipulere så og si alt av data som brukes i utregningen. Dette betyr at en bruker kan endre hele regnestykket, og “jukse” seg til en urealistisk besparelse. Det er derfor viktig å formidle til brukeren at utregningen kun er laget for å gi en pekepinn på hvor mye man kan spare og at tall fra utregningen ikke er bindende for noen parter. En endelig utregning om besparelse vil skje dersom brukeren velger å bli kontaktet av EVRY etter bruk. En erfaren representant fra EVRY vil dessuten med en gang kunne se om tall generert av Lønnsomhetskalkulator er reelle eller manipulerte, da alle tall vil bli sendt til EVRY etter at utregningen er ferdig. 90 4.3.7 Ytelse Modifiserte, egenhostede javaScript og CSS-filer Som tidligere nevnt har vi benyttet oss av jQuery, jQuery Mobile og Bootstrap. Alle tre tilbyr en rekke funksjonalitet som vi har tatt i bruk, men også funksjonalitet vi ikke har benyttet oss av. Heldigvis har jQuery og Bootstrap egne verktøy hvor man enkelt kan velge ut funksjonalitet man trenger, som genererer en modifisert utgave for nedlastning. I tillegg til å bruke disse verktøyene har vi også gått direkte inn i kildekoden for filene og tatt vekk noe “overflødig” kode. Resultatet blir da at brukeren må laste ned mindre data, som igjen fører til at alt går raskere. I tillegg har vi valgt å hoste alle filer selv, slik at vi er sikre på at alle filer er tilgjengelig til enhver tid. Da har vi også kontroll på faktorer som hastighet/ytelse på hardware og software på serveren. Figur 47 - Stor størrelsesforskjell. 91 Kapittel 5: Testrapport Forord 5.1 Mål med testing 5.2 Verktøyer og enheter brukt ved testing 5.3 Testing 5.4 Brukertesting 5.4.1 Testing på forskjellige skjermstørrelser 5.4.2 Beta-versjon 5.4.3 Testing av sikkerhetstiltak på enhet 5.4.4 Konklusjon 5.5 5.1 Forord I denne rapporten blir det kort og konsist beskrevet hva vi har foretatt oss for å kvalitetssikre produktet vi har laget. Det vil bli beskrevet hvordan vi har testet, hvilke verktøy vi har benyttet og resultatet av testene. 92 5.2 Mål med testing Når vi skulle teste var formålet å forsikre oss om at løsningen vår fungerte tilfredsstillende på alle tiltenkte enheter. Siden vår brukergruppe er meget bred, vil det si at løsningen vår vil bli brukt på en stor variasjon enheter. Hovedsakelig vil det bli brukt på iOS-enheter, Android-enheter, og PCer som kjører Windows/OS X. Vi vil at alle som bruker Lønnsomhetskalkulatoren skal få den samme gode brukeropplevelsen, og det var dette vi hadde fokus på under testing. 5.3 Verktøy og enheter brukt ved testing Vi testet applikasjonen på følgende enheter: ➢ iPhone 5s ➢ iPhone 6 ➢ Samsung Galaxy s5 ➢ iPad 2 ➢ PC med Windows 7. ➢ Mac med OS X Yosemite. Vi har testet applikasjonen i følgende programvare/nettlesere: ➢ Internet Explorer release: 11 ➢ Chrome release: 42.0.2311.90 ➢ Mozilla Firefox release: 37.0.2 ➢ Opera release: 28 ➢ Safari release: 6.2.5 93 5.4 Testing 5.4.1 Brukertesting Funksjonalitet Test Resultat Utregning Regnestykket inkluderer OK input-variabler fra og gir riktig resultat. Omdirigering Besparelsen med omdirigering OK vises med input til bruker. Whitespace Besparelsen med OK whitespaceutnyttelse vises hvis bruker velger det. Konvoluttutnyttelse Besparelsen i å utnytte OK konvolutt inkluderes i regnestykket og vises hvis kunden velger det. Feilhåndtering Bruker har mulighet til å velge OK funksjonaliteten. Portooptimalisering Bruker har mulighet til å velge OK funksjonaliteten. Navigering Applikasjonen kan navigeres feilfritt i på alle nevnte enheter og programvare. 94 OK 5.4.2 Testing på forskjellige skjermstørrelser Vi har kjørt applikasjonen på enheter med følgende skjermstørrelser: ➢ 4.7” iPhone 6. ➢ 4” iPhone 5. ➢ 5.1” Galaxy S5. ➢ 9.7” iPad 2. ➢ 13.3” Macbook Air. ➢ 24” Windows 7. ➢ 15.3” Lenovo ThinkPad. Applikasjonen kjørte tilfredsstillende på alle enheter. All funksjonalitet fungerte på samtlige, og applikasjonen skalerte logisk etter skjermstørrelse. 5.4.3 Beta-versjoner Applikasjonen har gjennomgått en rekke beta-versjonutkast. Vi har hatt nyeste utgave ute tilgjengelig på nettet hele tiden. Versjonen har derifra sirkulert til involverte i prosjektet og blitt brukt til framvisning for produkteier. Vi har ikke operert med versjonsnummer på beta-versjonene, da det hadde blitt vanskelig og unødvendig å formelt gi den et versjonsnummer. Dette ville blitt overflødig da de som jobbet med prosjektet kunne til enhver tid forholde seg til gjeldende release på GitHub. 5.4.4 Testing av sikkerhetstiltak på enhet Lønnsomhetskalkulatoren behandler ikke data som anses som sensitive ifølge lovgivning eller utgiver. Derfor er det ikke blitt utført noen utbredt testing på sikkerhet. 95 5.5 Konklusjon Testingen har gitt oss en bekreftelse på at applikasjonen håndterer den funksjonaliteten som er lagt fram i kravspesifikasjonen. Vi har også fått forsikret oss om at skalerbarheten på applikasjonen ivaretas på alle kjente enheter. 96 Kilder Edwards, J. (2014, april 7). Mobile Apps Are Killing The Free Web, Handing A Censored Duopoly to Google And Apple. Hentet mai 18, 2015, fra http://www.businessinsider.com/mobile-web-vs-app-usage-statistics-2014-4 Lov om behandling av personopplysninger(personopplysningsloven). (2000). Hentet april 11, 2015, fra http://lovdata.no/lov/2000-04-14-31/§2 Maurya, A. (2012, februar 1). Why Lean Canvas vs Business Model Canvas? Hentet mars 24, 2015, fra http://practicetrumpstheory.com/why-lean-canvas/ Ries, E. (2011). 7. Measure. In The Lean Startup: How constant innovation creates radically successful businesses (1st ed., Vol. 1, p. 320). London: Portfolio Penguin. Sagen, D. (2014, september 10). Lean Startup - avmystifisert. Hentet mars 24, 2015, fra http://open.bekk.no/lean-startup-avmystifisert Tech, W. (Ikke datert). Usage of JavaScript libraries for websites. Hentet april 7, 2015, fra http://w3techs.com/technologies/overview/javascript_library/all The Business Model Canvas , juli 05, 2008. Hentet mars 24, 2015, fra http://nonlinearthinking.typepad.com McCracken, H. (2013, april 16). Who’s Winning, iOS or Android? All the Numbers, All in One Place | TIME.com. Hentet april 7, 2015, fra http://techland.time.com/2013/04/16/ios-vs-android/ 97 Wong, H. (2014, juni 26). Apple Brings Vibrant Colors iSight Camera to Most Affordable iPod touch-Model. Hentet april 7, 2015, fra http://www.apple.com/pr/library/2014/06/26Apple-Brings-Vibrant-Colors-iSight-Camera-to-Mo st-Affordable-iPod-touch-Model.html Årsrapport 2012. (2013, januar 1). Hentet mars 10, 2015, fra http://epub.artbox.no/evry/ar2012no/files/assets/basic-html/page15.html Årsrapport 2013. (2014, januar 1). Hentet mars 10, 2015, fra http://epub.artbox.no/evry/ar2013no/files/assets/common/downloads/EVRYAnnualReport 2012.pdf 98 Vedlegg A - Ordliste. Brainstorming Brainstorming/Idédugnad er en metode for kreativ problemløsning tilrettelagt for en gruppe deltakere, der deltakerne impulsivt ytrer idéer og tanker de kommer på. Branding Merkenavn. Business Case Et Business Case er en analysemetodikk som benyttes for å avgjøre om et prosjekt eller en større aktivitet skal iverksettes. Digipost Digipost er et digitalt postsystem. Digipost tilbyr for alle personer over 15 år med norsk fødselsnummer eller D-nummer en egen “digital postkasse”. EHF EHF/Aksesspunkt er en tjeneste for virksomheter som skal sende eller motta elektroniske meldinger i henhold til EHF-standarden. Fakturahotell Lagringsplass for fakturaer for eksterne og interne kunder. In-house Internt i en virksomhet. Lean Canvas Lean Canvas er et strategisk styringsverktøy for å utvikle nye eller dokumentere eksisterende businessmodeller. Lean Startup Lean Startup er en metode innen produkt og systemutvikling. Minimum Viable Product En MVP er det produktet som kan returnere høyest mulig verdi til minst mulig innsats. Native En applikasjon som er utviklet for et spesifikt operativsystem. Open Source Åpen kildekode betyr at kildekoden til et dataprogram er gjort tilgjengelig for allmenheten. PDF PDF er et digitalt dokumentformat. Filene vises på skjerm i samme form som de har når de blir skrevet ut. Plugins I databehandling, en plug-in er en programvarekomponent som legger til en bestemt funksjon i et eksisterende program. Portooptimali sering Ved portooptimalisering sendes antall utsendinger som er valgt for print sammen med andre utsendelser. 99 Remote Collaboration Verktøy som har mulig for at flere arbeider i samme fil eller dokument uavhengig av hvor de er i verden. Retail Detaljhandel. En betegnelse for salg av varer i kvanta tilpasset personlig eller husholdningsbehov direkte til forbruker eller husholdninger. Timebox I tidsstyring, tildeler timeboxing en fast tidsperiode, kalt en timebox, til hver planlagt aktivitet. Whitespace Områder uten tekst og bilder på dokumenter. 100 Vedlegg B - Papirskisser med forslag til design. 101 102 103 Vedlegg C - Eksempel på mail til bruker. 104 Vedlegg D - Eksempel på mail til EVRY. 105 106
© Copyright 2024