# Data flow diagram

Het data flow diagram (DFD), is een grafische representatie van de gegevensstroom, de dataflow, door een informatiesysteem. Het is een veel gebruikte techniek binnen de gestructureerde analyse. Andere benaming voor een data flow diagram zijn gegevenstroomschema en systeemstroomschema.

## Algemeen

Het data flow diagram is een functiemodel, dat een grafische voorstelling biedt van de informatiestromen binnen een bepaalde organisatie. Samen met het datamodel vormt het de basis voor een klassieke systeemanalyse. DFD's worden veel gebruikt in administratieve organisaties en ISO-handboeken. In de Belgische bedrijfswereld zijn DFD's en ERD's nog steeds de meest gangbare analyse-instrumenten.
Dit diagram geeft, afhankelijk van het detailleringsniveau, inzicht in:
* alle (deel)processen van het beschouwingsgebied
* samenhang tussen de (deel)processen
* de herkomsten en bestemmingen van de gegevens
* interfaces vanuit het informatiesysteem met de buitenwereld (en daarmee ook de systeemgrenzen)
* datastores
Van oorsprong geeft het echter geen inzicht in de volgordelijkheid.
Voordeel is dat processen, procedures, gebruikte bestanden, gebruikte programma's, formulierlopen en dergelijke overzichtelijk in beeld kunnen worden gebracht, en kent men de symbolen, dan zijn de tekeningen ook gemakkelijk te lezen. Ten behoeve van de uniformiteit zijn de symbolen van de systeemstroomschema's gestandaardiseerd.
Een nadeel is dat de methode kan leiden tot een overmaat aan detaillering, waardoor het overzicht soms zoek dreigt te raken. De auteur van het systeemstroomschema moet dus een goed evenwicht zoeken tussen detaillering en overzicht.

## Constructie en hiërarchie

Om een systeem in zijn geheel te modelleren zijn er meestal zeer veel objecten benodigd. Een top-down benadering is hierbij van grote waarde. Door elk proces in een aparte DFD te behandelen wordt het overzicht gehandhaafd en is er tevens meer ruimte voor een gedetailleerdere weergave.
De modellering van een systeem begint bij het opstellen van een contextdiagram. Deze geeft een overzicht van de plaats van het systeem in de omgeving. In dit diagram worden er een beperkt aantal objecten weergegeven.
In de stappen die hierop volgen wordt dit contextdiagram (de top van de hiërarchie) verder uitgewerkt (functionele decompositie). Hierbij wordt elk proces op een lager niveau opgesplitst om zo de deelprocessen in kaart te brengen. Elke DFD die hier uitvloeit krijgt een volgnummer. Het contextdiagram is niveau 0, de eerste functionele decompositie wordt niveau 1. Aan de deelprocessen die zichtbaar worden op een lager niveau wordt aan het bovenliggende procesnummer een volgnummer toegevoegd. Ter verduidelijking: Bij een proces op niveau 1 die wordt uitgesplitst, krijgen de deelprocessen hiervan de volgnummers 1.1, 1.2, 1.3 enzovoort. De onderstaande afbeelding is een duidelijke weergave van deze functionele decompositie.

## Componenten

In totaal zijn er vier verschillende componenten te onderscheiden in een DFD:
* Gegevensstromen
* Processen
* Gegevensverzamelingen
* Externe bronnen en bestemmingen van gegevens

### Gegevensstroom (data flow)

Een gegevensstroom wordt in een DFD weergegeven met een pijl die de richting van een stroom weergeeft. Deze gegevensstroom verbindt twee andere componenten, een stroom begint bij een component en eindigt bij een andere. Het is niet mogelijk dat een stroom geen herkomst of bestemming heeft (magician processes of miracles en black holes).
In principe kan deze pijl gezien worden als het medium waarmee de gegevens worden overgebracht. Elke gegevensstroom wordt gekoppeld aan een unieke naam die in eventuele diepere niveaus kan terugkomen.

### Proces (process)

