Vereisten zijn essentieel om te ontdekken voordat je begint met het bouwen van software. Ze beschrijven wat de software moet doen of welke eigenschappen de software moet hebben.
Ze vallen grofweg in drie categorieën uiteen:
Functioneel — Iets wat de software moet doen, bijv. “De software zal een e-mail versturen wanneer een bestelling wordt geplaatst”
Non-functioneel — Een eigenschap of kwaliteit die het product moet hebben, zoals prestaties, bruikbaarheid, beveiliging of betrouwbaarheid. bijv. “De software moet draaien op een 1024×768 monitor”
Beperkingen — Globale kwesties die alle andere requirements vormgeven bijv., “De software zal draaien op Windows” of “Geen internettoegang beschikbaar”
Waarom vereisten belangrijk zijn
“Het moeilijkste onderdeel van het bouwen van een softwaresysteem is het nauwkeurig bepalen wat je moet bouwen. Geen enkel ander deel van het conceptuele werk is zo moeilijk als het vaststellen van de gedetailleerde technische requirements, inclusief alle interfaces naar mensen, machines en andere softwaresystemen. Geen enkel ander deel van het werk verlamde het resulterende systeem zo erg als het verkeerd wordt gedaan. Geen enkel ander deel is moeilijker om later te corrigeren.”
Frederick Brooks, The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition), Addison Wesley Professional, Boston, 1995.
Het verzamelen van nauwkeurige vereisten zorgt ervoor dat we:
De software goed bouwen
De juiste software bouwen
De tijd nemen om vereisten uit te werken voordat de ontwikkeling begint, zal leiden tot minder wijzigingen later in de ontwikkelingscyclus. Het leidt meestal tot een hogere klanttevredenheid over de software.
Wat maakt een goede vereiste?
Een goede vereiste moet:
Testbaar zijn
Duidelijk en ondubbelzinnig zijn
Correct en consistent zijn
Atomair of op zichzelf staand zijn
Onafhankelijk van andere vereisten zijn
Voorbeelden
Het ontdekken van functionele vereisten
Als je de klant vraagt wat ze willen, krijg je meestal een brede vereiste.
“De software moet de gebruiker in staat stellen om een bestelling in te voeren.”
Met verdere discussie kun je dit opsplitsen in kleinere vereisten:
“De software moet de gebruiker in staat stellen om een klant te selecteren.” “De software moet de gebruiker in staat stellen om een product te selecteren.” “Na het plaatsen van een bestelling moet de software de klant een e-mail sturen.”
Blijf deze vereisten opsplitsen totdat ze voldoen aan de criteria voor goede vereisten.
Niet-functionele vereisten
Vereisten van dit type hebben betrekking op kwaliteiten van de software en vallen doorgaans in categorieën zoals deze:
Prestaties
Schaalbaarheid
Draagbaarheid
Bruikbaarheid
Compatibiliteit
Lokalisatie
Betrouwbaarheid
Beveiliging
Onderhoudbaarheid
Beschikbaarheid
Non-functionele vereisten kunnen moeilijk te specificeren of te ontdekken zijn. Voor bijvoorbeeld een prestatie-vereiste krijg je waarschijnlijk iets te horen als “het systeem moet snel zijn”. Dit is natuurlijk niet testbaar en we kunnen niet garanderen dat we aan die vereiste hebben voldaan zodra we de software hebben gebouwd. Stel vragen om deze vereisten te achterhalen: Welk proces? Hoe lang duurt het proces momenteel? Wat is een acceptabele tijdsduur?
Bruikbaarheidseisen kunnen bijzonder moeilijk te ontdekken zijn, omdat een gebruiker deze vereisten vaak niet kan zien of vertellen. Een goede manier om deze te ontdekken is door iemand te observeren die de software gebruikt.
Hoe snel kunnen gebruikers bereiken wat ze willen doen?
Hoe vaak maken ze fouten?
Wisselen ze vaak tussen toetsenbord en muis?
Is de informatie die ze nodig hebben direct beschikbaar?
Aannames
Aannames in softwareontwikkeling kunnen tot verdere problemen leiden en deze moeten tot een minimum worden beperkt. Als je merkt dat je aannames maakt bij het verzamelen van vereisten, controleer deze dan met de klant. Documenteer alle aannames die je maakt voor toekomstige referentie.
Conclusie
Nauwkeurige vereisten zijn essentieel voor softwareontwikkeling