Inception
Kom ihåg att processen är till för er, inte tvärtom.
Skapa inte fler dokument än vad ni har nytta av.
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.
Notera att syftet inte är att göra en färdig kravspec. Syftet
är att göra lagom mycket av kravspecen och lagom mycket prototypande
för att få en grov uppfatning om projektets omfång.
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. Inception består
normalt (och absolut i vårat fall) bara av en iteration.
Slutresultat
En del 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. 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.
Vi bör dessutom skriva prototyper för att försäkra
oss om att det vi avser göra är möjligt.
Vision
Detta är den mest övergripande artifakten. Den innehåller
en beskrivning av vilka som har intressen i produkten och vilka dessa intressen
är samt vad produkten är till för och vad den 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å. Sedan, när de andra
artifakterna är klara, omarbetas vision så att den innehåller
en summering av dem.
Detta kan vara lämpliga rubriker i
vision:
- Introduction
Sammanfattning av sammanfattningen
- Business Opportunity (affärsidé)
Varför produkten kommer att köpas, på vad sätt den
är bättre än befintliga produkter osv
- Stakeholder Descriptions
En beskrivning av de som har intressen i produkten och vad de kräver
av den.
- Product Overview
En grov beskrivning av vad produkten gör.
- Summary of System Features
Häftig (och viktig) funktionalitet.
- Other requirements and constraints
Icke-funktionella krav (se supplementary specification).
Projektförslaget ska lämnas till examinatorn i form av ett vision-dokument
senast första dagen i period tre. Nedan finns mallar för vision.
De är väldigt omfattande, fyll inte i alla rubriker utan välj
de viktiga.
MSWord-mall:
vision.dot
html:
vision.html
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, nedanstående är
hämtad från
http://www.usecases.org. De absolut viktigaste punkterna
är ett, fem och sex. Vi måste veta vem som gör det (punkt
ett) och vad som görs (punkt fem och sex). Punkt fem och sex kommer
att ligga till grund för både kodning och test.
- 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 "användargränssnittet ska skrivas med Swing".
- 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
att 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
Denna artifakt behandlar de ickefunktionella kraven (säkerhet, prestanda,
användarvänligt, lättunderhållet...).
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
att problem kan lösas 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.
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
Till exempel "får bara använda open source-produkter".
- 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. "I värsta fall" ritas de på papper men det är
absolut att föredra att de utvecklas i skarp kod. Om användargränssnittet
ska skrivas i swing kan det vara bra att utveckla prototypen med någon
GUI builder.
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
Det är mycket lämpligt bygga en
proof-of-concept protoype.
Syftet är dels att övertyga sig om att de tilltänkta teknologierna
är användbara, dels att leka och labba med alla inblandade produkter
för att vara förtrogen med dem när utvecklingen börjar
"på riktigt". 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 användargränssnitt
till databas (om en sådan skulle råka finnas).
- 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 funktionalitet 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 ni säkra
på att de funkar och är användbara.
Tidplan
Det är på det här stadiet omöjligt att göra
en tidplan som omfattar något mer än slutdatum för inception.