De Yin en Yang van softwareontwikkeling

De Yin en Yang van softwareontwikkeling

Onderzoek van functionele en niet-functionele eisen

De kernelementen van softwareontwerp en -functionaliteit in evenwicht brengen

Dit artikel is een vervolg op Unveiling the Key to Project Success: De kracht van behoefteanalyse en klantspecificaties.

Zijn ze niet hetzelfde?

Nou, nee. Functionele en niet-functionele eisen zijn onderling afhankelijk, maar verschillend. Ze zijn onlosmakelijk met elkaar verbonden, zoals de titel van het artikel suggereert.

Eenvoudig gezegd zijn software-eisen gedetailleerde specificaties die aangeven wat er van een nieuw softwaresysteem of functie wordt verwacht. Zij vormen de blauwdruk en de routekaart die ontwikkelaars door het ingewikkelde proces van het maken van software leidt. Zonder goed gedefinieerde en nauwkeurige software-eisen kan het ontwikkelingsproces een moeizame reis worden vol verwarring, miscommunicatie en, uiteindelijk, het risico van een product dat niet voldoet aan het beoogde doel. Inzicht in deze premisse legt de basis voor het waarderen van de waarde van software-eisen bij softwareontwikkeling.

Twee categorieën treden op de voorgrond bij software-eisen: functionele en niet-functionele eisen. Dit zijn de yin en yang van elk softwaresysteem, die elkaar in evenwicht houden en aanvullen.

Functionele eisen zijn de aspecten die in detail aangeven wat het systeem moet doen - de acties die het moet ondernemen als reactie op specifieke inputs of omstandigheden. Zij definiëren de kernfunctionaliteit en worden gezien als het hart van het systeem.

Niet-functionele eisen beschrijven hoe het systeem zich moet gedragen - de voorwaarden waaronder het moet werken. Zij voegen diepte en dimensie toe aan de functionaliteit, het verbeteren van bruikbaarheid, prestaties, veiligheid, en meer. Zie ze als de ziel van het systeem, die een verrijkende gebruikerservaring biedt die verder gaat dan alleen functionaliteit.

Samen vormen deze twee soorten eisen het geheel van een softwaresysteem, waarbij niet alleen de mogelijkheden, maar ook de kwaliteit, de efficiëntie en de algemene gebruikerservaring worden bepaald.

Een afbeelding van een hand in een zakelijk pak die een marker gebruikt om het woord "Requirements" in elegant cursief op een transparant oppervlak te schrijven. De achtergrond is een zacht vage kantooromgeving die de schrijfactie benadrukt en tegelijkertijd een gevoel van bedrijfsplanning of strategieontwikkeling overbrengt.
Bron DALL E 3 Nog steeds moeite met spelling

Laten we wat dieper duiken in functionele eisen

Functionele eisen, vaak beschouwd als de hartslag van een softwaresysteem, zijn de gedetailleerde richtlijnen die de acties beschrijven die een systeem moet uitvoeren. Zij belichamen de "functionaliteit" of de "taak" die de software moet uitvoeren. Dit kan gaan van het verwerken van transacties in een banksysteem tot de zoekfunctie in een e-commercetoepassing.

Zonder goed gedefinieerde functionele eisen kan een softwareproject snel uit koers raken. Hun rol is die van een kompas dat de softwareontwikkelaars de weg wijst naar hun bestemming. Ze definiëren duidelijk wat moet worden bereikt en leggen een cruciaal verband tussen de behoeften van de klant en de mogelijkheden van de software.


Hier zijn enkele eenvoudige voorbeelden om context toe te voegen:

  • In een online winkelsysteem omvatten de functionele eisen dat gebruikers een lijst met producten kunnen bekijken, geselecteerde artikelen aan een winkelwagentje kunnen toevoegen, artikelen uit het winkelwagentje kunnen verwijderen en kunnen overgaan tot een veilig afrekenproces. Het systeem moet voor elke actie functionele eisen uitvoeren, waarbij de primaire taken worden gedefinieerd waarvoor de software is gebouwd.
  • Een tweede voorbeeld zou een bibliotheekbeheersysteem kunnen zijn met als functionele eisen onder meer het uitgeven van boeken, het controleren van de beschikbaarheid van boeken, het registreren van teruggaven en het berekenen van laatgeld.

