Bygning af software er en kompliceret proces, der består af mange forskellige dele. Blandt dem er udvikling af softwarearkitektur og design. Af en eller anden grund forveksles disse to kritiske faser af softwareudvikling ofte med hinanden. Denne forvirring kan føre til misforståelser, der kan bringe hele udviklingsprocessen i fare.

Læs denne artikel for at finde ud af, hvad softwarearkitektur og softwaredesign er, og hvordan de adskiller sig fra hinanden.

Softwarearkitektur henviser til processen med at oversætte softwarekarakteristika til en struktureret løsning, der matcher forretningsmæssige og tekniske krav. Hvad er softwarekarakteristika? Det er egenskaber som f.eks. sikkerhed, fleksibilitet, skalerbarhed eller genanvendelighed.

Softwarearkitektur fokuserer på at udvikle softwarens skelet og infrastruktur på højt niveau. Softwaredesign koncentrerer sig på den anden side om design på kodeliveau. Det omhandler problemer som de enkelte modulers funktioner, omfanget af klasser, formålet med forskellige funktioner og lignende.

Hvad er softwaredesign?

Softwaredesign handler om at opbygge en designplan, der dykker ned i de forskellige elementer, der udgør et system. Den viser, hvordan de arbejder sammen for at opfylde systemkravene.

Hvorfor udfører udviklingsteams softwaredesign? Udarbejdelse af en designplan gør det muligt at forhandle systemkrav samt at fastsætte forventninger med kunder og interessenter (f.eks. den direkte ledelse eller marketingafdelingen). En designplan tjener som et værdifuldt referencepunkt i hele udviklingsprocessen. Den fungerer som et blueprint, der vejleder teams i gennemførelsen af opgaver som kodning, design, integration og testning.

Bemærk, at en designplan altid kommer efter:

  • kravsanalyse,
  • risikoanalyse,
  • og domæneanalyse.

Softwaredesign har til formål at hjælpe udviklere med at omdanne krav til implementering. Derfor skal du forvente, at softwaredesignprocessen producerer disse artefakter:

  • Specifikation af softwarekrav – et dokument, der beskriver systemets forventede adfærd under interaktioner med brugere, hardware og andre systemer, i form af funktionelle og ikke-funktionelle krav. Kravene skal være handlingsorienterede og målbare. De skal også kunne spores til forretningskrav.
  • Design på højt niveau – denne type design fragmenterer systemdesignet i en mere specifik visning af delsystemer og moduler. Vigtigst er det at fokusere på, hvordan systemet implementeres med moduler, og hvordan disse moduler interagerer med hinanden.
  • Detaljeret design – softwaredesign genererer også et detaljeret systemdesign, der går i dybden med problemet med implementering af moduler. Det er praktisk for udviklingsteams, fordi det definerer den logiske struktur for hvert modul og dets grænseflade til kommunikation med andre moduler.

Eksempel: SOLID

For at hjælpe dig med at forstå den rolle, som softwaredesign spiller i processen med at bygge software, skal vi se nærmere på en af dets vigtigste komponenter: SOLID-princippet.

SOLID henviser til følgende principper: Single Responsibility, Open Closed, Liskov-substitution, Interface Segregation og Dependency Inversion.

Hvert af disse principper stammer fra gennemprøvede måder at udvikle software på. F.eks. fastslår Single Responsibility-princippet, at hver klasse kun bør have ét ansvar. Interface Segregation Principle foreslår på den anden side, at kode struktureres på en måde, der sikrer, at en klasse aldrig tvinges til at implementere en funktion, som ikke er afgørende for dens formål – en håndholdt metode til kategorisering af grænseflader.

Hvad er softwarearkitektur?

Softwarearkitektur fungerer som et blueprint for et softwaresystem. Den hjælper med at styre systemets kompleksitet og opstiller en kommunikations-/koordineringsmekanisme mellem dets komponenter.

