Διάγραμμα ροής δεδομένων

Ένα διάγραμμα ροής δεδομένων (data-flow diagram ή DFD) είναι μια γραφική αναπαράσταση της "ροής" των δεδομένων διαμέσου ενός πληροφοριακού συστήματος. Τα διαγράμματα αυτά μπορούν να χρησιμοποιηθούν επίσης για οπτικοποίηση της επεξεργασίας των δεδομένων (δομημένη σχεδίαση, structured design).
Σε ένα DFD, τα δεδομένα ρέουν από μια εξωτερική πηγή δεδομένων προς έναν εσωτερικό αποθηκευτικό χώρο δεδομένων ή έναν εξωτερικό προορισμό δεδομένων, μέσω μιας εσωτερικής διεργασίας. 
Ένα DFD δεν παρέχει πληροφορίες για το χρονισμό των διεργασιών ή το αν αυτές λειτουργούν ακολουθιακά ή παράλληλα. Είναι επομένως διαφορετικό από ένα διάγραμμα ροής (flowchart), το οποίο δείχνει τη ροή του ελέγχου μέσα σε έναν αλγόριθμο και επιτρέπει στον αναγνώστη να βρίσκει ποιες λειτουργίες θα εκτελεστούν, με ποια σειρά και κάτω από ποιες συνθήκες, αλλά όχι τι είδους δεδομένα θα εισαχθούν και θα εξαχθούν από το σύστημα, ούτε από πού έρχονται τα δεδομένα και προς τα πού κατευθύνονται, ούτε πού αυτά αποθηκεύονται (όλες αυτές οι πληροφορίες εμφανίζονται σε ένα DFD).

Γενικά

Αποτελεί κοινή πρακτική η δημιουργία αρχικά ενός διαγράμματος ροής δεδομένων contexts (system context diagram, context-level data flow diagram), το οποίο να δείχνει την αλληλεπίδραση μεταξύ του συστήματος και των εξωτερικών agents, οι οποίοι λειτουργούν σαν πηγές και προορισμοί δεδομένων. Σε αυτό το διάγραμμα, που είναι γνωστό και σαν 'DFD Επιπέδου 0', οι αλληλεπιδράσεις του συστήματος με τον εξωτερικό κόσμο μοντελοποιούνται αποκλειστικά με βάση τις ροές δεδομένων στο όριο του συστήματος (system boundary). Το διάγραμμα δείχνει όλο το σύστημα σαν μια μοναδική διεργασία και δεν παρέχει πληροφορίες για την εσωτερική του οργάνωση.
Αυτό το DFD σε επίπεδο context DFD στη συνέχεια "εκρήγνυται", για να παράγει ένα DFD Επιπέδου 1, το οποίο δείχνει κάποιες από τις λεπτομέρειες του συστήματος που μοντελοποιείται. Το DFD Επιπέδου 1 δείχνει πώς το σύστημα διαιρείται σε υποσυστήματα (διεργασίες), κάθε ένα από τα οποία χειρίζεται μια ή περισσότερες ροές δεδομένων από ή προς έναν εξωτερικό agent, και τα οποία μαζί παρέχουν τη συνολική λειτουργικότητα του συστήματος. Εμφανίζει επίσης τους εσωτερικούς αποθηκευτικούς χώρους δεδομένων, οι οποίοι πρέπει να υπάρχουν στο σύστημα για να λειτουργεί σωστά, και τη ροή των δεδομένων μεταξύ διάφορων τμημάτων του συστήματος.
Τα διαγράμματα ροής δεδομένων προτάθηκαν από τον Larry Constantine, ο οποίος αρχικά ανέπτυξε τη δομημένη σχεδίαση , βασισμένος στο υπολογιστικό μοντέλο "γράφος ροής δεδομένων" ("data-flow graph") των Martin και Estrin.
Τα διαγράμματα ροής δεδομένων (DFDs) αποτελούν έναν από τους τρεις βασικούς τρόπους θεώρησης στην ανάλυση δομημένων συστημάτων και στη μέθοδο σχεδίασης SSADM. Ο χορηγός του project και οι τελικοί χρήστες θα πρέπει να ενημερωθούν και οι απόψεις τους να χρησιμοποιηθούν, σε όλα τα στάδια της εξέλιξης ενός συστήματος. Με ένα διάγραμμα ροής δεδομένων, οι χρήστες μπορούν να οπτικοποιήσουν τον τρόπο με τον οποίο το σύστημα θα λειτουργήσει, τι θα μπορεί να επιτύχει, και πώς πρόκειται να αναπτυχθεί. Τα διαγράμματα ροής του παλιού συστήματος μπορούν επίσης να σχεδιαστούν και να συγκριθούν με τα διαγράμματα ροής δεδομένων του νέου συστήματος, για να προκύψουν συγκρίσεις ώστε να υλοποιηθεί ένα καλύτερο σύστημα. Τα διαγράμματα ροής δεδομένων μπορούν να χρησιμοποιηθούν για να δοθεί στον τελικό χρήστη μια ιδέα του πώς τα δεδομένα που αυτός εισάγει επηρεάζουν το συνολικό σύστημα από τις διαταγές (order), στη διεκπεραίωση (dispatch) και στην αναφορά (report). Το πώς αναπτύσσεται ένα σύστημα μπορεί να καθοριστεί από ένα διάγραμμα ροής δεδομένων. 
Κατά την ανάπτυξη ενός συνόλου από πολυεπίπεδα (levelled) διαγράμματα ροής δεδομένων, ο αναλυτής/σχεδιαστής πρέπει να ορίσει πώς το σύστημα αποσυντίθεται σε υποσυστήματα από μονάδες (component sub-systems), και να αναγνωρίσει τα δεδομένα συναλλαγών (transaction data) στο μοντέλο δεδομένων.
Υπάρχουν διάφοροι συμβολισμοί να σχεδιαστούν διαγράμματα ροής δεδομένων (Yourdon & Coad και Gane & Sarson), που ορίζουν διαφορετικές οπτικές αναπαραστάσεις για τις διεργασίες, τους αποθηκευτικούς χώρους δεδομένων, τη ροή δεδομένων και τις εξωτερικές οντότητες.

Κατασκευή ενός ΔΡΔ (Διάγραμμα Ροής Δεδομένων)

Ενα σύστημα μπορεί να αναπαρασταθεί με ΔΡΔ σε οποιοδήποτε επίπεδο λεπτομέρειας. Συνήθως, στο πρώτο βήμα (Διάγραμμα Μηδενικού Επιπέδου) αναπαριστούμε το σύστημα με ένα ΔΡΔ που έχει μόνο μια διεργασία, στην οποία εισέρχονται οι ροές δεδομένων που προέρχονται από το περιβάλλον του συστήματος και από την οποία εξέρχονται οι ροές δεδομένων προς το περιβάλλον (το περιβάλλον αναπαρίσταται με πηγές και καταβόθρες δεδομένων). Στη συνέχεια, η διεργασία αυτή αναλύεται σε άλλες διεργασίες, και κάθε διεργασία αναλύεται με τη σειρά της, έως ότου φτάσουμε σε ένα ικανοποιητικό επίπεδο λεπτομέρειας. Για παράδειγμα, ένα σημείο τερματισμού της ανάλυσης ορίζεται ως το επίπεδο όπου κάθε περιεχόμενη διεργασία μπορεί να περιγραφεί με ακρίβεια το πολύ σε μια σελίδα.

Προσέγγιση διαχωρισμού συμβάντων

Ο διαχωρισμός σε συμβάντα (event partitioning) περιγράφηκε από τον Edward Yourdon στο Just Enough Structured Analysis.
Αυτό το επίπεδο δείχνει το συνολικό context του συστήματος και το περιβάλλον λειτουργίας του και εμφανίζει όλο το σύστημα σαν μια μοναδική διεργασία. Συνήθως δε δείχνει αποθηκευτικούς χώρους, εκτός και αν "ανήκουν" σε εξωτερικά συστήματα π.χ. το σύστημα έχει πρόσβαση σε αυτά αλλά δεν τα διαχειρίζεται, όμως αυτά πολλές φορές εμφανίζονται σαν εξωτερικές οντότητες.

Επίπεδο 1 (διάγραμμα υψηλού επιπέδου)

Σε αυτό το επίπεδο (επίπεδο 1) φαίνονται όλες οι διεργασίες στο πρώτο επίπεδο αρίθμησης, οι αποθηκευτικοί χώροι δεδομένων, οι εξωτερικές οντότητες και οι ροές δεδομένων μεταξύ αυτών. Ο σκοπός αυτού του διαγράμματος είναι να εμφανίσει τις σημαντικές και υψηλού επιπέδου διεργασίες του συστήματος και τις σχέσεις μεταξύ τους. Ένα μοντέλο μιας διεργασίας θα έχει ένα και μόνο ένα διάγραμμα επιπέδου 1. Ένα διάγραμμα επιπέδου 1 πρέπει να είναι ισορροπημένο σε σχέση με το πατρικό του διάγραμμα επιπέδου context, δηλ. πρέπει να υπάρχουν οι ίδιες εξωτερικές οντότητες και οι ίδιες ροές δεδομένων, που μπορούν να αναλυθούν σε περισσότερες λεπτομέρειες στο επίπεδο 1, π.χ. η ροή δεδομένων "enquiry" θα μπορούσε να χωριστεί σε "αίτημα enquiry" and "αποτελέσματα enquiry" και να συνεχίσει να είναι σωστή.
Αυτό το σημείο βασίζεται στη δημιουργικότητα του χρήστη.

Επίπεδο 2 (διάγραμμα χαμηλού επιπέδου)

Αυτό το επίπεδο είναι η αποσύνθεση μιας διεργασίας που εμφανίζεται σε ένα διάγραμμα επιπέδου 1, επομένως πρέπει να υπάρχει ένα διάγραμμα επιπέδου 2 για κάθε διεργασία που εμφανίζεται σε ένα διάγραμμα επιπέδου 1. Σε αυτό το παράδειγμα οι διεργασίες 1.1, 1.2 και 1.3 είναι όλες παιδιά της διεργασίας 1, μαζί περιγράφουν πλήρως τη διεργασία 1, και σε συνδυασμό πρέπει να μπορούν να λειτουργούν πλήρως όπως η γονική διεργασία. Όπως πριν, ένα διάγραμμα επιπέδου 2 πρέπει να είναι ισορροπημένο σε σχέση με το γονικό του διάγραμμα επιπέδου 1.