Deze vereenvoudigde voorbeelden onderstrepen de essentie van functionele eisen, die de kernacties van software beschrijven. Ze zijn integraal voor het leveren van de primaire waarde van een softwareapplicatie en kunnen dus niet worden gecompromitteerd. Door de essentiële functionaliteiten van een softwaresysteem in kaart te brengen, dienen functionele eisen als kritische bouwstenen om het softwareontwikkelingsproces in de gewenste richting te sturen.

En niet-functionele eisen dan?

Niet-functionele eisen, vaak omschreven als de ziel van het softwaresysteem, dicteren hoe het systeem zich moet gedragen en functioneren. In tegenstelling tot functionele eisen, die zich richten op wat het systeem moet doen, hebben niet-functionele eisen betrekking op de operationele aspecten van het systeem. Zij bepalen de parameters voor bruikbaarheid, betrouwbaarheid, prestaties en veiligheid en beïnvloeden de algemene gebruikerservaring en de robuustheid van het systeem.

Niet-functionele eisen blijven vaak onopgemerkt of ondergewaardeerd in de vroege stadia van softwareontwikkeling, maar worden later, wanneer de software begint te interageren met zijn gebruikers en omgeving, pas echt belangrijk. Zij zorgen ervoor dat het systeem doet wat het moet doen en het goed doet.


Bijvoorbeeld:

  • Denk aan een toepassing voor online bankieren. Functionele eisen kunnen voorschrijven dat gebruikers geld moeten kunnen overmaken tussen rekeningen. De niet-functionele eis zal echter specificeren dat de overschrijving binnen een bepaald tijdsbestek moet gebeuren (performance), dat de applicatie 24/7 toegankelijk moet zijn (availability), en dat de gebruikersgegevens veilig en versleuteld moeten zijn (security).
  • Een ander voorbeeld zou een e-commerce platform kunnen zijn. Niet-functionele eisen zijn hier onder meer de laadtijd van de webpagina, het vermogen om te reageren op verschillende schermafmetingen, de frequentie van gegevensback-ups en maatregelen ter bescherming van gebruikersgegevens.

In wezen kunnen niet-functionele eisen de doorslag geven tussen een softwaresysteem dat alleen maar functioneert en een systeem dat uitzonderlijk presteert. Ze versterken de gebruikerservaring, versterken de duurzaamheid van het systeem, en vergroten de compatibiliteit met verschillende gebruiksomgevingen. Omgekeerd kan een softwaresysteem functioneren zonder degelijke niet-functionele eisen, maar niet voldoen aan de verwachtingen van de gebruiker en de marktnormen. Daarom is hun rol in succesvolle softwareontwikkeling niet alleen essentieel maar onmisbaar.

Even voor de duidelijkheid...

Hoewel zowel functionele als niet-functionele eisen een integrale rol spelen bij de ontwikkeling van software, leveren ze verschillende bijdragen en vertonen ze kritieke verschillen die hen uniek maken. Inzicht in deze verschillen helpt belanghebbenden en ontwikkelaars om een uitgebreid en praktisch softwareproject op te zetten.

Functionele eisen, de Yin, gaan over het "wat". Zij zijn expliciet over de functionaliteiten van het systeem en de acties die het systeem moet kunnen uitvoeren. Ze zijn typisch gekoppeld aan bedrijfsdoelstellingen en zijn naar buiten gericht omdat ze vaak zichtbaar zijn voor eindgebruikers. In een e-mailsysteem zou een functionele eis bijvoorbeeld zijn dat gebruikers e-mails kunnen samenstellen, verzenden, ontvangen en verwijderen. Dit zijn concrete taken waar gebruikers direct mee te maken hebben.

Niet-functionele eisen daarentegen, de Yang, gaan over het "hoe". Zij gaan over de kwaliteitsattributen van het systeem, de manier waarop het systeem werkt en de beperkingen waaronder het moet werken. Zij gaan meer over de interne kenmerken van het systeem en de algemene gebruikerservaring, die niet altijd direct zichtbaar zijn voor de eindgebruikers, maar wel een aanzienlijke invloed hebben op hun interactie met het systeem. Een niet-functionele eis in hetzelfde e-mailsysteem kan bijvoorbeeld zijn dat het systeem duizenden e-mails tegelijk kan verwerken (schaalbaarheid) of dat de e-mailinhoud wordt gecodeerd met het oog op de privacy van de gebruiker (veiligheid).


