Ο κύκλος έκδοσης ζωής λογισμικού σχηματικά
Ο όρος **κύκλος ζωής έκδοσης λογισμικού** (αγγλ. software release life cycle) αναφέρεται στις φάσεις ανάπτυξης και ύπαρξης ενός λογισμικού. Ξεκινά από την σύλληψη της ιδέας και την μελέτη για τις απαιτήσεις και τις προδιαγραφές του. Ακολουθεί η υλοποίησή του, με την δημιουργία του κώδικα και την αποσφαλμάτωση ή βελτίωση του. Η διάθεση του τελικού προϊόντος στον καταναλωτή. Η υποστήριξή με ενημερώσεις (updates), οι οποίες βελτιώνουν την λειτουργικότητά του ή διορθώνουν σφάλματα (bugs). Και τέλος φτάνει στην απόσυρσή του, όταν αντικαθίσταται από άλλο λογισμικό, που εκμεταλλεύεται πληρέστερα τις νεότερες τεχνολογικές εξελίξεις. Ενώ η ακολουθία των φάσεων, είναι γενικά αποδεκτή, ο τρόπος εφαρμογής τους ποικίλει, ανάλογα με το είδος του λογισμικού και την συνολική προσέγγιση της ομάδας που κάνει την διαχείριση.

Ιστορία
-------

Παρόμοια ορολογία για τις φάσεις δοκιμών, όπως οι «*alpha» και «beta*», πρωτοχρησιμοποιήθηκε από την IBM την δεκαετία του 1950, για την ανάπτυξη των προϊόντων της (hardware). Τις είχε ονομάσει φάσεις *A,B και C*. «*Α*» φάση, ήταν η επεξεργασία της «*ιδέας*» του νέου προϊόντος, πριν αυτό ανακοινωθεί δημόσια. «*B*» φάση, ήταν η όλη απαιτούμενη εργασία και δοκιμασία του προϊόντος, πριν αυτό δοθεί για παραγωγή. Η φάση "*C*" ήταν η τελική δοκιμή πριν από τη γενική διαθεσιμότητα του προϊόντος στην αγορά. Όταν η IBM άρχισε την παραγωγή λογισμικού, ο όρος «*alpha*», αναφερόταν στην επεξεργασία και δοκιμή πριν την ανακοίνωση του και ο όρος «*beta*», στην διαδικασία μέχρι το προϊόν φτάσει να είναι έτοιμο για διάθεση. Η IBM σταμάτησε να χρησιμοποιεί την ορολογία «*alpha/beta*» την δεκαετία του 1960, αλλά ήδη είχε επικρατήσει στην τεχνολογία ανάπτυξης λογισμικού. Η IBM χρησιμοποίησε τον όρο «*δοκιμή πεδίου*» (αγγλ. "*field test*"), αντί για τον γνωστό σήμερα όρο "*beta test*", όταν η δοκιμή γίνεται από τους πελάτες.

Στάδιο ανάπτυξης
----------------

Στο στάδιο ανάπτυξης ακολουθούνται τέσσερις φάσεις, ώστε το προϊόν να είναι αξιόπιστο όταν θα φτάσει στον καταναλωτή. Η Pre-Alpha όπου γίνεται ο μεγάλος όγκος της κωδικοποίησης του λογισμικού. Η Alpha όπου γίνεται ο έλεγχος σφαλμάτων από τους δημιουργούς. Η Beta όπου γίνεται ο έλεγχος σφαλμάτων από κατά κανόνα έμπειρους καταναλωτές/χρήστες και τελικά η Release Candidate, όπου θεωρείται ότι το λογισμικό είναι αρκετά αξιόπιστο για χρήση από το σύνολο των καταναλωτών.

### Pre-Alpha

