Agile Methods
Η Scrum είναι μια επαναληπτική και αυξητική μεθοδολογία ανάπτυξης έργων. Χρησιμοποιείται σαν μια μεθοδολογία ανάπτυξης λογισμικού, όσον αφορά την οργάνωση και λειτουργία των ομάδων ανάπτυξης αλλά και στον σχεδιασμό και διαχείριση των ευέλικτων έργων.
Η ύπαρξη της Scrum οφείλεται σε μια ολιστική προσέγγιση των Takeuchi και Nonaka (1986) για την αύξηση της ταχύτητας και ευελιξίας στην ανάπτυξη εμπορικών προϊόντων. Σύμφωνα με την προσέγγιση αυτή, η διαδικασία ανάπτυξης ενός προϊόντος, σε όλες τις επί μέρους φάσεις, που συνήθως επικαλύπτονται, εκτελείται από μία λειτουργική "ομάδα" που συγκρίνεται με αυτήν του ράγκμπι (από όπου και το όνομα). Δηλαδή, όπως και στο ράγκμπι, όλη η ομάδα σαν μια οντότητα προσπαθεί να διανύσει την απόσταση (δημιουργία του προϊόντος), περνώντας την "μπάλα" μπρός-πίσω.  Το 1995 οι Sutherland και Schwaber θεμελίωσαν την μεθοδολογία σε μια ανακοίνωση-δημοσίευση του συνεδρίου OOPSLA'95. Οι Schwaber και Beedle, το 2001, σε ένα βιβλίο με τίτλο "Ευέλικτη Ανάπτυξη λογισμικού με την Scrum" περιγράφουν λεπτομερώς την μέθοδο.         
Η επιτυχία της μεθόδου οφείλεται στον τρόπο με τον οποίο προσεγγίζει και διαχειρίζεται την έννοια της διαδικασίας ανάπτυξης του λογισμικού. Προσδίδοντας ευελιξία στην οργάνωση και διαχείριση της διαδικασίας ανάπτυξης λογισμικού, αυξάνεται η παραγωγικότητα της ομάδας αλλά και η ικανότητα προσαρμογής της σύμφωνα με τις εκάστοτε ανάγκες που προκύπτουν. Δίνεται μεγάλη έμφαση στο πώς θα πρέπει να οργανωθεί η ομάδα ώστε να μπορέσει να επιτύχει το μέγιστο βαθμό αποτελεσματικότητας, σε ένα διαρκώς μεταβαλλόμενο περιβάλλον. Η μέθοδος προβλέπει ένα εντελώς διαφορετικό μοτίβο οργάνωσης και διοίκησης του έργου σε σχέση με τις υπόλοιπες μεθόδους. Πιο συγκεκριμένα η μέθοδος αυτή επιδιώκει όσο το δυνατόν μικρότερο χρονικό διάστημα κύκλου ανάπτυξης και παράδοση τμημάτων κώδικα του συστήματος που είχαν συμφωνηθεί ανά κύκλο. Ένα σημαντικό σημείο που θα πρέπει να αναφερθεί είναι η καθημερινή συνεδρίαση των μελών της ομάδας ανάπτυξης με σκοπό την επίτευξη όσο το δυνατόν καλύτερης συνεργασίας και συντονισμού των εργασιών τους.

Η Μέθοδος Scrum διαχωρίζεται σε 3 σημαντικές φάσεις(Schwaber and Beedle, 2008):
1. Αρχική Διερεύνηση (pre game)
2. Σχεδιασμός (
game)
3. Ολοκλήρωση (
post game)

1. Φάση αρχικής διερεύνησης
Περιλαμβάνει δύο επί μέρους φάσεις. Τη φάση της ανάλυσης και τη φάση του υψηλού επιπέδου σχεδιασμού.

