**Programvareutvikling** (engelsk: *software engineering*) er et fagfelt som omhandler å systematisk designe, programmere, teste og vedlikeholde programvare.

Programvare er instruksjonene som forteller datamaskiner hva de skal gjøre. Over alt i den moderne verden finnes programvare, fra medisinsk utstyr til atomkraftverk og videospill. Enkel programvare finnes i ting som mikrobølgeovner, og kompleks programvare finnes i styringssystemene til romfergen. Mange programmer inneholder millioner av linjer med kildekode og har strenge krav til virkemåte.

Programvareutvikling kan ses på som en praktisk disiplin (prosessen å utvikle programvare) og et vitenskapelig fag (studier av utviklingsprosesser, utvikling av nye metoder og modeller for å utvikle programvare, osv).

Historie
--------

Det engelske begrepet «software engineering» ble først brukt i et foredrag under en NATO-konferanse i Tyskland i 1968. En av de første helhetsbildene av programvareutvikling kom fra IEEE Computer Society sin standard 730 for programvaretesting, ferdigstilt i 1973. Hensikten med denne standarden var å legge et grunnlag for å utvikle kvalitetsplaner for konstruksjon av programvare.

I perioden 1981–1985 holdt IEEE Computer Society en rekke arbeidsmøter hvor hensikten var å utvikle standarder for dette nye fagfeltet. Arbeidet omfattet også å legge grunnen for framtidige standarder. Resultatet ble publisert som IEEE Std 1002, Taxonomy of Software Engineering Standards (1986) hvor et helhetsbilde av fagfeltet ble presentert. Dokumentet beskriver programvarens standarder, funksjonelle og eksterne avhengigheter og rollen til forskjellige funksjoner i programvarens livssyklus.

Underliggende fagfelt
---------------------

Ifølge IEEE består programvareutvikling av følgende disipliner:

* Kravbehandling
* Design
* Konstruksjon/implementasjon
* Testing
* Vedlikehold
* Konfigurasjonsstyring og versjonshåndtering
* Prosjektledelse
* Prosess
* Verktøy og metoder
* Kvalitetssikring

Beslektede fagfelt er datamaskiner, informatikk, ledelse, matematikk, prosjektledelse, kvalitetsledelse, programvareergonomi og tverrfaglig systemforståelse.

Sertifisering
-------------

Det finnes foreløpig ikke noen fullstendig anerkjent måte å skille hvilket nivå en person ligger på i fagfeltet. Typisk utdannelse i Norge er tre års bachelor-utdannelse (tidligere høgskoleingeniør) eventuelt med to år ekstra opp til mastergrad. Bedrifter deler typisk opp arbeidsstokken sin i utviklingingeniør, testingeniør, prosjektingeniør og senioringeniør.

Sertifisering av utviklingsprosessen har kommet noe lenger. Et eksempel er den amerikanske Capability Maturity Model (CMM), som søker å klassifisere modenheten i utviklingsprosessen i fem nivåer, eller ISO 15504, også kalt SPICE (Software Process Improvement and Capability dEtermination). Flere instanser tilbyr sertifisering etter disse evalueringsmetodene.

Undervisning
------------

En ufullstendig liste over studiesteder i Norge som tilbyr programvareutvikling som studium:

* Høgskolen i Bergen Arkivert 3. april 2005 hos Wayback Machine.
* NTNU
* Høgskolen i Buskerud på Kongsberg
* NITH Arkivert 12. juni 2006 hos Wayback Machine. Norges informasjonsteknologiske høyskole
* Høgskolen i Gjøvik
* Universitetet i Oslo, Institutt for Informatikk (Ifi)
* Høgskolen i Bodø
* Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring (AITeL)
* Høgskolen i Nesna på studiested Mo i Rana

Se også
-------

* V-modellen
* Kunstig nevralt nettverk

Eksterne lenker
---------------

* (en) Software engineering – kategori av bilder, video eller lyd på Commons Rediger på Wikidata
* (en) IEEE Guide to the Software Engineering Body of Knowledge

| * v
* d
* r
Programvareutvikling |
| --- |
| Felter | 
* Programmering
* DevOps
* Formelle metoder
* Kravhåndtering
* Driftsutvikling
* Utrulling
* Design
* Konstruksjon/implementasjon
* Vedlikehold
* Testing
* Systemanalyse

 |
| Konsepter | 
* Datamodellering
* Virksomhetsarkitektur
* Funksjonell spesifikasjon
* Modelleringsspråk
* Paradigme
* Programvare
* Arkeologi
* Arkitektur
* Konfigurasjonsstyring
* Prosess/metodologi
* Kvalitet
* Kvalitetssikring
* Verifikasjon og validering
* Strukturert analyse
	+ essensiell analyse
* CI/CD

 |
| Orienteringer | 
* Smidig
* Aspektorientert
* Objektorientert
* Ontologi
* Tjenesteorientert
* SDLC

 |
| Modeller | 

|  |  |
| --- | --- |
| Utvikling | 
* Smidig
* EUP
* Eksekverbar UML
* Inkrementell modell
* Iterativ modell
* Prototypemodell
* RAD
* UP
* Scrum
* Spiralmodell
* V-modellen
* Fossefallmodellen
* XP

 |
| Annet | 
* SPICE
* CMMI
* Datamodell
* ER-modell
* Funksjonsmodell
* Informasjonsmodell
* Metamodellering
* Objektmodell
* Systemmodell
* Visningsmodell

 |
| Språk | 
* IDEF
* UML
* USL
* SysML

 |

 |
| Relaterte felter | 
* Informatikk
* Programvareutvikling/datateknikk
* Informasjonsvitenskap
* Prosjektledelse
* Risikostyring
* Systemteknikk

 |

|  |  |
| --- | --- |
| Oppslagsverk/autoritetsdata | Encyclopædia Britannica **·** GND **·** LCCN **·** BNF **·** BNF (data) **·** NDL **·** NKC **·** NKC **·** BNE
 |