2. PROCESSERNE - Teknologisk Institut
2. PROCESSERNE - Teknologisk Institut
2. PROCESSERNE - Teknologisk Institut
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
I dette kapitel vil vi kigge nærmere på processerne: dels selve projektledelsesprocessen,<br />
dels udviklingsprocessen som er den måde man udvikler software på, og endelig de<br />
læreprocesser som er involveret. Projektledelse er nemlig en multiperspektivisk disciplin.<br />
<strong>2.</strong>1 De mange perspektiver<br />
<strong>2.</strong> <strong>PROCESSERNE</strong><br />
En historie som ofte bruges til at beskrive nødvendigheden af et multiperspektivisk syn,<br />
er historien om de blinde mænd og elefanten. Den stammer fra et digt af den amerikanske<br />
digter John Godfrey Saxe (1816-1887) som igen baserer sig på en gammel indisk fortælling.<br />
Digtet er langt, så her genfortælles det kun (find det evt. selv på nettet):<br />
De blinde mænd og elefanten<br />
Seks blinde mænd bliver præsenteret for en elefant. Den første ramler ind i siden på dyret og<br />
udbryder: – En elefant er som en mur. Den næste kommer til at føle på stødtanden og mener<br />
at en elefant er som et spyd. Den tredje føler på snabelen og udtaler kategorisk at en elefant<br />
er som en slange. Den fjerde får fat i et ben, så en elefant må være som et træ. Den femte<br />
rører ved øret og er overbevist om at der er tale om en vifte, mens den sjette som rører<br />
halen, synes at en elefant er som et reb. Herefter skændes de så om hvordan en elefant<br />
egentlig er.<br />
Projektledelse er ligesom en elefant: det afhænger af den vinkel man ser det fra, og et<br />
perspektiv (eng.: view) er netop en synsvinkel, dvs. måden at se tingene på ud fra et bestemt<br />
ståsted. Overordnet kan vi anlægge tre hovedperspektiver:<br />
– PRODUKTPERSPEKTIVET ser projektet som noget der skal frembringe et produkt med<br />
bestemte egenskaber.<br />
– INTERESSENTPERSPEKTIVET eller samarbejdsperspektivet ser projektet som et samspil<br />
mellem mennesker.<br />
– PROCESPERSPEKTIVET ser projektet som en løbende proces der bringer os fra en situation<br />
til en anden.<br />
2· <strong>PROCESSERNE</strong> | 29
Herunder kan anlægges forskellige specialperspektiver som typisk afhænger af hvad<br />
man mener er vigtigt i projektet:<br />
– STYRINGSPERSPEKTIVET ser projektet som en række aktiviteter der gennemføres i en<br />
nærmere planlagt rækkefølge.<br />
– FORRETNINGSPERSPEKTIVET ser projektet som et middel til at understøtte virksomhedens<br />
forretning. Her kan der f.eks. være fokus på effektivisering og profitmaksimering.<br />
– BRUGERPERSPEKTIVET ser projektet som noget der skal opfylde brugernes behov. Her<br />
drejer det sig om at involvere brugerne i projektet, brugbarhed og brugervenlighed<br />
osv.<br />
– LÆRINGSPERSPEKTIVET ser projektet som en række læreprocesser hvor vi gradvist bliver<br />
klogere mht. de forskellige dele.<br />
– KVALITETSPERSPEKTIVET ser projektet som en række delprodukter som hver for sig<br />
skal leve op til aftalte kvalitetskriterier. Her er der fokus på inspektioner og test.<br />
– INFORMATIONSPERSPEKTIVET ser projektet som en række informationer (data) som<br />
skal indsamles, gemmes og behandles.<br />
– ARKITEKTURPERSPEKTIVET ser projektet som en struktur opbygget af en række komponenter<br />
der arbejder sammen.<br />
osv.<br />
Nogle af disse perspektiver kan være sammenhængende, men de afspejler hver for sig<br />
en måde at opfatte projektet på, et ståsted at se det fra, et verdensbillede. Man ser det<br />
samme projekt, men fra vidt forskellige synsvinkler. Nogle af perspektiverne kan bruges<br />
til at drive projektet, dvs. til at styre hvad der skal ske hvornår. Der er således udviklingsmodeller<br />
som er use case-drevne, arkitekturdrevne eller risikodrevne.<br />
Ligesom med de blinde mænd er alle perspektiverne en del af helheden. Og det er<br />
en god ide at bruge flere perspektiver. Forskellighed gør stærk. Vi vender senere tilbage<br />
til disse specialsyn i afsnittet om Interessentanalyse.<br />
Disse perspektiver kan også have andre navne, f.eks. dimensioner, aspekter, facetter,<br />
parametre, fokusområder eller discipliner.<br />
<strong>2.</strong>2 Andre brancher<br />
Mennesker organiserer udviklingsprocessen på mange forskellige måder, afhængigt af<br />
hvad man skal lave. Alligevel er der visse fælles træk, og man kan lære meget af at se<br />
hvordan andre gør, så lad os starte med at se hvordan man griber udviklingsprocessen<br />
30 | 2 · <strong>PROCESSERNE</strong>
an uden for it-branchen i nogle af de brancher som man ofte sammenligner it-udvikling<br />
med. Se i øvrigt også det senere afsnit om Store ledere (side 68).<br />
Brobygning<br />
Ofte sammenlignes it-udvikling med brobygning. Ikke, at vi i it-branchen skal falde på<br />
halen for de dygtige brobyggere der kan levere til tiden, bare “sådan lige” og helt uden<br />
problemer. For det kan de som bekendt ikke. Fejl, dårlig kvalitet, fordyrelser og store<br />
forsinkelser finder også sted i brobygningsbranchen. Jf. Storebæltstunnelen der først<br />
blev oversvømmet og siden brandhærget (havde det så endda blot været samtidig!). Alligevel<br />
kan it-udviklere lære meget af brobyggere.<br />
Tacoma-broen<br />
I staten Washington i det nordvestlige USA havde man bygget<br />
en hængebro over Tacoma-snævringen, Tacoma Narrows<br />
Bridge. Det var en af de første hængebroer, så man havde ikke<br />
mange erfaringer med denne brotype. Den 7. november<br />
1940 gik det helt galt. Når vindhastigheden bliver for høj, kan<br />
hængebroer nemlig sættes i en voldsom kombination af vridninger og lodrette svingninger<br />
(såkaldt flutter). Dette kan forhindres ved at gøre brodækket tilstrækkeligt vridningsstabilt.<br />
Imidlertid havde designeren af Tacoma-broen – i øvrigt på trods af advarsler – valgt en mindre<br />
vridningsstabil løsning for derved at gøre broen billigere. Broen blev simpelthen vredet<br />
itu og faldt ned. Heldigvis kom ingen mennesker noget til (har du ikke set de spektakulære billeder,<br />
findes der videoklip på nettet). Brobyggerne lærte en masse af den historie, og i dag er<br />
det normalt at den slags anlæg testes i en vindtunnel, så man ved hvordan de opfører sig i<br />
blæsevejr. Tilsvarende burde det være helt normalt at alle større it-systemer gennemgik performancetest<br />
og test i et brugervenlighedslaboratorium før de blev sluppet løs.<br />
Et af de steder hvor it-udvikling adskiller sig mest fra brobygning, er at vi ofte har muligheden<br />
for at udvikle systemerne i mindre bidder. Som bekendt kan man ikke starte en bro<br />
med et frit spænd på 1.600 meter ved at sige: “Nu lægger vi lige en planke over, og så tager<br />
vi det lidt ad gangen”. Og når ankerblokkene er støbt i mange tusind tons beton, kan man<br />
heller ikke lige komme og bede om at få dem flyttet et par meter mod nord. Men ved udvikling<br />
af et it-system kan man som regel lave det i en iterativ proces hvor man i gentagne<br />
2· <strong>PROCESSERNE</strong> | 31
delleverancer føjer mere og mere funktionalitet til systemet. Denne teknik åbner desuden<br />
mulighed for at måle på kvaliteten af systemet undervejs. Desværre åbner fastpriskontrakter<br />
sjældent mulighed for en sådan iterativ proces, og det er egentlig synd – for alle parter.<br />
Men der er ikke noget i vejen for at en fastpriskontrakt kan stille krav om kvalitetsmålinger<br />
undervejs (se historien side 329 om Øresundsbroens pyloner).<br />
Ofte bruges ingeniørdisciplin generelt som metafor for it-udvikling. Tidligere talte<br />
man ligefrem om “software engineering”. Det vi kan lære af ingeniørernes tilgang, er<br />
den detaljerede planlægning før vi går i gang (i det omfang det er muligt) samt den<br />
præcise kvalitetsstyring undervejs. Og at vi skal kende vores teknikker før vi bruger<br />
dem i stor skala. Man skal kravle før man kan gå.<br />
Krigskunst<br />
Ordet “kunst” i denne forbindelse, hvor det handler om at slå mennesker ihjel, er ilde<br />
valgt. Alligevel er det den betegnelse man sommetider ser anvendt af dem som gør sig<br />
tanker om det at føre krig. Ofte drages også paralleller mellem krigskunst og it-udvikling.<br />
Sammenligningen er forståelig. Begge dele handler om at:<br />
– gennemføre en – ofte svær – opgave som ikke er prøvet før<br />
– mange menneskers koordinerede indsats er nødvendig<br />
– planlægning, koordinering og kommunikation er essentiel<br />
– handlekraft når virkeligheden viser sig at være anderledes end planerne, er lige så<br />
essentiel<br />
– ord som strategisk, taktisk og operationel er anvendelige til at anskue processen fra<br />
forskellige detaljeringsniveauer.<br />
Og så kan vi lære noget fordi tingene bliver tydeligere (mere accentuerede) når de kommer<br />
ud i ekstremerne. I [Munk-Madsen96] fremhæves således et af de vægtigste militærteoretiske<br />
bidrag i moderne tid, von Clausewitz’ bog “Vom Kriege”, der beskriver<br />
strategiens betydning ved ledelse af vanskelige og usikre opgaver. Det var her forståelsen<br />
af krigen som politikkens fortsættelse blev introduceret. Her slås det bl.a. fast at vi<br />
ikke kan planlægge i detaljer præcist hvordan slaget vil forløbe – der er for mange<br />
ukendte faktorer, og virkeligheden ser alligevel altid helt anderledes ud end vi tror.<br />
Det vi ikke bør lære af krigskunsten, som den er praktiseret op gennem historien, er<br />
den militæriske kadaverdisciplin og kæft-trit-og-retning-mentalitet hvor en ordre skal<br />
følges, uanset hvad. Det virker sjældent på it-udviklere som bare kan tage deres gode<br />
tøj og gå over til et andet firma. Og som man i den moderne militærverden har erkendt,<br />
virker det heller ikke på nutidens soldater.<br />
32 | 2 · <strong>PROCESSERNE</strong>
Flyvning<br />
Der er mange lighedspunkter mellem en flypilot og en projektleder:<br />
– begge har det overordnede ansvar for opgaven<br />
– ingen af dem kan løse opgaven tilfredsstillende uden andre<br />
– ingen af opgaverne kan løses uden dem<br />
– begge er underlagt højere myndigheder i udførelsen af opgaven<br />
– det er i dårligt vejr og med brand i den ene motor at de for alvor skal vise hvad de dur til.<br />
Det vi kan lære af piloterne, er den udelte opmærksomhed på at materiellet og forudsætningerne<br />
er på plads, gennemprøvede og i orden inden vi går i gang. Også brugen<br />
af tjeklister og fornuftige systemer som løbende forbedres når vi opdager fejl og<br />
uhensigtsmæssigheder.<br />
Det vi ikke bør lære, er de nøje fastlagte flyruter som moderne flyvning gør brug af.<br />
Hertil er it-udvikling for uforudsigelig.<br />
Filmproduktion<br />
Når der skal produceres en film, skal man først have en god historie: den fælles vision.<br />
Her bruges et story board (opfundet af Walt Disney til brug ved tegnefilmproduktion).<br />
Der laves detaljerede planer for optagelser af de enkelte scener. Ofte i total forvirring i<br />
forhold til den færdige film. Skal der bruges to scener i den samme kulisse, men to forskellige<br />
steder i filmen, er det smartest at optage begge scener når man har hele holdet<br />
samlet det rigtige sted. Og så klippe det sammen senere. Men det kræver en detaljeret<br />
planlægning (scripting). Holdet forsøges også sammensat så optimalt som muligt i en<br />
casting hvor man finder de bedste skuespillere til rollerne.<br />
Så her kan vi lære noget om detaljeret planlægning af de enkelte scener (i it-sammenhæng:<br />
planlægning af de enkelte iterationer), men sandelig også om nødvendigheden af<br />
improvisation undervejs. F.eks. når skuespillerne begynder at leve sig ind i rollen og<br />
kommer med ændringsforslag.<br />
Det vi ikke bør lære af filmproduktion, er at hele manuskriptet skal være detaljeret<br />
fastlagt inden vi går i gang. Det kan kun sjældent lade sig gøre ved it-udvikling.<br />
Planteavl<br />
Selv holder jeg meget af at betragte projektlederen som en gartner. Der er en række gode<br />
paralleller mellem gartneri og projektledelse:<br />
– Man høster som man sår. Dvs. udbyttet er afhængigt af de frø man starter med.<br />
– En god gødning er med til at få planterne til at udvikle sig.<br />
2· <strong>PROCESSERNE</strong> | 33
– Gartneren skal beskytte planterne mod angreb fra skadedyr.<br />
– Det betaler sig at forebygge angreb f.eks. ved sprøjtning.<br />
– Et godt (rod-)netværk er vigtigt for plantens vækst.<br />
– Mange planter elsker sol og varme.<br />
Af gartneren kan vi lære at tålmodighed og forudseenhed betaler sig. Gartneren kan ikke<br />
selv lave frugter, det kan kun planterne.<br />
<strong>2.</strong>3 Projektledelsesprocessen<br />
Selve projektledelsesprocessen er en generisk proces som det kan være hensigtsmæssigt<br />
at have gjort sig klart. Den vil vi se på i dette afsnit, og i det senere afsnit om Udviklingsprocessen<br />
vil vi se på hvordan den udmøntes til softwareudvikling.<br />
Vi skelner mellem ledelse og styring. Ledelse handler om at gøre de rigtige ting,<br />
mens styring handler om at gøre tingene rigtigt. Begge dele er vigtige at kunne for en<br />
projektleder. Men faktisk har vi tre niveauer:<br />
Fig. <strong>2.</strong>1: De tre styringsniveauer<br />
For god ordens skyld skal du vide at denne trekant normalt bruges på hele virksomheden.<br />
Her bruger vi den dog “kun” på projektet.<br />
I “A guide to the project management body of knowledge” – den såkaldte<br />
PMBOK Guide fra Project Management <strong>Institut</strong>e ([PMI2000]) – skelnes mellem fem<br />
projektledelsesprocesser:<br />
34 | 2 · <strong>PROCESSERNE</strong>
– OPSTART hvor projektet etableres<br />
– PLANLÆGNING hvor målet lægges fast, og kursen udstikkes<br />
– UDFØRELSE hvor arbejdet rent faktisk udføres<br />
– OPFØLGNING hvor det sikres at vi laver det vi aftalte<br />
– NEDLUKNING hvor projektet bringes til en kontrolleret afslutning.<br />
Denne opdeling kan også bruges på mindre faser i et større projekt. Og du vil kunne<br />
genfinde alle elementerne i de kommende kapitler.<br />
Der findes andre bud på en generisk projektledelsesproces, f.eks. den engelske<br />
PRINCE2 (bl.a. beskrevet i [Hughes99]).<br />
<strong>2.</strong>3.1 Kunsten at styre<br />
Når vi bruger ordet “styre”, har vi allerede en intuitiv fornemmelse af hvad der menes.<br />
Det er nærliggende at lave analogier til andre situationer hvor vi “styrer”, f.eks.:<br />
– når vi kører bil, styrer vi. Vi gør det for at komme det rigtige sted hen og for at komme<br />
uden om forhindringer<br />
– når man flyver, sidder der en pilot forrest i flyet og styrer det.<br />
Men styring er ikke bare at dreje på rattet. Styring involverer flere discipliner:<br />
Før turen:<br />
– Hvor skal vi hen? Der skal ske en fastlæggelse af målet.<br />
– Hvordan kommer vi det? Hvilken vej skal vi? Er der evt. risiko for uvejr eller andre<br />
forhindringer på en del af ruten, så vi skal lægge vejen udenom? Der skal ske en planlægning.<br />
– Hvor lang tid tager det? Der skal ske en tidsestimering.<br />
Undervejs:<br />
– Er der forhindringer forude? I bilen kan vi blot kigge ud ad forruden for at opdage<br />
eventuelle forhindringer. I fly kan vi bruge radar og automatiske landingssystemer, i<br />
ubåde kan vi bruge sonar osv. I projektet må vi også benytte os af indirekte metoder<br />
til at kigge fremad. Vi må “synliggøre” vejen foran os. Og det er betydeligt vanskeligere<br />
at synliggøre it-udvikling end mere fysiske fænomener (som f.eks. klippeskæret<br />
foran ubåden). Vi gør det i form af projektplaner, statusrapporter, reviews, kravspecifikationer,<br />
evalueringer osv.<br />
2· <strong>PROCESSERNE</strong> | 35
– Aktiv styring: drej på rattet når der skal skiftes kurs. I projektet foretages ændring af<br />
bemanding, ændring af opgaver, igangsættelse af nye aktiviteter osv.<br />
– Er vi hvor vi tror? Uforudsete ting kan bringe os ud af kurs (kastevinde, vildspor), og<br />
en gang imellem skal vi kontrollere at vi er der hvor vi tror vi er. Vi bruger her milepælene<br />
langs vejen eller andre kendingsmærker på landkortet. På havet, hvor der ingen<br />
kendingsmærker er, må vi navigere efter andre pejlemærker, f.eks. stjerner. Og i<br />
dag har de fleste installeret en GPS-navigator som bestemmer positionen ved hjælp<br />
af satellitter. I projektet må vi bruge de fastlagte tjekpunkter til at finde ud af hvor vi<br />
er.<br />
Efter turen:<br />
– Kan vi gøre det bedre næste gang? Her skilles de professionelle fra amatørerne. De<br />
sidste er glade for at være kommet frem, men de professionelle ved at de skal på den<br />
igen. Så de sætter sig ned sammen med kollegerne og diskuterer hvad der skete på<br />
turen, og om det var gået bedre hvis de havde handlet anderledes end de gjorde. Det<br />
gælder også i projektet hvor der skal foretages en projekt-evaluering når projektet er<br />
slut, for at finde ud af hvilke ting vi kan gøre bedre næste gang.<br />
<strong>2.</strong>3.2 Syvlagsmodellen<br />
Det kan være nyttigt at betragte selve styringsprocessen ud fra følgende “syvlags-model”<br />
som står for min egen regning (HIPEVOD-modellen):<br />
Fig. <strong>2.</strong>2: Syvlagsmodellen<br />
36 | 2 · <strong>PROCESSERNE</strong><br />
Lagnavn Aktiviteter<br />
Handlingslaget<br />
Informationslaget<br />
Planlaget<br />
Estimeringslaget<br />
Vilkårslaget<br />
Opgavelaget<br />
Domænelaget<br />
Styring<br />
Opfølgning, status<br />
Planlægning, tjekpunkter<br />
Bestemmelse af omfang<br />
Risikoanalyse, interessentanalyse<br />
Kravspecifikation<br />
Foranalyse
Hovedformålet med styringsaktiviteterne er at blive i stand til at foretage den egentlige<br />
styring (øverst i modellen) når det viser sig nødvendigt. Altså at ændre på prioritering,<br />
bemanding, planer osv. Det kan vi kalde handlingslaget. Her finder vi også aktiviteter<br />
som kontraktstyring, underleverandørstyring, kvalitetsstyring osv.<br />
Men for at kunne styre er det nødvendigt at have noget information at styre ud fra.<br />
Det får vi via det næste lag, informationslaget, som f.eks. forsyner os med rapporter<br />
indeholdende grafiske oversigter, tabeller og nøgletal for projektets status. Heraf kan vi<br />
f.eks. læse at en bestemt aktivitet er ved at blive forsinket i forhold til planen, og at en<br />
anden aktivitet der netop skal til at starte, godt kan vente uden derfor at forsinke projektet.<br />
Dette sætter os i stand til at træffe beslutningen (“foretage styringen”) om at ombemande<br />
således at hende der netop skulle til at starte på den ikke-kritiske aktivitet, i<br />
stedet hjælper med til at afslutte den kritiske. Men denne beslutning er vi kun i stand til<br />
at træffe fordi vi har vores rapporter, planer osv.<br />
For at vi kan frembringe informationerne i rapporterne, må vi tidligere have lavet<br />
en planlægning. Planerne er nemlig forudsætningen for at vi kan udtale os om hvorvidt<br />
en aktivitet er forsinket eller ej. Uden en plan ville vi ikke vide hvad aktiviteten var forsinket<br />
i forhold til. Bemærk i øvrigt at planerne næsten altid ændres undervejs fordi<br />
målet ofte flytter sig.<br />
Og en forudsætning for denne planlægning er nogle gode og realistiske estimater.<br />
Planerne bliver nemlig kun så realistiske som de estimater de baserer sig på. Estimeringen<br />
indgår ofte som en integreret del af planlægningen.<br />
En forudsætning for realistiske estimater og planer er kendskab til det vi skal lave<br />
samt de vilkår vi skal arbejde under. I vilkårslaget laver vi risikoanalyse og interessentanalyse<br />
for at få uddybet opgavebeskrivelsen (kravspecifikationen).<br />
I opgavelaget finder vi kravspecifikationen som handler om det det hele drejer sig<br />
om, genstanden for vores projekt, domænet med dets mennesker og/eller maskiner i<br />
den rigtige verden.<br />
Grunden til at så mange projekter er blevet forsinkede i tidens løb, er ofte at man<br />
har taget for let på ét eller flere af trinene i modellen. Hvis man f.eks. begynder med en<br />
utilstrækkelig kravspecifikation, vil dette forplante sig opad således at også tidsestimaterne<br />
bliver for små. Og dermed vil planerne ikke afspejle virkeligheden. Så når man<br />
styrer efter disse (for korte) planer, vil man selvfølgelig blive forsinket i forhold til dem.<br />
Når et projekt er forsinket, er det nemlig altid i forhold til en plan. Så i stedet for at<br />
tale om forsinkede projekter, burde man hellere tale om forkerte planer. Derfor er det<br />
vigtigt at de hele tiden holdes opdaterede.<br />
Ovenstående proces kan gennemføres ad flere gange, som vi skal se i det senere af-<br />
2· <strong>PROCESSERNE</strong> | 37
snit om iterative modeller. Den viste proces kan f.eks. benyttes til softwareudviklingsprojekter.<br />
Der findes andre projektledelsesprocesser til andre typer af projekter.<br />
Mestrer du alle de ovenstående lag, er der en god chance for at du vil undgå nogle<br />
af de værste katastrofer. For det er det bedste man kan opnå. Der kan ikke gives nogen<br />
kogebogsopskrift på hvordan man får succes hver gang. Men hvis du følger rådene og<br />
arbejdsmetoderne i denne bog, vil du aldrig komme helt galt af sted.<br />
<strong>2.</strong>3.3 Trekanten<br />
Traditionelt taler man om trekanten, bestående af tid, omkostninger og funktionalitet.<br />
Ideen er at man ikke kan nøjes med at ændre én af dimensionerne – de hænger uløseligt<br />
sammen. En klassisk projektledervits siger: “Jeg kan lave systemer billigt, hurtigt<br />
og med megen funktionalitet. Vælg selv to!” Fordi projektlederens opgave bl.a. er at have<br />
styr på at den givne funktionalitet leveres til den givne tid med de givne omkostninger,<br />
kaldes projektlederen af nogle ligefrem for trekantsbestyrer.<br />
Fig. <strong>2.</strong>3: Styringstrekanten<br />
Bemærk at der med “tid” menes kalendertid – ikke persontid som er en del af omkostningerne.<br />
Funktionalitetsdimensionen omfatter også kvaliteten af systemet. Hvis kvaliteten er<br />
lige meget, kan vi lave hvad som helst på ingen tid (også kendt som “den nulte softwarelov”,<br />
se [Weinberg97]).<br />
Som regel vægtes de tre dimensioner i trekanten forskelligt. I nogle projekter kan<br />
det være altafgørende at nå en bestemt deadline, så her er tiden vigtigst. Andre gange<br />
er det omkostningerne. Endelig kan funktionaliteten være det helt afgørende. Derud-<br />
38 | 2 · <strong>PROCESSERNE</strong>
over skal man vide hvad det mindst vigtige er – her har vi nemlig vores reserve – det<br />
som vi eventuelt kan fire på. Så hvis tiden f.eks. er vigtigere end funktionaliteten, kan<br />
vi udskyde nogle af funktionerne for dermed at blive færdige til tiden.<br />
Der kan dog ligge en fare i den mekanistiske betragtning omkring resurseforbrug<br />
(omkostninger) som trekanten lægger op til. Hvis man f.eks. bliver presset på tiden, forsøger<br />
man måske at vælge “the chinese army approach”: man sætter mange udviklere<br />
på projektet i håb om dermed at gøre det hurtigere. Ud fra en ide om at hvis 2 mand<br />
kan grave en grøft på 10 dage, så kan 20 mand grave den på 1 dag. Det holder imidlertid<br />
ikke altid for it-projekter, bl.a. på grund af læreprocesserne som vi skal se på i et senere<br />
afsnit. Sammenligningen skal snarere være at to kaniner løber ikke dobbelt så hurtigt<br />
som én kanin. Eller: hvis 1 kvinde kan føde 1 barn på 9 måneder, hvor mange<br />
kvinder skal der så til for at føde 1 barn på 1 måned?<br />
Det er en central problemstilling i it-projekter at forholdet mellem trekantens sider<br />
(tid, funktionalitet og omkostninger) låses fast på et tidspunkt hvor grundlaget slet ikke<br />
er til stede. Adskillige projekter er kommet galt af sted fordi man har lavet en fastpriskontrakt<br />
hvor både pris og afleveringsdato lå helt fast, men reelt kendte man ikke funktionaliteten.<br />
Det går galt. Hver gang. Vi skal senere vende tilbage til denne problemstilling<br />
og se på andre metoder til at løse den.<br />
<strong>2.</strong>4 Udviklingsprocessen<br />
I dette afsnit vil vi se på den proces som gennemgås når man udvikler software. En udviklingsmodel<br />
er en beskrivelse af udviklingsprocessens forløb, dvs. “Hvem gør hvad<br />
hvornår?” Vi opererer også med begrebet livscyklusmodeller som er tiden fra produktideen<br />
fødes, og til sidste version er faset ud (hvor udviklingsmodellen kun omfatter tiden<br />
indtil afleveringen til kunden).<br />
En hel livscyklus kan typisk se således ud:<br />
– Forundersøgelse<br />
– Udvikling<br />
– Udrulning<br />
– Vedligeholdelse<br />
– Udfasning<br />
Der kan indgå mange elementer i en udviklingsmodel. Mest typisk er at modellen beskriver:<br />
2· <strong>PROCESSERNE</strong> | 39
– PROCES, hvilke aktiviteter gennemføres i hvilken rækkefølge.<br />
– ROLLER, hvem laver hvad?<br />
– METODER til f.eks. analyse, krav, design, test.<br />
– VÆRKTØJER, f.eks. CASE, programmering, test.<br />
– TEKNISKE AKTIVITETER.<br />
– KVALITETSSTYRINGSAKTIVITETER, f.eks. hvornår laves test og inspektioner.<br />
– KONFIGURATIONS-, VERSIONS- og DOKUMENTSTYRING.<br />
– MELLEMPRODUKTER (eng.: artifacts), hvilke skal laves hvornår, og hvad skal de indeholde.<br />
– DOKUMENTER (som også er mellemprodukter), herunder specifikationer og planer.<br />
Formålet med overhovedet at have en udviklingsmodel er først og fremmest at have en<br />
fælles referenceramme for udviklingsprocessen – “Sådan gør vi her”. Det giver dels en<br />
billigere uddannelse når der kommer nye projektdeltagere, dels sparer det mange diskussioner<br />
i kampens hede. Ikke, at vi skal undertrykke diskussionerne – vi tager dem<br />
bare på andre tidspunkter end midt under projektet. Og når vi alle sammen i hele virksomheden<br />
gør tingene på samme måde, har vi bedre mulighed for procesrelateret erfaringsudveksling.<br />
Endelig giver det alt andet lige en lettere planlægning samt en mulighed<br />
for at måle på processen og dermed en større sandsynlighed for succes.<br />
Overordnet set findes der to typer udviklingsmodeller: fasemodeller og iterative modeller.<br />
<strong>2.</strong>4.1 Fasemodeller<br />
En klassisk kopifitti om projektfaser lyder:<br />
De seks projektfaser:<br />
– Vild entusiasme<br />
– Desillusionering<br />
– Total forvirring<br />
– Jagt på de skyldige<br />
– Afstraffelse af de uskyldige<br />
– Forfremmelse af dem der ikke deltog<br />
Mere seriøst inddeler vi i fasemodellerne udviklingen i et antal faser, typisk:<br />
– Analyse<br />
– Kravspecifikation<br />
40 | 2 · <strong>PROCESSERNE</strong>
– Design<br />
– Kodning<br />
– Test<br />
– Udrulning<br />
Disse modeller kaldes ofte for vandfaldsmodeller fordi man “falder” fra den ene fase til<br />
den næste. Dette er dog en sandhed med modifikationer, for de fleste fasemodeller<br />
rummer mulighed for “tilbageløb”. Hvis man således i kodningsfasen opdager et nyt<br />
krav, kan man gå tilbage til kravfasen og tage det med.<br />
Struktureret ProgramUdvikling (SPU) er et eksempel på en fasemodel (med tilbageløb)<br />
– se [Biering-Sørensen88].<br />
Alt flyder<br />
At udvikle systemer ud fra en specifikation er ligesom at gå på vandet: det hjælper hvis<br />
det er frosset! I øvrigt er det som regel en illusion at man kan fastfryse kravene. I de fleste<br />
situationer vil der være en person med tilpas mange stjerner (om ikke andet, den<br />
administrerende direktør) som kan overrule beslutningen og beordre et nyt krav medtaget<br />
– og så er vi lige vidt. Ved du i øvrigt hvad ligheden er mellem fastfrosne krav og<br />
den afskyelige snemand? Jo, begge er myter, og begge smelter når det bliver tilstrækkeligt<br />
varmt. Nogle siger ligefrem at kravspecifikationen er at opfatte som en kontrakt der<br />
skal genforhandles dagligt med alle interessenter. Det vender vi tilbage til i det senere<br />
afsnit om Kravstyring. Mekanismen har været kendt længe: den græske filosof Heraklit,<br />
som levede omkring 500 f.Kr., sagde at “alt flyder” hvormed han mente at intet er<br />
uforanderligt, alting ændres hele tiden. Det gælder også systemkrav.<br />
<strong>2.</strong>4.2 Iterative modeller<br />
De iterative modeller går frem med små skridt. Først udvikler vi en lille bid af systemet.<br />
Så leverer vi det til brugerne og ser hvordan det virker. Og så udvider vi det med<br />
lidt mere. Derfor kan du også høre ordene inkrementel, gradvis eller trinvis udvikling<br />
brugt om iterativ udvikling. Tidligere kaldte man de iterative modeller for RAD (Rapid<br />
Application Development).<br />
I nogle udviklingsmodeller starter man (som i en vandfaldsmodel) med at gennemanalysere<br />
og designe hele systemet hvorefter man udvikler det i mindre bidder.<br />
Man kan også starte med at udvikle en lille del af systemet og så lade systemdelen<br />
vokse sig gradvis større og større gennem en række iterationer. Det kaldes evolutionær udvikling.<br />
Her kan vi opfatte hver iteration som et gennemløb af faserne i en fasemodel:<br />
2· <strong>PROCESSERNE</strong> | 41
– først finder vi ud af hvad vi skal lave (analyse og krav)<br />
– så finder vi ud af hvordan vi skal lave det (design)<br />
– så laver vi det (kodning)<br />
– og så tester vi det.<br />
Denne måde at arbejde på er ikke nogen ny ide. Allerede i 1950’erne udarbejdede den<br />
amerikanske kvalitetsekspert Dr. W. Edwards Deming sin såkaldte Deming-cycle: Planlægge-Udføre-Vurdere-Ændre<br />
(eng.: PDSA-cycle, Plan-Do-Study-Act. Nogle siger dog<br />
“Check” i stedet for “Study”: PDCA.). Den illustrerer at man i en stadig vekslen mellem<br />
disse fire aktiviteter vedvarende forbedrer sine processer. Den blev i starten en stor succes<br />
i japansk kvalitetsledelse hvor begrebet kaizen (løbende forbedringer, alting kan altid<br />
gøres lidt bedre) i dag er kendt verden over. Den er grundlaget for mange moderne<br />
forbedringsprocesser og altså også for iterative it-udviklingsprocesser.<br />
Fig. <strong>2.</strong>4: Deming-cyklen<br />
De forskellige iterative modeller har hver deres bud på hvordan denne proces foregår.<br />
Af fremherskende modeller kan nævnes:<br />
– Rational Unified Process (RUP), se side 44.<br />
– Microsoft Solution Framework (MSF), se side 45.<br />
– eXtreme Programming (XP), se side 46.<br />
– Objektorienteret Analyse og Design (OOA&D, også kaldet Aalborgmetoden. Se<br />
[Mathiassen01]).<br />
– Dynamic System Development Model (DSDM, se [Stapleton97]).<br />
– Structured Systems Analysis and Design Method (SSADM, se [Weaver02]).<br />
– Scrum (se [Beedle01]).<br />
42 | 2 · <strong>PROCESSERNE</strong>
Mange virksomheder har i tidens løb udviklet deres egne modeller (eventuelt med afsæt<br />
i en af de etablerede).<br />
Der er forskellige bud på hvad en iteration omfatter. I nogle iterative modeller fastholder<br />
man f.eks. tiden: den næste iteration skal være færdig om (f.eks.) 6 måneder.<br />
Med andre ord: vi når det vi når. Og når tiden er gået så er vi færdige. Det kaldes time<br />
boxing. Man kan også fastholde omkostningerne (resurserne). Det kaldes money<br />
boxing. Og endelig kan man fastholde funktionaliteten (function boxing) i en use case-drevet<br />
proces: den næste iteration implementerer disse to use cases.<br />
Ofte lader man den første iteration omfatte det helt basale system, dvs. f.eks. platformen,<br />
database-serveren, web-serveren osv. Man starter med andre ord med at “få<br />
hul igennem”. I RAD lægger man vægt på at få den første release søsat så hurtigt som<br />
muligt (deraf navnet). Derfor var det også i forbindelse med RAD man første gang<br />
introducerede begrebet time box.<br />
En af grundene til at det som regel forholdsvis hurtigt lykkes at få lavet et brugbart<br />
system, er Paretos 80/20-regel som siger at den funktionalitet som af brugerne vil blive<br />
brugt i 80% af tiden, laves på 20% af udviklingstiden.<br />
De iterative processer virker så godt fordi de har indbygget feedback. Vi får mulighed<br />
for at tage højde for det vi lærer undervejs i processen. Med vandfaldsmodellerne<br />
skal vi vide det hele på forhånd – hvad man meget sjældent gør. Og vi må vente til allersidst<br />
med at drage nytte af det vi lærer undervejs. Vi skal senere se på disse læreprocesser<br />
og på hvor nyttigt det er at kunne få feedback undervejs.<br />
Adrætte metoder<br />
Mange udviklingsmodeller indeholder detaljerede retningslinjer for præcis hvilke<br />
skridt man skal udføre. Sådanne præskriptive modeller har nærmest karakter af kogebøger.<br />
Som modvægt mod disse overvægtige metoder har der i 1990’erne (samtidig<br />
med den fedtfrie slankebølge!) været en tendens hen mod modeller med mindre<br />
“gør-dit-og-gør-dat” (f.eks. XP, DSDM og Scrum). De kaldtes tidligere letvægtsmetoder<br />
(eng.: lean), men i dag kaldes de adrætte metoder (eng.: agile). Det har givet anledning<br />
til det “adrætte manifest” (se www.agilealliance.org samt [Cockburn01]):<br />
– Individer og samspil frem for processer og værktøjer.<br />
– Kørende software frem for fuldstændig dokumentation.<br />
– Samarbejde med kunden frem for kontraktforhandling.<br />
– Reaktion på forandring frem for at følge en plan.<br />
Det kan ses som en modreaktion mod de meget store og tunge metoder (lidt i stil med<br />
2· <strong>PROCESSERNE</strong> | 43
dogmereglerne for filmproduktion: tilbage til rødderne). Ideen er at projektet skal fokusere<br />
på de værdiskabende aktiviteter og så i øvrigt være tunet til at kunne reagere hurtigt<br />
når tingene ændrer sig.<br />
<strong>2.</strong>4.3 Rational Unified Process<br />
Rational Unified Process (forkortet RUP) er en konkretisering af Unified Process (se<br />
[Jacobson99]). RUP har opnået stor udbredelse fordi den er både operationel og værktøjsunderstøttet,<br />
men andre virksomheder har også lavet deres bud på hvorledes Unified<br />
Process kan instantieres.<br />
RUP er en use case-drevet, arkitekturcentreret, iterativ udviklingsmodel. Den rummer<br />
følgende hovedfaser:<br />
– BEGYNDELSE (eng.: inception) hvor ideen fødes, de vigtigste use cases beskrives og<br />
der laves overordnet arkitektur og plan.<br />
– UDDYBNING (eng.: elaboration) hvor de fleste use cases beskrives, arkitekturen udarbejdes<br />
og resten af projektet estimeres og planlægges.<br />
– KONSTRUKTION (eng.: construction) hvor implementeringen foregår.<br />
– OVERGANG (eng.: transition) hvor der laves betatest, rettes fejl, trænes brugere og rulles<br />
ud i organisationen. Dette er med andre ord produktmodningsfasen.<br />
At modellen er iterativ, betyder at man i de enkelte hovedfaser gennemløber et antal<br />
iterationer. Hver iteration består af kravfastlæggelse, analyse, design, kodning og test.<br />
De fleste iterationer foregår af gode grunde i konstruktionsfasen.<br />
Gennem hele udviklingsforløbet udføres ni aktiviteter (eng.: work flows). Dels seks<br />
kerneaktiviteter:<br />
– FORRETNINGSMODELLERING som sørger for koblingen mellem de forretningsprocesser<br />
som it-systemet indgår i, og selve it-systemet. Er det det rigtige vi udvikler?<br />
– KRAV som beskæftiger sig med en grundig forståelse og beskrivelse af kravene til systemet.<br />
Der laves vision, identificeres aktører og beskrives use cases. Hvad skal vi<br />
lave?<br />
– ANALYSE og DESIGN beskæftiger sig med hvordan vi rent faktisk vil implementere systemet.<br />
Det er her vi tænker på delsystemer, arkitektur og grænseflader.<br />
– IMPLEMENTERING hvor vi udvikler koden og tester at enkeltkomponenter virker.<br />
– TEST hvor vi tester at komponenter og delsystemer virker sammen, at hele systemet<br />
virker og at alle krav er implementeret korrekt.<br />
– UDRULNING hvor vi i en række delleverancer indfører systemet i brugerorganisationen<br />
og hjælper brugerne med at tage det i anvendelse.<br />
44 | 2 · <strong>PROCESSERNE</strong>
Dels tre støtteaktiviteter:<br />
– PROJEKTLEDELSE som handler om faktisk at få gennemført de nævnte aktiviteter på<br />
en afbalanceret måde.<br />
– KONFIGURATIONS- og ÆNDRINGSSTYRING som holder styr på alle de mange krav,<br />
mellemprodukter og releases undervejs.<br />
– UDVIKLINGSMILJØ som sørger for at dels udviklingsprocessen, dels de værktøjer som<br />
projektgruppen har behov for, er til stede og tunet til opgaven.<br />
Men det er vigtigt at understrege at disse ni aktiviteter forløber gennem hele projektet.<br />
Der bliver dog ikke lagt lige meget arbejde i dem i alle faserne. F.eks. lægges der flere<br />
kræfter i arbejdsgangen implementering i konstruktionsfasen.<br />
Du kan læse mere om RUP i f.eks. [Kruchten00].<br />
<strong>2.</strong>4.4 Microsoft Solution Framework<br />
MSF er en ramme for systemudvikling, det er ikke en egentlig metode. Den er udviklet<br />
af Microsoft gennem mange år og indeholder essensen af hvad Microsoft mener er best<br />
practice. MSF består af en række modeller:<br />
– PROCESMODELLEN som beskriver hvordan udviklingsprocessen forløber.<br />
– ROLLEMODELLEN som beskriver de forskellige roller i projektgruppen. Den vender vi<br />
tilbage til i det senere afsnit om Organisation (side 164 ).<br />
– APPLIKATIONSMODELLEN som beskriver applikationens arkitektur.<br />
– RISIKOMODELLEN som beskriver hvordan projektet skal forholde sig til risici gennem<br />
hele forløbet.<br />
Procesmodellen beskriver at projektet overordnet inddeles i fire faser:<br />
– VISIONSFASEN (eng.: Envisioning phase) hvor vi danner overblikket over projektets<br />
omgivelser og mål: Hvad går det ud på?<br />
– Planlægningsfasen (eng.: Planning phase) hvor vi laver kravspecifikation og overordnet<br />
projektplan.<br />
– UDVIKLINGSFASEN (eng.: Developing phase) hvor produktet udvikles og testes. Udviklingen<br />
sker iterativt, evt. i parallelle forløb.<br />
– MODNINGSFASEN (eng.: Stabilizing phase eller Deployment phase) hvor produktet testes<br />
i den virkelige verden og gradvist tages i brug.<br />
Bemærk at MSF, ligesom RUP, er en hybrid mellem en vandfaldsmodel og en iterativ<br />
model. Man har taget det bedste fra begge verdener.<br />
2· <strong>PROCESSERNE</strong> | 45
MSF er i øvrigt en del af et endnu større koncept, nemlig ESF, Enterprise Services<br />
Framework. Det omfatter:<br />
– Microsoft Readiness Framework (MRF) som er en foranalyse der skal afdække de<br />
forskellige løsningsmuligheder og deres egnethed i relation til de forretningsmæssige<br />
mål.<br />
– Microsoft Solution Framework (MSF).<br />
– Microsoft Operations Framework (MOF) som omfatter drift og vedligehold.<br />
Se i øvrigt mere om MSF på www.microsoft.com.<br />
<strong>2.</strong>4.5 eXtrem Programmering<br />
eXtrem Programmering (eng.: eXtreme Programming, XP) er et eksempel på en adræt<br />
metode. Her gives en kort oversigt over metoden.<br />
Det centrale styringsredskab er de såkaldte user stories som er meget små funktionalitetsbeskrivelser.<br />
XP består af 12 selvstændige teknikker som tilsammen udgør XP:<br />
– PLANLÆGNINGSSPILLET (eng.: The Planning Game). Kunden og projektgruppen fastlægger<br />
i fællesskab hvad den næste aflevering skal indeholde. Det er et tæt samspil<br />
mellem kundens forretningsmæssige prioritering og udviklernes estimater.<br />
– SMÅ DELLEVERANCER er nødvendige for hele tiden at have et kørende system.<br />
– METAFOREN er et “billede” på systemet som alle kan referere til. Hvad handler systemet<br />
om, fortalt på to linjer. Den fælles vision.<br />
– SIMPELT DESIGN betyder at vi under hele opbygningen holder designet på det<br />
simplest mulige. Vi tager altså ikke hensyn til at vi i næste uge skal lave en tilføjelse<br />
som kræver et mere kompliceret design. Så laver vi det mere kompliceret til den tid.<br />
Men ikke nu. Dette er KISS-reglen: “Keep It Small and Simple” som vi senere vender<br />
tilbage til i andre sammenhænge.<br />
– TEST FØR KODNING. Hvis test er godt, så må vi teste hele tiden. Og her laver vi så testen<br />
før vi laver den kode der skal testes. Testen fejler (fordi koden den skal teste ikke<br />
er skrevet endnu), men når vi får skrevet koden, så virker testen. Alle disse tests automatiseres<br />
så vi hurtigt kan verificere at hele systemet virker indtil nu.<br />
– OMBRYDNING (eng.: Refactoring) betyder at vi hele tiden bliver klogere mht. hvordan<br />
designet af systemet skal være – og så tilpasser vi det løbende. Hvilket vi også er nødt<br />
til fordi designet skal holdes på det simplest mulige hele tiden. Vi er altså ikke bange<br />
for at lave noget om. Og det behøver vi heller ikke at være – for med den automatiske<br />
test har vi vished for at det virker, også efter ombrydningen.<br />
46 | 2 · <strong>PROCESSERNE</strong>
– PARPROGRAMMERING (eng.: Pair Programming) er nok den mest kendte af XP-teknikkerne.<br />
Det betyder helt bogstaveligt at to programmører sidder samtidig ved den<br />
samme skærm og hjælpes ad med at kode. Oftest skiftes de til at sidde med tastaturet,<br />
og så koder og skriver den ene, mens den anden løbende tjekker at det er korrekt.<br />
Hvis review er godt, så lad os reviewe koden hele tiden.<br />
– FÆLLES EJERSKAB betyder at der ikke findes “dine moduler” og “mine moduler”. Det<br />
er “vores moduler” alle sammen, og hvis jeg har brug for at rette et sted i koden, så<br />
gør jeg det. Den automatiske test sikrer at der ikke sker ulykker. Egofri programmering<br />
er i øvrigt et gammelt begreb som er omtalt allerede i 1971 (se [Weinberg98]).<br />
– FORTLØBENDE INTEGRATION betyder at vi integrerer hele systemet hele tiden. Så er vi<br />
sikre på at det vi har lavet, hele tiden virker.<br />
– 37-TIMERS UGE. De fleste udviklere elsker denne regel. Baggrunden er den at når udviklere<br />
har været kreative en hel arbejdsdag, er de trætte. Og hvis de koder videre, laver<br />
de fejl. Det er billigere og bedre bare at lade dem gå hjem og hvile ud til næste dag.<br />
– KUNDEN TIL STEDE betyder helt bogstaveligt at kunden skal være umiddelbart tilgængelig<br />
for udviklerne. Når vi ikke har en egentlig nedskreven detaljeret kravspecifikation,<br />
må vi kunne få afklaret alle tvivlsspørgsmål her og nu.<br />
– KODESTANDARDER er helt nødvendige når vi har fælles ejerskab til koden. Ellers bliver<br />
det noget rod.<br />
Bemærk at alle disse teknikker skal være i anvendelse før man taler om eXtrem Programmering.<br />
Hvis én eller flere mangler, virker metoden ikke optimalt.<br />
I det senere afsnit om Organisation (side 167) ser vi på de roller som findes i eXtrem<br />
Programmering. Du kan i øvrigt læse mere om XP i [Beck00] og [Beck01].<br />
I øvrigt findes der en konkretisering af Unified Process som til forveksling ligner<br />
eXtrem Programmering. Den kaldes dX (læs det på hovedet). Den kan bruges hvis man<br />
skal bruge Unified Process, men gerne vil bruge XP.<br />
<strong>2.</strong>4.6 Foranalyse<br />
Inden der er taget endelig stilling til om projektet overhovedet skal startes, laves sommetider<br />
et foranalyseprojekt. Det kaldes også et forprojekt, et feasibility study eller et<br />
“præjekt”. Det svarer lidt til at vi starter med at lave jordbundsanalyser inden vi påbegynder<br />
et byggeprojekt.<br />
Som resultat udarbejdes en foranalyserapport (en business case) som fastlægger om<br />
projektet rent forretningsmæssigt kan bære. Den skal danne beslutningsgrundlag for<br />
hvorvidt projektet overhovedet skal sættes i gang.<br />
2· <strong>PROCESSERNE</strong> | 47
Rapporten indeholder f.eks.:<br />
– Formålet med projektet. Hvorfor laver vi egentlig det her? Hvilket problem vil vi<br />
løse?<br />
– Overordnet beskrivelse af hvad det er vi vil lave.<br />
– Beskrivelse af teknologien (hvis relevant).<br />
– Risikoanalyse.<br />
– Beskrivelse af projektets finansiering.<br />
– Anslået tid og pris.<br />
– Cost/benefit-analyse, kan det betale sig?<br />
Dette dokument kan senere udbygges til at blive projektgrundlaget.<br />
En del af arbejdet med foranalysen går ud på at få opbygget en forståelse for den<br />
opgave der skal løses. I diskussionen med brugerne om et eventuelt nyt system kan<br />
f.eks. anvendes mock-ups, dvs. skærmbilleder på papir. Eller man kan lave egentlige<br />
prototyper for at demonstrere og afprøve systemets grænseflader.<br />
Men at analysere for længe er også farligt (eng.: analysis paralysis). I en misforstået<br />
angst for ikke at gøre det godt og grundigt nok bliver vi ved med at analysere langt efter<br />
at vi skulle være gået videre til næste fase. Det gælder både foranalysen og en<br />
eventuel senere analysefase.<br />
Flere udviklingsmodeller omfatter en foranalyse (f.eks. DSDM og Microsoft Readiness<br />
Framework). Du kan læse mere om foranalyse i f.eks. [Bødker00].<br />
<strong>2.</strong>4.7 Kravspecifikationen<br />
Inden vi går i gang med selve udviklingen, skal vi have styr på hvad det er vi vil lave.<br />
Denne aktivitet kaldes kravspecifikation, og det er en videnskab i sig selv. Da det samtidig<br />
er en af de væsentligste forudsætninger for projektets succes, er der al mulig grund<br />
til at tage kravspecifikationen alvorligt.<br />
Tidligere lavede man næsten altid kravspecifikationen (eng.: SRS, Software Requirement<br />
Specification) som en opremsning af produktkrav, dvs. præcise beskrivelser af<br />
funktionerne i systemet. I dag har man flere strenge at spille på, og også i forståelsen af<br />
kravene til systemet anvender vi en multiperspektivisk tilgang:<br />
– FORRETNINGSANALYSEN udarbejder en forretningsmodel som giver overblik over<br />
domænet og indplacerer it-systemet i den rigtige sammenhæng.<br />
– DOMÆNEBESKRIVELSEN er en beskrivelse af de kommende brugeres arbejde – det arbejde<br />
som det nye system skal understøtte. Dette kan også omfatte en arbejdsgangsanalyse.<br />
48 | 2 · <strong>PROCESSERNE</strong>
– FUNKTIONELLE KRAV beskriver de enkeltkrav der kan opstilles til systemets funktionalitet.<br />
Ofte beskrives disse i form af Use Cases (brugsmønstre).<br />
– BRUGERGRÆNSEFLADEKRAVENE beskriver kravene til systemet set fra brugerens side.<br />
– INFORMATIONSMODELLEN giver overblik over hvilke informationer systemet skal<br />
holde styr på.<br />
– YDELSESKRAVENE (eng.: performance) skal også beskrives. Det kan være krav til<br />
transaktionsmængder (eng.: throughput), antal samtidige brugere, spidsbelastning<br />
(eng.: peak), databasestørrelse osv.<br />
– SIKKERHEDSKRAVENE beskriver hvilke krav der stilles til datasikkerhed, adgangskontrol,<br />
recovery osv.<br />
– ORDLISTEN indeholder en alfabetisk liste over alle domænets ord, termer og begreber,<br />
med tilhørende definition og beskrivelse. Selve arbejdsprocessen med at udarbejde<br />
ordlisten vil som regel altid ske i samarbejde med en domæneekspert. Det kan i øvrigt<br />
også være en læreproces for domæneeksperten at lave ordlisten. Begreber man<br />
har gået og brugt i det daglige, er ikke altid helt så enkle når de skal forklares, formuleres<br />
og nedskrives.<br />
I erkendelse af at det kan være særdeles vanskeligt at give fastpristilbud på et stort system<br />
uden at kende kravene, ses det ofte at udviklingen af selve kravspecifikationen laves<br />
som et forprojekt (eventuelt til fast pris). Når kravspecifikationen så foreligger, kan<br />
der gives tilbud på udviklingen af det egentlige system.<br />
Omvendt skal vi også være klar over at det sjældent er en god ide at forsøge at detailspecificere<br />
ned til den mindste detalje. Hvis vi ikke kender området, er det bedre at<br />
holde kravene overordnet så vi kan drage fordel af læreprocessen undervejs.<br />
Proportionalitetsreglen<br />
Ved udarbejdelse af kravspecifikationer gælder proportionalitetsreglen: Små systemer –<br />
lille kravspecifikationsindsats. Store systemer – stor indsats. Proportionalitetsreglen siger<br />
generelt at der skal være sammenhæng mellem tingene, og der skal være måde<br />
med galskaben. Vi skal hverken skyde gråspurve med kanoner eller skyde elefanter<br />
med ærtebøsser. I forbindelse med kravspecifikationen betyder det altså at vi ikke skal<br />
køre det helt store apparat i stilling for at lave en lillebitte opgave. Men at det på den<br />
anden side er i orden at bruge mange kræfter på at finde ud af hvad systemet går ud på<br />
hvis det er meget stort.<br />
2· <strong>PROCESSERNE</strong> | 49
Videre studier<br />
Du kan læse mere i [Lauesen00] som er en introduktion til området, eller i [Lauesen02]<br />
som er den autoritative bog om kravspecifikation. Også [Wiegers99] og [Robertson99]<br />
rummer god indsigt i området. Use Case-teknikken er beskrevet i [Schneider98]. [Biering-Sørensen88]<br />
rummer også et kapitel om kravspecifikation. Bruger du RUP, kan<br />
[Leffingwell99] anbefales. Endelig rummer [IEEE830] et udmærket forslag til en indholdsfortegnelse<br />
for kravspecifikationer.<br />
<strong>2.</strong>4.8 Valg af udviklingsmodel<br />
Et af de klassiske problemer i it-projekter er at man glemmer at være bevidst om sin<br />
udviklingsmodel. Man behøver ikke nødvendigvis vælge en af de etablerede (selv om<br />
det er det letteste fordi de er så velbeskrevne). Man kan sagtens lave sin egen tilpassede<br />
(eng.: tailoring). Bare man har en.<br />
Når projektet (eller virksomheden) står over for at skulle vælge en udviklingsmodel,<br />
er der flere hensyn at tage:<br />
– Hvor godt forstår vi (og kunden) anvendelsesområdet?<br />
– Vil kravene ændre sig undervejs?<br />
– Hvor godt kender vi udviklingsmiljøet?<br />
– Hvor godt kender vi den organisation som skal modtage systemet?<br />
– Hvor meget styr har vi på designet af denne type applikationer?<br />
– Kræves der fast pris, tid og funktionalitet?<br />
– Hvor mange personer skal deltage i udviklingen?<br />
Er der tale om udvikling til fast pris og tid inden for et velkendt domæne, kan det være<br />
mest praktisk med en vandfaldsmodel. Er der derimod tale om ukendt land, vil en<br />
iterativ model med indbygget udnyttelse af læreprocesserne være at foretrække. Det<br />
kan godt være at det kræver nogen pædagogisk overtalelse af projektsponsoren, men<br />
tro mig: det er det værd.<br />
Skift af model<br />
Det tager ofte lang tid at få en udviklingsmodel ind under huden. Så man skal ikke skifte<br />
udviklingsmodel for tit – man når simpelthen ikke at lære dens styrker og svagheder tilstrækkeligt<br />
godt at kende, og man går glip af læreprocessen med at anvende modellen.<br />
Men behersker man flere modeller, og er der tale om et stort system inden for et<br />
ukendt område, kan man også vælge en adræt model i starten, for siden at gå over til<br />
f.eks. RUP.<br />
50 | 2 · <strong>PROCESSERNE</strong>
Regler eller ej?<br />
Når mange mennesker skal arbejde sammen, er et vist mål af regler nødvendigt. Hvis<br />
alle blot gør hvad der passer dem, ender det hele i anarki. Vi har behov for nogle færdselsregler<br />
som sikrer at vi ikke modarbejder hinanden. Nogle regler er lette at få udviklerne<br />
til at forstå – og følge. F.eks. at vi skal benytte et fælles versionsstyringsværktøj så<br />
vi undgår problemer med at flere udviklere vil rette i de samme filer samtidig, og så vi<br />
altid kan genskabe tidligere releases. Andre regler kan det være sværere at håndhæve.<br />
F.eks. regler omkring kodestandarder (“Jeg har altid lavet 4 indrykninger efter en if!”).<br />
Se også det senere afsnit om Standarder (side 173) i kapitlet om Projektetablering.<br />
Jo flere personer der er involveret i projektet, jo større er behovet for fælles regler.<br />
2-4 udviklere kan sagtens koordinere ved at snakke sammen hele tiden. Når vi bliver<br />
ret mange flere, går der alt for lang tid med diskussion hvis vi ikke følger de samme<br />
retningslinjer.<br />
Imidlertid er vi her oppe imod store kræfter. For det<br />
første menneskets iboende dovenskab. De fleste vil helst<br />
springe over hvor gærdet er lavest (eng.: Path of least<br />
resistance). Dette kaldes dovenskabsreglen eller reglen<br />
om den mindste modstand. Det ses f.eks. når der trædes<br />
stier den direkte vej hen over en græsplæne – selv om<br />
der er anlagt “officielle” flisegange.<br />
For det andet er vi oppe imod menneskets særdeles kreative evner når det handler<br />
om at omgå love og regler. Jeg vil illustrere dette med en berømt fangeflugt:<br />
Hvor der er en vilje<br />
I 1949 brød fangen Carl August Lorentzen ud fra sin celle i Horsens Statsfængsel. Han havde<br />
fjernet bagklædningen i det lille skab i cellen og kunne derved bryde gennem muren til et lille<br />
trapperum. Ad den vej tilbragte han nætterne i det meste af et år med at grave en 20 meter<br />
lang tunnel ud under fængselsmuren. Den bortgravede jord gemte han på loftet. Efter flugten<br />
fandt man i det lille skab i cellen en seddel hvor han havde skrevet de senere så berømte ord:<br />
“Hvor der er en vilje, er der også en vej!”<br />
For god ordens skyld: det er ikke Lorentzen der har fundet på dette ordsprog – det er<br />
ældgammelt og findes i flere kulturer.<br />
2· <strong>PROCESSERNE</strong> | 51
Så hvis du tror at du kan styre folk gennem regler som de ikke er enige i, så husk på<br />
“hvor der er en vilje”-syndromet. I den virkelige verden finder den ofte anvendelse<br />
omkring omgåelse af skattelovene. I naturen finder den anvendelse når mælkebøtterne<br />
bryder frem gennem asfalten (derfor kaldes det også undertiden mælkebøttesyndromet).<br />
Og ofte ledsages den af bemærkninger som “Så må vi jo finde på noget andet”,<br />
“Det skal de i hvert fald ikke bestemme” og lignende.<br />
Men bevidstløst regelrytteri er også galt. Det er tilladt at bruge indersiden af hovedet<br />
og træffe velovervejede beslutninger – også selv om reglerne siger noget andet (eng.:<br />
Engage your brain).<br />
<strong>2.</strong>4.9 Softwarehåndbogen<br />
Udviklingsmodellen beskrives typisk i en softwarehåndbog (også kaldet en projekthåndbog).<br />
Den skal helst være tilgængelig online på virksomhedens intranet. Softwarehåndbøger<br />
på papir er for vanskelige at holde opdateret, og så forældes de lynhurtigt.<br />
Men selv en nok så god softwarehåndbog er intet værd hvis udviklerne ikke kender<br />
dens indhold. Så den skal under alle omstændigheder suppleres med undervisning i<br />
dens brug når der kommer nye udviklere. Og de gamle kan formentlig også trænge til<br />
at få den frisket op en gang imellem.<br />
<strong>2.</strong>5 Læreprocesserne<br />
Forestil dig at du hver den 1. i måneden bliver bedt om at være projektleder på udviklingen<br />
af et givet system. Og det er nøjagtigt det samme system du skal udvikle måned<br />
efter måned. Det er naturligvis en tænkt situation, men mit gæt er at du vil blive i stand<br />
til at udvikle systemet på stadig kortere tid – indtil en vis grænse. Denne grænse kan vi<br />
kalde idealtiden, dvs. den tid det tager at udvikle systemet hvis alting bare flasker sig,<br />
og hvis vi ved det hele. Tiden som du de første gange bruger ud over idealtiden, kan vi<br />
kalde overtiden. Altså den tid du bruger “for meget”. Lad os kigge på hvad overtiden<br />
egentlig bruges til. Den bruges nemlig til en række læreprocesser. Vi skal blive klogere<br />
mht. PIP:<br />
– Produktet, dvs. f.eks. anvendelsesområdet og den konkrete applikations design.<br />
– Interessenterne, dvs. f.eks. kundens forhold og samarbejdet i projektgruppen.<br />
– Processen, dvs. f.eks. udviklingsmiljøet.<br />
52 | 2 · <strong>PROCESSERNE</strong>
Produktet<br />
Læreprocesserne omkring anvendelsesområdet (domænet) handler om at vi skal tilegne<br />
os viden om den verden systemet skal virke indenfor. Er det f.eks. et system til patientadministration,<br />
skal vi vide noget om hvordan et hospital fungerer. Er det et system<br />
til styring af et kraftværk, skal vi vide noget om hvordan et kraftværk fungerer. Derfor<br />
kan det sommetider være en god ide at tilbringe nogle dage i det miljø hvor systemet<br />
skal bruges ([Bødker00]).<br />
Vi skal opbygge den konkrete applikations design. Vi skal lave en arkitektur som<br />
egner sig til denne applikation. Vi skal finde ud af hvilke komponenter systemet skal<br />
bestå af. Og hvordan de snakker sammen. Vi skal måske opbygge (eller genbruge) hele<br />
application frameworks, dvs. standardarkitekturer for denne type systemer.<br />
Interessenterne<br />
Projekter er bl.a. kendetegnet ved at det er forskellige personer der deltager fra gang til<br />
gang. Kunden er sjældent den samme. Brugerne er forskellige. Og projektgruppen<br />
sammensættes ofte på ny hver gang. Derfor skal vi lære os hvordan projektets interessenter<br />
denne gang er skruet sammen. Hvilke behov de har. Hvordan de kan takles bedst<br />
muligt. Hvordan vi sikrer at så mange af deres interesser som muligt opfyldes. Vel vidende<br />
at de kan være modstridende.<br />
Processen<br />
Læreprocesserne omkring udviklingsmiljøet handler om at vi skal sætte os ind i udviklingsværktøj,<br />
compiler, standardkomponenter, biblioteker, udviklingsplatform, konfigurationsstyringsværktøjer<br />
osv.<br />
Læreprocesser tager tid<br />
Det er ofte læreprocesserne som er skyld i at it-udvikling underestimeres. Vi glemmer<br />
simpelthen at tage højde for alle de ting som vi ikke ved, og som vi skal sætte os ind i<br />
(lære) hen ad vejen. I andre brancher kaldes fænomenet “begyndervanskeligheder” eller<br />
“børnesygdomme” – begreber som dækker over at vi udmærket godt ved at ting<br />
kan gå galt når vi starter på noget nyt. Vi snakker om at “al begyndelse er svær”.<br />
I øvrigt siger man lidt i spøg at det først er det tredje system (af samme slags) man<br />
udvikler som rammer rigtigt, både hvad angår funktionalitet og resurseforbrug. På det<br />
tidspunkt har man nemlig gennemført så mange af læreprocesserne at overtiden og<br />
“skæverterne” er kommet ned på et acceptabelt niveau. Det minder lidt om følgende<br />
historie om at tegne en hane:<br />
2· <strong>PROCESSERNE</strong> | 53
At tegne en hane<br />
Det fortælles om Kejseren af Kina at han bestilte en tuschtegning af en hane hos en dygtig<br />
tegner. Tegneren sagde at den kunne være klar om fire år. Fire år senere var den dog endnu<br />
ikke klar, men tegneren lovede at om fire år mere ville den være færdig. Fire år senere gentog<br />
historien sig. Da Kejseren efter nu tolv års forløb troppede op med hele sit følge hos tegneren,<br />
sagde denne at nu var den klar. Han tog et nyt stykke papir, og med sin pensel tegnede<br />
han i én eneste hurtig bevægelse en helt ufatteligt livagtig hane. Da Kejseren spurgte hvorfor<br />
han skulle bruge tolv år, tog tegneren ham med ind i rummet ved siden af hvor der lå stabler<br />
af tegninger fra gulv til loft – af haner!<br />
Frit efter [Bastian88]<br />
Nu behøver du ikke tage denne historie som udtryk for at du bare kan forsinke projektet<br />
til det tredobbelte fordi det så bliver sublimt.<br />
De iterative processer har deres styrke ved at læreprocesserne indbygges i selve udviklingsforløbet.<br />
Ved hver iteration bliver vi lidt klogere mht. de tre læreprocesser. Ved<br />
de første iterationer gætter vi sædvanligvis meget galt. Men fordi vi bliver klogere og<br />
klogere hen gennem udviklingsforløbet, rammer vi mere og mere præcist. Nøgleordet<br />
er feedback. Fordi vi bliver i stand til at udnytte vores forøgede viden i løbet af selve<br />
projektet, kan vi løbende tilpasse såvel produkt som proces.<br />
Den amerikanskfødte (og norsk bosatte) it-guru Tom Gilb har sagt det meget rammende:<br />
“Hvis du ikke ved hvad du har med at gøre, så lad være med at gøre det i stor<br />
skala.” Eller som det mere poetisk er udtrykt af Piet Hein i dette Gruk:<br />
Du skal bruge en del af dit snilde<br />
til at trylle din opgave lille.<br />
Når du først har lagt seletøj på den -<br />
lad den gro sig så stor, du kan få den!<br />
Eller med et gammelt ordsprog: Man skal kravle før man kan gå. Start i det små indtil<br />
du har styr på hvad du har med at gøre, dvs. indtil du har været igennem læreprocesserne.<br />
Så kan du altid sætte turbo på bagefter.<br />
<strong>2.</strong>5.1 Nyt eller gennemprøvet?<br />
“Vi skal tjene penge og have det sjovt. Men vi skal ikke tjene så mange penge at vi ikke<br />
54 | 2 · <strong>PROCESSERNE</strong>
har det sjovt. Og vi skal ikke have det så sjovt at vi ikke tjener penge”. Sådan lyder en<br />
klassiker fra ledelseslitteraturen. Og den kan overføres til it-udvikling. Nogle gange har<br />
vi det så sjovt at vi får udviklet for lidt og forkert. Vi har så meget fokus på hele tiden at<br />
anvende den ultimative og nyeste teknologi at vi glemmer det vigtigste: at vi skal lave<br />
gode systemer til kunderne. Her bør vi satse mere på det gode håndværk, frem for at<br />
forfølge de nyeste (og sjoveste) værktøjer og ideer for enhver pris. Det er nemlig ikke<br />
altid brugerne opdager at deres system er lavet med en meget fancy, ny indmad – og<br />
som regel er de også ligeglade.<br />
Man kunne stille spørgsmålet: For hvis skyld er det så vi uophørligt jagter det nyeste?<br />
Er det i virkeligheden for udviklernes egen skyld? For at de kan have det sjovt? Og<br />
vise at de er med på noderne? Og at det er sjovt at arbejde her hos os, så vi kan tiltrække<br />
og fastholde de dygtigste udviklere? Dette kaldes også Mount Everest-syndromet: vi<br />
bruger den nyeste teknologi bare for at bevise at vi kan. Og nogle kalder ny teknologi<br />
for “udviklernes opium”: de skal have noget nyt at lege med en gang imellem. Selvfølgelig<br />
skal vi hele tiden holde nyhederne under observation, men måske ville vi en gang<br />
imellem stå os bedre ved lige at vente lidt og få andre til at indhøste erfaringer med nye<br />
værktøjer, mens vi koncentrerer os om at få løst opgaven til kundens tilfredshed.<br />
Og så er der lige det med læreprocessen: når vi endelig er blevet gode til en bestemt<br />
teknologi eller et bestemt værktøj, kan vi jo lige så godt have glæde af det – i stedet for<br />
straks at ile videre til det næste og dermed starte forfra på læreprocessen.<br />
Men man skal heller ikke vente alt for længe med at tage nye teknologier i brug.<br />
Det kaldes Thomas Lawson-syndromet hvis man krampagtigt forsøger at holde fast i en<br />
kendt teknologi længe efter at man burde være skiftet til en ny:<br />
Thomas Lawson<br />
I slutningen af 1800-tallet, da dampskibene begyndte at fortrænge sejlskibene, forsøgte nogen<br />
at bygge større og større sejlskibe ud fra ideen om at det var en kendt teknologi, og de var<br />
prisbillige at sejle med. F.eks. byggede man både fem- og seks-mastede skonnerter. Og i 1902<br />
byggede man verdens eneste syv-mastede skonnert, Thomas Lawson. For at håndtere sejlene<br />
havde den installeret en lille dampmaskine! Skibet var i øvrigt ikke særligt manøvredygtigt, og<br />
det sank i 1907.<br />
Eller med den amerikanske psykolog Abraham Maslows ord: “hvis du er god til at bru-<br />
2· <strong>PROCESSERNE</strong> | 55
ge en hammer, så ligner alle problemer søm”. Nogle har en tendens til udelukkende at<br />
løse problemer med de teknologier de nu en gang behersker (“Det vi har brug for her,<br />
er en større hammer”, [Senge99]). Det er også galt. Vi skal beherske så tilpas mange teknologier<br />
at vi er i stand til at vælge den bedst egnede til opgaven. Det er kompliceret,<br />
det her. Sammenlign i øvrigt med det multiperspektiviske syn – nogle har en tendens<br />
til at anskue verden ud fra et enkelt perspektiv. Så kender du kun til at bruge en hammer,<br />
bruger du “hammerperspektivet”.<br />
<strong>2.</strong>5.2 Sølvkugler<br />
I den mørke middelalders Transsylvanien – dengang ulvene tudede, bjørnene brølede<br />
og vampyrerne føg om ørerne på folk – mente folkeovertroen at man endegyldigt kunne<br />
dræbe en varulv ved at skyde den med en sølvkugle. Disse sølvkugler (eng.: silver<br />
bullet) er siden blevet synonyme med en enkeltstående, hurtig løsning på et slemt problem<br />
(se [Brooks87]). Inden for it-verdenen har vi i tidens løb hørt om mange sådanne<br />
“frelserteknologier”, f.eks.:<br />
– CASE-værktøjer<br />
– Objektorientering (OO)<br />
– Genbrug og komponenter<br />
– Design Patterns<br />
– Use Case-teknikken<br />
– Java<br />
– XML<br />
– eXtrem Programmering<br />
Hver for sig udmærkede teknologier. Men fælles for dem er at ved deres fremkomst<br />
blev de udråbt som revolutionerende og med et potentiale til at løse (næsten) alle problemer.<br />
Hvilket selvfølgelig er noget sludder. Så lad være med at tro at alle dine problemer<br />
med it-udvikling kan løses af én enkelt teknologi. Der er specielt grund til at tænke<br />
sig om ved anskaffelse af værktøjer. Det er før set at værktøjer er blevet oversolgt så<br />
nogle har fået det indtryk at de kunne løse flere problemer end tilfældet faktisk var.<br />
Hvis man konsekvent halser efter de nyeste teknologier, kaldes det i spøg for Management<br />
by Buzzwords.<br />
Som tidligere nævnt findes der heller ikke simple løsninger inden for projektledelse.<br />
Hvis nogen prøver at bilde dig det ind, så lad være med at tro på dem. Det er og bliver<br />
kompliceret, det her.<br />
56 | 2 · <strong>PROCESSERNE</strong>
<strong>2.</strong>5.3 Videndeling<br />
Videndeling er vigtigt at beskæftige sig med som projektleder, og det vil vi kigge lidt<br />
på i dette afsnit.<br />
Kan viden overhovedet deles?<br />
I filmen The Matrix oplevede vi hvordan ny viden blev downloadet direkte ind i hjernen.<br />
Der går nok lige et par år før udviklerne kan dele deres viden på denne meget<br />
it-agtige måde. Spørgsmålet er om man i det hele taget kan dele sin viden med andre.<br />
Viden er snarere noget som hver enkelt selv skal tilegne sig, og derfor er det også vigtigt<br />
at man giver udviklerne muligheden for at tilegne sig hinandens viden. Det skal<br />
altså være politisk acceptabelt i virksomheden at man tilegner sig hinandens viden.<br />
F.eks. gennem mesterlære (som i XP), gennem interne foredrag, gennem sparring og<br />
spørgen til råds, gennem review af hinandens kode osv.<br />
Genbrug er besværligt<br />
Dybe tallerkener er uhyre nyttige – ellers blev de vel heller ikke opfundet så tit. Der kan<br />
ligefrem gå sport i det. For mange it-udviklere er det i hvert fald en yndet beskæftigelse<br />
at genopfinde allerede kendte løsninger, og det er egentlig en skam, for det er både dyrt<br />
og forsinkende.<br />
I ganske mange år har ordet genbrug været et magisk ord (en sølvkugle) blandt ledere<br />
i it-branchen. Man så for sig hvordan udviklerne kunne spare enorme mængder af<br />
tid ved “blot” at genbruge tidligere udviklet kode i nye sammenhænge. Men efterhånden<br />
har man indset at udviklernes iboende trang til tallerkenopfinding har stukket en<br />
effektiv kæp i hjulet for de altomfattende genbrugsbiblioteker. Dygtige udviklere udvikler<br />
hver for sig deres egne genbrugsbiblioteker hvorfra de klippe-klistrer kodestumper<br />
og moduler. Men udviklerne imellem er det meget sværere. Dels skal man over<br />
psykologiske barrierer (NIH: Not Invented Here - det er ikke mig der har fundet på<br />
det). Dels skal man over økonomiske barrierer (det koster en del tid at gøre kode genbrugelig).<br />
Og endelig skal man over tekniske barrierer (det er ikke helt let at organisere<br />
et genbrugsbibliotek så tingene faktisk er lette at genfinde). Derfor har kun ganske få<br />
virksomheder succes med genbrug ud over få standardmoduler.<br />
NIH-syndromets modsætning er at man sætter en ære i at genbruge så meget som<br />
muligt: “Steal with pride, share with delight”.<br />
Mønstre er viden<br />
Midt i 1990’erne blev mønstrene (design patterns) heldigvis opfundet. Det er en metode<br />
2· <strong>PROCESSERNE</strong> | 57
til at beskrive gode løsninger på bestemte problemer: – Når du står med dette problem,<br />
så er løsningen sådan-og-sådan. Og man satte oven i købet navn på. Nu kunne man<br />
høre udviklere snakke om et singleton-pattern, et observer-pattern osv. Hver udvikler<br />
behøvede nu ikke længere genopfinde de samme løsninger på de problemer som man<br />
tidligere havde opfundet udmærkede løsninger på. Det var et godt skridt i den rigtige<br />
retning. At det så er for få udviklere der sætter sig ind i de tilgængelige mønstre – ja,<br />
det er en helt anden sag. Hvis du vil gøre noget ved dette problem, kan du f.eks. lave<br />
en studiekreds hvor I hver gang diskuterer et bestemt emne som en af udviklerne så<br />
skal komme med oplæg til. Det er en god måde at holde hinandens viden ved lige på. I<br />
øvrigt taler man også om anti patterns som er mønstre for at gøre noget på den forkerte<br />
måde. Disse er f.eks. beskrevet i [Brown98] og [Brown00].<br />
Lægerne bruger teknikken<br />
Inden for andre erhverv er det velkendt at man deler sin viden til gavn for hinanden –<br />
og kunderne. F.eks. ser læger hinanden over skuldrene når de opererer. Noget der har<br />
sparet mange menneskeliv. Det er et eksempel på brug af den gamle mesterlære. Man<br />
betragter “Mesteren i arbejde” og lærer derved hvordan man selv skal gøre. Det er en<br />
effektiv teknik når man ikke er i stand til at sætte ord på sin viden. Sådan ordløs viden<br />
kaldes i øvrigt tavs viden eller implicit viden (i modsætning til den viden man kan skrive<br />
ned – den kaldes eksplicit viden).<br />
It-udviklere i mesterlære<br />
Den mest omtalte af de teknikker der tilsammen udgør eXtrem Programmering, er<br />
par-programmering: kode udvikles af to udviklere samtidig ved den samme skærm.<br />
Og det er i realiteten en fantastisk måde at lære af hinanden på. God programmeringsskik<br />
er nemlig en vanskelig evne at sætte ord på. De fleste dygtige udviklere kan kende<br />
god programmering når de ser den. Men at beskrive det.... Derfor foregår der ekstremt<br />
meget videndeling når udviklerne benytter XP. Det forudsætter dog at det faktisk er<br />
god programmeringsskik der videreføres – og ikke unoder. Derfor er en vis rokering en<br />
god ide, så man lærer fra forskellige og ikke udelukkende fra den samme. Se i øvrigt<br />
[McConnell93] omkring god programmeringsskik.<br />
Procesviden kan også deles<br />
Vidensteoretikerne har en model som fortæller hvordan viden skabes i en stadig vekslen<br />
mellem tavs og eksplicit viden. Man nedskriver, man læser og sammensætter fra<br />
flere kilder, man ser hinanden gøre tingene, man begynder selv at gøre dem:<br />
58 | 2 · <strong>PROCESSERNE</strong>
– SOCIALISERING (eng.: Socialization). Tavs-tavs. Her videregives den tavse viden fra<br />
én person til en anden, uden at sætte ord på. Det er typisk for bl.a. mesterlæren hvor<br />
lærlingen ser hvordan mester gør. Jf. parprogrammering i XP.<br />
– EKSTERNALISERING (eng.: Externalization). Tavs-eksplicit. Her sætter vi ord og begreber<br />
på den tavse viden, dvs. vi gør den eksplicit. Det sker f.eks. når man laver en softwarehåndbog<br />
hvor man nedskriver de arbejdsgange vi hidtil blot har udført uden at<br />
tænke nærmere over det.<br />
– KOMBINERING (eng.: Combination). Eksplicit-eksplicit. Her opstår nye måder at gøre<br />
tingene på ved at sammenstille andre. Det sker f.eks. når man i to projekter har gjort<br />
tingene på hver sin måde og så mødes og finder på noget helt tredje som tager det<br />
bedste fra de to andre. Det er f.eks. det vi gør under projektevalueringen.<br />
– INTERNALISERING (eng.: Internalization). Eksplicit-tavs. Her bruger udviklerne den<br />
beskrevne, eksplicitte viden i praksis, og derved får de den ind under huden så den<br />
til sidst bliver en del af deres tavse viden – sådan gør vi altså her i huset.<br />
Modellen stammer fra [Nonaka95] og kaldes SECI-modellen (efter forbogstaverne i de<br />
engelske betegnelser). Læring er den proces at viden bliver til erkendelse som bliver til<br />
kunnen.<br />
Hvis udviklingsafdelingen begynder at få fokus på selve udviklingsprocessen, vil<br />
det at deltage i udviklingsprojekterne øge udviklernes viden om hvordan man laver<br />
god udvikling. Men det forudsætter altså lige en lille detalje: der skal være fokus på<br />
processen. Den skal diskuteres, den skal nedskrives, den skal bruges, den skal ændres.<br />
Det er i øvrigt sådan man skaber de gode vaner som en projektkultur består af. En måde<br />
at dele procesviden på er gennem projektevalueringer. Når projektet er slut, evaluerer<br />
projektgruppen hvordan det gik (se kapitlet om Projektevaluering på side 361). Og<br />
de positive og negative erfaringer formidles så til de udviklere som ikke selv var med i<br />
projektet. Det er nu heller ikke uden problemer. Bedst er det hvis man kan sætte navn<br />
på de “mønstre” man oplevede i projektet. Så kan udviklerne nemlig huske dem når de<br />
næste gang står i en lignende situation.<br />
It som formidler af viden<br />
Mange har forsøgt at understøtte videndelingsprocessen med it-systemer (SECI-modellens<br />
eksternalisering). Det kaldes også Knowledge Management. Men ifølge sagens natur<br />
må den viden der gemmes i et it-system være eksplicit. Tavs viden kan selvsagt ikke<br />
repræsenteres i et it-system. Den eksplicitte viden kan derimod godt – og bliver det.<br />
F.eks. viden om hvem der ved hvad. Dette benyttes i større organisationer hvor man ad<br />
2· <strong>PROCESSERNE</strong> | 59
denne vej kan finde frem til kolleger som besidder viden inden for et bestemt felt. Men<br />
lige så snart man forsøger at overføre den konkrete viden med et it-system som mellemled,<br />
opstår problemerne. Det er hundesvært at lave en ordentlig beskrivelse og endnu<br />
sværere at få den formidlet ind i hovedet på modtagerne så de faktisk bruger den.<br />
Brug hinanden<br />
It-udviklerne skal udnytte hinandens viden i langt højere grad end tilfældet er mange<br />
steder. Og i udviklingsafdelingerne skal man begynde at udbygge de processer der<br />
understøtter videndeling. Måske ligefrem stille krav om at man forsøger at bruge hinanden.<br />
Der er store resurser gemt her. Både økonomisk og kvalitetsmæssigt. For slet ikke at<br />
tale om den menneskelige dimension: det er sjovt at tilegne sig ny viden. Og kan man<br />
oven i købet få den fra en god kollega, så er det med til at udbygge sammenholdet blandt<br />
udviklerne. Det optimale er at udviklerne i fællesskab kan skabe ny viden. F.eks. review<br />
af hinandens produkter, evaluering af projekterne og diskussion af gode løsninger.<br />
To-timers-reglen<br />
I en dansk elektronikvirksomhed har man indført en totimersregel som betyder at hvis<br />
en udvikler har forsøgt at løse et problem, men ikke har løst det inden for to timer, har<br />
vedkommende pligt til at få hjælp af en kollega. Flere par øjne ser ofte bedre end et par,<br />
og man mener her at det simpelthen er spild af virksomhedens tid hvis en medarbejder<br />
sidder alene og kæmper med et problem uden at komme videre. Især hvis en kollega<br />
kunne have givet en hjælpende hånd.<br />
Her hjælper det i øvrigt meget hvis man har et godt og velplejet netværk. Folk er<br />
mere villige til at hjælpe hvis de på forhånd kender den som kommer og spørger efter<br />
hjælp.<br />
Læs mere om videndeling på arbejdspladsen i [Bjerrum03].<br />
<strong>2.</strong>6 Modenhed<br />
Modenhed handler ikke kun om at være voksen og følsom. Det er i denne forbindelse<br />
en betegnelse der beskriver en virksomheds evne til at udvikle it-systemer – en evne<br />
der i øvrigt også omfatter de mere bløde kompetencer. I det følgende vil vi beskrive<br />
nogle af de modeller der ofte bruges i denne sammenhæng. Men bemærk at det er virksomhedens<br />
modenhedsniveau der beskrives – ikke det udviklede system.<br />
60 | 2 · <strong>PROCESSERNE</strong>
<strong>2.</strong>6.1 CMMI-modellen<br />
CMMI-modellen (Capability Maturity Model Integration) er udviklet af Software Engineering<br />
<strong>Institut</strong>e (SEI) ved Carnegie Mellon Universitetet i Pittsburgh, USA. Den blev<br />
først beskrevet i [Humphrey89] (og hed oprindeligt blot CMM), men der er senere<br />
kommet opdateringer som kan hentes gratis fra www.sei.cmu.edu.<br />
Der findes flere CMMI-modeller, men her vil vi se på modellen som beskriver<br />
softwareudvikling, CMMI-SW. Den omfatter en række procesområder man skal beherske.<br />
Procesområderne kan inddeles i 5 modenhedsniveauer, 1-5, hvor 1 er det mest<br />
Niveau Fokus Procesområder<br />
1. Begynder Helte<br />
<strong>2.</strong> Styret Projektstyring Kravstyring<br />
Projektplanlæging<br />
Projektstyring<br />
Underleverandørstyring<br />
Måling og analyse<br />
Kvalitetssikring af produkt og proces<br />
Konfigurationsstyring<br />
3. Dokumenteret Udviklingsprocessen Udvikling af krav<br />
Teknisk løsning<br />
Produktintegration<br />
Verifikation<br />
Validering<br />
Organisatorisk procesfokus<br />
Organisatorisk procesdefinition<br />
Organisatorisk uddannelse<br />
Integreret projektledelse<br />
Risikostyring<br />
Beslutningsanalyse<br />
4. Kvantitativt styret Kvalitet i proces og<br />
produkt<br />
5. Optimerende Vedvarende<br />
procesforbedring<br />
Organisatorisk procesydeevne<br />
Kvantitativ projektledelse<br />
Organisatorisk fornyelse og udbredelse<br />
Årsagsanalyse og forbedring<br />
2· <strong>PROCESSERNE</strong> | 61
umodne (begynderniveauet), og 5 er det optimale. Dette kaldes den trinvise repræsentation.<br />
Men det er vigtigt at understrege at (i modsætning til den tidligere CMM-model)<br />
findes også en kontinuert repræsentation hvor man kigger på hvor meget de<br />
enkelte procesområder beherskes – uden skelen til trin.<br />
Selv om I ikke skal CMMI-certificeres, kan det være nyttigt at se på de discipliner<br />
som modellen fremhæver er vigtige. Det er nemlig de steder hvor du som projektleder<br />
får størst udbytte af at sætte ind i forhold til jeres projekt.<br />
Niveau 1 – Begynderniveauet (eng.: Initial)<br />
Dette kaldes også det kaotiske niveau, her er typisk ikke styr på ret meget. Når det alligevel<br />
en gang imellem lykkes at aflevere kørende systemer til kunderne, skyldes det<br />
dygtige udviklere, såkaldte helte.<br />
Niveau 2 – Det styrede niveau (eng.: Managed)<br />
Vi kan gentage vores succeser – vel at mærke så længe vi laver de samme ting. Kaster vi<br />
os over nye områder, går det ofte galt. Og bliver vi pressede, forfalder vi gerne til<br />
brandslukning – som vi plejer.<br />
På niveau 2 fokuseres på projektets fundamentale processer, og følgende procesområder<br />
beherskes:<br />
– KRAVSTYRING. Formålet med kravstyring er hele tiden at have overblik over kravene<br />
til projektet. Der skal derfor etableres en effektiv proces til at styre ændringer til kravene<br />
undervejs i projektforløbet.<br />
– PROJEKTPLANLÆGNING. Der skal udarbejdes og vedligeholdes fornuftige estimater<br />
og planer for projektet.<br />
– PROJEKTOPFØLGNING. Fremdriften i projektet skal synliggøres så man bliver i stand<br />
til at opdage hvis planerne skrider og handle derefter. Vi skal altså kunne se hvor<br />
projektet er henne.<br />
– UNDERLEVERANDØRSTYRING. Eventuelle underleverandører til projektet skal udvælges<br />
omhyggeligt, og vi skal kunne styre dem effektivt.<br />
– MÅLING og ANALYSE. Vi skal have etableret et sæt målinger som kan forsyne os med<br />
de nødvendige informationer for at kunne styre projektet ordentligt.<br />
– KVALITETSSIKRING. Der skal være passende synlighed, både mht. kvaliteten af selve<br />
udviklingsprocessen og mht. kvaliteten af det udviklede produkt. Det betyder bl.a.<br />
fokus på test af den udviklede software og fokus på reviews/inspektioner undervejs<br />
i udviklingsforløbet.<br />
– KONFIGURATIONSSTYRING. Sammenhængen og integriteten mellem de ofte mange<br />
62 | 2 · <strong>PROCESSERNE</strong>
forskellige indgående komponenter i produktet skal sikres. Dette gøres typisk med<br />
automatiserede værktøjer (f.eks. SourceSafe, PVCS eller CVS).<br />
Niveau 3 – Det dokumenterede niveau (eng.: Defined)<br />
Her er der styr på alle udviklingsprocesserne. Vi flytter fokus op fra at kigge på projektet<br />
til nu at kigge på hele organisationen og dermed skabe et fælles udgangspunkt for<br />
alle projekter.<br />
På niveau 3 beherskes følgende procesområder:<br />
– UDVIKLING AF KRAV. Vi skal være i stand til at tage udgangspunkt i kundens behov<br />
for derved at opstille de krav til produktet (og eventuelle komponenter) som opfylder<br />
kundens behov. Kun på denne måde kan vi lave en brugbar kravspecifikation.<br />
– TEKNISK LØSNING. Det er her vi har fokus på at omsætte produktkravene til et kørende<br />
system. Vi skal kunne vælge den bedste tekniske løsning (herunder teknologi, arkitektur<br />
og design).<br />
– PRODUKTINTEGRATION. Dette procesområde drejer sig om at have styr på det at<br />
sammensætte det kørende produkt ud fra de indgående komponenter.<br />
– VERIFIKATION. Vi skal sikre os at produktet opfylder de opstillede krav. Vi skal med<br />
andre ord sikre os at det vi har lavet er lavet rigtigt.<br />
– VALIDERING. Vi skal sikre os at produktet opfylder behovet. Vi skal med andre ord<br />
sikre os at det er det rigtige vi har lavet.<br />
– ORGANISATORISK PROCESFOKUS. Der skal udarbejdes en plan for forbedring af udviklingsaktiviteterne,<br />
og aktiviteterne skal koordineres på tværs af hele organisationen.<br />
– ORGANISATORISK PROCESDEFINITION. Det er under dette procesområde der tænkes<br />
på softwarehåndbog, definition og beskrivelse af softwareudviklingsprocessen samt<br />
dokumenterede retningslinjer.<br />
– ORGANISATORISK UDDANNELSE. Vi skal sikre at alle personer der deltager i projektet<br />
har modtaget en passende uddannelse i de metoder, standarder, værktøjer og andet<br />
der benyttes.<br />
– INTEGRERET PROJEKTLEDELSE. I dette procesområde fokuseres på at få styringen af de<br />
enkelte projekter tilpasset organisationens vedtagne måde at køre projekter på.<br />
– RISIKOSTYRING. Vi skal kunne identificere potentielle risici før de opstår så vi eventuelt<br />
kan iværksætte modforanstaltninger.<br />
– BESLUTNINGSANALYSE. Vi skal kunne træffe vigtige projektbeslutninger på et kvalificeret<br />
grundlag og på en kvalificeret måde.<br />
2· <strong>PROCESSERNE</strong> | 63
Niveau 4 – Det kvantitativt styrede niveau (eng.: Quantitatively Managed)<br />
Her er der fokus på måling og dataindsamling som kan synliggøre processerne.<br />
På niveau 4 beherskes følgende procesområder:<br />
– ORGANISATORISK PROCESYDEEVNE. Dette procesområde fokuserer på at måle hvor effektive<br />
vi er. Her måler vi f.eks. både på udviklingshastighed og på fejlhyppighed.<br />
– KVANTITATIV PROJEKTLEDELSE. Her drejer det sig om at bruge målingerne aktivt i projektledelsen.<br />
Vi opsætter mål, og vi laver statistiske analyser. På denne måde bliver vi<br />
også i stand til at kunne forudsige værdier om projektet, f.eks. omkring antal fejl.<br />
Niveau 5 – Det optimerende niveau (eng.: Optimizing)<br />
Her forsøger vi hele tiden at gøre tingene endnu bedre ved en konstant fin-tuning af<br />
vores processer.<br />
På niveau 5 beherskes følgende procesområder:<br />
– ORGANISATORISK FORNYELSE OG UDBREDELSE. Formålet er her at udvælge og udbrede<br />
de forbedringer til vores processer som vi fra målingerne ved har en virkning.<br />
– ÅRSAGSANALYSE OG FORBEDRING. Formålet med aktiviteterne i dette område er systematisk<br />
at finde årsagerne til fejl for herigennem at forhindre at de gentager sig.<br />
Er dit firma ISO9001-certificeret, er der ingen garanti for at I har styr på softwareudviklingen<br />
set i CMMI-perspektiv. Typisk vil en ISO9001-certificeret virksomhed opfylde de<br />
fleste af procesområderne på CMMI niveau 2 og mange af dem på niveau 3. Så en sådan<br />
virksomhed vil formentlig befinde sig et sted mellem niveau 2 og 3 på CMMI-skalaen.<br />
Men det er ikke sikkert.<br />
Som et kuriosum kan nævnes at ifølge Software Engineering <strong>Institut</strong>e ligger 40% af<br />
softwarevirksomhederne på niveau 4 eller 5 i Indien. Du kan på SEIs hjemmeside finde<br />
den aktuelle fordeling af virksomheder på de fem niveauer.<br />
Der findes som nævnt endnu flere modenhedsmodeller som alle også kan findes på<br />
www.sei.cmu.edu. F.eks. findes en modenhedsmodel for anskaffelse, så hvis du kommer<br />
fra indkøbssiden, kan du kigge på Software Acquisition Capability Maturity Model,<br />
SA-CMMI. Her vil det også være relevant at kigge på EUs model for anskaffelsesprojekter,<br />
ISPL: Information System Procurement Library (tidligere kendt som Euromethod<br />
– se [Hughes99]).<br />
Der findes i øvrigt en europæisk pendant til CMMI. Den kaldes Bootstrap (se [Kuvaja94]).<br />
En selvevaluering i miniformat kan hentes gratis på www.esi.es/Bootcheck.<br />
Der findes også en ISO-standard for modenhedsvurdering. Den gik tidligere under<br />
navnet SPICE efter projektgruppen der udviklede den (Software Process Improvement<br />
64 | 2 · <strong>PROCESSERNE</strong>
and Capability dEtermination), men kaldes nu ISO/IEC 15504. Læs mere om den i<br />
[Emam97] eller på nettet.<br />
<strong>2.</strong>6.2 Andre standarder<br />
Der findes en række standarder for softwareudviklingsprocessen som kan være nyttige<br />
at kende til:<br />
– NATO stiller krav ved leverancer til forsvaret. Der findes bl.a. AQAP-standarderne:<br />
Allied Quality Assurance Publications. Se f.eks. AQAP-150: “NATO Quality Assurance<br />
Requirements for Software Development”.<br />
– FDA, som er det amerikanske Food and Drug Administration, stiller krav til softwareudviklingen<br />
i bl.a. medicinske produkter.<br />
– ISO (International Organization for Standardization) har ISO 9001 som opstiller retningslinjer<br />
for hvordan et kvalitetsstyringssystem skal være opbygget.<br />
For alle disse standarder gælder det at det ofte er både et særdeles krævende arbejde at<br />
sætte sig ind i dem og et endnu større arbejde at efterleve dem. Men som regel har man<br />
ikke noget valg hvis man vil ind på disse områder.<br />
Endelig findes en “Software Engineering Body of Knowledge” (SWEBOK) (se<br />
www.swebok.org). Det er dog ikke en egentlig standard, men en samling af alment accepteret<br />
viden omkring det at lave software.<br />
<strong>2.</strong>6.3 Procesforbedring<br />
Der skal være en sammenhæng mellem kompleksiteten af de opgaver virksomheden<br />
påtager sig, og modenheden af den udviklingsproces der benyttes. Vil man således<br />
kunne påtage sig større opgaver – eller har man allerede gjort det – er der grund til at<br />
forbedre sin udviklingsproces.<br />
En speciel disciplin inden for projektledelse beskæftiger sig med forbedring af udviklingsprocessen<br />
(eng.: Software Proces Improvement, SPI). Fokus er her på de tiltag<br />
som skal bringe virksomheden op ad CMMI-stigen. Man kan sagtens lave procesforbedring<br />
inden for et udviklingsprojekt (specielt hvis det har karakter af pilotprojekter),<br />
men det normale er dog at aktiviteten foregår i hele virksomhedens udviklingsafdeling,<br />
altså på tværs af de enkelte projekter.<br />
Du kan læse mere om procesforbedring i [Mathiassen02].<br />
2· <strong>PROCESSERNE</strong> | 65
<strong>2.</strong>7 Hovedpunkter<br />
Kapitlet fremhæver følgende hovedpunkter:<br />
– Vi skal være opmærksomme på flere vigtige processer i projektet: projektledelsesprocessen,<br />
udviklingsmodellerne og læreprocesserne.<br />
– Projektledelsesprocessens elementer er opstart, planlægning, udførelse, opfølgning<br />
og nedlukning. Denne proces sikrer at vi gennem hele projektet har styr på tingene,<br />
dvs. elementerne i PIP-modellen: Produkt, Interessenter og Proces. Herunder at vi<br />
kan forudsige hvor lang tid projektet tager, og hvor langt vi er kommet.<br />
– “Trekanten” beskriver en uløselig sammenhæng mellem tid, omkostninger og funktionalitet.<br />
Vi kan ikke nøjes med at ændre blot én af faktorerne.<br />
– Udviklingsmodellerne beskriver vores angrebsvinkel i forhold til at udvikle software.<br />
De klassiske vandfaldsmodeller antager at vi har et godt kendskab til domænet og derfor<br />
kan inddele udviklingen i velafgrænsede faser. De iterative modeller går trinvist<br />
frem i udviklingen og kan derfor drage nytte af den læring der sker undervejs.<br />
– Udviklingsmodeller med feedback virker. Brug altid en iterativ model hvis du skal i<br />
gang med noget helt nyt – og hvis der er mulighed for det.<br />
– Læreprocesserne beskriver den læring projektdeltagerne udsættes for undervejs.<br />
Den er en vigtig del af projektarbejdet, men glemmes ofte under estimeringen. Det<br />
skal vi bl.a. være opmærksomme på ved valg af teknologi. Hvis vi vælger en ny og<br />
uprøvet teknologi som vi ikke har erfaring med, skal vi være forberedt på at der kan<br />
gå tid med at lære selve teknologien.<br />
– Modenhed er en virksomheds evne til at udvikle software. Den kan f.eks. beskrives<br />
ved hjælp af CMMI-modellen.<br />
66 | 2 · <strong>PROCESSERNE</strong>