Inception
Kom ihåg att RUP är avsedd att anpassas. Skapa inte fler dokument
än vad som behövs
Syfte
Detta är den första fasen i RUP. Syftet är att alla inblandade
ska vara överens (i stora drag) om vad produkten ska göra, hur
lång tid det tar att utveckla den och vad det kostar. Detta ska utgöra
ett tillräckligt underlag för att fatta beslut om projektet ska
läggas ned eller om det ska gå vidare med en noggran undersökning
(vilken sker i nästa fas). Syftet är alltså att fatta beslut
om det är värt att göra en ordentlig undersökning, inte
att göra den.
Tidsåtgång
Inception är den kortaste av projektets fyra faser. Om den inte är
kort har förmodligen för mycket arbete utförts och nästa
fas påbörjats i förtid. Speciellt kort blir inception om
det, som i vårt fall, redan är bestämt att projektet ska
gå vidare in i nästa fas. Inception består normalt (och
absolut i vårat fall) bara av en iteration.
Slutresultat
Den största delen av inception ägnas åt en första
ansats till kravanalys. Den består av
Vision,
Use-Case Model,
User-Interface Prototype,
Supplementary Specification, Glossary
och
Risc List. Vi kan också skriva prototyper för att
försäkra oss om att det vi avser göra är möjligt.
För alla dokument gäller att ingenting ska vara med som inte tillför
något av vikt. Hoppa hellre över en rubrik än att skriva
något bara för att den måste finnas. Kom ihåg att
inget av dokumenten är slutgiltigt, de får (kommer att) ändras
i kommande iterationer.
Vision
Detta är den mest övergripande artifakten. Den innehåller
en beskrivning av vilka som har intressen i systemet och vilka dessa intressen
är samt vad systemet är till för och vad det ska utföra.
Det är lämpligt att börja inception med ett försök
till
vision för att alla inblandade ska få en gemensam syn
på vad arbetet går ut på. Om det behövs (vilket är
sannolikt) omarbetas vision sedan mot slutet av fasen så att det innehåller
en summering av de andra artifakterna.
Use-Case Model
På ett program ställs både funktionella krav (vad det
ska göra) och ickefunktionella krav (säkerhet, prestanda, användarvänligt,
lättunderhållet...). I use case:n sammanställs alla funktionella
krav och eventuellt även inckefunktionella krav som är kopplade
till något specifikt use case.
Under inception är det lämpligt att identifiera så gott
som alla use case och aktörer till namn och att skriva 10-20% av use
case:n i detalj.
Ett use case är en text. Ägna inte en massa tid åt
att rita use case-diagram. Rita dem över huvud taget inte alls om de
inte tillför något. Ägna heller inte en massa tid åt
att utreda om eller hur olika use case inkluderar eller ärver varandra.
Några definitioner:
- Actor Någontong som kan göra någor med vår
produkt, till exempel en person eller ett annat datorsystem.
- Scenario (kallas även use case instans) En följd
av händelser som leder genom ett use case. Om vi har ett use case ta
ut pengar för en bankomat är det till exempel ett scenario
att allt går bra, ett annat att användaren slår fel kod,
ett annat att pengarna på kontot är slut osv.
- Use Case En samling av alla scenarion som beskriver hur produkten
används för att utföra en viss operation.
Det finns ett antal mallar för use case, denna är hämtad
från
http://www.usecases.org.
Jag kommer att dela ut ett exempel på den.
- Primary Actor
Den som i första hand utför det som står i use case:t.
- Stakeholders and Interests
Vilka som har intressen i detta use case och vad deras intresse är.
Denna lista är till för att hjälpa oss hitta alla moment i
den detaljerade beskrivningen av use case:t som kommer senare.
- Preconditions
Villkor som alltid måste vara uppfyllda innan use case:t påbörjas.
- Postconditions
Villkor som alltid måste vara uppfyllda för att use case:t ska
vara lyckat genomfört. I bankomat exemplet ovan behöver dessa
villkor alltså inte uppfyllas om användaren inte kommer ihåg
sin kod eller om det inte finns pengar på kontot.
- Main Success Scenario
En lista över allt som normalt händer vid ett lyckat genomförande.
Ange inga villkor eller förgreningar här, de kommer i nästa
stycke. Skriv vad systemet gör, inte hur det görs.Punkterna
i listan ska vara av någon av dessa tre typer:
- Interaktion mellan systemet och någon aktör.
- Systemet validerar inparametrar.
- Systemet ändrar tillstånd.
- Alternate Flows
Ange allt som skiljer alternativa scenarion från scenariot i ovanstående
punkt. Alla alternativa scenarion (både lyckade och misslyckade) ska
beskrivas här.
- Special Requirements
Ickefunktionella krav på detta use case.
- Technology and data Variations List
Här anges oundvikliga krav på teknologin. Detta är egentligen
beslut som ska fattas senare (under design) men om yttre omständigheter
tvingar oss till vissa val kan de anges här. I vårt fall kan det
till exempel vara "resultatet ska presenteras i uPortal".
- Frequency of Occurence
Hur ofta exekveras use case:t
- Open Issues
Outforskade frågor som kan förändra use case:t.
Det är ofta svårt att veta om någon viss händelse
är ett eget use case eller bara ett moment i ett större use case.
Naturligtvis finns inget exakt rätt eller fel svar på denna fråga
men en bra riktlinje är att ett use case är något som
utförs
av en person vid ett tillfälle, som tillför verksamheten något
av värde och som lämnar systemet i ett tillåtet tillstånd.
Det vanligaste felet är att göra för många små
use case, till exempel är
logga in knappast ett use case, däremot
kanske
starta en session. Ett undantag från denna regel är
vissa moment ingår i flera andra use case. Dessa moment får då
brytas ut i eget use case som inkluderas i de andra även om det i sig
själv är onödigt detaljerat.
Ett bra sätt att hitta use case är att identifiera aktörer
och sedan fråga sig (eller ännu hellre fråga aktören
själv) "vilka är dina mål?" och "vad är målet med
det målet?". När vi på det sättet fått fram tillräckligt
abstrakta (övergripande) mål har vi ett use case med samma namn
som målet.
Några vanliga aktörer (och därmed use case) som lätt
missas kan identifieras med frågor som:
- Vem startar och stoppar systemet?
- Vem hanterar användare och säkerhet?
- Finns det en process som startar om systemet automatiskt om det går
ner?
- Vem är systemansvarig?
- Hur uppgraderas mjukvaran i systemet?
- Är "tid" en aktör, dvs görs något (som tex backup)
automatiskt vid vissa tider?
- Vem läser loggar? Hur får den aktören tag i dem?
- Hur och av vem utvärderas prestanda och eventuella fel?
Supplementary Specification
Nu stöter vi för första gången på begreppet arkitektur.
Arkitekturen är systemets "skelett", allt som behövs för att
förstå hur det fungerar. Arkitekturen talar om vilka problem som
löses och var de löses men inte hur (det hör till design).
Vid ett husbygge behövs det kanske en hiss. Arkitekten ritar då
ett hisschakt, designern ritar en hiss och konstruktören monterar in
hissen.
Både arkitekturell kravanalys och arkitekturell design är komplexa
och svårbemästrade vetenskaper som i stor utsträckning bygger
på erfarenhet och är svåra att formalisera. Det här
är inget försök att gå igenom dessa.
Supplementary specification ska innehålla arkitekturella (dvs
övergripande) krav som inte täcks i use case-modellen. Detta är
de ickefunktionella kraven, även ickefunktionella krav som finns i avsnitten
special requirements i use case:n bör upprepas här.
Notera att
supplementary specification ska innehålla kraven (problemen),
inte lösningarna på dem. Lösningarna ska vi söka först
i nästa fas. Jag kommer att dela ut ett exempel på
supplementary
specification.
Exempel på frågor som bör beaktas här är:
- Loggning
Vad ska loggas och var?
- Säkerhet
Krävs det alltid autentitiering? Har olika användare olika rättigheter?
Ska överföringen krypteras?
- Användargränssnitt
Finns det krav på storlek, färger, språk...?
- Pålitlighet
Hur ofta får fel uppstå? Ska vi ha något andra alternativ
om något externt system går ner? Hur hanteras fel? Hur ofta tas
backuper?
- Prestanda
Till exempel svar inom 1s i 90% av fallen mätt från yttre brandväggen...
- Tillgänglighet
Uppe 99,999% av tiden?
- Konfigurering
Ska systemet till exempel kunna anpassas utan omprogrammering? I så
fall, på vilka sätt?
- Regler för affärslogiken
En bank kan till exempel ha regeln att ett konto inte får övertrasseras.
Ange om reglerna ska kunna ändras.
- Gränssnitt mot befintlig hård eller mjukvara
- Krav på teknologier
Får bara använda open source-produkter? Måste använda
uPortal, JBoss, PostgreSQL, Solaris?
- Standarder
Ska vi följa befintliga standarder för tex hur en student eller
ett kursmoment representeras?
- Dokumentationskrav
- Krav på paketering och leverans av produkten
- Krav på underhåll av produkten
Punkter som ska underlätta buggrättning och tillägg av ny
funktionalitet. Kan vara till exempel hur mjukvara testas eller att en viss
kodningsstandard ska tillämpas. Försök gärna förutse
avsnitt i programmet som kommer att vara speciellt utsatta för förändringar.
Det är viktigt att så gott det går gradera dessa punkter
både vad gäller hur svåra de är att lösa och hur
viktiga de är att lösa. Använd få nivåer (till
exempel tre) vid graderingen.
User-Interface Prototype
Med ledning av främst
use case-model men även
supplementary
specification byggs en
user interface prototype som innehåller
så detaljerade förslag som möjligt på användargränssnitt.
Det är viktigt att kunden tittar noga på dessa eftersom det även
är ett bra sätt att upptäcka brister i systemets funktionalitet.
Glossary
Många termer i de andra dokumenten är tvetydiga. Här definieras
alla sådan termer. Ange även till exempel enheter, tillåtna
värden och andra regler för validering, relationer till andra termer
samt synonymer
Risc List
Det är viktigt att så många risker som möjligt är
kända på det här stadiet. Här kan ni sammanställa
risker av mer övergripande karaktär än tex punkterna i
Supplementary
Specification. Exempel på sådana risker kan vara "Vi får
aldrig tillgång till vår datasal" eller "Vi förstår
inte vad kunden vill". Det kan också vara sammanfattningar av
stora problem som dyker upp i
Supplementary Specification tex "databasen
kan inte hantera transaktioner" eller "vi har ingen aning om hur krypterad
kommunikation ska implementeras".
Prototyper
Om vi tvivlar på att kraven går att lösa kan vi bygga en
proof-of-concept. Denna prototyp ska då ha följande
egenskaper:
- Ska försäkra att flera lager går att använda
tillsammans, tex att vi kan gå hela vägen från browser via
uPortal och ejb:er till databasen.
- Den är av typen throw-away, dvs vi ska inte bygga
vidare på koden när vi börjar konstruera produkten i nästa
fas. Dess funktionelitet behöver alltså inte ha något med
proukten att göra.
- Använd gärna de program/verktyg/utvecklingsmiljöer
ni tänker använda framöver så är vi säkra
på att de funkar och är användbara.
I vårt fall finns det tekniskt sett inget behov av en sådan
prototyp eftersom detta redan är gjort och dokumenterat. Jag tycker
dock det är lämpligt ändå att göra en sådan
prototyp för att ni snabbt ska komma igång med tekniken (vilket
kan ta tid) och ge mig ett proof-of-concept på att ni klarar av att
bygga en sådan lösning.
Tidplan
Det är på det här stadiet omöjligt att göra en
tidplan. Vad som egentligen borde göras är en plan för nästa
iteration, den första i
elaboration, men det är inte lätt
innan ni gått igenom vad den fasen innehåller. Vi nöjer oss
med att fastställa när
inception ska vara klart, jag föreslår
att den får ta 2-3 veckor men det får vi diskutera närmare
på första mötet.