Unified Modeling Language (UML) är ett allmänt, utvecklingsmässigt modelleringsspråk inom programvaruteknik som är avsett att tillhandahålla ett standardiserat sätt att visualisera systemets utformning. [1] UML är en grafisk notation för att beskriva strukturer (t.ex. klasser och komponenter), beteenden (t.ex. sekvenser och tillstånd) och relationer mellan delar av ett system. Språket är avsett att vara oberoende av programmeringsspråk och metodik; modellerna kan användas för kravanalys, design, dokumentation, återframtagning (reverse engineering) och i vissa fall för automatisk kodgenerering.
UML motiverades ursprungligen av en önskan att standardisera de olika notationssystemen och metoderna för programvarudesign som utvecklades av Grady Booch, Ivar Jacobson och James Rumbaugh på Rational Software 1994–95, och som fortsatte att utvecklas under deras ledning fram till 1996. [1] Dessa tre personer blev ofta kallade "the Three Amigos" och bidrog med kompletterande idéer: Booch med komponent- och designmetodik, Jacobson med use-case-orientering och Rumbaugh med objektmodellen.
1997 antogs UML som standard av Object Management Group (OMG) och har sedan dess förvaltats av denna organisation. År 2005 publicerades Unified Modeling Language också av Internationella standardiseringsorganisationen (ISO) som en godkänd ISO-standard.[2] Språket har reviderats flera gånger (t.ex. UML 1.x → UML 2.x) för att utöka dess uttrycksfullhet, särskilt kring interaktions- och komponentmodeller. Sedan dess har den regelbundet reviderats för att täcka den senaste revideringen av UML. [3]
Även om UML är välkänt och används flitigt inom utbildning och akademiska artiklar, används det sedan 2013 i liten utsträckning inom industrin, och det mesta av användningen är informell och ad hoc. [4] Orsaker som ofta nämns är agil utvecklingspraxis som föredrar lättviktiga diagram, verktygsbrister, samt att många praktiker nöjer sig med enkla skisser snarare än fullständiga formella modeller.
Syfte och användningsområden
- Visualisera och kommunicera arkitektur och design till utvecklare, beställare och andra intressenter.
- Kravanalys genom use-case- och aktivitetsdiagram för att fånga funktionella krav och flöden.
- Design och arkitektur med klass-, komponent- och distributionsdiagram för att beskriva strukturen i systemet.
- Dokumentation som ett komplement till kod, särskilt för komplexa delar där konceptuell förståelse är viktig.
- Automatisering — i vissa utvecklingsmiljöer används UML-modeller för kodgenerering, testspecifikationer eller som grund för Model Driven Architecture (MDA).
Centrala diagramtyper
UML organiserar diagram i två huvudkategorier: strukturdiagram och beteendediagram. Några vanliga diagram är:
- Strukturdiagram: klassdiagram, objekt-/instansdiagram, komponentdiagram, paketdiagram, distributionsdiagram, composite structure.
- Beteendediagram: use-case-diagram, aktivitetsdiagram, tillståndsdiagram (state machine), sekvensdiagram, kommunikationsdiagram, interaktionsöversiktsdiagram, tidsdiagram.
Huvudbegrepp och notation
- Klasser och objekt: klassdiagram visar attribut och metoder för typer; objekt visar konkreta instanser.
- Relationer: associationer, aggregation/composition, generalisering (arv) och beroenden.
- Interaktioner: meddelanden i sekvensdiagram, synkrona/asynkrona anrop och livslinjer.
- Kontrakt och regler: UML kan kompletteras med OCL (Object Constraint Language) för att uttrycka detaljerade villkor och begränsningar.
Extensibilitet och profiler
UML är designat för att vara extensibelt. Genom mekanismer som stereotyper, taggade värden och kontraint kan notation anpassas för särskilda domäner. Flera profiler har standardiserats ovanpå UML, till exempel:
- SysML — för systems engineering.
- MARTE — för realtid och inbyggda system.
- Andra profilpaket för databasmodellering, säkerhet eller verksamhetsarkitektur.
Verktyg och integration
Det finns många verktyg för att skapa UML-diagram, från enkla ritverktyg till komplexa modelleringsmiljöer med stöd för kodgenerering och XMI-utbyte (XML Metadata Interchange). Vissa vanliga typer av verktyg:
- Grafiska modelleringsverktyg med stöd för UML 2.x.
- IDE-integration som möjliggör reverse engineering och synkronisering mellan kod och modell.
- Verktyg för team-samarbete och versionshantering av modeller.
Kritik, begränsningar och trender
- Komplexitet: Fullständig och strikt modellering kan bli tung och tidskrävande.
- Övermodellering: Det finns risk att skapa detaljerade modeller som snabbt blir inaktuella.
- Agila arbetssätt: Många team föredrar lätta skisser och direkt kodfokuserat arbete framför formaliserade UML-modeller.
- Verktygsberoende: Olika verktyg och versioner kan ge interoperabilitetsproblem trots standarder som XMI.
Praktiska råd
- Använd UML diagram som kommunikationshjälpmedel — välj enkelhet framför fullständighet.
- Fokusera på de diagram som ger mest värde i projektets skede (t.ex. use-cases vid krav, klassdiagram vid design, sekvensdiagram för kritiska flöden).
- Håll modeller levande: integrera dem i utvecklingsflödet och uppdatera vid förändringar.
- Använd profiler och stereotyper när standardnotationen inte räcker för domänspecifika behov.
Sammanfattningsvis är UML ett moget och brett språk för att beskriva programvaru- och systemarkitektur. Det kan vara mycket värdefullt för kommunikation och dokumentation, men behöver anpassas till projektets skala, arbetsmetodik och de verktyg som används för att undvika överdriven byråkrati.