title: Software engineering
text: Software engineering is een deelgebied van de informatica dat zich bezighoudt met alle aspecten van het bouwen van complexe maar betrouwbare software tot informatiesystemen. Het is een vakgebied dat zich bezighoudt met methodes om een vraag of probleem in de werkelijkheid om te zetten naar een computerprogramma.
  
  Iemand die bedreven is in software engineering is een software engineer (soms ook software-ingenieur genoemd). Het vakgebied is beslist breder dan alleen het programmeren, maar vaak noemen programmeurs zich onterecht software engineer vanwege de negatieve connotatie verbonden met de term "programmeur".
  
  Algemeen 
  Het vakgebied Software Engineering omspant het hele spectrum van de ontwikkeling van software voor complexe systemen, van het bepalen van de eisen tot aan de oplevering. Het bestaat in grote lijnen uit de volgende hoofdonderdelen:
  
   Het proces: welke eisen worden aan een systeem gesteld, en hoe wordt het ontworpen?
   De structuur: wat is een goed ontwerp voor een systeem, en hoe ziet een goede architectuur er uit?
   De technologie: welke technologie is nodig, welke producten kunnen we inzetten?
   De organisatie: wie gaat het bouwen, kunnen we het outsourcen?
  
  Software engineering wordt ook wel gedefinieerd als: "de toepassing van een systematische, gedisciplineerde, kwantificeerbare aanpak bij de ontwikkeling, uitvoering, en onderhoud van software". Een andere omschrijving is "de gedisciplineerde toepassing van technische, wetenschappelijke en mathematische principes en methoden gericht op de economische productie van kwalitatief hoogwaardige software." Het is een breed en veelomvattend vakgebied, waarin zowel logisch, wiskundige theoretische aspecten als engineering- en managementaspecten een rol spelen.
  
  In het verleden werd softwareontwikkeling gezien als een louter wiskundige bezigheid. De in 2002 overleden Edsger Dijkstra bijvoorbeeld zag het ontwerpen van computerprogramma's als een wiskundige opgave, die met formele bewijzen opgelost moesten worden. Dit is zeer zinvol voor theoretische opgaven en voor het bewijzen van de juistheid van een complex algoritme. Modernere softwaremethodologieën als eXtreme Programming (XP) en agile modeling beschouwen software engineering meer als een spel van communicatie en innovatie. Ideeën van de gebruiker of opdrachtgever dienen via de programmeur vertaald te worden in technische oplossingen. Hierbij speelt communicatie een zeer belangrijke rol.
  
  Software 
  Software zijn computerprogramma's en bijbehorende documentatie zoals specificaties, ontwerpmodellen en gebruikershandelingen. Softwareproducten kunnen ontwikkeld worden voor een specifieke klant of voor de algemene markt. Softwareproducten zijn hierom generiek, ontwikkeld voor een groep mogelijke klanten, zoals bij Excel of Word, of maatwerk, ontwikkeld voor een enkele klant volgens hun specificatie. Nieuwe software kan worden ontwikkeld door de ontwikkeling van nieuwe programma's, het op maat maken van generieke software systemen of het hergebruik van bestaande software.
  
  Softwareproces 
  Het softwareproces of softwareontwikkelingsproces is het geheel van activiteiten gericht op de ontwikkeling van software. Dit proces loopt vanaf het ontwerp tot de ingebruikname en het onderhoud en soms zelf het hergebruik. De algemene activiteiten in ieder softwareproces zijn:
   Specificatie: wat het systeem moet doen en de ontwikkelingsvereisten
   Development/ontwikkeling: de ontwikkeling en productie van het softwaresysteem
   Validatie: de controle of de software voldoet aan de klanteneisen
   Update bij gebruik: aanpassen van de software aan veranderende eisen.
  Dit software-procesmodel is vastgelegd in formele softwareprocesmodellen en ontwerpmethodologieën.
  
  Stadia van softwareontwikkeling 
  In de softwareontwikkeling wordt gewerkt met verschillende stadia, om zo een indicatie te kunnen geven wat verwacht kan worden van de software. Release to manufacturer zou het laatste ontwikkelingsstadium moeten zijn, maar is dat bij zeer grote softwareprojecten vaak niet. In dat geval komen er naderhand bugfixes beschikbaar, die soms zelfs upgrade genoemd worden en waar geld voor betaald moet worden.
  
  Onderstaand geeft een globaal, schematisch inzicht in de diverse stappen die een softwareproduct doorgaans doorloopt (als uitgangspunt vergelijke men de stappen die diverse Windows-versies hebben doorlopen).
  
  Opmerking: sommige softwareontwikkelaars hanteren afwijkende naamgeving en systematiek.
   Alfa - een eerste aanzet tot een werkende versie van de software, die doorgaans nog bugs bevat die verbetering en testen behoeft.
   Bèta - een vervolgversie waarin in principe alle eigenschappen van de software zouden moeten werken. Deze versie wordt soms aangeboden aan externe testers, die dan bugs kunnen rapporteren.
   RC - de 'release candidate', die een mogelijk publiceerbare versie van de software bevat. Ook deze RC wordt doorgaans nog stevig getest om bugs en gebruikersfeedback te kunnen verwerken
   RTM - 'release to manufacturing'; de software die in principe gereed is om aan producenten te verstrekken (zie boven).
   Final - het softwareproduct is in omloop gebracht.
   Service packs en updates - aanvullingen en verbeteringen op de software, die in de Final kunnen worden ingesloten middels een updateproces
   Upgrade - een nieuwe versie van de software, die doorgaans vele verbeteringen en nieuwe functionaliteit bevat.
  
  De diverse stadia gaan doorgaans vergezeld van een versienummer, dat uit een of meer cijfers bestaat. Hoe hoger het cijfer, hoe verder in de ontwikkeling het product is. Vaak zijn alfa-versies genummerd met een nul, gevolgd door een eventuele subversie: voorbeeld: versie 0.9 geeft aan dat het product bijna een volledig werkende versie is. Versie 0.9.5 is dan vaak een verbetering van versie 0.9, die echter nog niet geheel voldoet aan alle eisen.
  
  Benaderingen in software engineering 
  Er worden verschillende soorten modellen gebruikt in de software engineering, die bepaalde toestanden en processen van verschillende perspectieven uitlichten. Met de tijd zijn hier allerlei perspectieven ofwel benaderingen ontwikkeld:
   Het functioneel perspectief, onder andere het werkstroomperspectief
   Het gegevensstroomperspectief
   Het objectgeoriënteerd perspectief
   Het actorenperspectief
   Het ontologisch perspectief.
  Met de ontwikkeling van de zogenoemde IDEF (Integration DEFinition) in de jaren tachtig is een aanzet gemaakt met integrale definities. Een alternatieve uitwerking is de Unified Modeling Language (UML).
  
  Modellen in software engineering 
  Modellen in de software engineering zijn vereenvoudigde representaties van elementen en relaties van de softwareontwikkeling. Er zijn verschillende soorten modellen:
   Algemene modellen van het software ontwikkelingsproces, zoals het watervalmodel, het V-model, en het iteratieve model.
   Datamodellen en databasemodellen
   Objectmodellen van het te ontwikkelen informatiesysteem
   Specifieke project modellen.
  Elke benadering in de software engineering heeft deze soorten modellen veelal anders uitgewerkt.
  
  Deelgebieden 
  Deelgebieden van de software engineering zijn:
   Requirements Engineering: domeinanalyse
   Softwareontwikkelmethode: software-architectuur, software-evolutie, software-re-engineering, softwareconstructie
   Kwaliteitscontrole
   Projectmanagement
   Formele methodes (onder meer formele specificatietechnieken)
  
  Opleidingen 
  In tegenstelling bijvoorbeeld tot de Verenigde Staten zijn er in Nederland nog weinig zuivere opleidingen in software engineering. De beste optie is momenteel informatica.
  
  In Nederland
  Een "Master of Science in Software Engineering" (M.Sc.) wordt aangeboden door de algemene en technische universiteiten met een informaticaopleiding, zoals de Universiteit van Amsterdam, de Universiteit Twente, de Radboud Universiteit Nijmegen, de Open Universiteit etc. De Technische Universiteit Eindhoven biedt hier een "Professional Doctorate in Engineering: Software Technology" (P.D.Eng.)
  
  In Vlaanderen
  De Universiteit Antwerpen biedt een masteropleiding aan die rechtstreeks verder bouwt op de bacheloropleiding in de informatica. De Universiteit Gent en Katholieke Universiteit Leuven bieden een gelijkaardige masteropleiding aan voor ingenieursstudenten. De Vrije Universiteit Brussel voorziet dan weer een hybride masteropleiding, die kan gevolgd worden via een gespecialiseerde bachelor in de computerwetenschappen of via een generieke bachelor in de ingenieurswetenschappen met een profiel computerwetenschappen.
  
  Software engineers 
  Software engineers zijn wetenschappers, technici en/of innovatoren op het gebied van de software engineering. Een voorbeeld van enige specialisten.
   Theo Bemelmans
   Grady Booch
   Jan Dietz
   Michael A. Jackson
   Mario Jeckle
   Rudy Rucker
   James Rumbaugh
  
  Zie ook
  
  Gerelateerde onderwerpen
   Aorta lifecycle-model
   Framework for Integrated Test
   Unified Modeling Language
  
  Gerelateerde studies
   Computer-aided software engineering
   Computer graphics
   Concurrency
    mens-machine interactie
   Information Engineering
   Refactoring
   Service-Oriented Architecture
  
  Externe link 
   JACQUARD informatica onderzoeksprogramma, dat zich richt op Software Engineering en Software as Service.
  
  Informatica