Μη συμβατικές μεθοδολογίες
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Ευέλικτη ανάπτυξη: στοιχεία
Η ευέλικτη ανάπτυξη λογισμικού (agile software development)
προσδίδει αξία:
- στους ανθρώπους και τις σχέσεις τους και όχι σε διεργασίες και εργαλεία
- σε λογισμικό που δουλεύει και όχι σε εκτενή τεκμηρίωση
- σε συνεργασία με τον πελάτη και όχι σε συμβατικές διαπραγματεύσεις
- σε άμεση απόκριση σε αλλαγές και όχι στην τήρηση ενός προδιαγεγραμμένου
σχεδίου
Ευέλικτη ανάπτυξη: αρχές
Οι αρχές της ευέλικτης ανάπτυξης που έχουν διατυπωθεί στον αντίστοιχο
δικτυακό τόπο (http://www.AgileAlliance.org/) είναι οι παρακάτω:
- Η μεγαλύτερή μας προτεραιότητα είναι η ικανοποίηση του πελάτη
μέσω της άμεσης και συνεχούς παράδοσης χρήσιμου λογισμικού.
- Οι αλλαγές στις προδιαγραφές είναι ευπρόσδεκτες, ακόμα και
αργά στο στάδιο της ανάπτυξης.
Οι ευέλικτες διεργασίες δαμάζουν τις αλλαγές προς όφελος της ανταγωνιστικότητας
του πελάτη.
- Παραδίδουμε λογισμικό τακτικά, σε διαστήματα μερικών εβδομάδων ή
μηνών, προτιμώντας τα μικρά διαστήματα.
- Αυτοί που ασχολούνται με το επιχειρηματικό τμήμα και αυτοί
που ασχολούνται με την ανάπτυξη πρέπει να συνεργάζονται καθημερινά σε
όλη τη διάρκεια του έργου.
- Βάση για τα έργα είναι οι άνθρωποι με κίνητρα και το αντίστοιχο ενδιαφέρον.
Δώστε τους το περιβάλλον και την υποστήριξη που χρειάζονται και εμπιστευτείτε
τους να περατώσουν το έργο.
- Ο πιο αποδοτικός και αποτελεσματικός τρόπος μεταφοράς πληροφορίας
προς την και μέσα στην ομάδα ανάπτυξης είναι η συζήτηση πρόσωπο-με-πρόσωπο.
- Η κύριος τρόπος μέτρησης της προόδου είναι το λογισμικό που λειτουργεί.
- Οι εύκαμπτες διεργασίες συμβάλλουν σε μια αειφόρο διεργασία ανάπτυξης.
Οι χρηματοδότες, το προσωπικό ανάπτυξης και οι χρήστες θα πρέπει να μπορούν
να συνεχίζουν για πάντα με τον ίδιο σταθερό ρυθμό.
- Συνεχής προσοχή στην τεχνολογική αρτιότητα και το σωστό σχεδιασμό
βελτιώνει την ευελιξία.
- Η απλότητα--η τέχνη της μεγιστοποίησης του ποσού της εργασίας που δεν πραγματοποιείται--
είναι απαραίτητη.
- Οι καλύτερες αρχιτεκτονικές, απαιτήσεις, και τα καλύτερα σχέδια πηγάζουν
από αυτο-οργανωνόμενες ομάδες.
- Σε τακτά διαστήματα η ομάδα αναλογίζεται πως μπορεί να γίνει πιο
αποδοτική. Έτσι συντονίζει και προσαρμόζει ανάλογα τη συμπεριφορά της.
Ακραίος προγραμματισμός
Ο ασυμβίβαστος προγραμματισμός (ΑΠ) (eXtreme programing (XP))
εδραιώθηκε ως μεθοδολογία ανάπτυξης για μικρές ομάδες ανάπτυξης έργων
στα οποία αλλάζουν συχνά οι προδιαγραφές.
Βασικά του χαρακτηριστικά είναι:
- Ο προγραμματισμός σε ζευγάρια
- Η συγγραφή ελέγχων μονάδος πριν από τον κώδικα.
- Η συνεχής ολοκλήρωση και ο συνεχής έλεγχος του κώδικα (πολλές
φορές μέσα στην ημέρα).
- Η βαθμιαία εξέλιξη του σχεδίου του έργου.
- Η γρήγορη παραγωγική χρήση του συστήματος για την
εκμαίευση των απαιτήσεων με το μεγαλύτερο όφελος για τον πελάτη.
Η μεθοδολογία δεν είναι κατάλληλη για:
- Επιχειρηματικά περιβάλλοντα όπου η διοίκηση θέλει να έχει τον
πλήρη έλεγχο του έργου.
- Έργα με αυστηρές προδιαγραφές.
- Έργα που βασίζονται σε σύμβαση με βάση τις προδιαγραφές.
- Συστήματα των οποίων τα αποτελέσματα αργούν να εμφανιστούν.
- Περιβάλλοντα στα οποία οι έλεγχοι είναι ακριβοί (OIS).
Αξίες του ΑΠ
- Επικοινωνία (έλεγχος, ζεύγη, εκτίμηση κόστους)
- Απλότητα (καλύτερα το απλό σήμερα, και πιθανώς
κάποιο πρόσθετο κόστος αύριο, παρά το πρόσθετο κόστος σήμερα
για λειτουργικότητα που δε θα απαιτηθεί)
- Ανάδραση (έλεγχοι, γρήγορη παράδοση)
- Θάρρος (για αλλαγή σχεδίου, πέταγμα κώδικα, δοκιμή απλών ιδεών (πχ merge sort μέσω shell script))
Αρχές του ΑΠ
Ενέργειες του ΑΠ
- Συγγραφή κώδικα
- Έλεγχος
- Ακρόαση
- Σχεδιασμός
Πρακτικές του ΑΠ
- Πλάνο της κάθε έκδοσης
-
Τα στοιχεία που μπορούν να μεταβληθούν είναι:
ο χρόνος, το κόστος, η ποιότητα και το εύρος του έργου.
Τα επιχειρηματικά στελέχη αποφασίζουν σχετικά με
- το εύρος,
- τις προτεραιότητες,
- τι θα περιέχει η έκδοση,
- ημερομηνίες των εκδόσεων.
Τα στελέχη ανάπτυξης έχουν τον τελικό λόγο για:
- το χρόνο που απαιτεί κάθε στοιχείο,
- τα αποτελέσματα των επιχειρηματικών αποφάσεων,
- τη διεργασία ανάπτυξης
- το λεπτομερή χρονικό προγραμματισμό
- Μικρές εκδόσεις
-
Κάθε έκδοση του λογισμικού πρέπει να είναι η μικρότερη δυνατή έτσι
ώστε να είναι μικρός ο αντίστοιχος χρονικός κύκλος.
- Μεταφορά (metaphor)
-
Χρήση μιας μεταφοράς που εκφράζει την αρχιτεκτονική του συστήματος.
- Απλό σχέδιο
-
Το σχέδιο πρέπει να είναι το απλούστερο δυνατό με την προϋπόθεση να:
- Τρέχει όλους τους ελέγχους
- Να μην περιέχει διπλά στοιχεία
- Να εκφράζει κάθε σκοπό που έχει σημασία για τους προγραμματιστές
- Να έχει τις λιγότερες δυνατές κλάσεις και μεθόδους
- Έλεγχος
-
Για κάθε λειτουργία του προγράμματος πρέπει να υπάρχει ο αντίστοιχος
έλεγχος.
Οι έλεγχοι γράφονται σε συνεργασία με τον πελάτη.
- Αναπαραγοντοθέτηση (refactoring)
-
Σχέδια και αντίστοιχες υλοποιήσεις που μπορούν να βελτιωθούν,
χωρίς να αλλάξουν οι λειτουργικές προδιαγραφές,
ξαναγράφονται.
- Προγραμματισμός σε ζευγάρια
-
Ένα ζευγάρι μοιράζεται τον υπολογιστή.
Όταν το ένα μέλος πληκτρολογεί, το άλλο ελέγχει:
- Θα δουλέψει το σύνολο της προσέγγισης;
- Υπάρχουν έλεγχοι που δεν έχουν υλοποιηθεί;
- Μήπως μπορεί το σύστημα να απλοποιηθεί;
Τα ζευγάρια αλλάζουν δυναμικά.
- Συλλογική ιδιοκτησία (collective ownership)
-
Ο κώδικας ανήκει σε όλα τα μέλη της ομάδας.
Κάθε ένας έχει δικαίωμα να βελτιώσει οποιοδήποτε τμήμα του και όλοι
είναι υπεύθυνοι για την ποιότητα του συνόλου του κώδικα.
- Συνεχής ολοκλήρωση
-
Τα τμήματα του κώδικα ενώνονται τακτικά μεταξύ τους.
- Εβδομάδα 40 ωρών
-
Οι υπερωρίες είναι δείγμα προβλημάτων στο έργο.
- Πελάτης στο χώρο της εργασίας
-
Εκπρόσωπος του πελάτη βρίσκεται στο χώρο της ανάπτυξης.
Βοηθά στο σχεδιασμό, τους ελέγχους και τις προδιαγραφές.
- Πρότυπα κώδικα
-
Με βάση τα πρότυπα ο κώδικας μπορεί να είναι ιδιοκτησία
όλης της ομάδας.
Σημείωση
Γιατί η λέξη refactoring αποδίδεται ως αναπαραγοντοθέτηση και όχι ... ;
Βλέπε την ανάλυση του κ. Κώστα Βαλεοντή,
προέδρου της ΕΛΕΤΟ (http://www.eleto.gr/) και μια σχετική
συζήτηση που προηγήθηκε και ακολούθησε.
Ανάπτυξη λογισμικού στη Microsoft
Η ανάπτυξη λογισμικού στη Microsoft γίνεται με βάση τις
παρακάτω αρχές (Cusumano & Selby 1995):
- Εύρεση και αξιοποίηση έξυπνων και ταλαντούχων στελεχών
που γνωρίζουν την τεχνολογία και το επιχειρηματικό περιβάλλον
- Οργάνωση μικρών ομάδων με επικαλυπτόμενες λειτουργικές
εξειδικεύσεις
- Πρωτοπορία και ενορχήστρωση αναπτυσσόμενων μαζικών αγορών
(γλώσσες προγραμματισμού, λειτουργικά συστήματα, αυτοματισμός γραφείου,
ψηφιακό περιεχόμενο, παιγνίδια)
- Εστίαση της δημιουργικότητας στην εξέλιξη πρόσθετων χαρακτηριστικών
- Παράλληλη εργασία σε ομάδες με συχνό συγχρονισμό.
- Συχνή κατασκευή (build) του λογισμικού.
- Χρήση κοινής γλώσσας προγραμματισμού.
- Έλεγχοι κατά τη διάρκεια της ανάπτυξης
- Χρήση μετρικών των ελέγχων.
- Συνεχής αυτοκριτική, ανάδραση και διάχυση της γνώσης μέσα στον οργανισμό.
Βιβλιογραφία
- Kent Beck.
Extreme Programming Explained: Embrace Change.
Addison Wesley Longman, 2000.
- William J. Brown,
Raphael C. Malveau, Hays W. McCormick III, and Thomas J. Mowbray.
AntiPatterns Refactoring Software, Architectures, and Projects in
Crisis.
Wiley, 1998.
- Alistair Cockburn.
Agile
Software Development.
Addison-Wesley, 2001.
- Michael A. Cusumano
and Richard W. Selby.
Microsoft Secrets.
The Free Press, 1995.
- Institute of Electrical and
Electronics Engineers, Inc., New York, NY, USA.
Information Technology—Software Life Cycle Processes—Software
Development Acquirer-Supplier Agreement, 1995.
EIA/IEEE Interim Standard J-Std-016-1995 (Issued for Trial Use).
- Watts S. Humphrey.
Managing the Software Process, pages 411–428.
Addison-Wesley, 1989.
- Institute of Electrical and
Electronics Engineers, Inc., New York, NY, USA.
IEEE Recommended Practice for Software Acquisition (includes IEEE
1062a), 1998.
IEEE Standard 1062-1998.
- P. J. Plauger.
Programming on Purpose II: Essays on Software People, pages 123–129.
Prentice-Hall, 1993.
- M Poppendieck and T. Poppendieck.
Lean Software Development.
Addison-Wesley, 2003.
- Diomidis Spinellis.
Taking common sense to the extreme (http://www.dmst.aueb.gr/dds/pubs/Breview/2000-IEEE-XP/html/review.html).
IEEE Software, 17(4):113–114, July/August 2000.
Book review: eXtreme Programming Explained: Embrace Change.
- Diomidis Spinellis.
Fear of coding, and how to reduce it (http://www.dmst.aueb.gr/dds/pubs/jrnl/2001-05-Computer-Fear-of-Coding/html/foc.html).
IEEE Computer, 34(8):98–100, August 2001.
- Laurie Williams
and Alistair Cockburn.
Agile software development: It's about feedback and change.
IEEE Computer, 36(6):39–43, July 2003.
Feature issue on Agile Methods.
- Laurie Williams.
The XP programmer: The few-minutes programmer.
IEEE Software, 20(3):16–20, May/June 2003.
Extreme programming theme issue.
Ασκήσεις
- Θα μπορούσατε να υιοθετήσετε ΑΠ για την υλοποίηση της άσκηση του
μαθήματος;
Ποιες πρακτικές του ΑΠ δε θα μπορούσαν να εφαρμοστούν;
- Εντοπίστε και σχολιάστε διαφορές ανάμεσα στον τρόπο που υλοποιείται
λογισμικό στη Microsoft και το μοντέλο διεργασίας ανάπτυξης του
καταρράκτη.