Η φάση *Pre-Alpha* χαρακτηρίζει όλες τις διαδικασίες που συντελούνται κατά την διάρκεια της αρχικής ανάπτυξης του προϊόντος. Οι διαδικασίες αυτές περιλαμβάνουν συγκέντρωση και ανάλυση απαιτήσεων (Requirements analysis), την σχεδίαση λογισμικού (Software design), την ανάπτυξη λογισμικού (Software development) και την δοκιμή των επιμέρους κομματιών του (Unit testing). Οι διάφορες λειτουργίες του δεν είναι έτοιμες και το προϊόν δεν είναι έτοιμο να χρησιμοποιηθεί από άλλους εκτός από την ομάδα που το αναπτύσσει.

### Alpha

Η φάση *Alpha* του κύκλου έκδοσης είναι η πρώτη φάση κατά την οποία αρχίζει η δοκιμή του λογισμικού. Σε αυτή τη φάση όλη η προβλεπόμενη λειτουργικότητα και οι προδιαγραφές έχουν κωδικοποιηθεί, το προϊόν είναι έτοιμο για δοκιμή. Σε αυτή τη φάση ελέγχου οι προγραμματιστές χρησιμοποιούν τεχνικές «*Διαφανούς Κουτιού*», για να εντοπίσουν τα σφάλματα και να καταστήσουν το λογισμικό όσο πιο σταθερό και αξιόπιστο γίνεται. Ακολουθεί ο έλεγχος με δοκιμές «*Μαύρου Κουτιού*», η οποία γίνεται από διαφορετική ομάδα. Αν το λογισμικό παραδοθεί για έλεγχο «*Μαύρου Κουτιού*», σε έναν περιορισμένο αριθμό χρηστών (π.χ. στους εργαζόμενους μιας επιχείρησης ή οργανισμού), τότε λέμε ότι γίνεται χρήση της «*έκδοσης alpha*» του λογισμικού.

Συνήθως το λογισμικό σε αυτή τη φάση είναι πολύ ασταθές και μπορεί να προκαλέσει εκτός από πρόβλημα στην χρήση του, πλήρη κατάρρευση και απώλεια δεδομένων του χρήστη. Η έκδοση Alpha ενδέχεται να μην περιλαμβάνει όλες τις λειτουργίες που προβλέπονται για την τελική έκδοση. Δεν συνηθίζεται η δημοσίευση του λογισμικού σε αυτή την φάση, ιδίως όταν αυτό εκδίδεται με άδεια περιορισμένης χρήσης. Αντίθετα, πολλές εφαρμογές ανοιχτού κώδικα παρέχουν συχνά κάποιες *Alpha* εκδόσεις είτε έτοιμες για χρήση είτε μόνο τον πηγαίο κώδικά τους. Στην περίπτωση κατασκευής εξατοµικευµένου λογισµικού (custom software) ενδείκνυται σε αυτή τη φάση μία πρόχειρη παρουσίαση και αποδοχή από τον πελάτη για την περίπτωση δομικών διορθώσεων.

### Beta

Τις *Alpha* εκδόσεις ακολουθούν οι *Beta,* που είναι γνωστές και σαν *betaware* λογισμικό. Σε αυτή τη φάση το λογισμικό για πρώτη φορά γίνεται διαθέσιμο στους πραγματικούς χρήστες και σε ένα περιορισμένο αριθμό πελατών. Το λογισμικό στην φάση αυτή περιλαμβάνει όλες τις προβλεπόμενες λειτουργίες του, όμως δεν είναι ακόμα έτοιμο, γιατί πιθανότατα περιέχει αρκετά σφάλματα (bugs). Μεγάλος αριθμός σφαλμάτων εντοπίζεται στην φάση *Alpha*, αλλά στην φάση *Beta* δοκιμάζεται κάτω από πραγματικές συνθήκες, από περισσότερους χρήστες και μεγαλύτερο όγκο δεδομένων, με αποτέλεσμα να εμφανίζονται επιπλέον σφάλματα, προβλήματα στις επιδόσεις και ασταθείς συμπεριφορές του συστήματος. Δεν αποκλείεται η κατάρρευση του συστήματος και η απώλεια δεδομένων. Στην περίπτωση που το λογισμικό προορίζεται για το ευρύ κοινό και πρέπει να λειτουργήσει σε διαφορετικές πλατφόρμες (μηχανές, λειτουργικά συστήματα, κλπ), που η κάθε μια μπορεί να έχει διαφορετικές παραμετροποιήσεις, τότε επιβάλλεται η beta έκδοση να δοκιμαστεί από όσο το δυνατόν περισσότερους χρήστες, το οποίο είναι εφικτό λόγω του Διαδικτύου. Ουσιαστικά πρόκειται για σφάλματα που δεν μπορούν να εντοπιστούν διαφορετικά, γιατί προκαλούνται από άλλα προγράμματα ή από το λειτουργικό σύστημα.

