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

Τα μοντέλα κύκλου ζωής λογισμικού προσδιορίζουν τις διαδικασίες ανάπτυξης οι οποίες λαμβάνουν χώρα κατά τις γενικές φάσεις «κατασκευή» και «χρήση – συντήρηση».
Διαδικασίες Ανάπτυξης Λογισμικού
Σε κάθε διαδικασία ανάπτυξης λογισμικού μπορούμε να διακρίνουμε περισσότερες από μία επιμέρους φάσεις, ενώ σε κάθε επιμέρους φάση μπορούμε να διακρίνουμε περισσότερες από μία εργασίες. Οι διαδικασίες ανάπτυξης λογισμικού μπορούν να ταξινομηθούν ως ακολούθως:
- Προδιαγραφή, δηλαδή καθορισμός των εργασιών που θα επιτελεί το λογισμικό, καθώς και των περιορισμών και των παραδοχών που ισχύουν.
- Ανάπτυξη, δηλαδή κατασκευή του λογισμικού και διακρίνονται τρεις επιμέρους φάσεις:
- ανάλυση προδιαγραφών υλοποίησης,
- σχεδίαση μονάδων λογισμικού και διεπαφών
- συγγραφή πηγαίου κώδικα (source code)
- Δοκιμή – επαλήθευση, δηλαδή επιβεβαίωση της ικανοποίησης των προδιαγραφών και της καταγραφής όποιων σφαλμάτων (bugs) υπάρχουν. Η παραδοχή ότι πάντα υπάρχουν σφάλματα διότι δεν υπάρχει λογισμικό χωρίς σφάλματα αποτελεί μια θεώρηση που αδίκως δεν περιλαμβάνεται ως ξεχωριστή θεματική ενότητα σε ακαδημαικό επίπεδο. Αυτό ισχύει μέχρι και σήμερα τουλάχιστον για τα Ελληνικά πανεπιστήμια.
- Εξέλιξη, δηλαδή επαύξηση των λειτουργικών χαρακτηριστικών του λογισμικού ή τροποποίηση υπαρχουσών, προκειμένου να ικανοποιούνται οι μεταβαλλόμενες ανάγκες
Ένα μοντέλο κύκλου ζωής λογισμικού στοχεύει στην καθοδήγηση του κατασκευαστή, προκειμένου αυτός να επιτύχει την καλύτερη δυνατή υλοποίηση των διαδικασιών ανάπτυξης λογισμικού. Μια απο τις σημαντικότερες παραμέτρους που καταδεικνύει τη σημασία των μοντέλων κύκλου ζωής είναι το κόστος.
Το κόστος αναθεώρησης αποφάσεων ή/και διόρθωσης σφαλμάτων είναι τόσο μεγαλύτερο, όσο μεγαλύτερη είναι και η απαιτούμενη οπισθοδρόμηση της διαδικασίας που αυτή συνεπάγεται.
Το κόστος αυτό δεν αφορά μόνο οικονομικούς πόρους που αποδίδονται στο έργο αλλά και χρόνο καθυστέρησης που δεν είναι πάντα διαθέσιμος σε πραγματικές συνθήκες. Επίσης, είναι συχνό φαινόμενο οι παρενέργειες στο υπόλοιπο σύστημα λογισμικού (side effects) οι οποίες μπορούν να μεταβάλλουν προς το χειρότερο τα ποιοτικά του χαρακτηριστικά και δεν είναι εύκολο να εντοπιστούν από την αρχή.
Ποια ειναι τα Μοντέλα Κύκλου Ζωής του Λογισμικού
Τα μοντέλα κύκλου ζωής λογισμικού Διακρίνονται σε διάφορες κατηγορίες, ανάλογα με τη μεθοδολογία και τη φιλοσοφία τους.
- Ακολουθιακά Μοντέλα (Sequential Models: Σε αυτά, η ανάπτυξη προχωρά σε διαδοχικά στάδια, χωρίς επιστροφή σε προηγούμενα.
- Επαναληπτικά & Αυξητικά Μοντέλα (Iterative & Incremental Models): Η ανάπτυξη γίνεται σταδιακά, επιτρέποντας την προσαρμογή στις αλλαγές.
- Ευέλικτα Μοντέλα (Agile Models): Επικεντρώνονται στη συνεχή εξέλιξη του λογισμικού με γρήγορους κύκλους ανάπτυξης.
- Υβριδικά Μοντέλα: Συνδυάζουν στοιχεία από διαφορετικά μοντέλα για μεγαλύτερη προσαρμοστικότητα.
Συγκριτικός Πίνακας Μοντέλων Κύκλου Ζωής Λογισμικού
Μοντέλο | Τύπος | Βασικά Χαρακτηριστικά | Πλεονεκτήματα | Μειονεκτήματα | Κατάλληλο για… |
---|---|---|---|---|---|
Καταρράκτη (Waterfall) | Ακολουθιακό | Διαδοχικές φάσεις χωρίς επιστροφή | Απλό, σαφώς καθορισμένο | Άκαμπτο, δύσκολο στις αλλαγές | Μικρά, σταθερά έργα |
V-Model | Ακολουθιακό | Ανάπτυξη & δοκιμή παράλληλα | Καλύτερη ανίχνευση σφαλμάτων | Δεν προσαρμόζεται εύκολα σε αλλαγές απαιτήσεων | Έργα υψηλής αξιοπιστίας (π.χ. ιατρικό λογισμικό) |
Σπειροειδές (Spiral) | Επαναληπτικό | Εστίαση στη διαχείριση ρίσκου & σταδιακή ανάπτυξη | Ευέλικτο, καλό για μεγάλα έργα | Υψηλό κόστος & πολυπλοκότητα | Μεγάλα & επικίνδυνα έργα |
Incremental (Αυξητικό) | Επαναληπτικό | Ανάπτυξη σε στάδια, προσθήκη νέων λειτουργιών | Γρήγορη παράδοση, ευελιξία | Μπορεί να προκύψει κακή δομή συστήματος | Έργα με μεταβαλλόμενες απαιτήσεις |
Prototyping (Πρωτοτύπων) | Επαναληπτικό | Γρήγορη δημιουργία πρωτοτύπων για ανατροφοδότηση | Βελτιωμένη κατανόηση απαιτήσεων | Μπορεί να οδηγήσει σε κακή τεκμηρίωση | Συστήματα με ασαφείς απαιτήσεις |
RAD (Rapid Application Development) | Επαναληπτικό | Γρήγορη ανάπτυξη, χρήση εργαλείων για αυτοματοποίηση | Πολύ ταχύ, ιδανικό για GUI εφαρμογές | Χρειάζεται εμπειρία, δεν ταιριάζει σε μεγάλα έργα | Εφαρμογές με μικρό κύκλο ζωής |
Fountain (Πίδακα) | Επαναληπτικό | Ανάπτυξη με έμφαση στην επαναχρησιμοποίηση | Κατάλληλο για αντικειμενοστραφή ανάπτυξη | Δύσκολος προγραμματισμός | Αντικειμενοστραφή προγραμματισμός |
Agile (Scrum, XP, Kanban) | Ευέλικτο | Συνεχείς επαναλήψεις, στενή συνεργασία ομάδας | Ευέλικτο, γρήγορες παραδόσεις | Δύσκολο σε μεγάλα & αυστηρά έργα | Δυναμικά περιβάλλοντα |
Lean Development | Ευέλικτο | Μείωση σπατάλης, γρήγορη προσαρμογή | Υψηλή αποδοτικότητα | Δύσκολο στην υιοθέτηση | Startups, καινοτόμα έργα |
Δεν υπάρχει ένας και μοναδικός τρόπος για να προσδιορίσουμε έστω και τις γενικές φάσεις από τις οποίες διέρχεται η κατασκευή του λογισμικού. Πολλά εξαρτώνται από τις ιδιαίτερες συνθήκες που επικρατούν, όπως η εμπειρία και η τεχνογνωσία του κατασκευαστή, το είδος της εφαρμογής λογισμικού και η πιθανότητα να αλλάξουν οι απαιτήσεις από αυτή κ.ά.. Αυτό που διαφοροποιεί τα διάφορα μοντέλα κύκλου ζωής λογισμικού είναι η εμβέλεια, δηλαδή η έκταση του υπό κατασκευή συστήματος λογισμικού στην οποία αυτές οι διαδικασίες εφαρμόζονται, η επαναληπτικότητα των εργασιών, καθώς και οι ενδιάμεσες αποτιμήσεις από τον πελάτη ή τον κατασκευαστή.
Βιβλιογραφία: