Μοντέλα Κύκλου Ζωής Λογισμικού

Μοντέλα Κύκλου Ζωής Λογισμικού

Τα μοντέλα κύκλου ζωής λογισμικού περιγράφουν τα στάδια που διανύει μια εφαρμογή λογισμικού από τη σύλληψή της έως την απόσυρσή της, καθώς και τις αντίστοιχες ενέργειες που εκτελούνται σε κάθε στάδιο. Η διαδικασία ανάπτυξης λογισμικού καθορίζει τις ενέργειες που απαιτούνται για την ολοκλήρωση κάθε φάσης, ενώ η μεθοδολογία περιγράφει τον τρόπο υλοποίησής τους, δηλαδή τις επιμέρους δράσεις, τα βήματα και τα παραγόμενα προϊόντα.

Κάθε εφαρμογή λογισμικού, από τη σύλληψη μέχρι την απόσυρσή της, διέρχεται από διάφορες φάσεις σε καθεμία εκ των οποίων πρέπει να γίνονται ορισμένες εργασίες. Σε μακροσκοπικό επίπεδο οι πολύ γενικές φάσεις είναι: σύλληψη, κατασκευή, χρήση – συντήρηση και απόσυρση

Τα μοντέλα κύκλου ζωής λογισμικού προσδιορίζουν τις διαδικασίες ανάπτυξης οι οποίες λαμβάνουν χώρα κατά τις γενικές φάσεις «κατασκευή» και «χρήση – συντήρηση».

Διαδικασίες Ανάπτυξης Λογισμικού

Σε κάθε διαδικασία ανάπτυξης λογισμικού μπορούμε να διακρίνουμε περισσότερες από μία επιμέρους φάσεις, ενώ σε κάθε επιμέρους φάση μπορούμε να διακρίνουμε περισσότερες από μία εργασίες. Οι διαδικασίες ανάπτυξης λογισμικού μπορούν να ταξινομηθούν ως ακολούθως:

  • Προδιαγραφή, δηλαδή καθορισμός των εργασιών που θα επιτελεί το λογισμικό, καθώς και των περιορισμών και των παραδοχών που ισχύουν.
  • Ανάπτυξη, δηλαδή κατασκευή του λογισμικού και διακρίνονται τρεις επιμέρους φάσεις:
    • ανάλυση προδιαγραφών υλοποίησης,
    • σχεδίαση μονάδων λογισμικού και διεπαφών
    • συγγραφή πηγαίου κώδικα (source code)
  • Δοκιμή – επαλήθευση, δηλαδή επιβεβαίωση της ικανοποίησης των προδιαγραφών και της καταγραφής όποιων σφαλμάτων (bugs) υπάρχουν. Η παραδοχή ότι πάντα υπάρχουν σφάλματα διότι δεν υπάρχει λογισμικό χωρίς σφάλματα αποτελεί μια θεώρηση που αδίκως δεν περιλαμβάνεται ως ξεχωριστή θεματική ενότητα σε ακαδημαικό επίπεδο. Αυτό ισχύει μέχρι και σήμερα τουλάχιστον για τα Ελληνικά πανεπιστήμια.
  • Εξέλιξη, δηλαδή επαύξηση των λειτουργικών χαρακτηριστικών του λογισμικού ή τροποποίηση υπαρχουσών, προκειμένου να ικανοποιούνται οι μεταβαλλόμενες ανάγκες

Ένα μοντέλο κύκλου ζωής λογισμικού στοχεύει στην καθοδήγηση του κατασκευαστή, προκειμένου αυτός να επιτύχει την καλύτερη δυνατή υλοποίηση των διαδικασιών ανάπτυξης λογισμικού. Μια απο τις σημαντικότερες παραμέτρους που καταδεικνύει τη σημασία των μοντέλων κύκλου ζωής είναι το κόστος.

Το κόστος αναθεώρησης αποφάσεων ή/και διόρθωσης σφαλμάτων είναι τόσο μεγαλύτερο, όσο μεγαλύτερη είναι και η απαιτούμενη οπισθοδρόμηση της διαδικασίας που αυτή συνεπάγεται.

Το κόστος αυτό δεν αφορά μόνο οικονομικούς πόρους που αποδίδονται στο έργο αλλά και χρόνο καθυστέρησης που δεν είναι πάντα διαθέσιμος σε πραγματικές συνθήκες. Επίσης, είναι συχνό φαινόμενο οι παρενέργειες στο υπόλοιπο σύστημα λογισμικού (side effects) οι οποίες μπορούν να μεταβάλλουν προς το χειρότερο τα ποιοτικά του χαρακτηριστικά και δεν είναι εύκολο να εντοπιστούν από την αρχή.

Ποια ειναι τα Μοντέλα Κύκλου Ζωής του Λογισμικού

Τα μοντέλα κύκλου ζωής λογισμικού Διακρίνονται σε διάφορες κατηγορίες, ανάλογα με τη μεθοδολογία και τη φιλοσοφία τους.

  1. Ακολουθιακά Μοντέλα (Sequential Models: Σε αυτά, η ανάπτυξη προχωρά σε διαδοχικά στάδια, χωρίς επιστροφή σε προηγούμενα.
  2. Επαναληπτικά & Αυξητικά Μοντέλα (Iterative & Incremental Models): Η ανάπτυξη γίνεται σταδιακά, επιτρέποντας την προσαρμογή στις αλλαγές.
  3. Ευέλικτα Μοντέλα (Agile Models): Επικεντρώνονται στη συνεχή εξέλιξη του λογισμικού με γρήγορους κύκλους ανάπτυξης.
  4. Υβριδικά Μοντέλα: Συνδυάζουν στοιχεία από διαφορετικά μοντέλα για μεγαλύτερη προσαρμοστικότητα.

Συγκριτικός Πίνακας Μοντέλων Κύκλου Ζωής Λογισμικού

ΜοντέλοΤύποςΒασικά ΧαρακτηριστικάΠλεονεκτήματαΜειονεκτήματαΚατάλληλο για…
Καταρράκτη (Waterfall)ΑκολουθιακόΔιαδοχικές φάσεις χωρίς επιστροφήΑπλό, σαφώς καθορισμένοΆκαμπτο, δύσκολο στις αλλαγέςΜικρά, σταθερά έργα
V-ModelΑκολουθιακόΑνάπτυξη & δοκιμή παράλληλαΚαλύτερη ανίχνευση σφαλμάτωνΔεν προσαρμόζεται εύκολα σε αλλαγές απαιτήσεωνΈργα υψηλής αξιοπιστίας (π.χ. ιατρικό λογισμικό)
Σπειροειδές (Spiral)ΕπαναληπτικόΕστίαση στη διαχείριση ρίσκου & σταδιακή ανάπτυξηΕυέλικτο, καλό για μεγάλα έργαΥψηλό κόστος & πολυπλοκότηταΜεγάλα & επικίνδυνα έργα
Incremental (Αυξητικό)ΕπαναληπτικόΑνάπτυξη σε στάδια, προσθήκη νέων λειτουργιώνΓρήγορη παράδοση, ευελιξίαΜπορεί να προκύψει κακή δομή συστήματοςΈργα με μεταβαλλόμενες απαιτήσεις
Prototyping (Πρωτοτύπων)ΕπαναληπτικόΓρήγορη δημιουργία πρωτοτύπων για ανατροφοδότησηΒελτιωμένη κατανόηση απαιτήσεωνΜπορεί να οδηγήσει σε κακή τεκμηρίωσηΣυστήματα με ασαφείς απαιτήσεις
RAD (Rapid Application Development)ΕπαναληπτικόΓρήγορη ανάπτυξη, χρήση εργαλείων για αυτοματοποίησηΠολύ ταχύ, ιδανικό για GUI εφαρμογέςΧρειάζεται εμπειρία, δεν ταιριάζει σε μεγάλα έργαΕφαρμογές με μικρό κύκλο ζωής
Fountain (Πίδακα)ΕπαναληπτικόΑνάπτυξη με έμφαση στην επαναχρησιμοποίησηΚατάλληλο για αντικειμενοστραφή ανάπτυξηΔύσκολος προγραμματισμόςΑντικειμενοστραφή προγραμματισμός
Agile (Scrum, XP, Kanban)ΕυέλικτοΣυνεχείς επαναλήψεις, στενή συνεργασία ομάδαςΕυέλικτο, γρήγορες παραδόσειςΔύσκολο σε μεγάλα & αυστηρά έργαΔυναμικά περιβάλλοντα
Lean DevelopmentΕυέλικτοΜείωση σπατάλης, γρήγορη προσαρμογήΥψηλή αποδοτικότηταΔύσκολο στην υιοθέτησηStartups, καινοτόμα έργα

Δεν υπάρχει ένας και μοναδικός τρόπος για να προσδιορίσουμε έστω και τις γενικές φάσεις από τις οποίες διέρχεται η κατασκευή του λογισμικού. Πολλά εξαρτώνται από τις ιδιαίτερες συνθήκες που επικρατούν, όπως η εμπειρία και η τεχνογνωσία του κατασκευαστή, το είδος της εφαρμογής λογισμικού και η πιθανότητα να αλλάξουν οι απαιτήσεις από αυτή κ.ά.. Αυτό που διαφοροποιεί τα διάφορα μοντέλα κύκλου ζωής λογισμικού είναι η εμβέλεια, δηλαδή η έκταση του υπό κατασκευή συστήματος λογισμικού στην οποία αυτές οι διαδικασίες εφαρμόζονται, η επαναληπτικότητα των εργασιών, καθώς και οι ενδιάμεσες αποτιμήσεις από τον πελάτη ή τον κατασκευαστή.


Βιβλιογραφία: