29.07.2013 Views

2. PROCESSERNE - Teknologisk Institut

2. PROCESSERNE - Teknologisk Institut

2. PROCESSERNE - Teknologisk Institut

SHOW MORE
SHOW LESS

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>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!