1.1 Φάση Ανάλυσης
Στη φάση αυτή γίνεται ο καθορισμός και η πιστοποίηση του συστήματος που πρόκειται να αναπτυχθεί. Πιο συγκεκριμένα γίνεται ο καθορισμός των προδιαγραφών του συστήματος καθώς και των απαιτήσεων του χρήστη από αυτό. Σημαντικό ρόλο στη διαδικασία αυτή διαδραματίζει ο πελάτης ο οποίος καλείται να ορίσει με μεγάλη λεπτομέρεια το τι θέλει να κάνει το σύστημα. Σε συνεργασία με τον πελάτη δημιουργείται ένας κατάλογος ανεκτέλεστων προϊόντων (Product Backlog list) που περιέχει όλες τις γνωστές, μέχρι την παρούσα περίοδο, απαιτήσεις του συστήματος. Οι απαιτήσεις κατατάσσονται ανάλογα με την προτεραιότητα τους και υπολογίζεται η προσπάθεια που απαιτείται για την εφαρμογή τους. Ο κατάλογος  αυτός ενημερώνεται συνεχώς κατά την διάρκεια του κύκλου ζωής με νέα και πιο λεπτομερή στοιχεία, καθώς επίσης και με ακριβέστερες εκτιμήσεις για την αναγκαία προσπάθεια και με νέες προτεραιότητες. Έτσι η ομάδα ανάπτυξης πρέπει  να κάνει τα δικά της πλάνα και να ορίσει τις διαδικασίες ανάπτυξης με όσο το δυνατό μικρότερη πιθανότητα εμφάνισης προβλημάτων. Η ομάδα ανάπτυξης έχει το δύσκολο έργο του καθορισμού προτεραιοτήτων και του βαθμού σημαντικότητας των επιμέρους λειτουργιών του συστήματος που πρόκειται να αναπτυχθεί. Οι επιμέρους λειτουργίες αναλύονται μία προς μία, έτσι ώστε να διαπιστωθεί ο βαθμός δυσκολίας υλοποίησής τους όπως και η τυχόν ενσωμάτωση επιπλέον τεχνογνωσίας στη διαδικασία της υλοποίησής τους. Αυτό βέβαια προσδίδει επιπλέον δυσκολία στην ομάδα ανάπτυξης καθώς η ομάδα θα σπαταλήσει ένα μεγάλο χρονικό διάστημα στην εκπαίδευση κάποιων μελών της ώστε να μπορέσει να αντεπεξέλθει πλήρως στις ανάγκες του έργου.

1.2 Φάση υψηλού επιπέδου σχεδιασμού
Στη φάση αυτή υλοποιούνται η αρχιτεκτονική και ο σχεδιασμός του συστήματος με βάση τις αρχικές προδιαγραφές του συστήματος οι οποίες έχουν ήδη καθοριστεί στη προηγούμενη φάση.

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

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

 Επιστροφή
Σχήμα 1. Κύκλος ζωής της Scrum

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


Ρόλοι και ευθύνες
Έξι διακριτοί ρόλοι εμπλέκονται στην ανάπτυξη έργων με την ευέλικτη μεθοδολογία SCRUM. Καθένας από αυτούς τους ρόλους είναι επιφορτισμένος στο να εξυπηρετεί διαφορετικούς σκοπούς και να εκτελεί συγκεκριμένες εργασίες. Έτσι σε ένα έργο Scrum έχουμε ένα διαχειριστή ή ειδικό της Scrum (Scrum Master), τον ιδιοκτήτη ή διαχειριστή του προϊόντος (Product Οwner), την ομάδα Scrum (Scrum team), τον πελάτη (Customer), τον χρήστη (User) και τη διαχείριση (Administration). Στη συνέχεια, παρουσιάζονται αυτοί οι ρόλοι σύμφωνα με τους ορισμούς που έχουν προσδώσει σε αυτούς οι Schwaber και Beedle.
  

Ο διαχειριστής ή ειδικός της Scrum (Scrum Master)
Ο διαχειριστής  της SCRUM είναι υπεύθυνος για τη διασφάλιση της ορθής ανάπτυξης του έργου σύμφωνα πάντα με τις πρακτικές, τις αξίες και τους κανόνες που έχουν καθοριστεί κατά το σχεδιασμό του. Για να επιτευχθεί αυτό, αλληλεπιδρά τόσο με την ομάδα ανάπτυξης όσο και με τον πελάτη κατά τη διάρκεια της υλοποίησης του έργου. Είναι επίσης υπεύθυνος στο να διασφαλίσει ότι τυχόν εμπόδια κατά τη διάρκεια του έργου θα εξαλειφθούν, έτσι ώστε η ομάδα ανάπτυξης να διατηρήσει όσο το δυνατόν ψηλότερα το επίπεδο παραγωγικότητάς της. 

Ιδιοκτήτης ή διαχειριστής του προϊόντος (Product Οwner)
Είναι ο υπεύθυνος για το έργο, όσον αφορά την διαχείριση, τον έλεγχο και την καταγραφή των καταλόγων των απαιτήσεων (backlogs) του έργου. Ο ιδιοκτήτης ή διαχειριστής του προϊόντος επιλέγεται από τον διαχειριστή ή ειδικό της Scrum, τον πελάτη και την διαχείριση.  Είναι αυτός που επιλέγει σε συνεργασία με την ομάδα ανάπτυξης ποιες απαιτήσεις θα υλοποιηθούν σε κάθε επανάληψη και με ποια σειρά. Επίσης συμμετέχει ενεργά στην εκτίμηση της προσπάθειας που απαιτείται για την υλοποίηση των απαιτήσεων (χρόνος, εργαλεία κλπ.) και συμβάλει αποφασιστικά στην εξεύρεση λύσεων κατά την διάρκεια της ανάπτυξης. 

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