Υπάρχουν άτομα ή οργανισμοί που δοκιμάζουν την έκδοση αυτή και ονομάζονται δοκιμαστές Beta (*Beta testers*)- συνήθως είναι τωρινοί ή μελλοντικοί πελάτες της εταιρείας που αναπτύσσει το λογισμικό. Αυτοί είναι πρόθυμοι να δοκιμάσουν την ασταθή έκδοση χωρίς ανταμοιβή και καμιά φορά λαμβάνουν την τελική έκδοση δωρεάν ή με κάποια έκπτωση. Δουλειά τους είναι να δοκιμάσουν το λογισμικό και να αναφέρουν στην ομάδα ανάπτυξης τα προβλήματα που αντιμετώπισαν. Η Beta έκδοση μπορεί να χρησιμοποιηθεί και ως δείγμα για την παρουσίαση του ανερχόμενου προϊόντος και των χαρακτηριστικών του, σε υποψήφιους πελάτες.

#### Beta διαρκείας

Επειδή η χρήση του Διαδικτύου διευκολύνει την γρήγορη και ανέξοδη διανομή λογισμικού, αυξάνονται οι περιπτώσεις όπου εταιρείες διατηρούν το λογισμικό αρκετό καιρό στη φάση *Beta* με σκοπό να συνεχίσουν να προσθέτουν λειτουργίες και δυνατότητες (Perpetual Beta). Το «beta διαρκείας», λόγω των συνεχών τροποποιήσεων, εύκολα θα μπορούσε να χαρακτηριστεί σαν «alpha έκδοση» της πρό-Διαδικτύου εποχής. Τον Φεβρουάριο του 2005, ο ιστότοπος τεχνολογικών ειδήσεων ZDNet, δημοσίευσε ένα άρθρο σχετικά με το «*beta διαρκείας*», που συχνά διαρκεί χρόνια, δίνοντας την εντύπωση, ότι το λογισμικό είναι σε συνεχή κατάσταση παραγωγής. Στο άρθρο αυτό παρουσίαζε σαν παραδειγματα το Gmail και το Google News, που βρισκόταν σε beta για μεγάλο χρονικό διάστημα, παρά το γεγονός ότι χρησιμοποιούταν ευρέως. Τελικά, το Google News βγήκε από την κατάσταση beta τον Ιανουάριο του 2006 και αργότερα, τον Ιούλιο του 2009, το Google Apps, συμπεριλαμβανομένου και του Gmail. Αυτή η πολιτική επιτρέπει στον δημιουργό του λογισμικού να καθυστερεί την πλήρη υποστήριξη και την ανάληψη της ευθύνης των προβλημάτων που είναι σε εκκρεμότητα. Από την διάθεση των Windows 8, η Microsoft δεν αποκαλεί το λογισμικό της beta, αλλά «προεπισκόπηση». Η Microsoft, μετά την έναρξη το 2014, του «Προγράμματος Windows Insider», παρακινεί τους πελάτες της να γίνουν μέλη της «κοινότητας Insider», ώστε να λαμβάνουν όλες τις τελευταίες εκδόσεις και να ανταποκρίνονται με σχόλια και προτάσεις για βελτίωση.

#### Ανοιχτό και κλειστό Beta

*Κλειστό Beta* σημαίνει ότι η δοκιμαστική έκδοση είναι προσβάσιμη από ένα στενό κύκλο προσώπων.Έτσι τα άτομα για να αποκτήσουν πρόσβαση πρέπει να λάβουν πρόσκληση από τους υπεύθυνους (συνήθως μέσω ηλεκτρονικού ταχυδρομείου). Αντίθετα, το *ανοιχτό Beta* μπορούν να το δοκιμάσουν είτε χρήστες ενός ευρέος περιβάλλοντος είτε όλοι οι ενδιαφερόμενοι.

### Release candidate

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

Στάδιο έκδοσης
--------------

Αφού περάσει τα προηγούμενα στάδια δοκιμών και βελτιώσεων, το λογισμικό είναι έτοιμο για κυκλοφορία και αυτή η τελική κατάστασή του λέγεται «*σταθερή έκδοση*» (αγγλ. stable release ή stable edition).

### Γενική διαθεσιμότητα

Η γενική διαθεσιμότητα (αγγλ. General availability - GA) είναι το στάδιο προετοιμασίας για την εμπορία του λογισμικού, κυρίως όταν αυτό πρόκειται να διατεθεί από τα καταστήματα μέσω κάποιας συσκευασίας. Γίνονται οι τελευταίες εργασίες από το εμπορικό τμήμα (marketing) και όλες οι εμπορικές τακτοποιήσεις σε τοπικό και αν είναι απαραίτητο σε παγκόσμιο επίπεδο. Οριστικοποιούνται οι αναγκαίες προσαρμογές και συμμορφώσεις τοπικότητας (γλώσσα, περιοχή) του προϊόντος, όπως και τα ανάλογα εγχειρίδια χρήσης (manuals). Μετά από αυτές τις διευθετήσεις, το λογισμικό είναι έτοιμο για διάθεση στον καταναλωτή.

### Προώθηση στην Αγορά / Παραγωγή

Προώθηση στην Αγορά / Παραγωγή (αγγλ. Release to Μarketing / Μanufacturing, RTM). Είναι η φάση που το τελικό προϊόν γίνεται διαθέσιμο στον χρήστη επίσημα. Ο όρος RTM χαρακτηρίζει την κατάσταση του λογισμικού, ότι δηλαδή αυτό είναι αρκετά υψηλής ποιότητας ώστε να χρησιμοποιηθεί από το ευρύ κοινό και δεν υποδηλώνει τον τρόπο διάθεσής του, που μπορεί να είναι Διαδικτυακά ή με μαγνητικά και οπτικά μέσα.

### Προώθηση στο Διαδίκτυο

Η έκδοση του λογισμικού που γίνεται διαθέσιμη μέσω του Διαδικτύου (αγγλ. Release to Web ή Web release, RTW). Αυτή η μέθοδος διανομής γίνεται όλο και πιο συνήθης, όσο αυξάνεται η χρήση του Διαδικτύου, και επιτυγχάνεται είτε επιγραμμικά (online), είτε είναι Διαδικτυακή εφαρμογή (web application). Έχει μειωμένο κόστος, λόγω μη ύπαρξης φυσικού μέσου, συσκευασίας και μεταφορικών.

Στάδιο υποστήριξης
------------------

Το λογισμικό υπόκειται σε ενδελεχή έλεγχο για σφάλματα στις φάσεις *alpha* και *beta*. Στην πράξη όμως, ανάλογα και το πόσο πολύπλοκο είναι, δεν επιτυγχάνεται ποτέ πλήρη αποσφαλμάτωση. Ακόμα και μετά την κυκλοφορία της «*σταθερής έκδοσης*», οι δημιουργοί του είναι υποχρεωμένοι να εκδίδουν διορθώσεις ή ακόμα λόγω ανταγωνιστικότητας να προσθέτουν βελτιώσεις και επιπλέον λειτουργικότητα. Σε αυτή τη φάση λέγεται ότι το λογισμικό είναι στο «*στάδιο υποστήριξης*» (αγγλ. support stage).

