Systemudvikling

Systemudvikling er en bred betegnelse for udvikling af software-baserede systemer. Systemudvikling består af en kombination af at finde frem til kravene til det kommende system, analysere sammenhængene i, designe, programmere og teste det.
På engelsk kaldes området bl.a. software development og system engineering, men der er hverken på dansk, engelsk eller internationalt fuld konsensus om begreberne.

Discipliner 
Groft deles systemudvikling op i tre discipliner:
 Analyse
 Går ud på at beskrive, hvilke krav systemet skal opfylde. Dette indebærer dels en analyse af systemets problemområde/genstandsområde/domæne, dvs. den del af omverdenen, som systemet skal afspejle (indeholde data om), dels en analyse af systemets anvendelsesområde, dvs. den del af omverdenen, der skal bruge systemet (give input og modtage output). Analysen udmøntes overvejende i en kravspecifikation og andre dokumenter som grundlag for designet.
 Design
 Skal med baggrund i analysen finde frem til en hensigtsmæssig opdeling af systemet med hensyn til dels dataene om problemområdet (datamodel), dels grænsefladen til brugerne og andre systemer. I designet indgår både en beskrivelse af, hvilke komponenter systemet skal opdeles i, og hvordan de enkelte komponenters grænseflade med hinanden skal fungere. Designet skal danne grundlag for programmeringen.
 Programmering
 Går ud på at implementere designet i kode og teste den.

Programmeringsdisciplinen omfatter en række kompetencer, der kan studeres og behandles for sig selv, og derfor benyttes betegnelsen "systemudvikling" ofte om alt det, der ikke direkte har med programmering at gøre, nemlig at skabe fundamentet for, at man udvikler det rigtige system. Omvendt er det svært i praksis at løsrive programmeringsdisciplinen fra de to øvrige discipliner, fordi systemudvikling normalt udføres som en iterativ proces. Det kan også ofte være svært at afgøre, om designdisciplinen har størst berøringsflade med analysedisciplinen eller programmeringsdisciplinen. Flere aspekter af designet kunne nemt opfattes som en del af analysen og andre som en del af programmeringen.

Udviklingsforløb 
Et software-baseret system udvikles normalt projektbaseret. Dette indebærer, at det udføres i en dertil defineret organisation, der som sit primære mål har netop udviklingen af systemet. Udviklingsgruppen fungerer bedst, hvis den inden for passende rammer kan tilrettelægge sit arbejde selv. En typisk (simpel) organisering omfatter derfor en projektgruppe bestående af systemudviklerne, heraf en projektleder, samt en styregruppe, der udstikker rammerne og er i stand til at handle, når projektgruppen føler rammerne snære (f.eks. ved større forsinkelser).

Styringen af forløbet foregår ved anvendelse af en systemudviklingsmodel, der definerer en række faser og milepæle. Projektgruppen kan i forbindelse med passeringen af milepæle holde styregruppen orienteret og derved sandsynliggøre fremskridt i forløbet. Vandfaldsmodellen er et eksempel på sådan en model, men i de senere år har iterative modeller vundet indpas.

Selve udviklingsarbejdet tilrettelægges normalt ved hjælp af en udviklingsmetode, der er en række forskrifter for, hvordan man mere eller mindre systematisk kan arbejde sig hen mod det endelige system. En udviklingsmetode vil ofte gøre brug af et antal værktøjer og teknikker, der hjælper udvikleren med at systematisere sin forståelse. I objektorienterede metoder bruges nu om stunder normalt UML, der kan betragtes som en værktøjskasse bestående af en række diagramtyper, som man kan bruge til at beskrive forskellige egenskaber ved det kommende system. Klassediagrammet er en diagramtype, men for at kunne lave et konkret klassediagram er det også nødvendigt, at man kender til teknikker i den forbindelse. Identifikation af navneord og udvælgelse af de relevante er en anvendt teknik, der leder frem mod tegningen af et klassediagram.

Som hjælp til udvikleren findes der en række computerbaserede programmer kaldet CASE-værktøjer. Et CASE-værktøj understøtter en række værktøjer, f.eks. UML, og med det kan udvikleren nemmere tegne de ønskede diagrammer samt sikre, at de indbyrdes hænger sammen. De bedste CASE-værktøjer er endvidere integreret med programmeringsværktøjer, så man umiddelbart kan arbejde videre på de dele, som man i starten på et ret abstrakt plan beskriver, til de til sidst bliver til det endelige program.

Uddannelse 
En systemudvikler har ofte en formel og bred uddannelse inden for it, og det kan være datalogi eller datamatikeruddannelsen eller f.eks. en ingeniøruddannelse. Blandt en systemudviklers ideelle kompetencer kan nævnes:
 Systematik: Behov for at systematisere ofte store mængder data
 Kommunikation: Behov for at samarbejde med bruger/kunde om at forstå kravene til det kommende system
 Innovation: Nytænkning i løsninger kan ofte være en nødvendighed
 Samarbejde: Systemudvikling foregår normalt i grupper bestående af personer med forskellige specialer
 Selvdisciplin: Mange systemudviklere kan have en tendens til at indføre smarte faciliteter i et system, men det er sjældent økonomisk muligt

 

en:Software development