Πελάτης (Customer)
 Ο πελάτης συμμετέχει ενεργά σε όλη την διαδικασία  ανάπτυξης του λογισμικού, ιδιαίτερα στην καταγραφή των απαιτήσεων, στην διαδικασία επιλογής και ανάπτυξης των, αλλά και στον έλεγχο της καλής λειτουργίας του τελικού προϊόντος. Συνήθως ο πελάτης είναι ταυτόχρονα και ο χρήστης του λογισμικού οπότε εκτός από τις γνώσεις του όσον αφορά το υπό ανάπτυξη προϊόν, μπορεί άμεσα να αναγνωρίσει το παραγόμενο αποτέλεσμα και να ζητήσει την τροποποίησή του όποτε χρειασθεί. Ο πελάτης απαντάει άμεσα στις ερωτήσεις της ομάδας αυξάνοντας έτσι την παραγωγικότητα της.

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

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

Στη συνέχεια αναλύουμε κάποια από τα χαρακτηριστικά της μεθόδου Scrum σύμφωνα πάντα με τους Schwaber and Beedle.

Κατάλογος ανεκτέλεστων προϊόντων της παραγγελίας (Product Backlog list)
Είναι ένας κατάλογος που περιέχει τις  γνωστές,  μέχρι την παρούσα περίοδο, απαιτήσεις του συστήματος. Οι απαιτήσεις μπορεί να προέλθουν από τον πελάτη, τις πωλήσεις και το τμήμα μάρκετινγκ, την υποστήριξη πελατών ή τους ίδιους τους υπεύθυνους για την ανάπτυξη λογισμικού. Οι απαιτήσεις κατατάσσονται ανάλογα με την προτεραιότητα τους και υπολογίζεται η προσπάθεια που απαιτείται για την εφαρμογή τους. Ο κατάλογος των απαιτήσεων ενημερώνεται και αναθεωρείται σε κάθε επανάληψη με νέα και πιο λεπτομερή στοιχεία, καθώς επίσης και με ακριβέστερες εκτιμήσεις για την αναγκαία προσπάθεια και τις νέες προτεραιότητες.

Εκτίμηση της προσπάθειας (Effort Estimation)
Η εκτίμηση της προσπάθειας είναι μια επαναληπτική διαδικασία, κατά την οποία τα στοιχεία του καταλόγου των απαιτήσεων εκτιμώνται με μεγαλύτερη ακρίβεια όταν περισσότερες πληροφορίες είναι διαθέσιμες. Υπεύθυνοι για τη διαδικασία αυτή είναι ο διαχειριστής του προϊόντος και η ομάδα ανάπτυξης.

Επανάληψη (Sprint)
Επανάληψη είναι ένας πλήρης κύκλος ανάπτυξης που περιλαμβάνει τον σχεδιασμό, ανάλυση και υλοποίηση συγκεκριμένων απαιτήσεων (sprint backlog). Η ομάδα ανάπτυξης οργανώνει τις εργασίες της έτσι ώστε να παράγει μια νέα εκτελέσιμη και προσαυξητική εφαρμογή σε ένα χρονικό διάστημα που ποικίλει από μία έως τέσσερεις εβδομάδες (30 ημέρες). Σον καθορισμό και υλοποίηση των στόχων μιας επανάληψης συμβάλουν αποφασιστικά οι συνεδριάσεις για το σχεδιασμό των επαναλήψεων (sprint planning meetings), οι καθημερινές συνεδριάσεις Scrum (daily scrum meetings) καθώς και οι συνεδριάσεις για την επανεξέταση της επανάληψης (sprint review meeting).
Συνεδρίαση για το σχεδιασμό της επανάληψης (sprint planning meeting)
Είναι η συνεδρίαση για τον σχεδιασμό και την υλοποίηση μιας επανάληψης που οργανώνεται από τον ειδικό της Scrum και υλοποιείται σε δύο φάσεις. Στην πρώτη φάση της συνεδρίασης συμμετέχουν οι πελάτες, οι χρήστες, η διοίκηση, ο ιδιοκτήτης του προϊόντος και η  ομάδα ανάπτυξης για να καθορίσουν τους στόχους και την λειτουργικότητα της επόμενης επανάληψης. Στη δεύτερη φάση της συνεδρίασης, όπου συμμετέχουν μόνο ο ειδικός της Scrum και η ομάδα ανάπτυξης, καθορίζεται ο τρόπος με τον οποίο θα υλοποιηθεί η αυξητική ανάπτυξη του προϊόντος κατά την διάρκεια της επανάληψης. 