### Τρόποι

Οι δημιουργοί, σε αυτό το στάδιο, κυκλοφορούν μικρές «ενημερώσεις» (αγγλ. updates), που είναι «πρόχειρες διορθώσεις» (αγγλ. patches) ή μεγάλες που λέγονται «πακέτα υπηρεσιών υποστήριξης» (αγγλ. service packs). Μεγάλες τροποποιήσεις μπορούν να θεωρηθούν «ενδιάμεσες εκδόσεις». Σε κάποιες κατηγορίες λογισμικών, από την φύση τους είναι απαραίτητες οι συχνές ενημερώσεις, όπως στα προγράμματα προστασίας από ιούς (αγγλ. anti-virus).

### Κόστος

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

Στάδιο εγκατάλειψης
-------------------

 Αυτό το στάδιο λέγεται «*τέλος ζωής λογισμικού*» (αγγλ. end-of-life) ή το λογισμικό αποκαλείται «*εγκαταλελειμένο*» (αγγλ. abandonware). Κυρίως λόγω της δημιουργίας νέου, εντελώς διαφορετικού προϊόντος, που καλύπτει σε λειτουργικότητα το υπάρχον, ο κατασκευαστής εγκαταλείπει την υποστήριξη του και διακόπτει την πώλησή του. Βέβαια αυτής της ενέργειας προηγείται ανακοίνωση, που γίνεται ένα εύλογο χρονικό διάστημα πριν, και δεδομένης της κυκλοφορίας στην αγορά του νέου λογισμικού, που θα το αντικαταστήσει. Ο χρήσης μπορεί να συνεχίσει να το χρησιμοποιεί, όμως με δική του ευθύνη στην περίπτωση δυσλειτουργίας ή και κατάρρευσης. Αυτό το στάδιο του λογισμικού διαρκεί όσο ο χρήστης συνεχίζει να το χρησιμοποιεί, κάτι που εξαρτάται από την γενική βελτίωση της τεχνολογίας.

Σε κάποια λογισμικά αυτό το στάδιο αναγκαστικά είναι πολύ μικρό ή ανύπαρκτο, όπως είναι στα προγράμματα προστασίας από ιούς και κακόβουλες ενέργειες.

Σημειώσεις
----------

1. ↑  Ο έλεγχος «Διαφανούς Κουτιού» γίνεται σε επιμέρους τμήματα του κώδικα και στη συνέχεια σε ολόκληρο το σύστημα. Συνήθως γίνεται από τους προγραμματιστές που έγραψαν τον κώδικα για να διαπιστώσουν αν ανταποκρίνεται στις απαιτήσεις που έχουν ζητηθεί. Ονομάζεται έτσι γιατί οι προγραμματιστές που έχουν γράψει τον κώδικα γνωρίζουν τι έχει μέσα το «πρόγραμμα/κουτί». Μειονεκτεί στο ότι ο προγραμματιστής είναι επηρεασμένος από τον τρόπο που έχει γράψει τον κώδικα και έτσι ο έλεγχος είναι κάπως «προκατειλημμένος». Επίσης λέγεται και «έλεγχος Άσπρου ή Γυάλινου ή Καθαρού Κουτιού» ή «Δομικός έλεγχος».
2. ↑  Ο έλεγχος «Μαύρου Κουτιού» γίνεται σε τμήματα και τελικά σε ολόκληρο το σύστημα. Το σημαντικό είναι ότι γίνεται από χρήστη που δεν γνωρίζει πως λειτουργεί ο κώδικας, αλλά μόνο το τι θα έπρεπε να κάνει. Ονομάζεται έτσι γιατί όταν ο χρήστης δεν γνωρίζει πως λειτουργεί εσωτερικά ο κώδικας το βλέπει σαν «μαύρο κουτί».
3. ↑  Υπάρχει η εξαίρεση του «beta διαρκείας», όπου δεν περιορίζεται στην προβλεπόμενη λειτουργικότητα, αλλά στην συνεχή ανανέωσή της, για μεγάλο χρονικό διάστημα.