Softwarearkitektur handler om at definere en struktureret løsning, der opfylder de forretningsmæssige og tekniske mål, samtidig med at spørgsmål som sikkerhed eller ydeevne optimeres.

Det er allerede på dette niveau, at udviklingsteams skal træffe en række beslutninger om f.eks. organiseringen af softwareudviklingsprocessen:

  • Vælgelse af de strukturelle elementer og deres grænseflader, der skal udgøre systemet,
  • Definition af, hvordan disse elementer skal samarbejde (adfærd),
  • Sammensætning af strukturelle og adfærdsmæssige elementer i et større delsystem,
  • Arkitekturstile, der styrer organisationen,
  • Apasning af arkitekturen til de vigtigste forretningsmål.

Disse beslutninger vil have en massiv indvirkning på softwarens ydeevne, kvalitet og vedligeholdelsesmuligheder. I sidste ende er softwarearkitekturen en afgørende faktor for det endelige produkts succes.

Det centrale mål med softwarearkitektur er at identificere de krav, der vil påvirke applikationens struktur. Softwarearkitektur håndterer både funktionelle krav og kvalitetskrav, hvilket forbedrer systemets overordnede kvalitet og funktionalitet.

En veludviklet arkitektur reducerer de forretningsmæssige risici, der er forbundet med opbygningen af en løsning. Den lukker også kløften mellem de forretningsmæssige og tekniske krav. Ved at realisere alle scenarier og use cases adresserer softwarearkitekturen de forskellige interessenters krav.

Softwarearkitektur og design: deres forhold og kritiske forskelle

Softwarearkitektur viser systemets struktur og skjuler implementeringsdetaljerne, idet den fokuserer på, hvordan systemkomponenterne interagerer med hinanden. Softwaredesign koncentrerer sig derimod om systemets implementering og går ofte meget i detaljer. Softwaredesignet fokuserer på valget af algoritmer og datastrukturer samt på implementeringsdetaljerne for hver enkelt komponent.

Som forventet har softwaredesign og arkitektur en tendens til at overlappe hinanden. Men i stedet for at spilde energi på at definere regler for at skelne dem fra hinanden, er det smartere at behandle dem som to dele af én proces. Nogle gange træffer udviklingsteams beslutninger, der er mere arkitektoniske, under softwaredesignet. På den anden side er det nogle gange nyttigt at koncentrere sig lidt mere om designet og se, hvordan det hjælper med at realisere den opstillede arkitektur.

Mens arkitektur generelt indeholder design inden for sit anvendelsesområde, kan det samme ikke siges om design – kort sagt, ikke alt design er af arkitektonisk karakter. Det er softwarearkitektens opgave at trække grænsen mellem softwarearkitektur og detaljeret design.

De nuværende tendenser inden for softwarearkitektur peger på, at design har en tendens til at udvikle sig over tid. En softwarearkitekt kan ikke vide alt på forhånd og levere en komplet systemarkitektur. Generelt udvikler designet sig i løbet af implementeringsfaserne. Efterhånden som systemet bliver implementeret, kan softwarearkitekten lære af det og teste det i forhold til de reelle krav.

Slutning

Softwarearkitektur og softwaredesign behandles med rette som to separate faser i softwareudviklingsprocessen. Arkitektur kræver et overblik på højt niveau og betydelig erfaring. Softwarearkitekter er normalt teamledere med mange års erfaring. De har en fremragende viden om kampafprøvede og innovative tilgange, som hjælper dem med at træffe de bedste beslutninger i planlægningsfasen.

Hvis du ønsker at bygge et softwareprodukt, har du brug for en dygtig softwarearkitekt om bord. Og det kan være en udfordring at finde en professionel med den rette domæneviden og erfaring.

Samarbejder du med os, kan du drage fordel af den bedste ekspertise inden for softwarearkitektur og design – vores eksperter har masser af erfaring med at levere software af høj kvalitet til virksomheder i forskellige brancher.

Psst! Leder du efter nogle interessante artikler? Tjek HER!

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.