Λίστα απαιτήσεων της επανάληψης (sprint backlog)
Η λίστα αυτή περιέχει απαιτήσεις προς υλοποίηση από τον κατάλογο των ανεκτέλεστων προϊόντων και αποτελεί το σημείο εκκίνησης κάθε επανάληψης. Οι απαιτήσεις αυτές επιλέγονται από την ομάδα ανάπτυξης σε συνεργασία με τον ειδικό της Scrum και τον ιδιοκτήτη  του προϊόντος, κατά τη διάρκεια της συνεδρίασης για το σχεδιασμό της επανάληψης, με βάση τη προτεραιότητα της κάθε απαίτησης αλλά και τους στόχους που έχουν καθοριστεί για την επανάληψη. Η λίστα παραμένει σταθερή μέχρι την ολοκλήρωση της συγκεκριμένης επανάληψης. Όταν όλα τα στοιχεία της λίστας υλοποιηθούν τότε μια νέα έκδοση του συστήματος παραδίδεται στο πελάτη.

Καθημερινή συνεδρίαση Scrum (daily scrum meeting)
Αυτή η μικρής διάρκειας  συνεδρίαση (περίπου δεκαπέντε λεπτών), οργανώνεται σε καθημερινή βάση για να ελέγχεται η πορεία και η απόδοση της ομάδας ανάπτυξης. Η συνεδρίαση αυτή μπορεί να θεωρηθεί και ως συνεδρίαση σχεδιασμού καθώς ελέγχεται τι έχει υλοποιηθεί στο χρονικό διάστημα που μεσολάβησε από τη προηγούμενη συνεδρίαση και τι θα πρέπει να υλοποιηθεί στο διάστημα μέχρι την επόμενη. Συζητιούνται όλα τα προβλήματα που έχουν προκύψει καθώς επίσης και τυχόν ελλείψεις ή εμπόδια στην διαδικασία ανάπτυξης. Στη συνεδρίαση αυτή μετέχουν ο ειδικός της Scrum, τα μέλη της ομάδας ανάπτυξης αλλά και μέλη της διοίκησης. 

Συνεδρίαση για την επανεξέταση της επανάληψης (sprint review meeting)
Είναι η ανεπίσημη συνεδρίαση της τελευταίας μέρας της επανάληψης, όπου ο ειδικός της Scrum και η ομάδα ανάπτυξης παρουσιάζουν τα αποτελέσματα στην διοίκηση, στους πελάτες, στους χρήστες και στον ιδιοκτήτη του προϊόντος. Οι συμμετέχοντες αξιολογούν την ανάπτυξη του έργου και λαμβάνουν αποφάσεις που αφορούν τις επόμενες λειτουργίες που θα πρέπει να υλοποιηθούν. Αυτή η συγκεκριμένη συνεδρίαση είναι σημαντική για την πορεία του έργου καθώς μπορεί να επιφέρει νέα στοιχεία στον κατάλογο των ανεκτέλεστων προϊόντων ή να σηματοδοτήσει την αλλαγή της κατεύθυνσης του.

Τα χαρακτηριστικά της Scrum σε αντίθεση με τα παραδοσιακά χαρακτηριστικά του μοντέλου του καταρράκτη:

1) Μια δυναμική λίστα των απαιτήσεων του προϊόντος με κατανεμημένες ιεραρχικά εργασίες που πρέπει να γίνουν.

2) Ο σχεδιασμός της υλοποίησης του έργου δια μέσου πολλαπλών επαναλήψεων, με πρώτη αυτήν με την υψηλότερη
  προτεραιότητα.

3) Μια συνεδρίαση για τον προγραμματισμό της επανάληψης με τον καθορισμό της λίστας των απαιτήσεων που θα
    υλοποιηθούν.

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

5) Μια συνεδρίαση ανασκόπησης, στην οποία τα μέλη της ομάδας αναλύουν τις περασμένες επαναλήψεις και κάνουν
    προτάσεις για μελλοντικές βελτιώσεις και αλλαγές.

 

 Eπιστροφή
Από την Διδακτορική μου Διατριβή (2007)....
Το πρωτότυπο υλικό όλων των σελίδων, δημιουργός των οποίων είναι ο Παναγιώτης Σφέτσος, παρέχεται σύμφωνα με τους όρους της άδειας:
Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα