Wat heeft een Functioneel Ontwerp te bieden?


Functioneel Ontwerp

Een functioneel ontwerp is een specificatie van de functies van de software waarmee de eindgebruikers hebben ingestemd. In dit artikel kijken we naar de inhoud van een functioneel ontwerp in de context van softwareontwikkeling. Veel bedrijven hebben bovendien een handboek voor software ontwikkelaars dat beschrijft welke onderwerpen een functioneel ontwerp zou moeten bevatten.

Door de opkomst van Agile werkwijzen, zoals SCRUM, lijkt het gebruik van een functioneel ontwerp onder druk te staan. Er zal echter blijken dat we ook binnen SCRUM handig gebruik kunnen maken van het functioneel ontwerp.

Wat is een functioneel ontwerp?

De functionele ontwerpfase van een software ontwikkelingsproject richt zich op de bouw van een nieuwe of herziene applicatie. Het functionele ontwerp beschrijft echter wat de applicatie moet kunnen en is minder bezig met hoe dat gebeurt.

Een functioneel ontwerp (of ook wel functionele specificaties) is een formeel document dat we gebruiken om softwareontwikkelaars in detail de beoogde mogelijkheden, het uiterlijk en de interacties van gebruikers met gebruikers te beschrijven. De functionele specificatie is een soort richtlijn en doorlopend referentiepunt terwijl de ontwikkelaars de programmeercode schrijven.

Ontwerp- en ontwikkelingsprojecten doorlopen verschillende fasen, die typisch analyse van vereisten, programmaontwerp, functioneel ontwerp, detailontwerp, unit- en systeemtests, documentatie en implementatie zijn. De functionele ontwerpfase zorgt voor een vertaling tussen de behoefteanalyse en het detailontwerp.

In een softwareontwikkelingsproject richt het functioneel ontwerp zich op de algemene definitie van het hele systeem of de applicatie. Het ontwerp specificeert de logische stroom van het systeem, de inputs en outputs, de gegevensorganisatie, de toepasselijke bedrijfs- en verwerkingsregels en hoe het eruit moet zien voor gebruikers. Op dit punt in een ontwerpproject zijn de onderliggende hardware en software (besturingssysteem, virtualisatie, platform, etc.) niet belangrijk. Het overheersende doel van het functionele ontwerp is om de acties van een systeem te specificeren in een vorm die ontwikkelaars, gebruikers, belanghebbenden en sponsors in staat stelt om een ​​consensus te bereiken.

Functioneel ontwerp en prototyping

Afhankelijk van de complexiteit van de applicatie, kan prototyping als onderdeel van het functionele ontwerp worden opgenomen. Een prototype van ingewikkelde functionaliteit is voor een gebruiker gemakkelijker te begrijpen dan een schriftelijke beschrijving. Een prototype kan erg handig zijn om technische ontwerptaal te vertalen naar een begrijpelijke handeling.

Technisch ontwerp

Vaak wordt het functionele ontwerp verward met een technisch ontwerp. Waar een functioneel ontwerp de details geeft van wat een systeem moet doen, geeft een technisch ontwerp (TD) de details van hoe de software de acties moet uitvoeren. Een technisch ontwerp vertaalt de algemeenheden van een functioneel ontwerp naar de bijzonderheden van de database, programmering en hardware- en softwarevereisten van het systeem.

Bij waterval methoden doorlopen softwareprojecten verschillende fasen. Dit zijn met name requirements analyse, functioneel ontwerp, technisch ontwerp, unit- en systeemtests, documentatie en implementatie. De functionele ontwerpfase is een vertaling van de requirements en dient als input voor het technisch ontwerp.

Vaak verwarren we het functionele ontwerp met het technisch ontwerp. Maar waar een functioneel ontwerp de details geeft van wat een systeem moet doen, biedt een technisch ontwerp (TD) de details van hoe de acties moeten worden uitgevoerd. Een technisch ontwerp vertaalt al de mensentaal van een functioneel ontwerp in de specifieke kenmerken van de database, programmering en hardware- en software requirements van de applicatie.

Doelstellingen van het functionele ontwerp

  • Het in zeer duidelijke bewoordingen de functionele specificaties van de applicatie definiëren met de gebruikers in gedachten. Het zijn namelijk de opdrachtgever en de gebruikers die het Functioneel Ontwerp zullen goedkeuren en bevestigen dat het voldoet aan alle eerder genoemde requirements.
  • Het functionele ontwerp vormt tevens de basis van het technisch ontwerp dat we in de volgende fase maken.
  • Het functionele ontwerp toont “Hoe” het nieuwe systeem zal werken.
  • De ontwerpen en schema’s zijn echter van een hoogste abstract niveau.
  • Het functionele ontwerpproces is bovendien iteratief. Dit kan resulteren in een herziening van de requirements.

Het is belangrijk om onderscheid te maken tussen functioneel ontwerp en technisch ontwerp. Het functionele ontwerp gebruiken we om vast te stellen dat het nieuwe systeem is wat de gebruikers nodig hebben en dat het werkt zoals zij dat willen. Het technische ontwerp is echter het uitgewerkte functionele ontwerp voor de ontwikkelaars om de applicatie te bouwen.

Functionele Specificaties

Het functionele ontwerp bestaat voornamelijk uit een reeks functionele specificaties. Het opstellen van de specificaties gebeurt in een vast stramien.

De functionele specificaties (meestal gewoon specs genoemd) is het formele antwoord op de doelstellingen en requirements van het project.

De functionele specificatie voor een applicatie met een reeks interactieve vensters en dialogen met een gebruiker zou het visuele uiterlijk van de gebruikersinterface tonen en elk van de mogelijke invoeracties van de gebruiker en de acties van het programma-antwoord beschrijven. Een functionele specificatie kan ook formele beschrijvingen bevatten van gebruikerstaken, afhankelijkheden van andere producten en bruikbaarheidscriteria.

De onderdelen

Het Functioneel Ontwerp Document moet beschrijvingen van de belangrijke systeemelementen bevatten, waaronder:

  • Het datamodel, de organisatie van de data.
  • De businessrules en verwerkingsregels en hoe deze de gebruikers bereiken.
  • De programmastructuur zoals de groepering van modules die een vergelijkbare functies ondersteunen, de menustructuur.
  • Individuele modules en hun relaties, waaronder de data die ze aan elkaar doorgeven. Deze logica-specificatie beschrijft de interne interfaces en is alleen bedoeld voor de ontwikkelaars, testers en later het onderhoudsteam.
  • De invoergegevens en tevens hoe we iemand autoriseren om deze invoeren.
  • De bewerkingen van elke actie (zoals verschillende webpagina’s of schermweergaven).
  • Handmatige of geautomatiseerde workflows vereist door het systeem.
  • De logische datastroom van het systeem.
  • Het formaat van uitvoerweergaven of rapporten.
  • Indien van toepassing, hoe het systeem voldoet aan alle wettelijke vereisten.

Op dit punt van het project zijn de onderliggende hardware en software (besturingssysteem, virtualisatie, platform, etc.) echter nog niet belangrijk. Het belangrijkste doel van het functionele ontwerp is om de acties van een systeem in een vorm te specificeren waarmee de opdrachtgever, de ontwikkelaars en de gebruikers consensus kunnen bereiken.

Het functioneel ontwerp moet we schrijven naar een niet-technisch algemeen publiek zodat iedereen die het leest de functies van het systeem kan begrijpen.

Deze cyclus herhalen we voor de volgende versie van de applicatie, te beginnen met de requirements. De gebruikers leveren de feedback over het huidige versie zodat we kunnen bepalen wat we moeten veranderen.

Andere deliverables

