• No results found

Lageravstämning i oljebranschen

N/A
N/A
Protected

Academic year: 2021

Share "Lageravstämning i oljebranschen"

Copied!
58
0
0

Loading.... (view fulltext now)

Full text

(1)

DEGREE PROJECT, IN INFORMATION AND COMMUNICATION TECHNOLOGY FIRST LEVEL

STOCKHOLM, SWEDEN 2015

Lageravstämning i oljebranschen

UTVECKLING AV NY FUNKTIONALITET FÖR

ETT LAGERHANTERINGSSYSTEM

JOHNY PREMANANTHAM & XINMAO WANG

K T H R O Y AL I N S T I T U T E O F T E C H N O L O G Y

(2)

1

Abstract

This study examines the development process to create new functionality for a fuel inventory management system used by Preem AB.

The reason why Preem AB recruited students to take on this challenge was due to the potential improvements that could be made to their exisiting system. This study will explain how the system can be improved by developing new functionality from existing data. The aim of this study is to provide ideas, guidelines and answers on how new functionality can benefit their fuel inventory management system.

Preem AB is Sweden’s largest producer of fuel and contributes with about half of all the fuel consumed in Sweden [1]. Therefore, a lot of aspects needs to be taken into consideration.

Having good control of the fuel inventory is good for the economic viability. The company risks losing millions because of deficiencies in their inventory management system, which is currently the case. One way to minimize this problem is to apply certain funtionality to their system. The students who participated in the project were given different responsibilities; the areas the project focused on were the development of a new graphical user interface, database management and also the development of new functionality – which is the sole purpose of this study.

A specification and prototypes for each function has been developed to clarify how the inventory management system can be optimized. The specifications are intended to describe how the functionality can optimize the fuel inventory management system. The prototypes are programs that are implemented to answer the problem formulation (see section 1.2). The inventory management system can be more efficient and benefit through the innovation of new functionality. One of many benefits may include a function that takes over the role of an employee, meaning it will replace the manual labor usually required for the job. There are many opportunities to create new functionality such as this, which was in fact discovered early in the project. The functionality that were selected to be implemented consisted of those who were most likely to benefit Preem AB.

Keywords:

(3)

2

Sammanfattning

I denna studie undersöks utvecklingsprocessen för att skapa ny funktionalitet till Preem AB:s lagerhanteringssystem som hanterar drivmedelsvarulagret.

Anledningen till att Preem AB rekryterade studenter för att ta sig an denna utmaning var på grund av de potentiella möjligheterna i förbättring av flera komponenter i lagerhanteringssystemet. Studien ska förklara hur systemet kan förbättras genom att utveckla ny funktionalitet från befintlig data. Målet med studien är att ge idéer, riktlinjer och svar på hur ny funktionalitet kan förbättra Preems hantering av drivmedelsvarulagret.

Preem AB är Sveriges största producent av drivmedel och bidrar med ungefär hälften av allt drivmedel som förbrukas i Sverige. [1] Preem AB har därmed mycket i åtanke då ansvaret för stora mängder drivmedel är riskfyllt inom många aspekter.

Att ha god kontroll över drivmedelsvarulagret är viktigt för den ekonomiska lönsamheten. Bolaget kan förlora miljonbelopp på grund av brister i deras lagerhanteringssystem. Ett sätt att minimera problemet kan vara att applicera ny funktionalitet i deras system.

Studenterna som deltog i projektet fick olika ansvarsområden, de områden som Preem AB sökte hjälp i var utvecklandet av det grafiska gränssnittet, databashantering och området denna studie sätter fokus på – utveckling av ny funktionalitet.

En kravspecifikation för varje funktion och prototyper i form av kod har tagits fram. Kravspecifikationerna är till för att beskriva hur funktionaliteten kan optimera lagerhanteringssystemet. Prototyperna är program som är implementerade att kunna besvara problemformuleringarna (se avsnitt 1.2). Genom nyskapandet av funktionalitet kan lagerhanteringssystemet effektiviseras och på så sätt erhålla ekonomiska fördelar – en fördel kan vara att en funktion tar över rollen som en anställd har. Det fanns många möjligheter att skapa ny funktionalitet, den funktionalitet som valdes att utvecklas var den som mest troligt skulle gynna Preem AB.

Nyckelord:

(4)
(5)

4 2.3 Data ...17 2.3.1 Filformat ...18 2.4. Programmeringsparadigm ...18 2.5 Programmeringsspråk ...18 Kapitel 3 Metod ...19 3.1 Förstudie ...19 3.1.1 Fallstudie ...19 3.1.2 Datainsamling ...20 3.1.3 Avgränsning i arbetet ...20 3.2 Projektprocessen ...21 3.2.1 Agil utveckling ...21 3.2.2 Parprogrammering ...21 3.3 Systemdokumentation ...22 3.3.1 Kravspecifikation ...22 3.3.2 UML ...22 3.4 Systemmiljö ...22

3.4.1 IDE (Integrated development evironment) ...22

3.4.2 GitHub (Versionshantering) ...22

3.4.3 Java ...23

Kapitel 4 Sammanställning av data ...24

4.1 Insamlad data ...24

4.1.1 Kvalitativ data ...24

4.2 Användbart kvantitativt data...24

Kapitel 5 Analys ...27

5.1 Kravspecifikation för utvald funktionalitet ...27

5.2 Modellering av utvald funktionalitet ...32

5.3 Prototyper ...32

Kapitel 6 Resultat ...33

6.1 Kravspecifikation ...33

6.2 Modeller...33

(6)

5 6.2.3 Optimera leveransplaneringen ...35 6.3 Prototyp ...36 Kapitel 7 Diskussion ...39 7.1 Metodval ...39 7.1.1 Förstudie ...39 7.1.2 Projektprocessen ...39 7.1.3 System dokumentation ...40

7.2 Samhälleliga och etiska aspekter ...40

7.3 Förslag till vidare forskning ...41

7.4 Slutsats ...41

Källförteckning ...42

Bilagor ...44

Bilaga A. Kravspecifikation för “Para ihop omatchande rapporter m.h.a. annat data än vad som används för tillfället” ...44

Bilaga B. Kravspecifikation för “Ta reda på cisternernas dödvolymsnivå” ...48

(7)

6

Ordlista

Cistern: En behållare till förvaring av bränsle. Pejl: Mätinstrument som är placerad i en cistern.

IT-system: System som med informationsteknik hanterar och utbyter information. I begreppet

innefattas även kommunkationsutrustning, datorer, servrar m.m.

Bränsletabell: En tabell som visar förhållandet mellan bränslenivån och pejlens alla möjliga

mått.

Nucleus: Kassasystem som bearbetar transaktionsdata m.m.

mcdMonitorII: Mjukvara som samlar och bearbetar data från pejlen.

SiteInfo: SiteInfo är mcdMonitorII:s presentationssystem - en webbapplikation.

Forcourt-server / Point-of-sale: En Forcourt-server även kallad “Point-of-Sale” är en dator

som sköter dialogen med banken för att se om ett kort är godkänt för tankning, beräknar ut fakturan, meddelar banken om hur mycket som ska betalas, m.m.

Lagerkontroll: Detta system är en webbapplikation skapad av Preem AB för att hålla reda på

cisternvarulagret. Information från SiteInfo och från leverantören sammanställs här för att kunna granskas och bearbetas.

Utvecklingsmiljö (eng. Integrated development evironment, IDE): En

utvecklingsmiljö är ett datorprogram som innehåller en del funktioner som tillsammans underlättar vid programmering. Funktionerna är sådana som kompilator, textredigerare och debugger.

MCD AB: Preem AB samarbetar med ett företag som heter MCD AB (Miljö & Cisterninstrument

(8)

7

Figurförteckning

Figur 2.1: Alla komponenter som tillsammans utgör lagerhanteringssystemet ... 12

Figur 2.2: Hur en horisontell cisterns komponenter integreras med respektive system ... 14

Figur 2.3: Olika volymmått och deras innebörd ... 15

Figur 2.4: Hur alla komponenter/system kopplas ihop i en drivmedelsanläggning [4] ... 16

Figur 5.1: Två rapporter som skiljer sig i tid men stämmer överens i både volym och temperatur (om 8000 liter av 8 graders drivmedel blandas med 5000 liter 7 graders drivmedel kommer sluttemperaturen bli ~7,6 grader (termodynamikens nollte huvudsats)) ... 28

Figur 5.2: Grafisk presentation över lösningsförslaget för matchning av rapporter ... 28

Figur 5.3: Grafisk presentation över lösningsförslaget för att hitta dödvolym ... 29

Figur 5.4: Nivåförändrings historik för anläggningen 46507 cistern 1 (De små nivåökningarna kan bero på drivmedlet som befinner sig i sugledningen faller tillbaka till cisternen) ... 30

Figur 5.5: Transaktionhistorik för anläggning 46507 cistern 1 ... 31

Figur 5.6: Grafisk presentation över lösningsförslaget för optimering av leveransplaneringen . 32 Figur 6.1: Flödet för att jämföra om leveransrapporterna stämmer överens med pejlmätningarna ... 34

Figur 6.2: Flödet för att hitta dödvolymsnivå ... 35

Figur 6.3: Flödet för att optimera leveransplaneringen ... 36

Figur 6.4: Resultat från en körning för att hitta dödvolymsnivå för åtta anläggningar ... 38

Figur b.1: Historiskt lägsta volym ... 49

Figur c.1: Cistern nummer 2 på anläggningen 46113 som endast använd sig av hälften av hela kapaciteten ... 53

(9)

8

Kapitel 1 Introduktion

En överblick av rapportens innehåll samt en förklaring av problemet som är i fråga fås i detta kapitel.

1.1 Bakgrund

Lagerhanteringssystem används av företag med försäljning av fysiska artiklar, där de exempelvis kan ta reda på aktuellt lagersaldo och ha kontroll på sitt lagervärde. Preem AB, arbetsprojektägare, säljer stora mängder drivmedel och använder ett lagerhanteringssystem som är grundstenen för denna studie.

Ett företag kan kräva ett specialiserat lagerhanteringssystem eftersom försäljning av varierande varor bidrar till olika problem. Det finns alltså inte en generell lösning till hur ett komplett lagerhanteringssystem kan skapas.

För att kunna göra avstämningar i varulagret och utveckla ny funktionalitet måste kontinuerlig mätdata från cisternerna finnas tillgängligt. MCD AB är företaget som gör det möjligt, med hjälp av deras nivåmätningssystem mcdMonitorII. mcdMonitorII är en programvara som övervakar mätdata och visar upp den på en bildskärm samt vidarebefordrar vid planerade tidpunkter eller på begäran till deras internettjänst. Den mätdata som mcdMonitorII behandlar är avgörande för att utveckla funktionalitet för lagerhanteringssystemet.

mcdMonitorII omvandlar den data som pejlen returnerar till grafiska objekt och format som är mer lätthanterliga. Detta system har tillgång till en mängd data som är av intresse för denna studie, exempelvis så har den tillgång till systemets loggningar av aktuell status, volym, nivå, temperatur, leveranser m.m.

1.2 Problemformulering

Problemet ligger i att Preems lagerhanteringssystem brister i funktionalitet. För att skapa ny funktionalitet krävs tillgång till viss data. Dessa data fås av Preems olika system så som mcdMonitorII, Forcourt-server m.fl.

Det fanns redan en mängd funktionalitet, men Preem AB var ute efter innovativa lösningar på hur ny funktionalitet skulle kunna optimera systemet. För tillfället måste data bearbetas manuellt för att utföra vissa processer, det vill säga att Preem AB slösar arbetskraft på att utföra ett arbete som kan automatiseras genom utvecklandet av ny funktionalitet.

(10)

9

Problem: Att sammanställa och para ihop leveransrapporterna, som inte stämmer överens i tid

mot respektive pejlrapport måste för tillfället göras manuellt. Leveransrapporterna innehåller information så som volymen, start tiden, stop tiden e.t.c. angående en särskild leverans. Medans pejlrapporterna innehåller information angående hur mycket volym en cistern har vid en särskild tidpunkt. Genom att jämföra dessa rapporter kan avvikelser upptäckas.

Frågeställning: Hur kan Preem AB para ihop leveransrapporter och pejlrapporter som inte

stämmer överens i tid?

Problem: På grund av flera faktorer är det svårt att veta vid vilken nivå en cistern har nått

dödvolym. Preem AB behöver veta när en cistern når dödvolym för att kunna planera in leveranser - så att en cistern inte går tom. Dödvolym är den volym som finns under sugledningen, det vill säga där sugledningen inte har möjlighet att pumpa upp mer drivmedel. Detta för att inte förse kunden med vatten och föroreningar som kan befinna sig i cisternens botten.

Frågeställning: Hur kan Preem AB beräkna när en cistern ska nå dödvolym?

Problem: Cisternerna brukar fyllas på med jämna mellan rum, men detta kan ha en negativ

påverkan då vissa cisterner aldrig utnyttjar sin fulla kapacitet

Frågeställning: Hur kan Preem AB optimera leveransplaneringen så att cisternerna utnyttjar

sin fulla kapacitet?

1.3 Syfte

Syftet med studien var att visa hur ny funktionalitet kan optimera Preem ABs lagerhanteringssystem, detta genom att besvara frågeställningarna i föregående rubrik. Detta projekt inleddes på grund av att Preem AB såg möjligheter till förbättringar av deras system. Studien kan bidra till ekonomisk gynnsamhet, då arbetskraft kan sparas och planering kan optimeras.

1.4 Mål

Projektets mål var att skriva en teknisk rapport samt att leverera kravspecifikationer och prototyper angående hur funktionaliteten kan skapas. Kravspecifikationerna ska fungera som en beskrivning av hur och varför funktionaliteten ska implementeras. Rapporten är en beskrivning av alla processer som krävdes för att kunna implementera funktionaliteten.

Det som överenskommits med projektägaren är att en samling av kravspecifikiationer och prototyper som beskriver hur funktionaliteten kan utvecklas ska levereras. Preem AB ska kunna ta nytta av vårt arbete och applicera det på deras system. Denna studie ska kunna användas för de som letar efter utvecklandet av ny funktionalitet för ett lagerhanteringssystem.

Följande är vad som ska åtgärdas och implementeras:

(11)

10

1.5 Metod

Projektet inleddes med en utbildning där målet var att alla medverkande skulle få en tydligare inblick i det existerande problemet. Vår arbetsmetod bestod av att samla information genom interna föreläsningar av anställda från Preem AB samt en extern föreläsning som Preem AB försedde oss med. Föreläsningarna från Preem AB förväntades vara den största källan för information. De interna föreläsningarna gav oss en överblick över alla processer som ingick för att hålla reda på varulager. Den externa föreläsningen var från MCD AB - denna föreläsning var till för att hjälpa oss förstå MCD:s roll i det hela, det vill säga vilka delar av varulagret de hade ansvar för.

För att tillfredsställa Preem AB och inte ta vatten över huvudet så skapades en MoSCoW-lista (se avsnitt 3.1.3) [2]. Denna lista specificerar vad som måste, bör, kan och inte kommer att göras. Listan skapades iterativt med regelbundna avstämningar med Preem AB för att gemensamt komma fram till en överenskommelse som passar båda parter.

1.6 Avgränsningar

Hela projektet är uppdelat i tre arbetsområden - dessa är databashantering, utveckling av funktionalitet och utveckling av det grafiska användargränssnittet. Denna studie kommer att avgränsas till att enbart undersöka utvecklandet av ny funktionalitet.

Rapporten fokuserar på processerna som följande system tillhandahåller: ● mcdMonitorII - Mjukvara som samlar och bearbetar data från pejlen. ● Nucleus - Kassasystem som bearbetar transaktionsdata m.m.

● Forcourt-server - Dator som sköter dialogen med exempelvis banken.

● Lagerkontroll - En webbapplikation skapad av Preem för att hålla reda på cisternvarulagret genom att sammanställa data från pejl och leverantör.

Ännu en avgränsning är att studien genomförs med en begränsad tidsrymd på 400 timmar.

1.7 Disposition

● Kapitel 2 - Teori - De teoretiska aspekterna granskas i detta kapitel, så som alla komponenter som tillsammans utgör systemet, och även bakgrundsinformation angående IT-system i allmänhet.

● Kapitel 3 - Metod - Metoderna som används i examensarbetet och forskningsmetodik granskas i detta kapitel.

● Kapitel 4 - Sammanställning av data - I detta kapitel kommer den befintliga datan analyseras för att sedan kunna avgöra våra möjligheter i utvecklandet av funktionalitet. ● Kapitel 5 - Analys - Här kommer problemformuleringarna ytterligare att förklaras -

(12)

11 ● Kapitel 6 - Resultat - Här kommer våra leverabler att presenteras och lösningarna till

problemen som står i fråga sammanställas.

Kapitel 7 - Diskussion - I detta kapitel diskuteras de val som gjordes, exempelvis varför vissa

(13)

12

Kapitel 2 Teori

Detta kapitel nämner information som är väsentlig för läsaren att erhålla för att förstå resten av rapportens innehåll. Här beskrivs alltså de teoretiska aspekterna som tagits till hänsyn samt litteraturstudien som utfördes.

2.1 Företagsinformation

Preem AB har en mängd olika system för att hantera drivmedelsvarulagret, vilket innebär att det finns data att hämta från olika system. Här beskrivs de system och de anläggningar som är mest väsentliga för denna studie [3].

(14)

13

2.1.1 Raffinaderier

Preem AB äger två raffinaderier i Sverige, där råolja bearbetas för att få fram drivmedelsprodukter. Efter bearbetningen exporteras drivmedelsprodukten till olika länder inkluderat Sverige. Båda raffinaderierna producerade tillsammans 18 miljoner ton drivmedel under 2014. [4] [5]

2.1.2 Depåer

Preem AB äger sju depåer runt om i landet, dessutom har Preem AB också tillgång till 14 andra depåer genom allianssamarbeten. Depåerna används för att lagra stora mängder drivmedel. Tankbilarna hämtar drivmedel från depåerna för att sedan kunna leverera det till drivmedelsanläggningarna. [6]

2.1.3 Drivmedelsleverantör

Hoyer är företaget som transporterar drivmedel mellan depåerna och drivmedelsanläggningarna. När drivmedlet har levererats skickas en faktura för mängden drivmedel som levererats. För att vara säkra på att Hoyer levererat rätt mängd drivmedel görs avstämningar mellan vad Hoyer sagt de levererat och vad Preem AB egentligen mottagit. Dessa avstämningar görs m.h.a system som mcdMonitorII och Preems webbapplikation Lagerkontroll.

2.1.4 Drivmedelsanläggningar

Preem äger mer än 600 drivmedelsanläggningar (2015). Dessa anläggningar är avsedda för privatbilister och tung trafik. På varje anläggning finns ett antal olika system och komponenter, som tillsammans är avgörande för lagerhanteringssystemet. Information angående cisternnivåförändring, köphistorik, leverans m.m. erhåller systemen som befinner sig på en av drivmedelsanläggningarna.

Cisternerna på anläggningarna

(15)

14 Figur 2.2: Hur en horisontell cisterns komponenter integreras med respektive system

(16)

15 Figur 2.3: Olika volymmått och deras innebörd

Nominell volym: Volym som tillverkan har angivit. Faktisk volym: Hur mycket cisternen faktiskt rymmer.

Effektiv volym: Den totala volym som kan utnyttjas; alltså den mellan överfyllnadsskyddet och

dödvolymen.

Lagervolym: Volym som finns i cisternen.

Dödvolym: Volym som är under sugledning och därmed inte kan utnyttjas.

Bruksvolym: Återstående volym som kan användas; alltså Lagervolym - Dödvolym.

Tomvolym: Volym som kan fyllas utan att aktivera överfyllnadsskydd; alltså Effektvolym -

Lagervolym.

2.1.5 SÅIFA

(17)

16

2.1.6 Huvudkontoret

På huvudkontoret arbetas det huvudsakligen med hantering av drivmedelsvarulagret. Systemen SiteInfo och Lagerkontroll är de system som används för att hantera leveranser, rapporteringar, dagsavstämningar m.m. För tillfället är det två anställda på Preem AB som har ansvar att upptäcka ovanligheter i deras lagerhanteringssystem.

2.2 Befintliga system

Dessa befintliga system utgör tillsammans lagerhanteringssystemet [7].

Figur 2.4: Hur alla komponenter/system kopplas ihop i en drivmedelsanläggning [4]

2.2.1 Nucleus

På varje drivmedelsanläggning finns en dator (Nucleus) som är igång dygnet runt. Denna dator har i uppgift att köra mcdMonitorII. Den har även ansvaret att köra annan mjukvara, som dock inte är relevant för denna studie.

2.2.2 Forcourt-server / PoS

(18)

17 som ska betalas, m.m. Forcourt-servern har alltså ansvaret för i princip all dialog då en kund tankar.

2.2.3 Commandern

Commandern är det system som först behandlar pejlens mätningar. Commandern är väldigt speciell då den är byggd så att den inte kan skapa en gnista, då detta möjligtvis kan orsaka en explosion då pejlen är placerad inne i en cistern.

2.2.4 mcdMonitorII

mcdMonitorII är den mjukvara som samlar in data från pejlen. mcdMonitorII kommunicerar inte direkt med pejlen utan via Commandern. Data som Commandern mottager översätts och formateras om till lämpligt format, så som grafiska objekt, av mcdMonitorII. Därefter skickas data till SiteInfo, för att sedan vidarebefordras till systemet Lagerkontroll där anställda på Preem AB kan behandla mätningarna. Detta system är avgörande för framtagande av funktionalitet angående drivmedelsvarulager, eftersom det är det enda systemet som direkt behandlar drivmedelsvarulagret.

2.2.5 Lagerkontroll

Detta system är en webbapplikation skapad av Preem AB för att hålla reda på cisternvarulagret. Information från SiteInfo och från leverantören sammanställs här för att kunna granskas och bearbetas. Preem AB använder detta system för avstämning av cisternvarulagret. Detta system var inte i så stort intresse för oss, men data som webbapplikationen visar kan fortfarande vara intressanta.

2.2.6 SiteInfo

SiteInfo är mcdMonitorII:s presentationssystem, som används för nivåövervakning. Data som SiteInfo har tillgång till är angående varulager i drivmedelsanläggningar. Preem skickar även viss data till transportören (Hoyer) för att de ska kunna planera de mest effektiva rutterna utan att drivmedel tar slut på någon anläggning.

SiteInfo är ett bra verktyg för presentation av data men denna studie är fokuserad på funktionalitet, så detta system var inte så gynnsam för vår studie.

2.3 Data

(19)

18 Ett program (som innehåller funktionalitet) kan ses som en funktion där utdata är en funktion av indatan [8].

Utdata = Program(Indata)

Dataobjekt är alltså centrala för utvecklandet av funktionalitet.

2.3.1 Filformat

Med filformat avses den interna strukturen en datafil har. En fil kan innehålla många olika typer av information och kan därmed lagras på olika sätt.

CSV

Den data som fanns tillgängligt levererades av Preem AB i fil formatet CSV (Comma Separated Values) [9]. Detta är ett gammalt sätt att lagra data på där data lagras i form av texfiler. Dessa filer kan ses som en tabell i en databas, där en rad motsvarar en rad i en tabell och ett kommatecken motsvarar en ny kolumn. Att lagra data på detta vis kanske inte är mest effektivt men är dock väldigt lätthanterligt då datan lagras som text.

2.4. Programmeringsparadigm

Inom utveckling av funktionalitet finns det olika idéer och läror angående organisation och struktur. Det är därför programmeringsspråk ska stödja flera programmeringsparadigmer. Ett programmeringsparadigm är en övergripande teori kring hur funktionalitet bör organiseras och struktureras. Varje paradigm stöder en uppsättning av begrepp som gör det bäst anpassat för ett visst problem [10].

För denna studie valdes objektorienterad programmering då den fungerar bäst för större program och är den paradigm Preem AB använder.

2.5 Programmeringsspråk

Programmeringsspråk är ett språk som människor använder för att utveckla funktionalitet. Datorernas grundspråk kallas maskinkod och består av ettor och nollor, som datorns centralprocessor direkt kan tolka. Olika programmeringsspråk har tagits fram för att kunna översätta läsbar kod bestående av siffror och tecken till maskinkod.

(20)

19

Kapitel 3 Metod

Metoderna som användes för att ta uppnå produktmålen granskas i detta kapitel.

3.1 Förstudie

Här beskrivs de metoder och tillvägagångssätt vi använde oss utav för att åstadkomma resultaten som Preem AB önskade. Vid arbetets inledning definierades vad som förväntades av oss; nämligen att utveckla tydliga kravspecifikationer för ny funktionalitet samt prototyper till utvald funktionalitet.

Frågeställningarna innehåller ordet “hur” – det innebär att det finns utrymme att inhämta kunskap inom det utvalda forskningsområdet. Studien är av explorativt syfte då den kräver att ett helhetsperspektiv inom problemområdet måste skapas. Då problemområdet kan vara brett så användes olika informationssamlingstekniker för att inhämta information vid explorativa studier [11]. Dessa informationssamlingstekniker förklaras i nedanstående rubriker.

3.1.1 Fallstudie

En fallstudie innebär en extensiv studie av ett fall. Fallstudier används när undersökaren behöver en djupare insikt i ett fall. Ett fall kan exempelvis vara en händelse, ett företag, eller en arbetsprocess [12].

För detta arbete genomfördes en övergripande studie av olika fall av samma natur. Lagerhanteringssystemet brister i funktionalitet och detta är problemet som står i fokus, men det finns olika fall att ha i åtanke. För att ge sig på detta arbete har forskningsstrategin innefattat både kvalitativa samt kvantitativa strategier – detta en lämplig strategi då problemet är brett [13]. Den kvantitativa datan insamlades för att få en tydlig förståelse över vilken data som var avgörande för utvecklandet av ny funktionalitet. Den kvalitativa datan användes för att ge oss idéer om vad som kunde behövas appliceras i lagerhanteringssystemet. Det gav alltså underlag för lösningsförslag och rekommendationer. Vår fallstudie bestod av interna föreläsningar, en extern föreläsning och regelbunden dialog med projektansvarige.

Interna föreläsningar

För att få en tydligare överblick över alla komponenter som tillsammans utgör lagerhanteringssystemet försedde Preem AB oss med interna föreläsningar.

Extern föreläsning

(21)

20 utvecklaren redan stött på togs upp och diskuterades. Ett problem var att utvecklaren inte kunde få tillgång till viss data, som Preem AB helt enkelt inte kunde producera.

Dialog med projektansvarig

För att försäkra om att arbetet var på rätt väg, utfördes avstämningsmöten varje vecka. Den kvantifierbara datan inhämtades på begäran – önskemål om data gjordes för att sedan erhållas av projektansvarige.

Genom dessa dialoger valdes följande funktionalitet att implementeras:

● Para ihop leveransrapporter från pejlen och Hoyer m.h.a. annan data än vad som används för tillfället [bilaga A].

● Ta reda på cisternernas dödvolymsnivå [bilaga B]. ● Optimera leveransplanering [bilaga C].

3.1.2 Datainsamling

Att veta vilken data som fanns tillgänglig var avgörande i vårt fall, eftersom utvecklandet av funktionaliteten som tidigare nämnts beror på den data som finns att arbeta med [8]. Fallstudien resulterade i information angående den data som fanns tillgänglig.

3.1.3 Avgränsning i arbetet

För att avgränsa arbetet skapades en MoSCoW-lista. MoSCoW är en arbetsmetod som används i mjukvaruutveckling för att nå en gemensam överenskommelse med intressenten om prioriteringen av vad som ska levereras [2]. Nedan presenteras vår MoSCoW-lista:

Prioritering Beskrivning

Måste (eng. Must) Leverera en kravspecifikation för funktionalitet av tekniskt intresse som ska ingå i det nya systemet. Den funktionalitet vi ska arbeta med presenteras i bilaga A och i bilaga B.

Bör (eng. Should) Tillsammans med kravspecifikationen kan exempelvis en del exempelkod eller pseudokod för utvalda delar av funktionaliteten levereras.

Skulle kunna (eng.

Could) Skapa prototyp(er) av utvald funktionalitet.

Kommer inte (eng.

(22)

21

3.2 Projektprocessen

Här beskrivs de metoder som användes för det faktiska genomförandet av projektet. Det syftar på hur projektet utfördes, planerades och strukturerades.

3.2.1 Agil utveckling

Grundtankarna bakom agil utveckling bygger på att göra kunden och användaren nöjd med det som utvecklas genom ett mycket nära samarbete under hela utvecklingstiden, med täta och regelbundna möten mellan utvecklare och beställare/mottagare. För att komma fram till funktionaliteten som skulle implementeras krävdes nära samarbeta med kunden. Därför, och på grund av fler faktorer, valdes agil utveckling.

Fördelen med ett agilt arbetssätt är främst att förändrade krav under utvecklingens gång är acceptabelt vilket är väldigt vanligt framkommande i projektarbeten. Ofta så ger förstudien inte alla svar och det kan behöva kommas på förbättringar/förändringar under arbetets gång.

Iterativ planering

Att planera iterativt betyder att arbetet sker i cykler och detta för att få en så bra produkt som möjligt. De olika cyklerna bestod av fallstudie, analysering och implementation.

3.2.2 Parprogrammering

Parprogrammering (eng. pair programming) är en programutvecklingsteknik där två programmerare jobbar tillsammans vid en gemensam dator. Den ena, föraren, skriver kod medan den andra, navigatören, granskar varje kodrad när den matas in. De två programmerarna växlar ofta mellan rollerna [14].

Under granskningen planerar navigatören också den strategi som ska användas, kommer på idéer till förbättringar och funderar över problem som kommer att behöva lösas senare. Detta förfarande ger föraren möjlighet att fokusera all sin uppmärksamhet på att göra klart den aktuella uppgiften, med navigatören som skyddsnät och guide.

Parprogrammering är en teknik inom agil programvaruutveckling som blir allt vanligare i industrin, då en av många fördelar är att kostnaderna drastiskt kan sänkas på grund av att det framkommer mindre problem med programmen [15]. Metoden valdes på grund av de positiva effekter som framkommer då den används. Genom användningen av metoden parprogrammering kan team bli mer samspelta, dela kunskap och effektivt hantera problem som skulle ta betydligt längre tid om det utfördes enskilt [16].

Virtuell parprogrammering

(23)

22 över en fjärransluten parprogrammerings IDE (eng. Integrated development environment) plugin. Denna plugin heter GitHub och används främst för versionshantering men kan användas för virtuell parprogrammering.

3.3 Systemdokumentation

3.3.1 Kravspecifikation

För att kunna påbörja en implementation skapades först kravspecifikationer för de funktioner som skulle utvecklas. Funktionerna var utvalda tillsammans med projektägaren, och kravspecifikationer skapades för att tydligt visa de specifikationer som de olika funktionerna kommer att ha. Genom att skapa kravspecifikationer eliminerades möjligheten att implementera något som redan fanns eller som inte behövdes – då kravspecifikationerna granskades av projektägarna innan de fick ett godkännande.

Kravspecifikationerna är alltså de krav på utförande, funktioner m.m. som kunden ställer på varan eller tjänsten. [18]

3.3.2 UML

UML (Unified Modeling Language) är ett objektorienterat språk som används för modellering av alla typer av system. UML användes för att ge en tydlig överblick över hur funktionen kommer att användas. Genom att skapa en modell av systemet blir det enklare att förstå och bygga det. [19]

3.4 Systemmiljö

3.4.1 IDE (Integrated development evironment)

Den utvecklingsmiljö (IDE) som användes under projektet var NetBeans. Detta användes för att implementera och testa den funktionalitet som togs fram. NetBeans är ett kostnadsfritt datorprogram som innehåller en textredigerare, kompilator m.m. som tillsammans underlättar vid programmering.

3.4.2 GitHub (Versionshantering)

GitHub är en online-tjänst för mjukvaruutveckling som använder versionshanteringssystemet

Git. Under projektet integrerades NetBeans med GitHub. Då en integrering skapas kan all källkod

(24)

23

3.4.3 Java

(25)

24

Kapitel 4 Sammanställning av data

Då fallstudien var genomförd var det tydligt om vart ifrån datan skulle inhämtas. I detta kapitel beskrivs den insamlade datan och analyseras utifrån vilket som var användbart för de framtagna funktionerna.

4.1 Insamlad data

Den data som kunde användas var det som Preem AB kunde leverera. Datan erhölls genom att uppfölja transaktioner, leveranser, lagerändringar och andra datakällor.

Data från MCD, angående nivåförändring överförs flera gånger per dag, till skillnad från Forcourt Servern som skickar transaktionsdata en gång per dag – vid midnatt. Datan överförs som en rapport med alla transaktioner sammanfattade, på så sätt kan data filtreras utefter behov. Data från leverantören (Hoyer) överförs när en leverans avslutats. All data överföring kan dock fördröjas på grund av allmänna tekniska problem i deras system. Den data som överförs samlas och bearbetas i mjukvarusystemen Siteinfo och Lagerkontroll.

4.1.1 Kvalitativ data

Föreläsningar med Preem AB:

● Allmän bakgrund om Preem AB ● Integration och databas

Föreläsning med MCD: ● mcdMonitorII ● Pejl

● Cistern ● SiteInfo

Veckomöten med handledare hos Preem AB.

4.2 Användbart kvantitativt data

(26)

25

Para ihop omatchande rapporter m.h.a. annat data än vad som används för tillfället

Data från drivmedelsanläggningarna Data från Hoyer (Leverantörsdata)

Från MCD Från Forcourt Server Varukod (bensin, etanol,

diesel m.m) Anläggningsinformation

(total volym,

anläggningsnummer, m.m)

Transaktionshistorik Storlek för leveransen i antal liter

Cisternnivå (pejlvärde) Temperatur (ej tillgänglig nu)

Cistern - och grupp nummer Tid punkter för start och slut

Temperatur Tankbilens nummer

Tidpunkt Tankbilens chaufför

Ta reda på cisternernas dödvolymsnivå

Data från drivmedelsanläggningarna

Från MCD Från Forcourt Server

Anläggningsinformation (total volym,

anläggningsnummer, m.m) Transaktionshistorik

(27)

26

Optimera leveransplaneringen

Data från drivmedelsanläggningarna Data från egen implementation Data från Hoyer (Leverantörsdata)

Från MCD Från Forcourt

Server Eventuell dödvolymsnivå för

respektive cisternerna Varukod (bensin, etanol, diesel m.m) Anläggningsinformati on (total volym, anläggningsnummer, m.m)

Transaktionshistorik Storlek för leveransen

i antal liter

Cisternnivå

(pejlvärde) Datum och tidpunkt

(28)

27

Kapitel 5 Analys

I projekt är det viktigt att rätt arbetsmetod används samt att reflekterar därefter över om metoden bidragit till rätt resultat. Lagerhanteringsystemet har många möjligheter till att utvecklas ännu mer än vad som förslagits i denna studie i detta kapitel analyseras de funktionerna som valdes att implementeras.

5.1 Kravspecifikation för utvald funktionalitet

Innan någon implementation påbörjades, skulle en kravspecifikation för varje funktion att skrivas. Att skapa kravspecifikationer har många fördelar, framförallt är den till för att precisera problemformuleringen. En kravspecifikation ska försöka ge alla inblandade en klar bild över projektmålet.

Kravspecifikationen ska innehålla information om funktionalitetens format (hur den ska implementeras), funktion (vad den utför) och övrig information som kan vara av intresse för funktionaliteten i fråga. En kravspecifikation ska stödjas med motsvarande prototyper och/eller pseudokod. För att skapa tydliga kravspecifikationer skapades en mall, som används i bilaga A, B och C.

De nya funktionerna som valdes att implementeras och analyseras beskrivs nedan.

Para ihop omatchande rapporter m.h.a. annat data än vad som används för tillfället

Leveranser sker regelbundet, oftast under kvällstid. Hur ofta en tankbil levererar beror på hur mycket anläggningen förbrukar. När en påfyllning påbörjat, rapporterar både pejlen och Hoyer in denna information till SiteInfo. Informationen angående tiden för leverans som pejlen ger ska stämma överens med vad Hoyer rapporterat in. SiteInfo är systemet som har till uppgift att försöka para ihop de två rapporterna, dock är inte alltid så att båda rapporter kommer in samtidigt. I det nuvarande systemet måste personalen själva para ihop leveranser som inte kommit in samtidigt. Därför ska en funktion skapas som kan para ihop två rapporter m.h.a. annan data som finns tillgängligt. Den data som tänkts användas för att para ihop rapporterna är volymen och temperaturen. Temperaturen av drivmedlet som levereras dokumenteras inte för tillfället, därför kommer denna funktion ta reda på om volymen, chaufför och om

(29)

28 Figur 5.1: Två rapporter som skiljer sig i tid men stämmer överens i både volym och temperatur (om 8000 liter av

8 graders drivmedel blandas med 5000 liter 7 graders drivmedel kommer sluttemperaturen bli ~7,6 grader (termodynamikens nollte huvudsats))

Figuren nedan visar hur problemet tänkts lösas om temperaturen även var angiven i leverantörsrapporten.

Figur 5.2: Grafisk presentation över lösningsförslaget för matchning av rapporter

Ta reda på cisternernas dödvolymnivå

(30)

29 Denna funktion fungerar endast om cisternen har nått dödvolym vid något tillfälle, detta för att det är endast vid de tillfällena transaktionsavböjelser kan bero på dödvolym. Om en cistern inte nått dödvolym kan inga slutsatser angående när den når dödvolym dras. För att avgöra om en cistern inte nått dödvolym tas det lägsta historiska värdet för volymen för den cisternen och jämförs med det teoretiska värdet för dödvolym – om värdena skiljer sig åt för mycket (2-5%) kan slutsatsen om att cisternen aldrig nått dödvolym dras.

Figur 5.3: Grafisk presentation över lösningsförslaget för att hitta dödvolym

(31)

30

Figur 5.4: Nivåförändrings historik för anläggningen 46507 cistern 1 (De små nivåökningarna kan bero på

drivmedlet som befinner sig i sugledningen faller tillbaka till cisternen)

(32)

31 Figur 5.5: Transaktionhistorik för anläggning 46507 cistern 1

I exemplet ovan utreddes en cistern som inte var sammankopplad med andra cisterner. Om cisternen var sammankopplad ställs ännu ett krav för att kunna försäkra om dödvolym har nått. Kravet är att drivmedelsnivån för de sammankopplade cisternerna måste vara detsamma, däremot kan sugledningarna befinna sig på olika platser.

Optimera leveransplaneringen

(33)

32 Figur 5.6: Grafisk presentation över lösningsförslaget för optimering av leveransplaneringen

5.2 Modellering av utvald funktionalitet

Före implementationen påbörjas, är det till fördel att först göra en modell av hur problemet ska lösas. Modeller används inom ingenjörskonst för att beskriva och representera olika slags objekt och system. Dessa modeller användes som verktyg för att förstå, beräkna och kontrollera funktionsflödet.

5.3 Prototyper

När en kravspecifikation och en modell för en funktion producerats, samt att indatan samlats in, är det relativt enkelt att skapa en prototyp. Om kravspecifikationerna är omfattande har det mesta ofta tagits i åtanke så som, risker, teoretisk lösning m.m. Prototyperna är en motsvarighet av modellerna – skillnaden är att prototyperna förklarar lösningen i form av kod. Prototyperna skapades för att ytterligare bevisa hur problemformuleringarna kan besvaras.

(34)

33

Kapitel 6 Resultat

I detta kapitel presenteras resultatet samt leverablerna. Här ska arbetet även sammanställas samt visa en lösning till problemet som är i fråga.

6.1 Kravspecifikation

Kravspecifikationerna som presenterats i bilaga A, B och C har till uppgift att besvara frågeställningarna, vad som behövs ha i åtanke och varför funktionaliteten behövs. Detta är en leverabel som projektägaren kräver för att de ska få en idé på hur en lösning kan se ut. Kravspecifikationen ska alltså räcka för att uppfatta problemet och för att få en lösningsidé angående hur problemet kan lösas.

6.2 Modeller

Modellerna är till för att ge en bättre överblick över hur problemet tänkts lösas. De skapades för att styrka kravspecifikationerna genom att beskriva flödet funktionaliteten tänkt ha. Nedan visas aktivitets diagram för de funktioner som valdes att utredas.

6.2.1 Para ihop omatchande rapporter m.h.a. annat data än vad som används för tillfället

(35)

34 Figur 6.1: Flödet för att jämföra om leveransrapporterna stämmer överens med pejlmätningarna

6.2.2 Ta reda på cisternernas dödvolymsnivå

(36)

35 Figur 6.2: Flödet för att hitta dödvolymsnivå

6.2.3 Optimera leveransplaneringen

(37)

36 Figur 6.3: Flödet för att optimera leveransplaneringen

6.3 Prototyp

(38)

37 Vi skapade endast en färdig prototyp, det var för att hitta dödvolymsnivån i cisterner. Att endast en prototyp skapades var på grund av tidsbrist – lösningsförslag i form av pseudokod skapades dock för alla funktioner. Prototypen är ett fungerande program som beräknar dödvolym på det sätt som förklarats i kapitel 5 och i bilaga B. Som tidigare nämnts kunde dödvolymsnivån inte bestämmas om en cistern aldrig nått den nivån. Se figur 6.4.

Anläggning: 14352

Lägsta nivån för cistern 1 är 71.6mm Sun Oct 05 17:58:58 CEST 2014 Lägsta nivån för cistern 2 är 161.0mm Tue Aug 26 12:52:01 CEST 2014 Lägsta nivån för cistern 3 är 534.6mm Mon Oct 06 11:36:48 CEST 2014 Lägsta nivån för cistern 4 är 550.4mm Mon Oct 06 11:40:07 CEST 2014 Det är dödvolym för cistern 1 vid 71.6 mm

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 3 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 4 p.g.a inkomplett data Anläggning: 16571

Lägsta nivån för cistern 1 är 305.4mm Mon Apr 13 08:03:12 CEST 2015 Lägsta nivån för cistern 2 är 360.1mm Mon Feb 09 22:08:28 CET 2015 Dödvolym kan inte hittas för cistern 1 p.g.a inkomplett data

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Anläggning: 36780

Lägsta nivån för cistern 1 är 160.3mm Mon Jun 16 20:49:11 CEST 2014 Lägsta nivån för cistern 2 är 97.0mm Tue Aug 12 18:20:01 CEST 2014 Lägsta nivån för cistern 3 är 302.1mm Tue Jul 15 20:59:18 CEST 2014 Dödvolym kan inte hittas för cistern 1 p.g.a inkomplett data

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 3 p.g.a inkomplett data Anläggning: 46113

Lägsta nivån för cistern 1 är 722.3mm Tue Mar 17 18:19:29 CET 2015 Lägsta nivån för cistern 2 är 1040.7mm Sat May 02 07:52:38 CEST 2015 Lägsta nivån för cistern 3 är 502.1mm Thu Dec 04 21:06:27 CET 2014 Lägsta nivån för cistern 4 är 1017.0mm Sat May 02 08:08:19 CEST 2015 Lägsta nivån för cistern 5 är 108.5mm Wed Apr 15 09:16:42 CEST 2015 Dödvolym kan inte hittas för cistern 1 p.g.a inkomplett data

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 3 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 4 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 5 p.g.a inkomplett data Anläggning: 46507

(39)

38 Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data

Dödvolym kan inte hittas för cistern 3 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 4 p.g.a inkomplett data Anläggning: 52325

Lägsta nivån för cistern 1 är 331.8mm Thu Aug 21 17:15:50 CEST 2014 Lägsta nivån för cistern 2 är 144.5mm Wed Jul 02 20:11:27 CEST 2014 Lägsta nivån för cistern 3 är 569.1mm Sat Aug 16 14:09:14 CEST 2014 Lägsta nivån för cistern 4 är 573.5mm Thu Jan 29 06:13:21 CET 2015 Lägsta nivån för cistern 5 är 575.9mm Thu Jan 29 06:15:22 CET 2015 Dödvolym kan inte hittas för cistern 1 p.g.a inkomplett data

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 3 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 4 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 5 p.g.a inkomplett data Anläggning: 53555

Lägsta nivån för cistern 1 är 71.7mm Mon Oct 27 19:28:35 CET 2014 Lägsta nivån för cistern 2 är 139.5mm Mon Jul 28 10:39:56 CEST 2014 Lägsta nivån för cistern 3 är 130.4mm Mon Jul 28 10:43:01 CEST 2014 Det är dödvolym för cistern 1 vid 71.7 mm

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 3 p.g.a inkomplett data Anläggning: 59465

Lägsta nivån för cistern 1 är 362.7mm Thu Apr 16 23:47:26 CEST 2015 Lägsta nivån för cistern 2 är 89.5mm Wed Feb 04 10:26:23 CET 2015 Lägsta nivån för cistern 3 är 79.7mm Tue Apr 14 08:20:29 CEST 2015 Lägsta nivån för cistern 4 är 407.4mm Sat Feb 21 07:23:20 CET 2015 Lägsta nivån för cistern 5 är 443.4mm Wed Apr 29 15:10:06 CEST 2015 Dödvolym kan inte hittas för cistern 1 p.g.a inkomplett data

Dödvolym kan inte hittas för cistern 2 p.g.a inkomplett data Det är dödvolym för cistern 3 vid 79.7 mm

Dödvolym kan inte hittas för cistern 4 p.g.a inkomplett data Dödvolym kan inte hittas för cistern 5 p.g.a inkomplett data

(40)

39

Kapitel 7 Diskussion

Detta kapitel är försedd för att kritisera samt styrka de val som gjort.

7.1 Metodval

Att diskutera kring arbetsmetoderna har en stor betydelse eftersom att arbetsmetoderna har påverkan på resultatet.

7.1.1 Förstudie Fallstudie

Fallstudien var en given process som krävdes för att utföra detta projektarbete. Under denna fallstudie inhämtades nödvändig kunskap för att få en ökad förståelse av Preem ABs lagerhanteringssystem.

Datainsamling

Den data som fanns tillgängligt var tillräckligt för att kunna besvara problemformuleringarna, dock så kunde den nya funktionaliteten optimeras om annat data fanns tillgängligt.

Avgränsningar i arbetet

MoSCoW listan skapades för att begränsa och prioritera arbetet. Detta underlättade planeringen och projektprocessen. Att prioritera arbetet på detta sätt kan vara en bra strategi men detta kan även leda till att andra delar försummas.

7.1.2 Projektprocessen Agil utveckling

(41)

40

Parprogrammering

Parprogrammering tillämpades främst för att projektutövarna skulle ha koll på all koden som skrevs. Om ena projektutövaren hade för sig att skriva kod kunde den andra granska koden för att bidra med synpunkter, rekommendationer e.t.c. Metoden kan vara svår att tillämpa då granskaren måste se varje kodrad som matas in. Då projektutövarna inte kunde granska varje kodrad som skrevs så sparades en ny version av koden vid varje uppdatering. På detta sätt kunde koden granskas i efterhand.

7.1.3 System dokumentation Kravspecifikation

Kravspecifikationerna användes framförallt för beskriva och precisera den nya funktionaliteten som togs fram. Då funktionaliteten i vårt fall kunde besvara problemformuleringen var det viktigt att tydligt dokumentera funktionsflödet. Kravspecifikationerna gav alla inblandade en klar bild av hur funktionaliteten skulle implementeras och kunde därmed försäkra om att projektarbetet gick i rätt riktning. En stor fördel var möjligheten att under projektets kunna gå tillbaka till dokumentet för att försäkra om att arbetet gick i rätt riktning.

UML

Att skapa modeller med hjälp av UML var väldigt gynnsamt och rekommenderas starkt. Modellerna är riktiga, konsekventa, enkla att förmedla till andra och även enkla att ändra. UML används i stor utsträckning inom industrin och är en väletablerad samt beprövad teknik. [20] Med hjälp av UML undvek vi att börja programmera för tidigt, inte förrän modellerna var framtagna påbörjades programmering.Ännu en fördel med UML är att det inte är företagsägt och är därmed fritt att använda.

7.2 Samhälleliga och etiska aspekter

(42)

41

7.3 Förslag till vidare forskning

Ett förslag för vidare forskning är att följa implementeringsprocessen som beskrivs i kravspecifikationerna och applicera det i systemet – detta för att utreda om funktionaliteten höjer effekten av lagerhanteringssystemet. Även att djupare studier utförs, studien bör minst omfatta 30 högskolepoäng, eftersom att det är svårt att få grepp om ett lagerhanteringssystem där möjligheter till ny funktionalitet är stor.

7.4 Slutsats

De resultat som framtagits är lösningsförslag på hur den nya funktionaliteten kan implementeras. Om Preem AB implementerar den funktionalitet som tagits fram kommer lagerhanteringen få ökad effektivitet Detta genom att eliminera den arbetskraft som förbrukas för att hålla reda på felaktiga leveranser, minska mängden onöjda kunder genom att förhindra att dödvolym uppstår och kunna utnyttja hela cisternen kapaciteten – genom att optimera leveransplaneringen. I bästa fall kan Preem AB eliminera all tid som går åt att para ihop inkompletta leveranser samt eliminera att dödvolym uppstår i någon cistern.

En faktor med stor inverkan på funktionalitetens framgång är hur programmet implementeras. Vid implementering bör man ta hänsyn till att funktionaliteten som togs fram var ett gemensamt beslut mellan Preem AB och studenterna – vi fick inspiration från de anställdas perspektiv och tankar. Genom ett sådant arbetssätt kan det skapas en känsla av delaktighet och påverkan, vilket leder till att de anställda lättare kan acceptera och uppskatta förändringarna.

(43)

42

Källförteckning

[1] Marknad och Försäljning, Om Preem, http://preem.se/om-preem/om-oss/vad-vi-gor/marknad-och-forsaljning/

[2] MoSCoW method, http://en.wikipedia.org/wiki/MoSCoW_method

[3] A. Åhlström, Handledare för KEX jobb i Preem AB, Stockholm, 19-01-2015 Föreläsning april 2015.

[4] Europas Modernaste Raffinaderier, Om Preem, http://preem.se/om-preem/om-oss/vad-vi-gor/raff/

[5] Preem årsredovisning 2014

[6] Preems Depåer, Om Preem, http://preem.se/om-preem/om-oss/vad-vi-gor/depaer/ [7] Dag Hultgren, Huvudutvecklaren för MCDMonitorII från MCD AB. ”Kandidatarbeten hos Preem” 2015, Föreläsning 1 april.

[8] Aaby, Anthony. 2004. Introduction to Programming Languages. [Online]. Tillgänglig vid: http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook

[9] Y. Shafranovich, okt-2005. Common Format and MIME Type for Comma-Separated Values

(CSV) Files, Network Working Group,. [Online]. Tillgänglig vid: www.ietf.org/rfc/rfc4180.txt.

[Åtkomstdatum: 08-apr-2015].

[10] Peter Van Roy. 2009-05-12. Programming Paradigms for Dummies: What Every

Programmer Should Know. info.ucl.ac.be. Page 10. [Online]. Tillgänglig vid:

https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf.

[11] Patel, R., & Davidsson, B. 2011. Forskningsmetodikens grunder: Att planera, genomföra

och rapportera en undersökning. Lund, Sweden: Studentlitteratur.

[12] Gerring, J. 2007. Case Study Research. Cambridge: Cambridge University Press. [13] Tufte, P. A., & Johannessen, A. 2002. Introduktion till samhällsvetenskaplig metod. Malmö: Liber.

[14] Williams, Laurie. 2001. Integrating Pair Programming into a Software Development

(44)

43 [15] Cockburn, Alistair, Williams, Laurie. 2000. The Costs and Benefits of Pair Programming. Boston, USA

[16] Ulf Rask. 2013-06-19. Effektiv parprogrammering i utvecklingsorganisation. [Online]. Tillgänlig vid:

http://www.citerus.se/effektiv-parprogrammering-i-utvecklingsorganisationer/#conversion-0

[17] Flor, Nick. 2006. Globally distributed software development and pair programming.

Communication of the ACM, 49, 57–58.

[18] Guide för att skriva en bra kravspecifikation, http://www.kravspecifikation.se/mall-exempel

[19] Guide och information angående UML diagram, http://www.uml-diagrams.org/ [20] Umeå universitet, föreläsning om UMLs fördelar,

(45)

44

Bilagor

Bilaga A. Kravspecifikation för “Para ihop omatchande rapporter m.h.a.

annat data än vad som används för tillfället”

A1. Bakgrund

Leveranser sker regelbundet, oftast under kvällstid. Hur ofta en tankbil levererar beror på hur mycket anläggningen förbrukar. När en påfyllning påbörjat, rapporterar både pejlen och Hoyer in denna information till SiteInfo. Informationen som pejlen ger ska stämma överens med vad Hoyer rapporterat in. SiteInfo är systemet som har till uppgift att försöka parsa ihop de två rapporterna, dock är inte alltid så att båda rapporter kommer in samtidigt. Därför ska en funktion skapas som kan matcha två rapporter utefter viss information.

A2. Funktionella krav

“Anläggningar med försenad rapporter(påfyllning syns i systemen men är ej rapporterad av tankbil, vice versa) ska matchas ihop m.h.a. av annat data än vad som används för tillfället”

I det nuvarande systemet måste personalen själva para ihop rapporter som inte kommit in samtidigt. Funktionen ska automatiskt kunna para ihop försenade rapporter från Hoyer eller tvärtom genom att kontrollera dessa rapporter utifrån:

● Anläggnings nummer ● Tidpunkt

○ start och sluttid för leveranser enligt pejlen ○ start och sluttid för leveranser enligt Hoyer ● Storlek för leveranser i antal liter

● Temperatur (ej tillgänglig för tillfället) ● Cisterngrupp

● Cistern

A2.1 Orsak av problem

Problemet kan uppstå av följande händelser:

● Tankbilens chaufför har inte rapporterat i tid

● Leveransen påbörjade strax innan midnatt, men rapporten kommer in först i nästa dag ● Rapporten är ihop slagna(flera rapporter i en och samma rapport)

● Leveransrapporten från Hoyer stämmer inte överens med vad pejlen säger

A2.2 Händelseflöde/exekveringsflöde

(46)

45 nämnts ovan. Informationen avgör om rapporterna motsvarar varandra eller inte. Om de

motsvarar varandra ska dessa två rapporter sammanfogas. Därefter ska ett meddelande till relevant person skickas, för att sedan kunna godkänna denna leverans.

A2.3 Data

A2.3.1 Indata

● Anläggnings nummer ● Tiden

○ start och sluttid för leveranse enligt pejlen ○ start och sluttid för leveranse enligt Hoyer ● Storlek för leveranser i antal liter

● Temperatur (ej tillgänglig för tillfället) ● Cisterngrupp

● Cistern

A2.3.2 Utdata

● Ihopslagna rapporter utifrån resultatet av den analytiska matchningen

A3. Dokumentation

A3.1 Teoretisk lösning

1. Hämta in leveransinformation från pejlen och Hoyer. Starttid, sluttid, storlek o.s.v 2. Hämta ytterliga leveransinformation så som temperatur och, chaufför numret. 3. Beräkna vad temperaturen bör vara efter leverans, m.h.a. energiprincipen. 4. Jämför informationen och kontrollera om de stämmer överens

5. Om de stämmer överens, slå ihop de två rapporterna och meddela relevant personal

A3.2 Implementation A3.2.1 Psedokod

set Object PejlRapporter{

(47)

46

set Object HoyerRapporter{

set anläggningnummer

set cisternnummer set sterttid;

set sluttid; set volym;

set temperatur (ej tillgängligt nu); set varu;

}

void function paraRapporter(){

set pejlInfo = läsa in leveransrapport från pejlen i formad av PejlRapporter; set hoyerinfo = läsa in leveransrapport från Hoyer i formad av HoyerRapporter;

//Beräkna temperaturen då leverans sker m.h.a. termodynamikens nollte huvudsats och jämför //om det stämmer överens med vad Hoyer rapporterat in.

if hoyerinfo.anläggningnummer är lika med pejlInfo.anläggningnummer { if hoyerinfo.cisternnummer är lika med pejlInfo.cisternnummer { if hoyerinfo.varu är lika med pejlInfo.varu {

if hoyerinfo.volym / pejlInfo.volym < 5% eller hoyerinfo.volym - pejlInfo.volym = ± 200 liter{

dessa två rapporter stämmer överens;

return;

}

//Om endast volym inte stämmer överens

(48)

47 }

//Oftast är det volym som inte stämmer överens, d.v.s. volym skiljer sig mer än 5% eller 200liter void function kontrollPejladVolym(pejlInfo){

set nivåHistorik = läsa in nivå historik för pejlInfo.cisternnummer set teoretiskbalansHistorik = den teoretisk balansens historik för pejlInfo.anläggningnummer.cisternnummer

//analysera den teoretisk balansens historik efter leveransen men volym värde från pejlen

if nivåHistorik stämmer överens med den teoretisk balansensen{ pejlen har rätt volym;

}

if nivåHistorik stämmer inte överens med den teoretisk balansensen{ sätta in Hoyers volym värde;

if nivåHistorik stämmer överens nu med den teoretisk balansensen{ Hoyer har rätt volym, pejlen räknad fel;

}

(49)

48

Bilaga B. Kravspecifikation för “Ta reda på cisternernas dödvolymsnivå”

B1. Bakgrund

En sugledning i en cistern når inte ända ner i botten av cisternen - för att den inte ska suga upp vatten och orenheter till kunder. Den volym som sugledningen inte når kallas då för dödvolym. Preem AB vill undvika att nå dödvolym, på grund av kunder inte kan tanka då. Sugledningen i alla cisterner kan ha olika längder och informationen angående detta finns inte tydligt dokumenterat. Exempelvis kan en sugledning nå drivmedlet som ligger 10cm ovanför botten av en cistern, medans en annan sugledning når 20cm.

B2. Funktionella krav

“Cisternernas dödvolym ska presenteras till relevant personal”

Denna funktion tar reda på ett teoretiskt värde för vilken nivå dödvolym uppstår i en cistern. Målet är att skapa en lista som innehåller förhållandet mellan cisterner och dess dödvolym.

B2.1 Orsak av problem

● Sugröret som pumpar drivmedel till kund är olika placerade ● På grund av service av cisterner omplaceras sugledningarna

A2.2 Händelseflöde/Exekveringsflöde

Denna funktion ska bara behövas exekveras en gång för att ta reda på dödvolymen på de cisterner som någonsin nått dödvolym. Då den exekveras går den igenom de olika stegen som förklaras i punkten “teoretisk lösning” - funktionen ska returnera en lista som visar förhållandet mellan en cistern och dess dödvolym.

B2.3 Data B2.3.1 Indata ● Nivåförändring ● Anläggningsinformation ● Cisterninformation ● Transaktionshistorik B2.3.2 Utdata

● En lista med ett teoretisk värde för varje cistern

B3. Dokumentation

(50)

49 För att ta reda när en cistern når dödvolym tar vi först reda på den historiskt lägsta volymen cisternen någonsin nått.

Figur b.1: Historiskt lägsta volym

Sedan jämförs den lägsta volymen med det teoretiska värdet för dödvolym. Preem AB beräknar det teoretiska på följande sätt: DTeoretisk = Faktiska volym * 0.05. Om volymerna inte skiljer så mycket åt kan antagelsen om att cisternen nått dödvolym dras. För att försäkra om att cisternen nått dödvolym tar vi reda på om det har inträffat något köp, fast inte slutfört under tiden tills nästa nivåförändring, som förmodligen kan vara en leverans.

Lösningsförslaget i form av en punktlista: ● Jämför lägsta nivån med DTeoretisk

○ Om värdet ligger långt ifrån DTeoretisk, ex. 20 cm ovanför då antas att DTeoretisk inte är måttet för dödvolym

○ Om värdet ligger i närheten av DTeoretisk kan antagandet att dödvolym uppstår vid det måttet

● Ta reda på försäljningshistorik vid detta tillfälle

○ Om köp har inträffat och all drivmedel har gått till kunden

■ Ensamstående Cisternen: cisternen har inte nått dödvolymsnivå, problem med pejlen

■ Sammankopplade cisternerna: kontrollerar om nivå ändras i den andra cisternen. Om ja, den första cisternen har nått dödvolymsnivå.

○ Om köp inträffar fast inte slutförts (cisternern inte har tillräckligt med drivmedel) kan antagandet att cisternen nått dödvolym dras.

(51)

50 Om punkterna stämmer överens i den ordning som angivits för att nå dödvolym, noteras detta genom att uppdatera värdet som är angivet som dödvolym för den utredda cisternen.

Denna funktion fungerar endast om cisternen har nått dödvolym vid något tillfälle, detta för att det är endast vid de tillfällena transaktionsavböjelser kan bero på dödvolym. Om en cistern inte nått dödvolym kan slutsatsen när dödvolym uppstår inte tas fram. För att avgöra om en cistern inte nått dödvolym tar man reda på det lägsta historiska volymen för en cistern och jämför det med det teoretiska värdet för dödvolym - om de värdena skiljer sig för mycket kan man dra slutsatsen om att cisternen aldrig nått dödvolym.

B3.2 Implementation B3.2.1 Psedokod

set dödvolymsnivåHistorisk; set dödvolymsnivåFaktisk;

set historikArray[] = läsa in nivåhistorik;

set transaktionsHistorik[] = läsa in transaktionshistorik;

set dödvolymsLista = en lista med samtliga dödvolymsnivå för alla cisternerna i alla anläggningarna;

/* sortera arrayen som innehåller nivåhistoriken i storleksorning. Välja ut den lägsta nivå,kontrollera även om det värdet är giltigt

*/

void function lägstNivå{

sortera historikArray[] efter storlek; while !kontrolleraVärde(historikArray[x])

x += 1;

dödvolymnivåHistorisk = historikArray[x];

jämföra dödvolymsnivåHistorisk med dödvolymsnivåTeoretisk; beräknaDödvolym(dödvolymsnivåHistorisk);

}

/*Kontrollera om värde är giltigt, alltså inte värde som är för låg eller felaktig värde */

boolean function kontrolleraVärde(x){ if x är mindre än dödvolymsnivåTeoretisk

return false;

if x är mycket mindre än den teoretiska balansen

return false;

(52)

51

/*Kontrollera om den lägsta giltiga nivån är den faktiska dödvolymsnivån */

void function beräknaDödvolym(dödvolymsnivåHistorisk){ set startPunkten = dödvolymsnivåHistorisks tidpunkten; set stopPunkten = nästkommande nivåförändrings tidpunkten;

kontrollera i transaktionshistorik[];

if det ha inträffat något köp, fast inte slutfört mellan startPunkten och stopPunkten{

if ja{

dödvolymsnivåHistorisk är den faktiska dödvolymsnivån

uppdateraDödvolymsLista(dödvolymsnivåHistorisk);

}

if nej{

Analysera tidigare historik om det brukar finnsa köp under denna period if ja, cistern kan ha nått dödvolymsnivån (kanske en bemannad station,

kunden blev meddelad att drivmedel är slut)

uppdateraDödvolymsLista(dödvolymsnivåHistorisk);

}

}

if köp har inträffat och all drivmedel har gått till kunden {

if cisternen är ensamstående, dödvolymsnivå har inte nått, problem med pejlen

if cisternen är sammankopplad{

if nivån i den andra cistern har minskats{

den första cisternen har nått dödvolym;

uppdateraDödvolymsLista(dödvolymnivåHistorisk);

}

if nivån i den andra cistern har inte minskats,

problem med pejlen i båda cisternerna;

}

} }

/*Uppdatera listan med alla dödvolymsnivån */

void function uppdateraDödvolymsLista(dödvolymsnivå){

(53)

52

/*Expotera listan med alla dödvolymsnivån /*

(54)

53

Bilaga C. Kravspecifikation för “Optimera leveransplanering”

C1. Bakgrund

Cisternerna grupperna brukar fyllas på med jämna mellan rum, detta kan ha en negativ påverkan då vissa cisternerna grupper aldrig utnyttjar sin fulla kapacitet - se figur c1 för att få en överblick över hur det kan se ut. För att utnyttja kapaciteten behövs bättre planering angående när en leverans ska ske till en viss cistern se figur c2 för att få en överblick över hur det önskas att se ut.

Figur c.1: Cistern nummer 2 på anläggningen 46113 som endast använd sig av hälften av hela kapaciteten

Figur c.2: En idealisk graf för en cistern som utnyttjar sin kapacitet

(55)

54

C2. Funktionella krav

“Optimera leveransplanering”

Denna funktion ska beräkna när en cistern eller fler sammankopplade cisterner bör fyllas på genom att beräkna vad cisternerna förbrukar i genomsnitt. Genom funktionaliteten “Ta reda på cisternernas dödvolymsnivå” går det att avgöra när en cistern bör fyllas på innan den når dödvolym.

C2.1 Orsak av problem

● Leverantörerna vet inte när en cistern planeras nå dödvolym

● Planeringen är satt utifrån en geografiska ståndpunkt där leverantören åker till de anläggningar den befinner sig närmst.

C2.2 Händelseflöde/Exekveringsflöde

Denna funktion ska även bara behövas exekveras en gång per dag för att ta reda på när en leverans bör ske. Funktionen ska returnera en lista som visar förhållandet mellan en cistern och vid vilken nivå den bör fyllas på. Denna lista ska kunna användas av leverantören för att

optimera leveransplaneringen och därmed undvika att en cistern når dödvolym.

C2.3 Data

C2.3.1 Indata

● Anläggningsnummer och cisternnummer ● Transaktionshistorik

● Dödvolymsnivå

C2.3.2 Utdata

● En lista som visar förhållandet mellan en cistern och vid vilken nivå den bör fyllas på. Denna funktion tar endast reda på när en cistern planeras gå tom - m.h.a. av detta resultat kan optimerade planeringar göras för att utnyttja en cisterns fulla kapacitet.

C3. Dokumentation

C3.1 Teoretisk lösning

● Ta reda på de cistern grupper som behöver optimeras genom att: ○ Räkna ut medelvärdet för nivån innan leverans

○ Jämföra medelvärdet med den totalavolym gruppen kan ha

● Analysera försäljningshistoriken, och ta reda på hur mycket drivmedel som säljs i genomsnitt för respektive veckodag under en period (ex. ett år).

● Vid slutet av varje dag ska detta funktionen kontrolleras om drivmedel som finns kvar räcker till de två kommande dagar

○ Ta reda på återstående drivmedel: drivmedelkvar

References

Related documents

Vid denna slutliga testning har samtliga användare, både interna samt externa, fått testa prototypen med färdiga testfall och under de testen har antal klick räknats som krävs

I första stycket första meningen definieras vilka utförare som en person kan listas hos på följande sätt: ”sådan utförare inom ett vårdvalssystem i primärvården där

I paragraferna finns bestämmelser om vallokaler och röstningsloka- ler. Det anges bl.a. att sådana lokaler inte bör ha anknytning till en viss religiös sammanslutning eller till

handläggning (beredning) eller att yrka på att återkalla förslaget efter att ha tagit del av vad övriga ledamöter ansett om förslaget. Fullmäktige fattar beslut enligt

Här går meningarna om hur väl listan stämmer överens mot verkligheten isär, samtidigt fram- kommer ett tänkvärt argument; att större spelställen som också betalar mer pengar

För att få godkänt behöver du 100% närvaro i övningar, göra dina tal, samt vara aktiv på lektionerna och ge feedback till dina kursare. Kursledare är

Detta visar att sågverken i stort inte har någon integrerad och utarbetad Supply chain för sina produkter för att effektivisera hela processen från skog till leverans hos kund..

V2-ordföljden är typisk bland germanska språk och förekommer också i svenskan, och det är när satsens finita verb står i presens som den tyska och svenska ordföljden