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:[1]

Software engineering wordt ook wel gedefinieerd als: "de toepassing van een systematische, gedisciplineerde, kwantificeerbare aanpak bij de ontwikkeling, uitvoering, en onderhoud van software".[1] Een andere omschrijving is "de gedisciplineerde toepassing van technische, wetenschappelijke en mathematische principes en methoden gericht op de economische productie van kwalitatief hoogwaardige software."[2] 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.[3]

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[3]:

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.

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:

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:

Elke benadering in de software engineering heeft deze soorten modellen veelal anders uitgewerkt.

Deelgebieden

Deelgebieden van de software engineering zijn:

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[4] die rechtstreeks verder bouwt op de bacheloropleiding in de informatica. De Universiteit Gent en Katholieke Universiteit Leuven bieden een gelijkaardige masteropleiding aan voor ingenieursstudenten[5]. De Vrije Universiteit Brussel voorziet dan weer een hybride masteropleiding[6], die kan gevolgd worden via een gespecialiseerde bachelor in de computerwetenschappen[7] of via een generieke bachelor in de ingenieurswetenschappen met een profiel computerwetenschappen[8].

Software engineers

Software engineers zijn wetenschappers, technici en/of innovatoren op het gebied van de software engineering. Een voorbeeld van enige specialisten.

Zie ook

Gerelateerde onderwerpen

Gerelateerde studies

Zie de categorie Software engineering van Wikimedia Commons voor mediabestanden over dit onderwerp.