Een andere benaming van een proces is een transformatie of gegevensverwerking. In een proces worden inkomende gegevensstromen getransformeerd.
Er wordt vaak gebruikgemaakt van een zogenaamde bubble of cirkel om een proces weer te geven. Deze afbeelding is een voorbeeld van een zogenaamde softbox. Binnen deze softbox wordt de naam weergegeven van een bepaald proces, deze naam geeft de werking van het proces zo duidelijk mogelijk weer.
Omdat een proces gegevenstromen transformeert moet er bij elke softbox ten minste één uitvoerstroom voorkomen (vermijd black holes).
Daarnaast dient elk proces gekenmerkt te worden met een uniek nummer. Deze nummering is van belang voor wanneer de processen in een latere fase verder worden opgesplitst.

### Gegevensverzameling (data store)

Een gegevensverzameling is een tijdelijke opslagplaats voor gegevens. Hierbij kan gedacht worden aan een database maar ook aan bijvoorbeeld een notitieblok, cd-rom of zelfs het menselijke geheugen. In principe kan alles wat gegevens kan vasthouden een data store zijn. Het symbool voor een data store is een rechthoek met aan het begin een verticale lijn. Binnen deze rechthoek wordt de naam weergegeven van de store.
In een data store kunnen er gegevens gelezen, geschreven of gewijzigd worden. Dit wordt weergegeven aan de hand van de pijlen van een data flow.
Hier valt op dat bij het opslaan en het wijzigen van gegevens hetzelfde symbool wordt gebruikt. Er is hier sprake van een zogenaamde ‘Netto-flow’. Bij het wijzigen van gegevens worden er eerst gegevens gelezen en daarna weer toegevoegd, echter wordt alleen het netto-effect van een wijziging weergegeven zodat het overzicht van een DFD niet verloren gaat.
Er wordt gebruikgemaakt van een data store omdat:
* Gegevens meerdere keren kunnen worden benaderd.
* Gegevens in een andere volgorde kunnen worden gebruikt dan waarin deze het systeem binnen komen.
De naamgeving van een data store is anders dan een proces of een data flow. Wanneer er een gegevenstroom van of naar een data store loopt waarmee alle gegevens worden bedoeld, wordt er geen naam gegeven aan de stroom.
Een data store kan meerdere gegevens bevatten (occurrences). Wanneer slechts een deel van de gegevens wordt bedoeld bij een stroom, wordt de naam van deze informatie vermeld bij de data flow.

### Bron en Bestemming (terminator)

Het uitwisselen van gegevens met de omgeving is een standaard gebeurtenis. Bij een DFD worden de begin- (bron/Source) en eindstations (bestemming/Sink) buiten beschouwing gelaten. Vanuit een bron/Source bereiken de gegevens vanuit de omgeving het systeem. Gegevensstromen binnen een systeem vinden hun eindbestemming bij een bestemming/Sink. De relaties of gegevens tussen begin- en eindstations (Terminators) worden buiten beschouwing gelaten omdat deze geen deel uitmaken van het systeem.
Het symbool voor een begin- of eindstation is gelijk: Een rechthoek met daarin de naam van de bron of bestemming.
Alle objecten die zich bevinden tussen de terminators en eindstations vormen het systeem. Hier is een kader omheen te zetten wat de systeemgrens aanduidt. De exacte systeemgrens is geen standaard gegeven, deze wordt in overleg met de opdrachtgever bepaald.

## Kritiek

Het data flow diagram is de bekendste techniek voor het vastleggen van de systeemcompositie en -structuur die in Gestructureerde Analyse en Ontwerp (GAO) wordt toegepast. Het is echter altijd een informeel gedefinieerde techniek gebleven. Het specificeren met niet-formeel gedefinieerde techniek is eigenlijk niet veel beter dan vrij schetsen. Het schijnt deugdelijk en nauwkeurig, maar semantische toetsing is niet mogelijk.
Een ander probleem betreft de afbakening van het te onderzoeken informatiesysteem. Data flow diagrammen bieden geen duidelijke conceptie van het bedrijfssysteem, en zodoende biedt deze methode geen houvast voor de afbakening. Dit wordt overgelaten aan het inzicht van de betreffende analist, waardoor dit in elke toepassing anders kan uitpakken. Deze techniek biedt echter wel de mogelijkheid om delen van de compositie en de structuur te verbergen en weer te onthullen als dit van pas komt.