Παραπομπές
----------

1. 1 2 3 4 5 6 7  «Software Release Life Cycle», by www.professionalqa.com/,Δημοσιεύθηκε 17/8/2016, Αρχειοθετήθηκε 5/3/2017, Ανακτήθηκε 7/1/2018
2. ↑  Στην Pandora FMS, βλέπουμε η φάσεις Pre-Alpha και Alpha να περιλαμβάνονται στην φάση που ονομάζει Development. Αρχειοθετήθηκε 7/1/2018. Ανακτήθηκε 7/1/2018
3. 1 2  «Software Development Projects: Walking Through the Life Cycle», από www.brighthub.com, Δημοσιεύθηκε 18/5/2011. Αρχειοθετήθηκε 6/7/2017. Ανακτήθηκε 8/1/2018
4. ↑  «Definition of: alpha version», www.pcmag.com. Αρχειοθετήθηκε 4/9/2017. Ανακτήθηκε 5/1/2018
5. 1 2 3 4  «Waiting with Beta'd Breath» by Geoff Duncan, tidbits.com, Δημοσιεύθηκε Μάϊο 1996. Αρχειοθετήθηκε 15/5/2006. Ανακτήθηκε 5/1/2018
6. ↑  «Definition of: alpha test», www.pcmag.com. Αρχειοθετήθηκε 17/7/2017. Ανακτήθηκε 5/1/2018
7. ↑  «Κάλεσμα για beta testing», www.mozilla.org. Αρχειοθετήθηκε 4/1/2018. Ανακτήθηκε 5/1/2018
8. ↑  «Τι είναι Beta Version», www.ip.gr. Αρχειοθετήθηκε 10/8/2014. Ανακτήθηκε 5/1/2018
9. ↑  «Κατανόηση εκδόσεων beta, δειγμάτων επίδειξης και δοκιμαστικών εκδόσεων στην κονσόλα Xbox One», support.xbox.com. Αρχειοθετήθηκε 5/1/2018. Ανακτήθηκε 5/1/2018
10. ↑  «Definition of: beta test», www.pcmag.com. Αρχειοθετήθηκε 17/7/2017. Ανακτήθηκε 5/1/2018
11. ↑  «Definition of: beta version», www.pcmag.com. Αρχειοθετήθηκε 8/12/2016. Ανακτήθηκε 5/1/2018
12. ↑  «Google Apps is out of beta (yes, really)», googleblog.blogspot.gr. Δημοσιεύθηκε 7/7/2009. Αρχειοθετήθηκε 21/1/2011. Ανακτήθηκε 5/1/2018
13. ↑  «Εγγραφή στο Πρόγραμμα Windows Insider», από support.microsoft.com. Ανακτήθηκε 5/1/2018
14. ↑  «Build 2016: Η ιστορία πίσω από το πρόγραμμα Windows Insider», από www.insomnia.gr, δημοσιεύτηκε 7/4/2016. Αρχειθετήθηκε 5/1/2018. Ανακτήθηκε 5/1/2018
15. ↑  «Μας αγαπάει η Microsoft; Γιατί τα Windows 10 ήταν δωρεάν;», secnews.gr, δημοσιεύτηκε 16/10/2016. Αρχειοθετήθηκε 3/1/2018. Ανακτήθηκε 5/1/2018
16. ↑  «Πρόγραμμα Xbox Insider», www.xbox.com. Αρχειοθετήθηκε 9/5/2017. Ανακτήθηκε 5/1/2018

Πηγές
-----

* Release To Manufacturing[*νεκρός σύνδεσμος*]
* Release To Web[*νεκρός σύνδεσμος*]
* Development Stages Αρχειοθετήθηκε 2012-02-17 στο Wayback Machine.
* Free Software Project Management HOWTO
* Software Release Decisions
* A Methodology to Support Software Release Decisions
* Software Testing Life Cycle
* Semantic versioning