Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 1 (35)
Ladok3
Refaktorering av befintligt Ladok
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
Rapport
Version 1.0
2011-12-02
Sida: 2 (35)
Innehåll
1
Introduktion ...................................................................................................................... 4
1.1 Syfte .......................................................................................................................... 4
1.2 Introduktion till refaktorering ................................................................................... 4
1.3 Introduktion till dokumentet ..................................................................................... 5
1.4 Grundläggande antaganden ...................................................................................... 5
1.5 Öppna frågor ............................................................................................................. 6
1.6 Referenser ................................................................................................................. 6
1.7 Förkortningar ............................................................................................................ 6
2
Sammanfattning ................................................................................................................ 7
2.1 För- och nackdelar .................................................................................................... 7
3
Översikt av dagens Ladok ................................................................................................ 8
4
Refaktorering .................................................................................................................. 11
4.1 Målarkitektur .......................................................................................................... 11
4.2 Modularisering........................................................................................................ 17
4.3 Metodik................................................................................................................... 19
4.4 SOA och kärnladok................................................................................................. 20
4.5 Framtiden för Ladoks produkter ............................................................................. 21
4.6 Refaktorering av databas ........................................................................................ 22
5
Ladok3 krav .................................................................................................................... 24
5.1 Funktionella krav .................................................................................................... 24
5.2 Icke funktionella krav ............................................................................................. 30
5.3 Slutsatser ................................................................................................................. 31
6
Arbetsplan ....................................................................................................................... 32
7
Analys av effektmål......................................................................................................... 34
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 3 (35)
Utgåvehistorik för dokumentet
Utgåva
Datum
Kommentar
1.0
2011-08-08 Första publicerade version
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
1
Introduktion
1.1
Syfte
Version 1.0
2011-12-02
Sida: 4 (35)
Syftet med detta dokument är att utreda det lösningsförslag för Ladok3 som innebär att
bygga vidare på det existerande Ladoksystemet för att realisera de krav som finns för
Ladok3.
Det primära syftet med denna rapport är att kunna fungera som underlag för att välja
lösningsförslag för Ladok3.
1.2
Introduktion till refaktorering
Ordet refaktorering 1 avser normalt att ett system renoveras utan att funktionaliteten
förändras. Genom att systematiskt förändra Ladok ur ett tekniskt och funktionellt
perspektiv kan Ladok3 realiseras.
Den första stora fördelen med refaktorering jämfört med ett nybygge är att risken blir
mycket mindre. Systemet kan förändras gradvis och alltid vara operativt. Det är dock
viktigt att målmedvetna och kraftfulla åtgärder vidtas för att skapa ett system som kan
leva många år till. Kända svagheter med dagens arkitektur bör adresseras under
utvecklingstiden.
Den andra stora fördelen är att en refaktorering kommer kontinuerligt att leverera
affärsnytta samtidigt som tekniska förbättringar genomförs. Jämfört med en introduktion
av ett helt nytt system där affärsnyttan kan ta tid att få på plats, speciellt med tanke på att
ett så omfattande system som Ladok måste byggas upp från grunden innan nya funktioner
tas i drift. Ladok3 som projekt kan också avbrytas utan att någon investering går förlorad.
Den tredje stora fördelen med en refaktorering är att Ladok har en existerande komplett
kravbild som täcker in alla detaljer som är nödvändiga för ett användbart system.
Gissningsvis kräver ett nybyggnadsspår åtskilliga timmar av kravarbete för att detaljera
de framtagna kraven till det som krävs för ett färdigt system.
En refaktorering skulle givetvis också innebära en del risker. En risk skulle vara att de
nödvändiga förbättringarna inte skulle genomföras i någon större omfattning. Detta är
något som lätt kan bli fallet eftersom refaktoreringsarbete ofta prioriteras ned till förmån
för funktionella förändringar.
En liknande process används i förvaltningen av Norges motsvarighet till Ladok, Felles
Studentsystem (FS).
1
Ordet finns inte i SAOL men används frekvent i systemutvecklingssammanhang. När det gäller
huruvida man ska använda order refaktorering eller refaktorisering så används båda
varianterna. Detta dokument har valt den förstnämnda varianten.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 5 (35)
Det kan vara värt att notera att refaktorering och förändring av funktionalitet kommer att
hanteras parallellt ur ett utvecklingsperspektiv, men det är hanterbart om vägen stakats ut
på ett bra sätt.
1.3
Introduktion till dokumentet
Detta dokument är uppdelat i följande delar:
1. Kapitlet Översikt av dagens Ladok ger en kort översikt av dagens Ladok.
2. Kapitlet Refaktorering beskriver nödvändiga renoveringar av systemet för att
skapa en bra grund att bygga vidare på.
3. Kapitlet Ladok3 krav analyserar den funktionalitet som Ladok3 kräver av ett
framtida system och hur den skulle kunna föras in i Ladok.
4. Kapitlet Arbetsplan beskriver hur arbetet skall läggas upp.
5. Kapitlet Analys av effektmål utvärderar lösningen mot effektmålen.
6. Kapitlet Avslutande diskussion innehåller en del avslutande reflektioner om
refaktoreringsspåret.
1.4
Grundläggande antaganden
För att begränsa omfattningen av denna rapport har vissa antaganden gjorts, dessa
beskrivs nedan.
Nouveau-klienten byts ut mot en Java-baserad lösning som bygger vidare på Ladok
på Webb, men med ett komplett användargränssnitt. För ett system som Ladok är
det viktigt att använda allmänt använda tekniker som ligger i ”mittfåran”. Allmänt
använda tekniker gör också att uppdateringar/förbättringar kommer fram snabbt.
Detta ligger i linje med effektmålet ”Ladok3 ska byggas med teknik som bedöms ha
mycket lång återstående livslängd och som ger låga risker för inlåsning”.
Refaktoreringen skall utföras på ett iterativt sätt. Med detta menas att förändringen
av Ladok skall ske gradvis. Ladok skall alltid vara operativt, dvs. det får inte blir
frågan om ett ”big-bang” utvecklingssteg som lämnar Ladok ur funktion långa
perioder. Detta är centralt eftersom det är den kanske största fördelen med
refaktorering jämfört med ett nybygge. Riskerna med projektet kan hållas på en
lägre nivå
Behålla en databas per högskola. Att förändra dagens Ladok till att ha en gemensam
databas för alla högskolor skulle förmodligen vara mycket arbetsamt. Ett stort
problem skulle vara att migrera data från existerande lokala installationer till det
nya nationella systemet. Detta är förstås ett stort problem som även ett nybygge
skulle behöva hantera, men en av huvudpoängerna med en refaktorering är just att
minska riskerna genom att gå försiktigt fram och därför antas systemet även
fortsättningsvis vara lokalt för denna lösning. Dock är det realistiskt och
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 6 (35)
förmodligen en bra idé att kombinera dessa lokala databaser med en gemensam för
visst data. Detta diskuteras mer i detalj i kapitel Icke funktionella krav.
1.5
Öppna frågor
1.6
Referenser
Referens
1.
2.
3.
4.
5.
6.
7.
8.
Beteckning
Ladok3 Tjänstebaserad arkitektur, SOA_01.pdf
Övergripande kravspecifikation Process 8 v0.5.docx
Projektdirektiv Ladok3 – Lösningsdelprojekt
Ladok 3 Arkitektur
Förstudie Trafla förbättringar
Krav-dokument T-0001-C Icke funktionella krav
Förslag funktionalitet L3_Strategiska_frågor
PM Uppföljning av effektmål
1.6.1 Övrig referenslitteratur
Referens
I.
II.
1.7
Beteckning
Patterns of Enterprise Application Architecture, Martin Fowler. 9780321127426.
Domain-Driven Design: Tackling Complexity in the Heart of Software, Eric
Evans. 978-0321125217.
Förkortningar
Förkortning
DAO
DDD
VO
Beskrivning
Data Access Object
Domain Driven Design
Value Object, Värdeobjekt
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
2
Version 1.0
2011-12-02
Sida: 7 (35)
Sammanfattning
En refaktorering är möjlig av dagens Ladok för att möta de verksamhets- och
affärsmässiga krav som Ladok3 har, förutsatt att Ladok förblir en lokal installation. En
refaktorering är fördelaktig när det gäller att minska risken med projektet samt att på
enklaste möjliga sätt lösa problemet med att migrera data och kringliggande system. De
förändringar som föreslås för Ladok3 kan också göras inom ramen för dagens
förvaltning, vilket ger förutsättningar för en stabil övergång.
2.1
För- och nackdelar
Fördelar
•
•
•
•
•
Risken med att projektet skulle totalhaverera är i stort sett obefintlig eftersom
systemet skulle förändras gradvis och alltid vara operativt.
En refaktorering skulle kontinuerligt komma att leverera affärsnytta samtidigt
som tekniska förbättringar genomförs. Jämfört med en introduktion av ett helt
nytt system där affärsnyttan kan ta tid att få på plats, speciellt med tanke på att ett
så omfattande system som Ladok måste byggas upp från grunden innan nya
funktioner tas i drift.
Ladok har en existerande komplett kravbild som täcker in alla detaljer som är
nödvändiga för ett användbart system. Gissningsvis kräver ett nybyggnadsspår
åtskilliga timmar av kravarbete för att detaljera de framtagna kraven till det som
krävs för ett färdigt system.
En fördel av mindre slag som kan vara väldigt viktig för vissa högskolor är att de
LPW tjänster där högskolan implementerat egna användargränssnitt kommer att
kunna behållas.
Skillnaderna mellan dagens Ladok och Ladok3 är förhållandevis små ur ett
affärsmässigt perspektiv vilket gör en refaktorering till ett mindre åtagande
jämfört med att bygga ett helt nytt system.
Nackdelar
•
•
Tekniska förbättringar åsidosätts till förmån för funktionella förändringar, vilket
gör att man kanske aldrig når målet.
Ett nationellt system är svårt att uppnå via refaktorering.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
3
Version 1.0
2011-12-02
Sida: 8 (35)
Översikt av dagens Ladok
Syftet med detta dokument är inte att ge en detaljerad beskrivning hur dagens
Ladoksystem är uppbyggt. De flesta tänkta läsare är förmodligen redan insatta i Ladok,
om inte finns det ett flertal andra dokument som beskriver Ladok i detalj. För att skapa en
kontext för arbetet inleds dokumentet med en kort beskrivning av Ladoksystemets olika
delar.
Delarna i dagens Ladok visas i figuren nedan:
Figur 1: Översikt dagens Ladok
Systemdelarna i figuren beskrivs nedan.
3.1.1 Ladokdatabasen
Den mest centrala delen i Ladok. I princip samtliga produkter använder Ladokdatabasen.
3.1.2 Nouveau
Används som gränssnitt för experanvändare. Nouveau är implementerad i 4GL-språket
Uniface. Varje användare har en egen installation av Nouveau på sin arbetsstation.
Majoriteten av Ladoks funktionalitet, både avseende gränssnitt och affärslogik, ligger här.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 9 (35)
3.1.3 LPW
Ladok På Web exponerar delar av Ladoksystemet som SOAP tjänster. Främst används
LPW för att skapa studentjänster, men vissa tjänster finns även för lärare och
administratörer. Affärslogiken för LPW exekverar på en JBoss applikationsserver. SOAP
lagret exekverar i en Tomcat Servlet container och kommunicerar med
applikationsservern via Java RMI. Ladok levererar även färdiga användargränssnitt för
dessa tjänster, så kallade portlets som exekverar i en webbportal.
3.1.4 Java Batch
Syftet med batcharna är att utföra större jobb i Ladok som t ex import av urvalsresultat
från NyA och export av statistiskt underlag till SCB. Funktioner finns för registervård
och administrativa sysslor som personnummerbyte. Beställningarna sker i Nouveau
genom skrivande till databasen som sedan batchramverket läser och startar batchen. Vid
avslutad körning meddelas resultatet vanligtvis per e-post.
3.1.5 LadokPing
Dagens Ladok har en lokal installation för varje högskola. Ibland har man behov att
sammanställa information från flera högskolor. Syftet med LadokPing är just att fråga
efter information från flera högskolor och sammanställa den informationen. Förfrågan
hanteras först av LPW som i sin tur kommunicerar med LadokPing som via RMI hämtar
information från andra högskolor, dvs Ping-installationen på en viss högskola skickar
meddelanden till Ping-installationer på andra högskolor för att sammanställa information.
3.1.6 Ladok Connector
Syftet med Ladok Connector är att kunna skicka meddelanden till olika intressenter om
förändringar i Ladok. Data förs över från Ladokdatabasen till en Ladok Connector
databas med hjälp av databas-triggrar. Meddelanden skickas via JMS (Java Messaging
Service) till en JMS server. T ex kan man tänka sig ett passerkortssystem som lyssnar på
meddelanden om registrerade studenter. Det har förekommit diskussioner om att byta ut
det RDF-baserade meddelandeformatet mot något enklare. Enligt den SOA-baserade
modell som Ladok3 skall använda sig av finns det ett behov av denna funktionalitet.
3.1.7 Trafla
Trafla står för Transaktionsloggning för Ladok och används för att spåra förändringar i
Ladok. Genom loggning skall det vara möjligt att följa vilken information som tillförts
eller ändrats i databasen. Det ska vara möjligt att se när det gjorts, vem som gjort det och
vad ändringen består i. Loggdatat lagras i en separat databas som brukar benämnas
Trafladatabasen. Det finns en klientdel som läser från Ladokdatabasen och för över data
till en serverdel som lagrar informationen i en separat trafladatabas. En förstudie [5] har
genomförts för att öka användandet av Trafla. Följande förbättringar diskuterades i
förstudien:
•
Ett webbaserat användargränssnitt för att kunna söka i Trafla samt studera larmlistor.
•
Förbättrad sökfunktionalitet.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
Rapport
Version 1.0
2011-12-02
Sida: 10 (35)
Införande av en regelmotor som granskar informationen som läggs in. Ett exempel på en regel
skulle kunna vara att ett betyg ändras i efterhand. Prenumeranter skulle bli informerade via mail
om en regel uppfylls.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
4
Refaktorering
4.1
Målarkitektur
Rapport
Version 1.0
2011-12-02
Sida: 11 (35)
I Ladok så finns det stora mängder affärslogik skriven i 4GL språket Uniface.
Antagandet är, av redan nämnda skäl, att funktionalitet skriven i Uniface ska bytas ut mot
Javakod. Idag är mängden gemensam kod mellan Ladoks produkter begränsad. Det finns
arkitekturella anledningar till detta som dokumentet kommer att gå in på mer senare. Ett
krav som detta dokument ställer på ett framtida Ladok är att gemensam kod måste finns i
större omfattning än idag. Detta blir givetvis än mer viktigt när den stora mängden
affärslogik som finns i Uniface ska transformeras till Java. Att skapa en sådan arkitektur
från en befintlig är en utmaning.
Domän-driven design (DDD) är en metodik/arkitektur som effektivt undviker funktionell
duplicering. Detta beror på DDD lägger fokus på att funktionalitet skall implementeras i
domänentiteter. En domänentitet är ett begrepp som finns inom en domän, i
studiedokumentationsdomänen är kurs ett exempel. DDD förespråkar att använda en så
kallad domänmodell. Definitionen av vad en domänmodell är kan variera, men i detta
dokument avses följande:
Domänmodell: En objektorienterad modell som visar relationerna mellan
domänentiteteter. En domänentitet motsvarar ett begrepp som har en mening ur
verksamhetsperspektiv. Det primära syftet med en domänmodell är att visa det centrala
begreppen inom en domän och fungera som stöd för att kunna specificera vad systemet
gör.Ibland brukar en sådan modell benämnas informationmodell .
Normalt används begreppet domänmodell i detta dokument, men i samband med Ladok3
krav används oftast benämningen informationsmodell eftersom det begreppet används i
verksamhetsprojektet. Definitionen ovan innebär att rena implementationsklasser inte hör
hemma i domänmodellen. Av definitionen att döma har domänmodellen inget med
implementationen att göra, men ändå kommer dokumentet på många ställen prata om att
föra in en ett domänmodellstänk i koden, vad menas med detta? Jo, detta ska ses som att
klassmodellen i implementationen är baserad på en objektorienterad domänmodell. De
klasser som man hittar i domänmodellen hittar man normalt också i Javakoden, men
utöver detta finns dessutom ett större antal rena implementationsklasser (dvs utan
verksamhetsanknytning) som inte har någon relevans i domänmodellen. Mycket av det
som beskrivs i DDD är egentligen inget nytt, utan i enlighet med klassisk
objektorienterad analys och design, men det har fått en renässans genom DDD. De
klasser som finns i domänmodellen benämns domänentiteter.
Exempel på domänentiteter i studiedokumentationsdomänen är kurs, examen och student.
Tanken är att domänentiteter skall innehålla funktionalitet. Eftersom dessa entiteter är de
gemensamma begrepp som hanteras av funktionerna som finns i Ladok är det logiskt att
detta angreppssätt effektivt reducerar funktionell duplicering. Strategin med
refaktoreringen är att först beskriva en tänkt DDD inspirerad målarkitektur och sedan
kolla på hur Ladok kan förändras i den riktningen. Det är också viktigt att poängtera att
syftet har inte varit att använda sig av samtliga koncept som finns i DDD. Figuren nedan
visar denna målarkitektur:
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 12 (35)
Figur 1: Målarkitektur
Målarkitekturen beskrivs nedan.
DDD förespråkar normalt tre lager, målarkitekturen följder den uppdelningen. Dessa
lager beskrivs nedan.
4.1.1.1 Domain layer
Innehåller all domänrelaterad kod. Detta är det som anses vara hjärtat i systemet, vilket är
naturligtmed tanke på det är domänfunktionaliteteten som är orsaken till att ett system
byggs. Funktionaliteten i detta lager har störst värde och måste hanteras med högsta
prioritet. Vad som är domän och inte är upp till varje system att definiera. I Ladoks fall är
den centrala domänen studiedokumentation. Domänlagret använder infrastrukturlagret
som implementerar tekniska tjänster av mer domänneutral karaktär.
En central princip i DDD är att domänlagret ska isoleras från vissa typer av
infrastrukturberoenden. Det innebär att domänlagret skall välja infrastrukturberoenden
med omsorg.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
Rapport
Version 1.0
2011-12-02
Sida: 13 (35)
Ett genomgående tema i utvecklingen av affärssystem är att domänfunktionalitetetn
normalt är mer långlivad än de olika ramverk som är populära för tillfället. Lyckas man
minimera beroenden mot ramverk i domänlagret underlättar det förstås mycket om man
vill byta ramverk. En annat positiv konsekvens är att domänlagret blir renare och därför
enklare beroende på att funktioner som dessa ramverk normalt hanterar, t ex transaktioner
och säkerhet, inte kommer att hanteras i domänlagret. En strävan är att domänlagret bara
ska innehålla så kallade POJOs (Plain Old Java Objects).
4.1.1.2 Infrastructure layer
I ett system finns det en hel del funktionalitet som kan betraktas som stödfunktionalitet
till övrig kod. Det är funktionalitet som har ingen eller svag koppling till någon domän.
Den typen av koden vill man inte ha i domänlagret. Den stora mängen sådan
funktionalitet ligger normalt i system och tredjepartsbibliotek, dock brukar det i stora
system med tiden bli en del egenproducerad kod också. Exempel på funktionalitet:
• Loggning
• Autentisering
• Cache-mekanismer
Ofta är det frågan om ”wrappers” mot tredjepartsbibliotek, t ex man kanske använder ett
extern loggbibliotek men skriver en tunn wrapper som hakar på strängen ”Ladok” på alla
loggutskrifter. Typiskt för funktionaliteteten i detta lager är att det inte krävs någon
domänkunskap för att kunna implementera den.
4.1.1.3 Application layer
Som tidigare nämnts är en central princip i DDD att isolera domänlagret från uppgifter
som inte har med domänen att göra. Kompletta användningsfall består normalt av
domänfunktionalitet plus en del annat som inte har något med domänen att göra.
Applikationslagret har till uppgift att ”sy ihop” färdiga användningsfall och ta hand om
funktionalitet som domänlagret inte bör ha. Exempel på funktionalitet som bär ligga i
applikationslagret är:
• Definiera och exportera SOAP eller REST gränssnitt. Dessa kräver mer
grovkorniga gränssnitt och är något domänlagret inte skall hantera.
• Autenticering. Koordineras av applikationslagret som normalt använder någon
funktion i infrastrukturlagret för själva autenticeringen.
• Transaktionshantering. Koordineras av applikationslagret. Använder dock
normalt funktionalitet i infrastrukturlagret för lågnivå aspekter av
transaktionshanteringen (tänk att applikationslagret bestämmer när en transaktion
skall skapas och committas men att den anropar någon modul i infrastrukturlagret
för att göra detta).
4.1.1.4 Persistance layer
Databasåtkomst skall döljas bakom ett databasinterface. Detta kallas DAO, Database
Access Object. Majoriteten dessa definieras i domänlagret, men det finns inget principellt
som hindrar att även infrastruktur och applikationslagret har behov av persistens.
Implementationen av DAO interface vill man ha tydligt separerade. Detta beroende på
att:
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 14 (35)
•
Samlar all SQL-relaterad kod på ett ställe. Förenklar om t ex DBA vill gå igenom
alla SQL-satser.
•
Förenklar om man vill skapa nya implementationer av DAO interfacen. Om man
t ex vill gå från en ren JDBC implementation till iBATIS är det bara att skapa ett
nytt persistenslager.
DAO interfacen ligger sålunda i det lager som har behovet medan implementationen av
DAO interfacen skall ligga i persistenslagret.
4.1.2 Jämförelse av dagens Ladok mot målarkitektur
Syftet med detta kapitel är en diskussion om hur dagens Ladok ser ut jämfört med den
målarkitektur som målats upp. Den diskussionen är nödvändig för att senare i dokumentet
kunna komma fram till en väg framåt.
Ladok består av ett antal produkter. Den gemensamma koden mellan dessa är begränsad.
Någon egentlig domänmodell existerar varken i krav eller i utvecklingsledet.
Ladokprodukterna är generellt implementerad enligt det design mönster som brukar
benämnas transaktionsskript (se transaction script i [I]). Det mönstret är också det som
historiskt huvudsakligen använts i stora affärssystem innan DDD slog igenom på bred
front. Först en kort beskrivning av vad transaktionsskriptmönstret innebär.
Figur 2: Transaktionsskriptarkitektur
Figuren visar ett antal funktioner vars gemensamma funktionalitet består i huvudsak av
DAO-klasser och tillhörande värdeobjekt (VO) som mappar mot de tabeller som finns i
databasen. Värdeobjekten kan t ex vara ett KursVO och saknar funktionalitet förutom
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
Rapport
Version 1.0
2011-12-02
Sida: 15 (35)
getters/setters av datat. Bilden ovan visar en extrem transaction script arkitektur. Tittar
man på Ladok Java produkterna så följs det mönstret i huvudsak, men det finns mer kod
än bara DAOs/VOs som är gemensam mellan funktioner inom framförallt en produkt.
Majoriteten av den gemensamma koden (borsett från DAOs/VOs) kan anses tillhöra
infrastrukturlagret i målarkitekturen. När det gäller generell domänrelaterad funktionalitet
som skulle tillhöra domain/common i referensarkitekturen så är det relativt begränsat.
Detta gäller inom en produkt men ännu mer mellan produkter. Det finns dock en del
funktionalitet relaterad till studieavgifter som delas mellan LPW och JavaBatch. Det
intressanta med detta är kanske inte den ganska begränsade mängd funktionalitet som
delas, utan snarare att infrastrukturen när det gäller CM och metodik för att kunna hantera
gemensam kod redan är på plats. Den gemensamma ytan är också uppdelad i ett
infrastruktur- och domänlager enligt den målarkitektur som tidigare beskrivits. Denna
gemensamma yta skulle vara platsen där en eventuell framtida domänmodell skulle ligga.
Det ska också sägas att den transaktionsskriptarkitektur som finns i Ladok är generellt
gjort på ett konsekvent sätt, så när det gäller hantverket uppfylls förväntningarna.
I en domänmodellsarkitektur har VOarna bytts ut mot en fullödig objektorienterad modell
med domänentiteter som har både relationer till andra objekt samt funktionalitet.
När det gäller domänmodell kontra transaktionsskript blir det lätt så att man får intrycket
att domänmodell löser alla problem. En domänmodell har högre potential, men den är
också en mer komplicerad arkitektur än transaktionsskript. Den stora fördelen med en
domänmodellsarkitektur är som tidigare beskrivits att förutsättningarna för att minimera
funktionell duplicering kraftigt förbättras. Dock ska man medveten om att det finns fällor
med en domänmodellsarkitektur. En sak som lätt kan hända är att man lägger
funktionalitet i entiteter som inte hör hemma där. Med en sådan utveckling kan man lätt
skapa en oreda som blir något mycket sämre än som någonsin skulle kunna skapas med
en transaktionsskriptarkitektur. Ett annat problem med domänmodeller som är viktigt att
känna till är det antimönster som brukar benämnas anemic domain model (”blodfattig”
domänmodell). Där baserar man sin design på en domänmodell och tittar man i koden så
finns domänentiteter och även relationer mellan dessa. Tittar man på koden i
domänentiteterna så hittar man dock ingen annan funktionalitet förutom getters/setters för
data den har. Med en sådan arkitektur har inte mycket förbättrats jämfört med en
transaktionskriptarkitektur, grundproblemet med funktionell duplicering finns kvar. Det
kan vara värt att notera att medan anemic domain model normalt benämns vara ett
antimönster, så är inte fallet detta med transaktionsskript som mera betraktas som ett lite
gammalt arkitekturmönster med vissa brister.
Ett medvetet arbete bör göras för att förändra Ladok mot en domänmodellsarkitektur.
Detta mönster har högre potential jämfört med transaktionsskript, men ställer också högre
krav.
Om man tittar på de klasser som ligger i VO paketet i figuren ovan så mappar de klasser
som finns där ganska väl (KursVO, ExamenVO etc.) mot de domänentiteteter som skulle
finnas i en domänmodell. Det går inte att endast tillföra funktionalitet till dessa för att
skapa en domänmodell. En central aspekt av en objektorienterad modell är relationerna
mellan objekt. Tittar man på värdeobjekten så hanterar de relationer enligt den princip
som en relationsdatamodell gör, nämligen en relation från ett värdeobjekt till ett annat
hanteras via en nyckel. I en klassdesign baserad på en domänmodell hanteras en relation
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 16 (35)
genom att medlemsvariabel har en referens till det refererade objektet. Det hela hade varit
enkelt om hela objektgrafen kunde hållas i minnet, men det är förstås helt orealistiskt.
Delar av objektgrafen måste läsas upp i minnet från databasen. Detta är en problematik
som ägnas mycket uppmärksamhet i DDD. Kortfattat kan sägas att lösningen går ut på att
att dela upp objektgrafen i så kallade ”units of work”, Det innebär att man identifierar ett
antal objekt som anses höra ihop och därför läses upp respektive sparas ned till databasen
som en enhet. Hanteringen av detta förenklas mycket genom användandet av ett OR
ramverk som Hibernate.
Ladok består av ett antal produkter som kan ses som grupperingar som byggs ihop till
något som deployas. Hur kommer då dessa produkter relateras till målarkitekturen?
Bilden nedan visar hur det är tänkt.
Figure 3: Målarkitektur och produkter
Den övre delen av bilden visar tre Ladokprodukter. Dessa är tre olika system. I denna bild
följer de DDD arkitekturen även internt. Detta kan ses som ett långsiktigt mål. Det
centrala i bilden är dock Java Common, som är den systemdel vilken innehåller
gemensam kod. Den har inget applikations eller presentationslager (observera att
generella UI komponenter hör till infrastrukturlagret) eftersom inga fullständiga
produkter/applikationer implementeras där. I Java Common finns ett domänlager och
infrastrukturlager som används av de olika produkterna. Det finns även ett persistenslager
som implementerar Java Commons DAO gränssnitt, men de används inte direkt av
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 17 (35)
produkterna. Just kvaliteten och omfattningen på Java Commons domänlager är helt
avgörande för att arkitekturen skall bli bra. Där kommer huvuddelen av domänmodellen
att befinnasig.
4.2
Modularisering
Den lagrade arkitektur som förslagits i dokumentet behöver kompletteras med ett
modultänk inom respektive lager. Syftet är att gruppera likartad funktionalitet och skapa
tydliga gränssnitt mellan modulerna. Principen gäller för alla lager men är allra viktigaste
för det gemensamma domänlagret. Detta illustreras nedan:
Figure 4: Modularisering
En modul innehåller klasser inom ett område, examenshantering skulle kunna vara ett
exempel på en modul. En modul i domänlagret kan typiskt innehålla ett antal
domänentitetsklasser plus några domänservicar inom området. Bilden visar också hur
databasen modulariserats. Det sistnämnda är förmodligen väldigt viktigt när det gäller
refaktoreringen av databasen. Tittar man lite mer noggrant på databasen så är det ganska
enkelt att hitta olika grupperingar, men detta finns inte beskrivet i dokumentform. Det
rimliga är att en kodmodul i det gemensamma domänlagret mappar mot en del av
databasen, nämligen en databasmodul. Det innebär att den förvaltargrupp
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 18 (35)
(verksamhetsexperter och utvecklare) som är ansvarig för examensmodulen också har ett
ansvar för hur motsvarande modul i databasen ser ut. Detta är ett annorlunda tänk jämfört
med idag där det finns en DBA som kan ses som ansvarig för hela databasmodellen.
DBA kommer givetvis även fortsättningsvis ha en viktig roll, men modelleringsfrågor
måste på ett annat sätt än idag vara ett gemensamt ansvar mellan verksamhetsexperter,
utvecklare och DBA. Det är väldigt centralt för att generell funktionalitet knuten till en
entitet överhuvudtaget ska upptäckas.
Tittar man på databasen idag ser man ganska enkelt olika grupperingar som skulle kunna
ses som en modul. Detta kan förstås göras på olika sätt, men ett sätt visas nedan. Detta
ska bara dock ses som ett exempel för att ge en känsla hur det skulle kunna se ut. Detta
måste också synkroniseras med de objektgrupper som verksamhetsprojektet tagit fram i
informationsmodellen.
Figur 5: Modulindelning
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
4.3
Rapport
Version 1.0
2011-12-02
Sida: 19 (35)
Metodik
När man pratar om en domänmodell och dagens Ladok är det nödvändigt att titta lite
närmare på den metodik som används idag. Detta påverkar i högsta grad hur arbetet med
en domänmodell skulle fungera. Det normala sättet en kravspecifikation för Ladok skrivs
på är att basera kraven i stor omfattning på relationsdatamodellen (dvs Ladokdatabasen).
Kraven är ofta detaljerade där kravspecifikatören anger tabeller och kolumner. En styrka
med medoden är att kravspecifikatörer utan insyn i koden kan specificera krav som sedan
utvecklare med mindre verksamhetskunskap utan problem kan implementera. Det finns
en stor kraft i att ha en modell som kravspecifikatörer, utvecklare och testare gemensamt
kan förstå.
Den modellen kan antingen vara en relationsdatamodell eller en objekorienterad
domänmodell. Skillnader mellan en relationsdatamodell och en objektorienterad modell
är ett klassiskt problem i mjukvaruutveckling vilket alla resurser som lagts ned i
begreppet ORM, object relational mapping, vittnar om. Att utförligt beskriva skillnader
mellan modellerna är utanför detta dokument, men ett exempel är t ex att
relationsdatamodellen inte har någon arvsrelation. Skillnaden hur associationer hanteras
har redan berörts.
Bygger man ett nytt system där man vill jobba med en domänmodell är det rimligen en
självklarhet att den primära modellen är just domänmodellen. Domänmodellen skulle då
vara den rådande i alla led (krav, utveckling och test). Den skulle givetvis i slutändan att
mappas till en relationsdatamodell, men det är mer något av en nödvändig biprodukt (ofta
genom att använda ett ORM ramverk som t ex Hibernate). När det gäller
refaktoreringsspåret är hanteringen inte lika självklar och en nyckelfråga. Det finns några
olika varianter.
1. Fortsätt att låta SQL modellen vara en allmänt rådande när det gäller krav och test.
Ett aktivt arbete för att bygga upp en domänmodell i utvecklarledet skulle införas för
att få entiteter att lägga funktionalitet i. Denna domänmodell skulle då byggas från
SQL modellen. Så det blir lite omvänt mot det arbetssätt som man egentligen skulle
vilja, men det får man leva med i när det gäller refaktorering. Det är dock inte frågan
om att skapa en fullständig domänmodell, utan en analys en dagens funktionalitet
skulle göras för att identifiera områden där det finns en omfattande funktionell
duplicering.
2. Skapa en fullständig domänmodell utifrån den existerande SQL modellen som sedan
kravsamordnare och kravspecifikatörer måste använda. Liknar alternativ 1 i den
meningen att en domänmodell skapas utifrån en existerande SQL modell. Kravet på
direkt skapa en fullständig domänmodell blir dock mycket större om det är tänkt att
krav/test också ska kommunicera via den modellen. Efter att ha skapat
domänmodellen skulle man då ha en domänmodell tom på funktionalitet (anemic
domain model), men tanken är att den med tiden skulle fyllas på med funktionaliet.
Det är dock svårt att se att detta skulle vara en bra väg. Först och främst skulle man
behöva lägga en massa tid på att skapa en fullständig domänmodell som efter den
skapats fortfarande inte skulle innehålla någon funktionalitet. Sedan skulle
övergången från relationsdatamodell till domänmodell skapa ett paradigmskifte i
kravledet. Vid ett nybygge är det ett paradigmskifte som skulle kännas rimligt men
det känns fel om refaktoreringsspåret väljs.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 20 (35)
Antagandet är att alternativ 1 väljs. I ett längre perspektiv kan detta säkert ändras.
4.4
SOA och kärnladok
Effektmålen [8] fokuserar mycket på tjänsteorienterad arkitektur. Detta avhandlas i detta
kapitel.
SOA (Service Oriented Architecture, tjänsteorienterad arkitektur) är en högnivå
arkitektur som definierar hur olika system kommunicerar med varandra. Rapporten [1]
ger en bra allmän beskrivning om SOA och Ladok. SOA definierar standardiserade
kommunikationsmekanismer som möjliggör kommunikation mellan olika system.
Definitionen vad SOA egentligen innebär varierar, men ofta lyfts just det här med lös
koppling fram och att användandet av web services som REST eller SOAP endast skall
ses som ett sätt att implementera SOA. När begreppet SOA används i detta dokument
avses dock att komponenter kommunicerar via REST/SOAP över HTTP. Ofta nämns
som sagt lös koppling (loose coupling) som argument för SOA. Definitionen av lös
koppling kan också variera, men ofta beskrivs det som att separera gränssnitt från
implementation. Detta är dock en central ide också med objektorienterad programmering,
så vad är då fördelarna med komponenter kommunicerar via REST/SOAP jämfört med
vanliga Java gränssnitt? För att svara på detta så måste man titta på ett mer konkret
exempel. Anta att vi har två mjukvarukomponenter enligt bilden nedan.
Figure 6: Kommunikation mellan två mjukvarukomponenter
Kommunikationen mellan dessa kan ske på ett antal olika sätt.
1.
Lokala anrop. Detta kräver att bägge komponenterna är implementerade i samma språk och att
de är driftsatta på samma server. Fördelarna är enkelhet i programmeringen och prestanda.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 21 (35)
2.
Fjärranrop via Java RMI. Kräver att komponenterna är implementerade i Java, skillnaden mot
1) är dock att komponenterna kan driftsättas på olika servrar.
3.
Fjärranrop via REST/SOAP. Hanterar flexibel driftsättning som för 2), men klarar dessutom
att komponenterna implementerats i olika språk. Nackdelen mot 2) är mer komplicerad
programmering och sämre prestanda (det finns ett exempel för LPW där gränssnittet för
uppföljningstjänsterna har ändrats från SOAP till RMI av prestandaskäl).
Oavsett vilket alternativ man väljer så kan modulariseringen mellan komponenterna vara
bra eller dålig, detta beror mer på den allmänna komponentdesignen. Ett sätt att hamna i
problem är att schablonmässigt alltid välja alternativ 3 ovan. Tittar man på t ex
LadokPing så används SOAP mellan presentationslagret och affärslogiken. Där vill man
förstås kunna driftsätta dessa på olika servrar, däremot har det aldrig funnits något behov
att implementera lagren i olika språk. Med tanke på att bägge lagren är implementerade i
Java hade förmodligen RMI varit ett bättre val. Den dag man sedan får behov av olika
programmeringsspråk är det inget större jobb att skapa en SOAP servicefasad. När det
gäller SOA och målarkitekturen så ligger exponerandet av REST/SOAP i
applikationslagret. Det innebär att domänlagret inte har något att göra med
kommunikationsmekanismer.
Det är rimligt att se framtida Ladok bestående av en kärna med funktionalitet som
levereras ut till driftcentralerna. Därutöver kan det finnas annan funktionalitet som ligger
utanför kärnan. Denna typ av funktionalitet kan t.ex. vara:
•
Högskolespecifik funktionalitet.
•
Funktionalitet som har mycket svaga kopplingar mot studiedokumentation men
ändå behöver information från Ladok, t ex ett passerkortsystem.
Ladok kan därför behöva exponera gränssnitt som andra system kan använda. När det
gäller funktionalitet som ligger utanför kärnan är det mycket troligt att dessa inte har
synkade leveranser med kärnan och dessutom är det svårt att veta vilket programspråk
som används. Därför är det motiverat att exponera sådana gränssnitt via SOA, dvs. som
REST eller SOAP. Däremot kan RMI ibland vara ett bra alternativ för kommunikation
mellan presentationslager och affärslogik i de fall där vi har kontroll över bägge lagren.
Nyckeln är att kommunikationsmekanismer måste avgöras från fall till fall, det finns
ingen schablonlösning. När det gäller kommunikation mot externa system som till
exempel NyA och CSN måste det finnas en långsiktig strävan att använda sig av web
service baserade protokoll istället för de filöverföringar som görs idag.
4.5
Framtiden för Ladoks produkter
Begreppet produkt är egentligen ganska vagt, men det används normalt för att beteckna
en mängd kod som byggs ihop. Uppdelningen har varit viktig eftersom den gemensamma
koden mellan produkterna varit liten. Men den nya målarkitekturen som fokuserar på
gemensam kod mellan dessa är inte uppdelningen inte längre lika central. Nedan följer en
lista på dagens produkter och huruvida de initialt kommer att finnas kvar eller inte.
•
Nouveau: Ersätts med Javabaserade webbtjänster.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
•
•
•
•
•
4.6
Version 1.0
2011-12-02
Sida: 22 (35)
JavaBatch: Finns kvar.
Kommentar: dock bör protokoll mot externa system (idag t ex CSN och SCB) i
framtiden styras mot att de läser information från Ladok via tjänstebaserade
protokoll istället för de filöverföringar som görs idag. Utformandet av dessa
protokoll ligger dock inte helt inom Ladoks kontroll.
LPW: Finns kvar.
LadokPing: Finns kvar.
Kommentar: kan eventuellt förenklas om alla databaser ligger hos samma
driftcentral inom samma “kluster”.
Ladok Connector: finns kvar, kommer dock förmodligen att förenklas.
Trafla: Finns kvar.
Refaktorering av databas
En central del av dagens Ladok är databasen. Den har varit i produktion sedan 80-talet
och vissa tekniska förbättringar kan göras. Dessa beskrivs nedan:
4.6.1 Dela upp databasen i flera databaser
Dagens Ladokdatabas består av 337 tabeller. Tittar man lite noggrannare på tabellerna så
består dessa av olika grupper:
1. Generella domänrelaterade tabeller, dvs. relaterade till studiedokumentation.
2. Produktspecifika tabeller. Det finns tabeller som är specifika för t ex LPW, Ping och
Javabatch.
3. Tekniska tabeller som inte är relaterade till studiedokumentation. Ett exempel är
ANV… tabeller som innehåller information om användare av systemet.
Det vore rimligt att separera dessa i olika databaser. Det primära syftet skulle vara att få
1) ovan mer överblickbar, dvs. att ha en databas som renodlat bara har domänrelaterade
tabeller.
4.6.2 Modularisering
Modularisering av både mjukvara och databas har redan berörts. Att ha en tydligt
dokumenterad modularisering är mycket viktig för förståelsen. En analys av dagens
databas visar på olika moduler, men de är dock inte dokumenterade på något bra sätt.
Detta är ett område där man med ganska små medel skulle kunna underlätta förståelsen
av databasen.
Kapitlet Modularisering berör också hur ansvaret över databasen skulle förändras.
4.6.3 Normalisering
Enligt dokumentationen skall databasen vara normaliserad till 3:e normalformen (3NF).
Det förekommer dock idag konstruktioner i databasen som gör att detta inte uppfylls.
Titta till exempel på tabellen LANTKURS som har kolumnerna villkor, villkor1 och
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
Rapport
Version 1.0
2011-12-02
Sida: 23 (35)
villkor2. Denna konstruktion fungerar inte om man behöver 4 villkor och detta problem
har faktiskt redan uppstått. Konstruktionen ovan uppfyller inte 1NF definitionen.
Normaliseringen av databasen bör ses igenom och åtgärdas.
4.6.4 Restriktioner (constraints)
Restriktioner är en mekanism som möjliggör att på databasnivå definiera regler för hur
datat lagras. Ett exempel är att en registrering endast kan skapas om den angivna kursen
redan finns. Dagens databas utnyttjar inte denna möjlighet fullt ut, utan det är helt upp till
mjukvaran att se till att data läggs in på ett korrekt sätt. I de fall där data skrivs in direkt
via SQL av användare är risken förstås ännu större att korrupt data läggs in. Idag finns det
en hel del kod som utför valideringar av data som inte skulle behövas om databasen redan
gjort detta. Det vore därför klokt att föra in fler restriktioner i databasen.
4.6.5 Specificerade typer
Det finns många exempel på typer i databasen som skulle kunna vara mer specificerade.
Det kan t ex, använda sig av typen DATE istället för STRING för datum eller att använda
BOOL istället för en sträng med J/N värden. Detta skulle minska risken för korrupt data,
förbättrad prestanda samt minskat användande av lagringsutrymme.
4.6.6 Blank underscore
Idag används något som kallas blank underscore i databasen. Detta beroende på att värdet
” _” används för att representera tomma värden. Denna lite udda konstruktion infördes en
gång i tiden beroende på att Uniface inte kunde hantera tomma nycklar.
4.6.7 Namngivning
Idag lämnar namngivning på tabeller och kolumner en del övrigt att önska beroende på en
gammal COBOL relaterad begränsning av namnlängd. COBOL finns inte kvar i systemet
och det vore rimligt att använda sig mer informativa namn, t ex
EXAMENSBENÄMNING istället för EXAMBEN.
4.6.8 Summering
Vid en första anblick så framstår Ladokdatabasen med sina 337 tabeller som komplex att
överblicka. Tittar man dock lite närmare så inser man att det är ganska lätt att identifiera
olika grupper av tabeller som skulle kunna betraktas som moduler. Genom att tydliggöra
en sådan modularisering och kombinera ansvar för en databasmodul tillsammans med
tillhörande kod skulle ansvaret för databasen inte längre ligga helt på DBA. Med ett
sådant arbetssätt skulle man förmodligen ganska snabbt och med relativt små medel
kunna städa upp databasen och införa de förbättringar som beskrivits i detta kapitel.
Verktyg finns för att löpande införa databasförändringar i befintliga Ladok.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
5
Version 1.0
2011-12-02
Sida: 24 (35)
Ladok3 krav
Detta kapitel går igenom hur kraven på Ladok3 relaterar till dagens Ladok.
5.1
Funktionella krav
Med funktionella krav avses verksamhetsrelaterade krav. Dessa specificeras i huvudsak
genom:
1. En informationsmodell. Ur detta dokuments perspektiv är detta samma sak som en
domänmodell. Notationen som valts är en notation framtagen av företaget IRM. När
det gäller informationsmodellering kan man grovt använda sig av ER (Entity
Relationsship) notation eller UML. ER notationen har sin bakgrund i
databasmodellering medan UML har sina rötter i mjukvarumodellering. IRM har som
sagt sin egen notation, den har dock mer likheter med ER än UML. I praktiken
behöver detta inte spela så stor roll, även IRM notationen stödjer till exempel
arvsrelationen.
2. Processdokument som med text beskriver systemets funktionalitet. De använder de
begrepp som informationsmodellen specificerat för att kunna beskriva
funktionaliteten på ett tydligt sätt.
Informationsmodell och processer diskuteras nedan.
5.1.1 Informationsmodell
När man studerar dagens Ladok och jämför med kraven är det viktigaste att studera hur
den nya informationsmodellen ser ut jämfört med dagens. Dagens Ladok har inte
informationsmodellen explicit beskriven i ett dokument utan man får jämföra med
databasmodellen. Informationsmodellen definierar ett systems begrepp och hur de
relaterar till varandra. Om den nya informationsmodellen är inkompatibel med dagens
Ladok innebär det att refaktoreringsalternativet kan bli alltför omfattande att genomföra.
Detta är mer centralt än att det finns processer som inte stämmer helt överens med dagens
Ladok.
Först några allmänna reflektioner:
•
Detaljnivån är i skrivande stund ganska låg i Ladok3s informationsmodell och kommer
förmodligen att detaljeras ytterligare när man börjar väva in mer funktionalitet. Det
existerande Ladoks informationsmodell är en fullständig modell med stöd för alla
specialfall, detta innebär att Ladoks informationsmodell är mer omfattande när det
gäller detaljer.
•
Ladok3s informationmodell spänner över stora områden, t ex antagning som hanteras
av NyA samt vissa områden som inte behöver systemstöd. Fokus när Ladok3 och
Ladok jämförts har varit de delar av informationsmodellen som behövs för de
prioriterade processerna som listas senare i kapitlet.
•
Ladok3s informationsmodell är inte en datamodell. Mellan dessa har man en mappning
som måste göras. En entitet i informationsmodellen kan till exempel brytas ned i flera
entiteter i datamodellen. Sen kan man också välja om en entitet i informationsmodellen
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 25 (35)
blir en kolumn eller en egen tabell.
De två ovanstående punkterna gör att jämförelsen måste göras på ganska hög nivå. Man får
se mer på om olika områden finns i modellerna. Slutsatsen blir att modellerna är
förhållandevis lika. Mycket av informationen är detsamma. Ett antal lite större skillnader är:
•
Vissa entiteter, som t ex Kurs, är knutna till en lärosätesentitet. Detta behövs för att
kunna hantera en gemensam databas. Detta finns inte i Ladok och eftersom
grundansatsen är att refaktoreringsspåret inte ska stödja en gemensam databas är det
inget att ta hänsyn till. Det skall också poängteras att det inte skulle vara en stor
förändring av Ladok rent schemamässigt att införa detta. Anledningen till att lokala
databaser behålls för refaktoreringsspåret beror mer på att komplexiteten att migrera
många existerande databaser till en.
•
Individuell studieplan finns inte i Ladok. Ett antal nya tabeller skulle behövas för detta.
•
En kurs består av moduler som i sin tur består av komponenter i Ladok3. Så är inte
fallet i Ladok där modul och komponentbegreppet saknas.
•
I Ladok3 modellen är en registrering knuten till ett utbildningstillfälle, så är inte fallet i
dagens Ladok där en registrering är knuten till en kurs.
•
Ett av målen med Ladok3 är en enhetlig hantering av olika utbildningsnivåer, detta är
inte riktigt fallet idag.
Dessa är de lite större förändringarna, givetvis finns det även andra förändringar av lite
mindre art som tas upp när processerna diskuteras nedan.
5.1.2 Processer
När det gäller processerna så finns det ett kapitel i processbeskrivningarna som beskriver
skillnaderna mot dagens system. Den totala mängden processer är omfattande, men [7]
innehåller en prioritering av processerna och indikationer på om de ska in som
systemstöd i Ladok 3. Nedan diskuteras de prioriterade processerna. Kapitlet i
processerna som beskriver skillnader mot dagens system har klippts in. Kommentar om
dessa ändringar samt estimat är inlagd under varje förändring. Estimatet måste förstås
anses som mycket grovt i detta läge. Skalan låg, medel och hög har använts. Ett
efterföljande + eller – har använts för att kunna ge lite ytterligare information om arbetets
omfattning.
Huvudprocess 8: Hantera studiedeltagande
Förändringar gentemot dagens system (texten inklippt från processerna i kursiv stil):
All registrering föregås av att det finns en antagning/motsvarande till aktuellt
utbildningstillfälle.
Kommentar: Är detta påstående korrekt, syftar man kanske på lokal efterantagning? Vad
händer med lokal efterantagning (SA02, S03)?
Estimat: oklart.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 26 (35)
All registrering skall i princip ske som självregistrering genom webblösningar, i vissa fall
efter kontakt med administratör. Självbetjäning även vid anmälan av avbrott och
studieuppehåll samt grupplacering.
Kommentar: Uppdaterade/nya LPW tjänster krävs för att kunna hantera anmälan av
avbrott och studieuppehåll. Inga förändringar av datamodell nödvändig.
Estimat: medel.
Ansökan om byte av program eller ämne på forskarnivå – självbetjäning.
Kommentar: Ny LPW tjänst.
Estimat: medel.
Enhetlig hantering i största möjliga mån av studenter på alla nivåer.
Kommentar: Lite större förändring som påverkar datamodellen. Till exempel finns idag
flera tabeller som hanterar registreringar. Viktig aspekt av refaktoreringen att se över
detta.
Estimat: medel+.
Individuell studieplan kan upprättas även för studenter inom grund- och avancerad
utbildning, såväl för programstudenter som för studenter på fristående kurser, i det förra
fallet med matchning mot utbildningsplan och i det senare fallet med matchning mot
examenskraven.
Systemstöd för hantering av individuella studieplaner. Uppgifter i individuella
studieplaner utgör underlag för registrering av doktorander.
Kommentar: Stöd för individuell studieplan finns inte alls i dagens Ladok. Kräver
förändringar i datamodell och kod.
Estimat: hög.
Större möjlighet att dokumentera individuella avvikelser såsom byte av kurstillfälle
(kurstakt, undervisningsform, kursort) samtidigt som historiken bevaras.
Kommentar: En utökning av dagens informationsmodell krävs för att kunna lagra
historik.
Estimat: låg.
Bättre kontroll översikt av var inom programmet en student befinner sig efter ett
studieuppehåll eller utlandsstudier. Studieuppehåll även på forskarnivå dokumenteras.
Kommentar: Logghistorik skulle kunna läggas till.
Estimat: medel.
Termin ersätts eller kompletteras i indatasammanhang med (studie)period.
Kommentar: Idag används terminbegreppet på många ställen i databasen där det skulle
vara bättre att kunna använda en mer detaljerad angivelse som period. T ex skulle man
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 27 (35)
kunna tänka sig att det skulle finnas 10 perioder på ett år. Skulle påverka datamodellen på
en rad ställen.
Estimat: hög.
Skilja mellan faktiska förändringar i en students studier och organisatoriska eller andra
”tekniska” förändringar, t.ex. i fråga om byte av ämne på forskarnivå.”Avbrott” skall
bara avse faktiska avbrott. Tidigt avbrott skall ev. betraktas som återbud. Orsakstyp för
avbrott dokumenteras och kan därmed följas upp.
Kommentar: Mindre förändringar. Relaterat till att dokumentera avvikelser.
Estimat: låg.
Olika typer av omregistrering införs, bl. a. för deltagande i undervisning, för självstudier
m.m. Studenten kan själv avgöra poängomfattning och tidsperiod för omregistrering men
bara för ej avklarad del av kurs. Omregistrering på annan studietakt och -form samt
annan ort (campus) blir möjlig.
Kommentar: Idag finns bara en typ av omregistrering.
Estimat: medel.
Bättre historik ger en mer korrekt bild av studentens utbildningsväg, t.ex. skall man
kunna se om en nyantagning avser byte från annan utbildning.
Kommentar: Relaterat till bättre kontroll på avbrottsorsaker. Man skulle t ex kunna tänka
sig att denna orsak skulle behöva sättas vid nyregistrering om existerande registrering
redan finns. Den enda som vet om det verkligen är ett byte är studenten (det kan också
vara frågan om parallelläsning).
Estimat: medel.
Markörer (”flaggor”) för studentens påbörjade terminer/kurser inom programmet/ämnet
införs. En enkel räknare ersätter begreppet kull/programtermin.
Kommentar: Mindre ändring.
Estimat: låg.
En räknare för varje påbörjad termin eller kurs samt en räknare för uppnådda poäng
inom programmet/ämnet på forskarnivå (delat med 30 hp).
Kommentar: Mindre ändring.
Estimat: låg.
Möjligt att ha en gemensam räknare för flera program/ämnen om så önskas.
Kommentar: Mindre ändring.
Estimat: låg
Antagning till senare del av program hanteras i NyA.
Kommentar: Helt OK bara någon gör ”jobbet”.
Estimat: låg
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Version 1.0
Rapport
Björn Edlund, Mikael Berglund
2011-12-02
Sida: 28 (35)
Huvudprocess 10: Betygssätta och offentliggöra resultat
Förändringar gentemot dagens system (texten inklippt från processerna i kursiv stil):
Komponentnivå ska kunna visas på underlag för grundnivå/avancerad nivå.
Kommentar: Idag har vi prov, praktik och labbar som delmoment. Att införa generell
hantering av komponenter skulle innebära en del jobb. Påverkar både datamodell och
kod.
Estimat: hög.
Gemensam hantering oavsett nivå men olika slags underlag för forskarnivå jämfört med
övriga nivåer.
Kommentar: Ett lite större arbete för att få dagens Ladok att uppfylla detta.
Estimat: hög.
Lärare ska själv kunna skapa underlagen.
Kommentar: Realiseras genom nya/förändrade LPW tjänster.
Estimat: medel.
Den individuella studieplanen kan utgöra ett underlag vid rapportering av kurser på
forskarnivå.
Kommentar: Individuell studieplan existerar inte i dagens Ladok.
Estimat: hög.
All hantering sker digitalt:
All ansökan om tillgodoräknande sker elektroniskt. Inskanning av det åberopade
underlaget. Meddelande om ansökan kommer elektroniskt.
Kommentar: Om juridiskt möjligt. Tjänst där student får skicka in inskannade dokument
så administratör slipper detta. Inga större problem att realisera även om det är en
omfattande förändring.
Estimat: medel.
Ärendehantering med signering och kontrasignering används. Meddelande skickas om
inte ärende bearbetats. Automatisk påminnelse ”nästa instans” om ej bearbetning sker
inom viss tidsram. Går vidare till högre instans om ej bearbetats trots påminnelse.
Kommentar: Ett lite större jobb att införa en ärendehantering enligt detta.
Estimat: hög.
Bättre dokumentation av betygsättare/historik.
Kommentar: Idag problem med om betygsättare slutat.
Estimat: medel.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Version 1.0
Rapport
Björn Edlund, Mikael Berglund
2011-12-02
Sida: 29 (35)
Betyg på hel kurs föreslås automatiskt om alla villkor är uppfyllda.
Kommentar:
Estimat: låg.
Möjlighet att automatiskt koppla skrivning och poäng till betyg.
Kommentar: Inget problem med datamodellen, utan handlar endast om kod.
Estimat: låg.
Möjlighet att delge resultat kring betyg, resultat, tillgodoräknande m.m. för samtliga
nivåer på ett mer automatiserat sätt genom e-post, sms m.m.
Kommentar: Finns delvis idag. Behöver utökas.
Estimat: medel.
Möjligt för lärosätet att själv styra vilken information från Ladok som ska gå att delge
studenten direkt när det är dokumenterat och arkiverat.
Kommentar: Inget större problem att föra in.
Estimat: låg.
Huvudprocess 13: Utfärda examen
Förändringar gentemot dagens system (texten inklippt från processerna i kursiv stil):
Automatisk kontroll av uppfyllda examensvillkor finns inte alls idag.
För att den kontrollen ska kunna göras så måste individuella studieplaner finnas
upplagda för varje student. För studenter som följer en utbildningsplan ser de
individuella studieplanerna likadana ut för alla studenter.
Studenten kan också själv kontrollera sin progression gentemot uppsatta villkor.
Kommentar: Kräver individuell studieplan som inte finns idag.
Estimat: hög.
När kraven för examen förefaller vara uppfyllda så skickas en elektroniskt meddelande
till studenten. Den funktionen finns inte alls idag.
Kommentar: Skulle också kanske vara bra om meddelande skickas om nästan uppfylld
examen och vad som saknas.
Estimat: låg (om föregående punkt redan implementerats).
Alla ansökningar för både kursbevis och examensbevis görs elektroniskt via webben och
studenten får ett elektroniskt meddelade om att ansökan är mottagen av lärosätet.
Kommentar:
Estimat: medel.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 30 (35)
I och med att man har en elektronisk autentiseringslösning, till exempel med elegitimation så höjs rättsäkerheten. Man vet att det är rätt person som ansökt.
Alla ärenden hanteras med hjälp av ärendehantering och när ansökan inkommer så får
administratören/examenshandläggaren ett elektroniskt meddelande.
Till skillnad från idag görs kontroll och bedömning av huruvida examenskrav och andra
krav är uppfyllda elektroniskt.
Genom övervägande elektronisk hantering blir pappershanteringen vid kompletteringar
mindre och inhämtning av saknade uppgifter blir mer effektiv.
Både kursbevis och examensbevis (som har ett unikt identifikationsnummer) signeras
elektroniskt av bemyndigade personer.
Underlaget kan lätt användas i moduler som lärosätet kan anpassa utifrån egna beslut
om grafisk utformning.
Både kursbevisen och examensbevisen arkiveras elektroniskt och överföring av uppgifter
till legitimationsutfärdande myndigheter sker elektroniskt.
Huvudprocess 27: Hantera gemensam information
Processen hanterar gemensam information beskriver hur man kan jobba med information
som är av intresse att ha definierad på samma sätt och som man vill förvalta gemensamt.
Exempel på denna gemensamma information kan vara examenstyper, handledartyper,
kurstakt, kurstid, undervisningsform, utbildningsnivå, utbildningsområde, försörjningsart,
urvalsgrupper, betygsskalor, finansieringsformer, orter, länder, svenska lärosäten och
utländska universitet.
Ett förslag som nämnts tidigare i detta dokument är att förutom de lokala databaserna
även introducera en gemensam databas där gemensam information kan lagras.
5.2
Icke funktionella krav
[6] innehåller en stor mängd icke funktionella krav. Dessa är dock under
gallring/bearbetning och för tillfället finns ingen mer fullständig analys i detta dokument.
Ett av kraven är dock av särskilt stort intresse, nämligen DES-01-02 rörande kravet om
nationell installation. Den stora begränsningen för refaktoreringsspåret är som tidigare
påpekats lokala databaser för respektive högskola. Detta är dock inte samma sak som
kravet på nationellt installation. Tittar man på Ladok så finns det idag tre driftcentraler,
men det skulle lika gärna kunna vara ett driftställe. Tittar man på exempelvis Javabatcharna så fungerar det så att det går utmärkt att köra batcharna för samtliga högskolor
på en server (om man inte av lastskäl behöver flera) och en uppsättning JAR filer och
script. För respektive högskola finns sedan en konfigurationsfil och det startas en process
för varje högskola. Huruvida denna hantering (antaget att man har en driftcentral som inte
är tekniskt relaterat) anses uppfylla kravet när det gäller nationell installation är något att
fundera över.
Även om majoriteten av data även fortsättningsvis antas ligga i en lokal databas så är det
förmodligen en bra idé att kombinera detta med en gemensam databas för visst data. Om
man börjar med att se till att möjligheten finns och lägger dit data av ”mycket” gemensam
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
Rapport
Version 1.0
2011-12-02
Sida: 31 (35)
karaktär som till exempel landskoder så kan denna databas utökas med tiden. Om
antagandet är att alla högskolor driftas av samma driftcentral kommer alla servrar ligga
inom samma brandvägg, så åtkomsten av den gemensamma databasen borde inte skapa
några problem.
5.3
Slutsatser
Som tidigare nämnts är det svårt att jämföra Ladok3s övergripande krav med det
existerande Ladoks detaljerade funktionalitet. Slutsatsen är dock att skillnaderna är små.
En större sak är förstås modelleringen i Ladok3 modellen som tillåter flera lärosäten i
samma databas, men eftersom ett grundantagande beträffande refaktoreringen är att
lokala databaser skall behållas är detta inte ett problem. Bortsett från problematiken med
en eller flera databaser så är med största sannolikhet kraven från Ladok3 hanterbara.
Strategin för detta har redan beskrivits och är i detta läge en viktigare fråga när man
bestämmer sig för om refaktorering är ett bra val eller inte.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Björn Edlund, Mikael Berglund
6
Rapport
Version 1.0
2011-12-02
Sida: 32 (35)
Arbetsplan
Dokumentet har beskrivit en målarkitektur och diskuterat hur dagens Ladok ser ut i
jämförelse. Nedan följer en plan hur det fortsatta arbetet skulle kunna se ut om detta
alternativ skulle väljas. Det ska poängteras att detta arbete inte är något som görs inom
ramen för detta dokument, utan först den dagen när refaktoreringsspåret valts som
alternativ att gå vidare med.
•
Börja arbetet med att skriva en SAD (Software Architecture Document) som utifrån
detta dokument bryter ned det som ska göras på en lägre nivå. Dokumentet skall även
ge svar på den slutliga modulindelningen.
•
Behåll relationsdatamodellen för kravspecifikation. Genomför ett arbete för att skapa
en domänmodellarkitektur inom områden där det finns funktionell duplicering.
•
Genomför en detaljerad analys av den domänlogik som finns implementerad idag.
Försök att identifiera funktionalitet som är duplicerad mellan olika funktioner. Skapa
en domänmodellbaserad klassmodell inom de områden där det skulle ge mest nytta.
Gemensam kod kan också givetvis skapas som domänservicar. Detta är viktigt att
genomföra innan transformeringen av Unifacefunktionalitet sätter igång. Denna
analys ligger inom ramen för SAD arbetet.
•
Bygg vidare på den Common-modul som finns i dagens Ladok och implementera
domänmodellen där.
•
Börja ett arbete där Uniface funktionerna iterativt byts ut. Det innebär att
Javabaserade funktioner kommer att samexistera med deras motsvarigheter i
Nouveau. Detta kommer att leda till att handläggare kommer att behöva jobba med
två typer av klienter. Inte helt idealt, men en konsekvens man får acceptera med en
iterativ refaktoreringsprocess. Ett exempel är att börja med att byta ut alla
katalogfunktioner. Bilden nedan visar hur Uniface kod gradvis byts ut mot Java kod.
Java koden är benämnd LPW eftersom Uniface-delarna kommer att bytas ut mot
webbaserade användargränssnitt..
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 33 (35)
Figure 7: Utfasning av Uniface
•
När det gäller den existerande funktionaliteten finns det ingen anledning att
refaktorera befintlig kod som fungerar bra och har låg förvaltningskostnad.
•
Genomför ett refaktoreringsarbete av databasen. Detta dokument ger en grund vad
som ska göras, arkitekturdokumentet får bryta ned detta ytterligare.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
7
Version 1.0
2011-12-02
Sida: 34 (35)
Analys av effektmål
[8] beskriver projektets effektmål. Den typen av mål är viktiga indikationer för ett
projekt, men många mål är till sin natur svåra att utvärdera på ett exakt sätt. Några av
effektmålen har särskilt stark koppling mot lösningsarkitekturen. Dessa diskuteras i detta
kapitel.
Effektmål 6 – Flexibilitet
Högskolorna får ett hållbart och flexibelt systemstöd, med en struktur som är generellt
användbar med avseende på t ex utbildningsnivåer, valutor, periodbegrepp och
ursprungsländer, och som byggs i en långsiktigt hållbar teknik med lång återstående
livslängd vilket gör att investeringen kan nyttjas under längre tid än den ekonomiska
avskrivningstiden
Flexibilitetsmålet är det högst prioriterade effektmålet. Den kraftfullaste åtgärden som
tagits för att uppfylla detta är att skapa en skiktad arkitektur som isolerar domänlogik
från:
1.
Tekniska ramverk som till exempel Spring och EJB. Syftet med olika ramverk kan förstås
variera men oftast ger de stöd för transaktioner, säkerhet och att kunna verka i en distribuerad
miljö. Livslängden för vilka ramverk som är i ropet brukar vara ganska korta, för tillfället är
det Spring, om några år är det förmodligen något nytt som är i fokus. Det är därför av största
vikt att undvika beroenden från domänlagret mot dessa ramverk. Den lagrade arkitektur som
beskrivits i dokumentet hanterar beroenden mot dessa ramverk i applikationslagret och
infrastrukturlagret, beroenden från domänlagret är förbjudna.
2.
Exponerandet av tjänstegränssnitt mot omvärlden. Den domänlogik som ett system har kan
behöva exponeras på olika sätt, det kan till exempel vara via RMI, SOAP eller REST. På
samma sätt som för tekniska ramverk är behoven/kraven rörande detta något som är ganska
föränderligt. Denna aspekt vill man därför också separera från domänlogiken. I
målarkitekturen hör exponerandet av tjänstegränssnitt till applikationslagret.
Figuren nedan illustrerar strategin.
Ladok3 Arkitektur - Refaktorering
Ladok3-projektet
Rapport
Björn Edlund, Mikael Berglund
Version 1.0
2011-12-02
Sida: 35 (35)
Figure 8: Separation av domänlogik
Att följa den arkitekturen är det centrala när det gäller flexibilitet eftersom det gör att
förändringar kan föras in utan att det påverkar kärnan i systemet.
Effektmål 1 - Förbättrad kommunikation
Högskolorna får en gemensam plattform som snabbt och allsidigt kommunicerar med
alla omgivande informationssystem av intresse och vid behov kan dela data med dessa,
samt med andra högskolor, både nationellt och internationellt.
- Alla integrationer mot kringsystem kan använda standardgränssnitt för kommunikation med
Ladok. Inga system ska behöva hämta eller skriva in information direkt mot databasen via SQL.
- Överföring till andra system där behov finns av kontinuerlig uppdatering, ska inte hanteras via
batchöverföringar.
Idag finns det exempel på kringsystem som använder databasen direkt via SQL. Detta
skulle kunna ersättas genom att exponera fler REST/SOAP tjänster. Det finns kritik mot
att de exponerade tjänsterna har ändrats för mycket, vilket gjort att kringsystemen varit
tvungna att uppdateras. Det har därför varit ”stabilare” att direkt bero av datamodellen.
Detta är relaterat till hur tjänstegränssnitten är utformade och bör ses över.