Tijdens de totstandkoming van het Functioneel Ontwerp moeten ook rekening houden met de deliverables. Sommige deliverables kunnen bovendien tegelijkertijd tot stand komen en maken de oplevering van deze fase compleet. Andere maken we in latere fases maar gebruiken het functioneel ontwerp als input. Bij het maken van het ontwerp is voldoende diepgang en detail vereist om later deze deliverables te kunnen maken:

  • Ontwerpwijzigingen. Tijdens het ontwerpproces kunnen noodzakelijke veranderingen van de functionele specificatie wordt erkend. Dit is een formele verandering die we beschrijven in een ontwerpwijzigingsverzoek. Dit kan gevolgen hebben voor de reeds goedgekeurde requirements.
  • Gebruikersdocumentatie. Het functioneel ontwerp is tevens meestal bronmateriaal voor de handleidingen en online-informatie voor gebruikers.
  • Testplan. De meeste projecten hebben een formeel testplan waarin we ook testgevallen beschrijven. Het functioneel ontwerp dient ook als input voor alle testtypes waaronder de acceptatietest. Hiervoor zijn functionele beschrijvingen nodig op het niveau van programmamodules en op systeemniveau in verband met de samenhang met andere systeemcomponenten en koppelingen.

De cyclus wordt vervolgens herhaald voor de volgende versie van het product, te beginnen met een nieuwe vereistenverklaring, die idealiter feedback van klanten over het huidige product gebruikt om te bepalen wat klanten daarna nodig hebben of willen.

De meeste softwaremakers houden zich aan een formeel ontwikkelingsproces dat lijkt op het hierboven beschreven proces. Het hardware-ontwikkelingsproces is vergelijkbaar, maar bevat enkele aanvullende overwegingen voor het uitbesteden van onderdelen en verificatie van het productieproces zelf.

Functioneel ontwerp definities

Om een ​​idee te krijgen welke deliverables onderdeel zijn van de functionele specificatie, volgen hier hun definities:

  • Vereisten. Dit is een formele omschrijving van wat de opdrachtgevers denken dat nodig is voor een product. Vereisten worden meestal uitgedrukt in de vorm van user-stories.
  • Meetbare doelstellingen. Meetbare doelstellingen stellen een aantal criteria aan de hand waarvan we het eindproduct kunnen beoordelen. Deze doelstellingen kennen altijd tijd- en middelenbeperkingen. Het ontwikkelschema is vaak onderdeel van de doelstellingen.
  • Functionele specificatie. De functionele specificatie is het formele antwoord op de doelstellingen. Het beschrijft alle externe gebruikers- en programmeerinterfaces die het product moet ondersteunen.
  • Ontwerp wijzigingsverzoeken. Tijdens het ontwikkelingsproces wordt een formele wijziging beschreven in een ontwerpwijzigingsverzoek.
  • Logische specificatie. De individuele programmamodules, hun structuur en de gegevensparameters die ze aan elkaar doorgeven, beschrijven we in de logische specificatie. De logische specificatie beschrijft interne interfaces. Deze is alleen bedoeld voor gebruik door de ontwikkelaars en testers.
  • Gebruikersdocumentatie. Over het algemeen gebruiken we alle voorgaande documenten als bronmateriaal voor de technische handleidingen en online helppagina’s.
  • Testplan. De meeste ontwikkelingsgroepen hebben een formeel testplan dat testgevallen beschrijft.
  • Het eindproduct. Idealiter is het eindproduct een volledige implementatie van de functionele specificatie en ontwerpwijzigingsverzoeken.

De ondergang van het functioneel ontwerp?

De opkomst van de startup-cultuur en ontwikkeltools met standaard componenten en API’s heeft veel invloed op de moderne visie op een functioneel ontwerp. Concepten zoals Agile-SCRUM, groeihacking, meetbaarheid en KPI’s hebben ontwerpers ertoe gebracht zich te concentreren op functies en efficiëntie en minder op Design.

De visie op een puur functioneel ontwerp verandert onvermijdelijk. Dat komt voort uit de filosofieën over LEAN, minimalisme en functionalisme. We besteden minder tijd aan het nadenken over schoonheid en meer tijd gericht op het minimaliseren van systemen.

Wat is het nut van het functioneel ontwerp binnen Scrum?