In wezen geven functionele eisen het systeem zijn identiteit en doel, terwijl niet-functionele eisen de omgeving en de voorwaarden bieden waaronder deze identiteit moet worden gehandhaafd en dit doel moet worden vervuld. Beide zijn even cruciaal voor een uitgebreid, robuust en gebruiksvriendelijk softwaresysteem. In de evenwichtsoefening van softwareontwikkeling bepaalt het juiste evenwicht tussen deze twee soorten eisen het succes en de acceptatie van het eindproduct.

Twee kanten van dezelfde munt

Nogmaals. De relatie tussen functionele en niet-functionele eisen is niet alleen een co-existentie maar ook een diepgaand samenspel dat van invloed is op het algehele succes en de bruikbaarheid van het softwaresysteem. Hoewel ze elk een afzonderlijk doel dienen, staan hun rollen niet op zichzelf. Integendeel, ze verstrengelen en vullen elkaar op verschillende manieren aan, waardoor een samenhangende en goed afgeronde softwaretoepassing ontstaat.

Zie functionele eisen als het hart van het systeem; zij definiëren de kernfuncties die het ontwerp tot leven brengen. Maar een hart, hoewel vitaal, is niet voldoende om het welzijn en de prestaties van het lichaam te garanderen. Evenzo zijn functionele eisen, hoewel cruciaal, op zichzelf niet voldoende. Dit is waar niet-functionele eisen, verwant aan de ziel van het systeem, om de hoek komen kijken. Zij versterken de mogelijkheden van het systeem, waardoor de functionele eisen kunnen schitteren.

De crux is dat het ontwikkelingsproces het zich niet kan veroorloven beide vereisten te verwaarlozen. Een softwaresysteem met uitstekende functionaliteiten maar slechte prestaties of bruikbaarheid zal gebruikers frustreren, terwijl een goed presterend systeem zonder essentiële functionaliteiten niet zal voldoen aan de behoeften van de gebruikers. Het vinden van het juiste evenwicht is essentieel voor het leveren van een softwaresysteem dat niet alleen bestaat, maar uitblinkt.

Laatste gedachten

Zowel functionele als niet-functionele eisen hebben een verschillende functie, maar zijn in hun doel met elkaar verweven. Ze moeten in evenwicht naast elkaar bestaan, wil een softwaresysteem functioneren en uitblinken in het leveren van waarde aan de gebruikers. Inzicht in deze wisselwerking en het bereiken van het juiste evenwicht tussen beide bepaalt het succes en de acceptatie van de software.

In het volgende artikel kijken we naar casestudies, die zowel de positieve als de negatieve scenario's illustreren van een nauwkeurige klantspecificatie versus die waarbij weinig aandacht is besteed aan het overhandigen ervan aan het ontwikkelingsteam.

Ik zal meer artikelen over dit en andere onderwerpen publiceren, hopelijk zonder in herhaling te vallen. Ik kan echter niet genoeg benadrukken hoe belangrijk nauwkeurige en volledige specificaties zijn voor elk project, niet alleen in de context van softwareontwikkeling. Er doen zich hier zoveel problemen en conflicten voor, die zich meestal niet eens realiseren tot vlak voor de uiteindelijke oplevering. Dan is het vaak te laat om het probleem te verhelpen zonder een aanzienlijke kostenoverschrijding en vertraging.


Bekijk hier meer artikelen, berichten en discussies over ondernemen, projectmanagement en de rol van de menselijke natuur op Medium. Als je dat nog niet hebt gedaan, abonneer je dan op Medium. Of volg me hier op Substack. De KodifyIT Substack nieuwsbrief is een door lezers ondersteunde publicatie. Om nieuwe berichten te ontvangen en mijn werk te steunen, kunt u overwegen een gratis of betaalde abonnee te worden; ik zou de steun op prijs stellen; u zult er geen spijt van krijgen. 👍

Onthulling. Ik gebruik Generative AI tools om me te helpen bij het schrijven. Van contour suggesties tot onderwerpen of subtiliteiten, die ik nog moest bedenken.

Ik bied mijn lezers mijn verontschuldigingen aan voor sommige spellingen die volgens u onjuist zijn. Ik ben geboren en getogen in het Verenigd Koninkrijk, en dit is de spelling waar ik me prettig bij voel(Grammarly is er in ieder geval blij mee).