Binnen Scrum komt de software stapsgewijs tot stand. Daardoor is het vooraf nog niet bekend wat de functionaliteit per onderdeel zal zijn. De functionaliteit wordt dus per sprint vastgelegd in de verschillende deliverables.

Niet alles wat we over de software moeten weten, kunnen we echter in de broncode en de tests bewaren. Denk bijvoorbeeld aan ontwerpdiagrammen op hoog niveau, informatiestromen, roadmaps en gebruiksscenario’s. Dit soort documentatie is nuttig om de Sprints om een functioneel niveau met elkaar te verbinden. Welke documentatie een Agile-team nodig heeft, hangt af van de projectrisico’s en de eventuele gevolgen.

Hoe gaan we om met het functioneel ontwerp in Scrum?

Er bestaan dus geen goed geschreven functioneel-ontwerp-documenten voor elke scrum sprint. Maar uitsluitend goed becommentarieerde code is ook niet voldoende.

Iedere sprint kan een andere functionele beschrijving met zich meebrengen, maar hoe leggen we dit vast? Zodanig dat nieuwe ontwikkelaars het domein gemakkelijk kunnen begrijpen en zo snel mogelijk aan boord kunnen komen.

Het SCRUM team moet het functioneel ontwerp stapsgewijs creëren, zowel voorafgaand als tijdens een sprint. De meeste teams nemen het verfijnen van de backlog op als een doorlopende activiteit om de komende backlog items te beoordelen. Dit is een perfect moment voor het team om voldoende van de oplossing te ontwerpen en de inspanningen in te schatten. Alle gemaakte artefacten moeten we aan de Story toevoegen. Tijdens de sprint moeten er echter meer fijnmazige architectuur- en ontwerpactiviteiten plaatsvinden. Bevestig deze artefacten ook. Wanneer de Story is voltooid, moet er een rijke hoeveelheid informatie over de oplossing zijn.

Een deel van de activiteiten van elke sprint is beslissen wat er moet gebeuren. Als we iets in de backlog moeten ontwerpen omdat het andere dingen beïnvloedt, moeten we een specifieke taak voor de ontwerpprocessen toevoegen en dat doen vóór de implementatie.

Hoe Scrum leidt tot functioneel ontwerp en TDD

Het functioneel ontwerp en testgestuurde ontwikkeling (TDD) zijn de technieken die het mogelijk maken om de kloof tussen requirements en code in Scrum te overbruggen.

Het proces hiervoor bestaat uit drie stappen:

  1. Analyseren van de requirements, echter niet alleen om te begrijpen wat de klant wil, maar ook om de behoeften van de gebruiker in kleinere stappen te verdelen.
  2. In het functioneel ontwerp benadrukken we de technische kant van de datastromen, wat feitelijk de functies zijn.
  3. Coderen van de lijst van te implementeren functies.

We hebben dus een systematische manier nodig om het te benaderen, beginnend bij requirements die leiden tot logica. Deze vindt zijn weg naar het functioneel ontwerp en de programmacode.

Check het functioneel ontwerp op de volgende punten

  1. Houdt de software rekening met het doel waarvoor het gemaakt is?
  2. Is duidelijk wie de software gaat gebruiken?
  3. Maakt het functioneel ontwerp duidelijk hoe we de software moeten gebruiken?
  4. Hoe gaat de software om met fouten?

Template Download

Een goede template voor een functioneel ontwerp vinden we bij Stanford University IT, download deze template hier.

LinkedIn Group

Discussieer mee op LinkedIn.

Samenvatting
Wat heeft een Functioneel Ontwerp te bieden?
Artikel
Wat heeft een Functioneel Ontwerp te bieden?
Beschrijving
Een functioneel ontwerp is een specificatie van de functies van de software waarmee de eindgebruikers hebben ingestemd. Veel bedrijven hebben een handboek voor software ontwikkelaars dat beschrijft welke onderwerpen een functioneel ontwerp zou moeten bevatten. In dit artikel kijken we naar de stappen van een functioneel ontwerp in de context van SCRUM softwareontwikkeling.
Auteur
Publisher Naam
ITpedia
Publisher Logo
Sidebar