FreeBSD: Ανάπτυξη λογισμικού σε παγκόσμια
κλίμακα
Του Διομήδη Σπινέλλη[1]
Αν. Καθηγητή
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
http://www.dmst.aueb.gr/dds
Ένα από τα
χαρακτηριστικά του ανοικτού κώδικα είναι η παγκοσμιοποίηση της ανάπτυξης του.
Σε αυτό το άρθρο τεκμηριώνονται με ποσοτικά δεδομένα οι πρακτικές, οι
προκλήσεις που αντιμετωπίζουν οι προγραμματιστές στην ανάπτυξη ενός μεγάλου
έργου, όπως το FreeBSD, καθώς και τα αποτελέσματα που προκύπτουν.
Το FreeBSD (www.freebsd.org) είναι ένα εξελιγμένο λειτουργικό
σύστημα που διατίθεται για διάφορες αρχιτεκτονικές υπολογιστών. Σε αντίθεση με
το Linux που είναι μόνο πυρήνας και χρειάζεται άλλα προγράμματα για να
δουλέψει, το FreeBSD είναι ένα πλήρες λειτουργικό σύστημα. Προέρχεται από το
BSD Unix, μια έκδοση του Unix που αναπτύχθηκε στο Πανεπιστήμιο της Καλιφόρνια,
στο Berkeley των ΗΠΑ. Το FreeBSD είναι γνωστό για την σταθερότητα και την
αξιοπιστία του. Γι' αυτό
χρησιμοποιείται σε μεγάλα sites όπως το Yahoo! και εταιρείες φιλοξενίας
ιστοσελίδων, όπως η Host Department. Μάλιστα, η βάση του Mac OS X (του
λειτουργικού των υπολογιστών της Apple) προέρχεται από το FreeBSD.
Το μοντέλο
ανάπτυξης του FreeBSD είναι παγκόσμιο, δηλαδή συνεισφέρουν προγραμματιστές από
κάθε γωνιά της Γης. Σε αυτό το άρθρο θα δούμε τα αποτελέσματά του μοντέλου στην
ποιότητα και την παραγωγικότητα, διερευνώντας τον τρόπο με τον οποίο η
γεωγραφική απόσταση επηρεάζει τη συνεργασία των μελών του έργου. Ειδικότερα, θα
ασχοληθούμε με τις πρακτικές που υιοθετεί ένας μεγάλος αριθμός από
προγραμματιστές και γι' αυτό θα χρησιμοποιήσουμε δεδομένα από το σύστημα
διαχείρισης του έργου, τον πηγαίο κώδικα που παράγεται, τις γεωγραφικές
συντεταγμένες των προγραμματιστών και το σύστημα αναφοράς προβλημάτων.
Το FreeBSD
αναπτύσσεται και διανέμεται ως λογισμικό ανοικτού κώδικα από μια ομάδα με πάνω
από 350 μέλη που βρίσκονται σε διάφορα μέρη του κόσμου. Η δουλειά τους μπορεί
να ταξινομηθεί γενικά σε συγγραφή κώδικα για τον πυρήνα του συστήματος και τα
διάφορα εργαλεία του, την μεταφορά σε αυτό εφαρμογών από άλλα λειτουργικά και
φυσικά την τεκμηρίωση. Ο συντονισμός αυτής της παγκόσμιας προσπάθειας γίνεται
μέσω διαφόρων υποδομών, που περιγράφω
συνοπτικά παρακάτω.
Καταρχήν,
υπάρχει ένα αποθετήριο (repository—ένα είδος διαδικτυακής αποθήκης) που
στεγάζει το “σύστημα διαχείρισης σχηματισμών” και βασίζεται στο CVS (www.nongnu.org/cvs) . Σε αυτό το σύστημα υπάρχει
πάντοτε η τελευταία έκδοση όλου του κώδικα και της τεκμηρίωσης του project, οι
κλάδοι (branches) συντήρησης παλαιότερων εκδόσεων καθώς και ιστορικό αρχείο
μιας δεκαετίας. Όλο το αποθετήριο CVS είναι δημόσια προσβάσιμο από μια
διαδικτυακή διεπαφή και ο καθένας μπορεί να κατεβάσει ότι αρχεία θέλει.
Υπάρχει
ακόμη μια βάση δεδομένων με αναφορές προβλημάτων (που στηρίζεται στο σύστημα
GNATS), όπου καταγράφονται περιγραφές όλων των ανοικτών ή λυμένων θεμάτων, οι
προγραμματιστές που τα χειρίζονται και λεπτομέρειες για το τι έχει γίνει.
Επίσης, πρέπει να αναφέρουμε το σύστημα tinderbox το οποίο μεταγλωττίζει
συνέχεια το σύστημα από τον τρέχοντα πηγαίο κώδικα του FreeBSD, με σκοπό τον
έγκαιρο εντοπισμό προβλημάτων στο αποθετήριο.
Στις
υποδομές του έργου συμπεριλαμβάνονται και πάνω από 100 λίστες ηλεκτρονικού
ταχυδρομείου (δημόσιας ή ιδιωτικής πρόσβασης), που καλύπτουν διάφορα θέματα και
οι οποίες λειτουργούν ως μηχανισμός επικοινωνίας των μελών και των χρηστών του.
Στον ιστότοπο του FreeBSD υπάρχει το “Developer's Handbook” (τεκμηρίωση για
προγραμματιστές), ενημερωμένες τεχνικές πληροφορίες για την κάθε έκδοση, μια
έκδοση του αποθετηρίου CVS όπου μπορεί να περιηγηθεί κανείς με το φυλλομετρητή,
τα αρχεία των λιστών αλληλογραφίας και μια διεπαφή για την ανάγνωση (μόνο) της
βάσης δεδομένων με τις αναφορές των προβλημάτων. Τέλος, ένα δίκτυο υπολογιστών,
που είναι προσβάσιμο σε κάθε μέλος του έργου μέσω του διαδικτύου, παρέχει στους
προγραμματιστές ένα κοινό χώρο εργασίας για την μεταγλώττιση και δοκιμή του
κώδικά τους σε διάφορες αρχιτεκτονικές.
Κάθε μέλος
της ομάδας ανάπτυξης του FreeBSD που συνεισφέρει με κώδικα ή τεκμηρίωση
ονομάζεται διαπράκτης (commiter) και οι συνεισφορές του (μέσω του συστήματος
ελέγχου σχηματισμών CVS) λέγονται
διαπράξεις (commits). Η ανάδειξη του γίνεται κατόπιν ψηφοφορίας μετά από
πρόταση ενός άλλου διαπράκτη. Στη
συνέχεια ακολουθεί μια εκπαιδευτική περίοδος (mentorship) όπου ένα μέλος,
συνήθως ο ίδιος που τον πρότεινε, παίζει το ρόλο του μέντορα του νέου διαπράκτη και
εγκρίνει τις συνεισφορές του. Τα μέλη της ομάδας ανάπτυξης συνήθως ξεκινούν
συνεισφέροντας κώδικα ανεξάρτητα μέχρι που κάποιο μέλος του FreeBSD θα
ενδιαφερθεί για τη δουλειά τους και θα τους προτείνει να γίνουν επίσημα
διαπράκτες.
Τα μέλη της
ομάδας ανάπτυξης του FreeBSD είναι κυρίως εθελοντές, αν και υπάρχουν εταιρείες
που επιτρέπουν ή βάζουν κάποιους εργαζόμενους τους να συνεισφέρουν ως μέρος της
δουλειάς τους. Το έργο FreeBSD διοικείται από μια εκλεγμένη ομάδα (“Core Team”)
που αποφασίζει για τους στόχους και την κατεύθυνση του, εγκρίνει τα νέα μέλη
και επιλύει τις διαφορές που ανακύπτουν. Για τα διάφορα μέρη του έργου
(ασφάλεια, δωρεές, μεταφορές εφαρμογών και κυκλοφορία νέων εκδόσεων) υπάρχουν
ξεχωριστές ομάδες εργασίας. Οι κανονικοί διαπράκτες έχουν το δικαίωμα
τροποποίησης κάθε μέρους του FreeBSD (“προνόμιο διάπραξης”) αρκεί να τηρούν μια
επίσημη και ανεπίσημη ετικέτα. Για παράδειγμα, οι προγραμματιστές δεν μπορούν
να υποβάλλουν αλλαγές στην περίοδο που ο κώδικας παγώνει πριν από μια νέα
έκδοση χωρίς να έχουν πάρει άδεια από την ομάδα που είναι υπεύθυνη για την
κυκλοφορία των νέων εκδόσεων. Επίσης, αποδοκιμάζονται οι μεγάλες αλλαγές σε
κώδικα που συντηρείται από άλλον προγραμματιστή ή οι αλλαγές που αναιρούν τη
δουλειά ενός άλλου μέλους.
Ας δούμε
τώρα πως θα αναλύσουμε το παγκόσμιο μοντέλο ανάπτυξης του FreeBSD. Όπως είπαμε,
τα δεδομένα μας προέρχονται από το αποθετήριο CVS του έργου, την βάση δεδομένων
με τις αναφορές προβλημάτων και τις γεωγραφικές συντεταγμένες των
προγραμματιστών.
Τα δεδομένα
του αποθετηρίου προέρχονται από ένα στιγμιότυπο που πήραμε στις 9 Νοεμβρίου
2005 και εξετάσαμε με τον πελάτη CVS
και μερικά εργαλεία του Unix, όπως τα sed, awk, sort και join. Το
αποθετήριο περιείχε 19 εκατομμύρια γραμμές κώδικα και τεκμηρίωσης, μαζί με
938.000 διαπράξεις από 475 διαφορετικά
μέλη που υπεβλήθησαν σε μια περίοδο μιας δεκαετίας περίπου. Τέλος, η βάση
δεδομένων με τις αναφορές προβλημάτων (που τηρούνται σε μορφή GNATS)
εξερευνήθηκε το Δεκέμβριο του 2005 και εκείνη τη στιγμή περιείχε 90.000
αναφορές.
Οι
διαπράξεις στο CVS και οι αναφορές GNATS συνοδεύονται από ετικέτες που δηλώνουν
το όνομα του λογαριασμού του αντίστοιχου προγραμματιστή. Αντιστοιχίζοντας τους
προγραμματιστές στις τοποθεσίες τους πάνω στη Γη, μπορούμε να εξάγουμε χρήσιμα
συμπεράσματα. Για να το πετύχουμε αυτό, χρησιμοποιήσαμε ένα αρχείο που
διανέμεται μαζί με την FreeBSD έκδοση
της εφαρμογής XEarth, το οποίο περιέχει τις γεωγραφικές συντεταγμένες, το όνομα
λογαριασμού και την τοποθεσία πολλών από τους προγραμματιστές του FreeBSD.
Επιπλέον, μετά από επικοινωνία με την κοινότητα ανάπτυξης, καταφέραμε να
αυξήσουμε τον αριθμό των διαπράξεων που μπορούν να αποδοθούν σε κάποια
συγκεκριμένη γεωγραφική περιοχή από 71% που ήταν στις 9 Νοεμβρίου στο 79% στις
9 Ιανουαρίου 2006. Συνολικά, επιβεβαιώσαμε τα γεωγραφικά δεδομένα για 292
προγραμματιστές, χωρίς να λαμβάνουμε υπόψη όσους μετακόμισαν κατά το διάστημα
που καλύπτουν τα δεδομένα μας από το CVS.
Σε διάφορες
περιπτώσεις χρειάστηκε να υπολογίσουμε τις αποστάσεις μεταξύ των
προγραμματιστών. Για το σκοπό αυτό, χρησιμοποιήθηκε ο τύπος του σφαιρικού νόμου
των συνημίτονων που δίνει την απόσταση d μεταξύ δύο σημείων με γεωγραφικό
πλάτος δ και μήκος l πάνω σε μια σφαίρα με ακτίνα R:
d = R cos-1[sin d1 sin d2 + cos d1 cos d2 cos(l2–l1)]
Σημειώνουμε
ό,τι ο παραπάνω τύπος δεν λαμβάνει υπόψη την ελλειψοειδή μορφή της Γης, αλλά
είναι αρκετά ακριβής για όσα θα κάνουμε παρακάτω.
Ένα από τα
σημαντικότερα ερωτήματα σχετικά με τις μεθοδολογίες παγκόσμιας ανάπτυξης
λογισμικού είναι κατά πόσον αυτές βοηθούν στην πράξη. Το FreeBSD είναι ένα
επιτυχημένο έργο που εφαρμόζει μια τέτοια μεθοδολογία και μελετώντας το
μπορούμε να βγάλουμε χρήσιμα συμπεράσματα.
Οι 292
προγραμματιστές του έργου για τους οποίους είχαμε γεωγραφικά δεδομένα ζουν σε
206 διαφορετικές τοποθεσίες σε όλο τον κόσμο. Οι γραμμές κώδικα που έχει
'συνεισφέρει' κάθε τοποθεσία (στην ουσία οι προγραμματιστές που ζουν εκεί)
απεικονίζεται με τις κάθετες μπάρες στην εικόνα 1. Όπως φαίνεται, λοιπόν, οι
περισσότεροι διαπράκτες ζουν στην Βόρεια Αμερική και την Ευρώπη, ενώ μερικές
ομάδες εμφανίζονται στην Ασία, την Αυστραλία, τη Νότιο Αφρική και τη Νότιο
Αμερική.
Γραμμές
κώδικα ανά περιοχή της Γης. Η Βόρεια Αμερική και η Ευρώπη έχουν τα πρωτεία στην
ανάπτυξη του FreeBSD ενώ υπάρχουν ομάδες στην Ασία, την Αυστραλία, τη Νότια
Αφρική και τη Νότια Αμερική.
Μια
ενδιαφέρουσα ερώτηση που πιθανώς να θέσει κάποιος αφορά στο αν κάποιες περιοχές
του κόσμου 'ειδικεύονται' σε ιδιαίτερες δραστηριότητες του έργου. Για
παράδειγμα, αν μια γεωγραφική περιοχή επικεντρώνεται σε ένα συγκεκριμένο τμήμα
του συστήματος ή προσφέρει ένα συγκεκριμένο είδος υπηρεσίας. Δεδομένης της
φύσης του FreeBSD ως εθελοντικού εγχειρήματος όπου οι συμμετέχοντες μπορούν να
συνεισφέρουν όπου και ό,τι θέλουν, η πιθανή διαίρεση της προσπάθειας σε
διάφορες περιοχές θα πρέπει να αποδοθεί σε οργανωτικούς, πολιτισμικούς ή
τεχνολογικούς παράγοντες, που θα είναι χρήσιμοι στην οργάνωση κάθε παγκόσμια
αναπτυσσόμενο έργο λογισμικού.
Το κύριο
μέρος της ανάπτυξης του FreeBSD γίνεται στην Βόρεια Αμερική (46% των
διαπράξεων). Ακολουθεί η Ευρώπη με 39% και τρίτη είναι η Ασία με 10%. Τέλος,
έπονται οι Αυστραλία, Νότια Αμερική και Αφρική με 2,5%, 1,6% και 0,8%
αντίστοιχα. Οι μισές σχεδόν (49%) γραμμές κώδικα αφορούσαν τον κώδικα του ίδιου
του συστήματος, ενώ η μεταφορά και η δημιουργία πακέτων για υπαρκτές εφαρμογές
τρίτων έφταναν το 47%. Η τεκμηρίωση και ο δικτυακός τόπος του έργου ήταν τα
υπόλοιπα 2,1% και 1,7%, αντίστοιχα.
Δύο
ενδιαφέρουσες παρατηρήσεις προκύπτουν από την κατανομή της εργασίας στις
διάφορες περιοχές. Πρώτον, η δουλειά που κάνουν οι Ασιάτες διαπράκτες είναι σε
πολύ μεγάλο βαθμό (80%) η μεταφορά και η δημιουργία πακέτων σε υπάρχουσες
εφαρμογές. Η δεύτερη παρατήρηση αφορά διαφορές μεταξύ της 'συντήρησης' και της
εξέλιξης. Η περαιτέρω εξέλιξη του FreeBSD γίνεται στο τρέχων, ενεργό κλάδο
ανάπτυξης του συστήματος διαχείρισης σχηματισμών. Φυσικά, οι προγραμματιστές
ενθαρρύνονται να μεταφέρουν
(“back-port”) διορθώσεις και βελτιώσεις στους σταθερούς κλάδους των παλιότερων
εκδόσεων του FreeBSD που συντηρούνται ακόμα μέσω μιας διαδικασίας που λέγεται
"merge from current" (MFC). Οι συνεισφορές σε σταθερούς κλάδους
αφορούν, κατά πάσα πιθανότητα, δουλειά συντήρησης. Είναι αξιοσημείωτο, όμως,
ότι η κατανομή αυτών των δύο ειδών εργασίας (στο σταθερό και ενεργό κλάδο
αντίστοιχα) δεν είναι ίδια σε όλες τις περιοχές. Ενώ στη Βόρεια Αμερική η
δουλειά περίπου ισοκατανέμεται σε συνεισφορές προς το ενεργό και τους σταθερούς
κλάδους (56% και 44% αντίστοιχα), η κατανομή στην Ευρώπη και την Ασία ευνοεί
τον ενεργό κλάδο με το 70% των διαπράξεων.
Οι παραπάνω
διαφορές μπορούν να εξηγηθούν με δύο θεωρίες. Η μία λέει ό,τι στη Βόρεια
Αμερική υπάρχουν περισσότερα συστήματα 'παραγωγής', όπως οι διακομιστές του
Yahoo! που βασίζονται στο FreeBSD, ενώ στις υπόλοιπες περιοχές του κόσμου οι
περισσότεροι προγραμματιστές χρησιμοποιούν το FreeBSD στους προσωπικούς
υπολογιστές τους. Στα συστήματα παραγωγής χρησιμοποιούνται συνήθως σταθερές και
δοκιμασμένες εκδόσεις του λειτουργικού, και έτσι μπορούμε να υποθέσουμε ότι οι
προγραμματιστές στη Βόρεια Αμερική έχουν
επιπλέον κίνητρα για την
συντήρηση αυτών των παλιότερων εκδόσεων. Μια εναλλακτική εξήγηση μπορεί να
αφορά τη σύνθεση της ομάδας δημιουργίας των νέων εκδόσεων. Τα μέλη αυτής της
ομάδας είναι υπεύθυνα για το συντονισμό των εκδόσεων του FreeBSD και ίσως έχουν
μεγαλύτερο συμφέρον από τους άλλους προγραμματιστές στην συντήρηση των σταθερών
εκδόσεων είτε μόνοι τους είτε με τη βοήθεια άλλων. Ωστόσο, η σύνθεση αυτής της
ομάδας δεν είναι ιδιαίτερα πολωμένη προκειμένου να αποδοθεί εκεί η παραπάνω
διαφορά. Αν και οι πέντε από τους έξι έχουν δεσμούς με τις ΗΠΑ, οι δύο έχουν
επίσης δεσμούς με το Ηνωμένο Βασίλειο και ο ένας ζει μόνιμα στην Ιαπωνία.
Η γενική
εικόνα περιπλέκεται κι από τη διαφορετική κατανομή των προγραμματιστών που
επιλύουν θέματα από τη βάση δεδομένων με τις αναφορές προβλημάτων. Εδώ η Ευρώπη
με 41% έχει την πρωτοκαθεδρία, ακολουθεί η Βόρεια Αμερική με 36% των λυμένων
προβλημάτων και έπονται η Ασία και η Αυστραλία με 12% και 7% αντίστοιχα.
Προφανώς η δουλειά της επίλυσης προβλημάτων διαφέρει από την συντήρηση των
σταθερών εκδόσεων.
Ένα
πλεονέκτημα της παγκόσμιας ανάπτυξης λογισμικού είναι η εργασία στον κώδικα σε
ένα συνεχή 24ωρο κύκλο. Στο σχήμα 2, βλέπουμε ότι αυτό ακριβώς επιτυγχάνεται και
στο FreeBSD. Στα τελευταία 10 χρόνια, οι προγραμματιστές του συνεισέφεραν κατά
μέσο όρο 177 γραμμές κώδικα ανά ώρα κάθε μιας ημέρας. Ο αριθμός αυτός είχε ένα
ελάχιστο 116 γραμμών (στις 02:00 UTC) και ένα μέγιστο των 285 γραμμών (στις
03:00 UTC).
Ένα ερώτημα
σχετικό με την συνεχή 24ωρη ανάπτυξη είναι το πως διεξάγονται οι εργασίες
εξέλιξης του κώδικα. Για παράδειγμα, θα μας ενδιέφερε να δούμε αν η δουλειά σε
ένα συγκεκριμένο αρχείο μεταφέρεται από μια τοποθεσία σε μία άλλη, αν
συνεργάζονται οι απομακρυσμένοι γεωγραφικά προγραμματιστές σε μεγάλα
δομοστοιχεία ('modules'), και αν οι ευθύνες ανάπτυξης κατανέμονται σε
διαφορετικές περιοχές; Η απάντηση σε αυτά τα ερωτήματα μπορούν να μας οδηγήσουν σε ένα μοντέλο συνεχούς
24ωρης ανάπτυξης που να δουλεύει σωστά. Για να δώσουμε απαντήσεις, καταγράψαμε
τα ημερολόγια διαπράξεων για μεμονωμένα αρχεία, δομοστοιχεία ή ολόκληρο το
σύστημα για διάφορα χρονικά διαστήματα σε 8ωρη και ημερήσια βάση. Κατόπιν
μετρήσαμε τον αριθμό των ημερών στις οποίες γινόντουσαν διαπράξεις, τον αριθμό
των ημερών με διαπράξεις σε ένα 8ωρο από τους ίδιους ανθρώπους, τον αριθμό των
ημερών που είχαν διαπράξεις την επόμενη μέρα, και τον αριθμό των ημερών με
διαπράξεις σε 8ωρο από διαφορετικούς προγραμματιστές. Αυτοί οι αριθμοί μπορούν
να μας δείξουν τόσο τα μοτίβα της “κανονικής δουλειάς” όσο και τα μοτίβα που
αντιστοιχούν σε συνεχή 24ωρη ανάπτυξη.
Στο σχήμα απεικονίζεται ο μέσος
αριθμός γραμμών κώδικα για κάθε ώρα της ημέρας και όπως φαίνεται ο FreeBSD
αναπτύσσεται συνεχώς καθ' όλο το 24ωρο.
Στο επίπεδο
των μεμονωμένων αρχείων, η συνεχής ανάπτυξη δεν είναι τόσο εμφανής. Μόνο στο 1%
των ημερών μία διάπραξη ακολουθούνταν από μία άλλη ενός διαφορετικού
προγραμματιστή. Σε αντίθεση, οι περίοδοι εργασίας του ίδιου προγραμματιστή που
ξεπερνούν τις 8 ώρες εμφανίζονται στο 1,7% των ημερών όπου γίνονταν αλλαγές σε
ένα αρχείο. Προφανώς (και δικαιολογημένα) οι προγραμματιστές προτιμούν να
παρατείνουν χρονικά τη διάρκεια της δουλειάς τους παρά να τη δίνουν για
ολοκλήρωση σε κάποιον άλλο προγραμματιστή. Η κατάσταση αλλάζει στο επίπεδο των
δομοστοιχείων. Το 5,1% των ημερών εργασίας σε ένα δομοστοιχείο περιλαμβάνουν
διαπράξεις που εκτείνονται σε διάστημα μεγαλύτερο των 8 ωρών από τον ίδιο
προγραμματιστή, ενώ ένα 12,5% των ημερών εργασίας περιλαμβάνουν διαπράξεις από
διαφορετικούς προγραμματιστές. Εδώ φαίνεται ότι οι προγραμματιστές από
διαφορετικά μέρη του κόσμου συνεργάζονται στο ίδιο δομοστοιχείο παρά τις
διαφορετικές χρονικές ζώνες. Το ίδιο ισχύει και στο επίπεδο του συστήματος,
όπου στο 96% των ημερών οι διαπράξεις από διαφορετικούς προγραμματιστές
εκτείνονται σε 8ωρες περιόδους, ενώ μόνο στο 50% των ημερών εργασίας του έργου
ο ίδιος προγραμματιστής εργάζεται για πάνω από 8 ώρες. Συμπτωματικά, η εργασία
σε ένα φυσιολογικό 8ωρο της ημέρας (σε αντίθεση με την υπέρβαση του 8ώρου)
φαίνεται να είναι το κυρίαρχο μοτίβο και στις τρεις κατηγορίες που εξετάσαμε.
Οι διαπράξεις από τον ίδιο προγραμματιστή την επόμενη μέρα φτάνουν το 3,6% στα
μεμονωμένα αρχεία, το 18% στα δομοστοιχεία και το 97,8% για όλο το σύστημα.
Ένα ακόμα
ερώτημα που αφορά την παγκόσμια ανάπτυξη λογισμικού, είναι πως επηρεάζει αυτό
το είδος εργασίας την παραγωγικότητα των προγραμματιστών και την ποιότητα των
προϊόντων τους. Θεωρητικά, υπάρχουν παράγοντες που επηρεάζουν αυτές τις
μεταβλητές θετικά (όπως συμβαίνει με τη συνεχή 24ωρη ανάπτυξη), αρνητικά (λόγω
της έλλειψης πραγματικής επικοινωνίας) καθώς και με τρόπους που δεν γνωρίζουμε
(όπως ίσως συμβαίνει λόγω πολιτισμικών διαφορών). Προσπαθήσαμε λοιπόν να
εξάγουμε από τα δεδομένα μας συσχετίσεις μεταξύ της παγκόσμιας ανάπτυξης
λογισμικού και της παραγωγικότητας ή της ποιότητας.
Η
παραγωγικότητα συνήθως μετράται ως το παραγόμενο προϊόν ανά μονάδα εισόδου. Δυστυχώς,
το FreeBSD δεν κρατά δεδομένα για τις ώρες εργασίας στον κώδικα κάθε εθελοντή.
Γι' αυτό προσπαθήσαμε να δούμε αν η γεωγραφική απόσταση μεταξύ των
προγραμματιστών που δουλεύουν σε ένα δομοστοιχείο επηρεάζει τον αριθμό των
γραμμών που υποβάλλουν σε αυτό. Για διάφορα δομοστοιχεία του FreeBSD, μετρήσαμε
τον μέσο όρο των γραμμών που υποβάλλονται σε ένα κυλιόμενο μηνιαίο διάστημα, τη
διάρκεια του χρόνου που δαπανήθηκε σε ένα συγκεκριμένο δομοστοιχείο, τον αριθμό
των διαπράξεων, το πλήθος των διαφορετικών διαπρακτών και τη μέση γεωγραφική
απόσταση μεταξύ τους. Από τα 1300 δομοστοιχεία
που εξετάσαμε, αφαιρέσαμε όσα δεν ήταν μέρος του FreeBSD έργου (αλλά
συνεισφέρονταν από τρίτους) καθώς και όσα είχαν λιγότερες από 1000 γραμμές
κώδικα διαπράξεων σε όλη την ιστορία τους. Καταλήξαμε έτσι με 463 δομοστοιχεία.
Ως βασική
υπόθεση, εξετάσαμε τη συσχέτιση μεταξύ του μέσου αριθμού των γραμμών που
υποβάλλονται ανά μήνα και του ποσοστού των διαπράξεων που γίνονται από
διαφορετικούς προγραμματιστές. Διαισθητικά, θα περίμενε κανείς ό,τι όσο περισσότεροι άνθρωποι εργάζονται σε
ένα δομοστοιχείο τόσο περισσότερο κώδικα θα συνεισφέρουν. Πράγματι βρήκαμε μια
θετική στατιστική συσχέτιση (συντελεστής συσχέτισης Pearson's: 0,67) μεταξύ των
δύο μεγεθών. Αυτή η βασική υπόθεση μας λέει ότι μπορούμε να χρησιμοποιήσουμε
τους διαπράκτες ως αντιπροσωπευτικό δείγμα για τον υπολογισμό της 'εισόδου' της
παραγωγικότητας.
Στη
συνέχεια, εξετάσαμε τη συσχέτιση μεταξύ του μέσου αριθμού των γραμμών που
υποβάλλονται ανά μήνα και της μέσης γεωγραφικής απόστασης των προγραμματιστών
που τις υποβάλλουν. Δεδομένου ότι η αρχική υπόθεση που κάναμε μας φανέρωσε μια
συσχέτιση μεταξύ των διαπρακτών και των γραμμών που υποβάλλουν, θα περιμέναμε
μια αντίστοιχα θετική συσχέτιση μεταξύ των μεγεθών "απόσταση των
διαπρακτών" και "εργασία που παράγουν". Ωστόσο, ο στατιστικός
έλεγχος που κάναμε έδειξε ένα ιδιαίτερο χαμηλό ποσοστό συσχέτισης (συντελεστής
συσχέτισης: -0,14) και επομένως συμπεραίνουμε ότι η γεωγραφική απόσταση μεταξύ
των προγραμματιστών δεν επηρεάζει σημαντικά την παραγωγικότητά τους.
Ένα ακόμη
ενδιαφέρον ερώτημα είναι το πως επιδρά
ο μεγάλος αριθμός των (διάσπαρτων γεωγραφικά) προγραμματιστών στην ποιότητα του
παραγόμενου κώδικα. Αν η ποιότητα του λογισμικού μειώνεται όταν αυτό παράγεται
σε παγκόσμια κλίμακα, τότε οι εταιρείες και οι managers θα πρέπει να το ξέρουν
για να λάβουν διορθωτικά μέτρα. Όμως, η ποιότητα του κώδικα καθορίζεται από
πολλά στοιχεία και η μέτρησή της δεν είναι απλή υπόθεση. Εμείς προτιμήσαμε να
χρησιμοποιήσουμε ως μετρική της συνολικής ποιότητας του κώδικα την τήρηση των
οδηγιών για το στυλ του κώδικα του FreeBSD.[2] Η επιλογή αυτή έγινε λόγω της
ευκολίας μέτρησης της τήρησης του στυλ μέσω της μορφοποίησης κάθε αρχείου
πηγαίου κώδικα με το πρόγραμμα indent το οποίο ρυθμίσαμε με τις οδηγίες για το
στυλ του FreeBSD. Με αυτόν τον τρόπο μετρήσαμε απλώς τον αριθμό των γραμμών
κώδικα που το indent θα έπρεπε να αλλάξει (δηλαδή μετρήσαμε το πλήθος των
βασικών διαφορών ανάμεσα σε ένα σωστά μορφοποιημένο αρχείο και το αρχικό του).
Επιπλέον, από το CVS παίρναμε μια λίστα του κώδικα κάθε αρχείου όπου κάθε
γραμμή συνοδευόταν από το όνομα του ανθρώπου που την τροποποίησε τελευταίος.
Έτσι μετρήσαμε και το πλήθος των προγραμματιστών που δούλεψαν σε αυτό το
αρχείο.
Όταν
συλλέξαμε τα δεδομένα από τα παραπάνω δύο μεγέθη, κάναμε ένα τεστ Pearson's για
τη συσχέτιση τους. Ο συντελεστής συσχέτισης για τα 11.040 ζευγάρια μετρήσεων
ήταν μόλις 0,05, πράγμα που σημαίνει ότι, στην περίπτωσή μας, η εμπλοκή
γεωγραφικά διάσπαρτων προγραμματιστών στην ανάπτυξη του FreeBSD δεν επηρεάζει
την ποιότητα του κώδικα που παράγουν.
Τέλος μας
απασχόλησε το αν η παγκόσμια ανάπτυξη ενός αρχείου κώδικα από διάφορους
προγραμματιστές συνοδεύεται από έναν αυξανόμενο αριθμό αναφορών προβλημάτων για
αυτό το κομμάτι κώδικα. Μια πιθανή θετική συσχέτιση θα μπορούσε να υποδεικνύει
ότι η παγκόσμια ανάπτυξη στο FreeBSD οδηγεί σε αυξανόμενο αριθμό σφαλμάτων
(bugs ) του κώδικα λόγω, για παράδειγμα, της κακής επικοινωνίας μεταξύ των
προγραμματιστών. Αν και οι αναφορές προβλημάτων τηρούνται σε διαφορετική βάση
δεδομένων από το σύστημα διαχείρισης σχηματισμών του FreeBSD, κάθε διάπραξη στο
CVS που διορθώνει κάποιο πρόβλημα περιλαμβάνει συνήθως μια ετικέτα-παραπομπή
στην αντίστοιχη αναφορά προβλήματος (ΑΠ). Επειδή οι αναφορές σοβαρών
προβλημάτων αντιμετωπίζονται πάντα (αργά ή γρήγορα), μπορέσαμε να μετρήσουμε τη
συχνότητα των ΑΠ σε ένα αρχείο διαιρώντας τον αριθμό των διαπράξεων που έχουν
ως ετικέτα τον αριθμό αυτής της ΑΠ με τον συνολικό αριθμό των διαπράξεων για το
συγκεκριμένο αρχείο. Μετά εξετάσαμε τη συσχέτιση αυτού του κλάσματος με τον
αριθμό των διαφορετικών προγραμματιστών που συνεισέφεραν κώδικα στο ίδιο
αρχείο.
Συλλέξαμε
δεδομένα για 33.392 αρχεία πηγαίου κώδικα, 457.481 διαπράξεις και 12.505 ΑΠ.
Κατά μέσο όρο κάθε αρχείο συνοδευόταν από 13,7 διαπράξεις, 0,27 ΑΠ και 4,2
διαφορετικούς προγραμματιστές. Ένας έλεγχος της συσχέτισης μεταξύ της
συχνότητας των ΑΠ και του αριθμού των διαπρακτών μας έδειξε μια ασήμαντη
συσχέτιση (συντελεστής: 0,07) και επομένως τα δεδομένα από το FreeBSD δεν
υποστηρίζουν καθόλου την υπόθεση ότι η παγκόσμια ανάπτυξη λογισμικού
συνοδεύεται από αυξημένη συχνότητα σφαλμάτων στον παραγόμενο κώδικα.
Θα ήταν όμως
λίγο κοντόφθαλμο να μελετήσουμε την ανάπτυξη του λογισμικού σε παγκόσμια
κλίμακα μόνο όσον αφορά το παραγόμενο προϊόν. Οι οργανισμοί εξυπηρετούν και
πραγματώνουν υπαρκτές ανθρώπινες ανάγκες και κίνητρα των μελών τους, όπως είναι
αυτά της 'απόκτησης', του 'δεσίματος', της 'μάθησης' και της 'υπεράσπισης'. Γι'
αυτό χρησιμοποιήσαμε τα δεδομένα από το FreeBSD προκειμένου να εξετάσουμε πως
επιδρά η απόσταση μεταξύ των προγραμματιστών στο δίκτυο των επαφών και σχέσεών
τους. Συγκεκριμένα, επικεντρώσαμε την προσοχή μας σε δύο είδη σχέσεων: τη
'συνεργασία' για την επίτευξη ενός κοινού σκοπού και τη 'μαθητεία' σε μια σχέση
μέντορα-μαθητευόμενου. Για αμφότερα τα είδη σχέσεων μετρήσαμε τη γεωγραφική
απόσταση μεταξύ των σχετιζόμενων προγραμματιστών και τη συγκρίναμε με τη μέση
γεωγραφική απόσταση μεταξύ όλων των προγραμματιστών (που είναι 6.701 χλμ). Μια
πολύ μικρότερη από το μέσο όρο απόσταση μεταξύ δύο συνεργαζόμενων
προγραμματιστών θα σημαίνει λογικά ότι οι προγραμματιστές προτιμούν να
συνεργάζονται με εκείνους που μένουν κοντά τους. Κι από ένα τέτοιο αποτέλεσμα
θα μπορούσαμε να υποθέσουμε ότι η γεωγραφική απόσταση αποτελεί εμπόδιο για
τέτοιου είδους σχέσεις.
Αποστάσεις
σε χιλιόμετρα για τα ζευγάρια μεντόρων-μαθητευομένων του FreeBSD (φαίνεται μόνο
ένα μέρος του γράφου).
Για να
δημιουργήσουμε μια λίστα με συνεργαζόμενους προγραμματιστές σαρώσαμε τα
ημερολόγια διαπράξεων σε περιόδους μιας ημέρας, ψάχνοντας για διαφορετικούς
προγραμματιστές που είχαν υποβάλει κώδικα στο ίδιο αρχείο την ίδια ημέρα.
Υποθέσαμε ότι τέτοιες περιπτώσεις υποδηλώνουν συνεργασία μεταξύ των αντίστοιχων
προγραμματιστών, λόγω της εγγύτητας σε χρόνο και περιοχής του κώδικα. Από τα
δεδομένα βρήκαμε 5.847 περιπτώσεις συνεργασίας από τις οποίες κρατήσαμε τις
4.010 για τις οποίες είχαμε παράλληλα και τις γεωγραφικές συντεταγμένες των
εκάστοτε δύο προγραμματιστών. Η μέση απόσταση μεταξύ συνεργαζόμενων
προγραμματιστών είναι 6489 χλμ, δηλαδή πολύ κοντά στην μέση απόσταση μεταξύ δύο
οποιονδήποτε προγραμματιστών στο FreeBSD (6.701 χλμ). Αυτό το γεγονός δείχνει
ό,τι η τεχνική συνεργασία των προγραμματιστών στο FreeBSD πολύ σπάνια
επηρεάζεται από την μεταξύ τους απόσταση.
|
Ελάχιστη |
1/4 |
Ενδιάμεση |
Μέση |
3/4 |
Μέγιστη |
Τυχαίο
ζεύγος |
0 |
2,215 |
7,793 |
6,702 |
9,380 |
19,390 |
Μαθητής-Μέντορας |
0 |
745 |
3,856 |
5,080 |
8,801 |
18,650 |
Πίνακας 1:
Στατιστική ανάλυση των αποστάσεων μεταξύ δύο τυχαίων μελών και μεταξύ των μελών
του FreeBSD που έχουν σχέση μαθητείας.
Κατά την
περίοδο που οι νέοι προγραμματιστές του FreeBSD δουλεύουν με τον μέντορά τους,
σημειώνουν σε όλες τις διαπράξεις τους το όνομα του μέντορα που είδε και
ενέκρινε την αντίστοιχη αλλαγή. Από αυτές τις διαπράξεις μπορέσαμε να
δημιουργήσουμε μια λίστα με 167 ζευγάρια μέντορα-μαθητευόμενου. Στη συνέχεια
κρατήσαμε τα 107 για τα οποία είχαμε και την τοποθεσία και των δύο μελών κάθε
ζευγαριού και χρησιμοποιώντας τις γεωγραφικές συντεταγμένες κάθε ενός
υπολογίσαμε την γεωγραφική απόσταση μεταξύ του μέντορα και του μαθητευόμενου
(εικόνα 3). Όπως φαίνεται στον Πίνακα 1, όπου απεικονίζονται στατιστικά οι
χιλιομετρικές αποστάσεις μεταξύ οποιονδήποτε δύο προγραμματιστών και των
προγραμματιστών με σχέση μαθητείας, η μέση τιμή και η ενδιάμεση τιμή μεταξύ των
μεντόρων και των 'μαθητών' τους είναι μικρότερες, αλλά όχι δραματικά μικρότερες
από εκείνες μεταξύ δύο τυχαίων προγραμματιστών του FreeBSD. Στην περίπτωση της
σχέσης μαθητείας, ακόμα και οι αριθμοί στο πρώτο τεταρτημόριο μας δίνουν
αποστάσεις μέσα σε μια μικρή χώρα ή μια πολιτεία, αλλά όχι μέσα στην ίδια πόλη.
Φαίνεται
λοιπόν ότι κάποιες σχέσεις μαθητείας δημιουργούνται ανάμεσα σε προγραμματιστές
που κατοικούν σχετικά κοντά (όπως για παράδειγμα του ζευγαριού fjoe-danfe στο
πάνω δεξί μέρος της εικόνας 3), αλλά τέτοιες σχέσεις επίσης υπάρχουν (και
λειτουργούν καλά) ακόμα και όταν οι δύο προγραμματιστές ζουν σε διαφορετικές
ηπείρους.
Από όσα
είδαμε μέχρι τώρα, είναι φανερό ότι η ανάπτυξη κώδικα από μια ευρέως διασπαρμένη
και με ασθενείς σχέσεις ομάδα προγραμματιστών είναι βιώσιμη πρόταση. Η
παγκόσμια κατανομή των μελών της ομάδας διευκολύνει τη συνεχή ανάπτυξη καθ' όλο
το 24ωρο, χωρίς πολλές αρνητικές συνέπειες στην παραγωγικότητα, την ποιότητα
του κώδικα και την συχνότητα εμφάνισης σφαλμάτων. Επιπλέον, η συνεργασία για
μια συγκεκριμένη δουλειά δεν φαίνεται να επηρεάζεται από την απόσταση. Από την
άλλη μεριά, όμως, είδαμε ότι η σχέση μαθητείας σε κάποιες περιπτώσεις
αναπτύσσεται πιο εύκολα μεταξύ ατόμων που κατοικούν κοντά.
Ο βαθμός
στον οποίο τα συμπεράσματά μας μπορούν να χρησιμοποιηθούν στην ανάπτυξη
εμπορικού λογισμικού είναι υπό συζήτηση. Η έλλειψη μιας ομάδας ελέγχου με
προγραμματιστές που δουλεύουν στα ίδια γραφεία και μοιράζονται το γεύμα στην
ίδια καφετέρια δεν μας επιτρέπει να επιβεβαιώσουμε το αν το FreeBSD πληρώνει ή
όχι το τίμημα της ανάπτυξης λογισμικού σε παγκόσμια κλίμακα ακόμα και όταν δύο
μέλη του μένουν στην ίδια πόλη. Από την άλλη πλευρά όμως, υπάρχουν ήδη πολλά
έργα ανάπτυξης εμπορικού λογισμικού που είναι κατανεμημένα σε απομακρυσμένα
γραφεία ή τοποθεσίες. Γι' αυτές τις περιπτώσεις, τα ευρήματα μας δείχνουν ότι
σε περιβάλλοντα όπου οι προγραμματιστές χρησιμοποιούν καθημερινά διάφορες
συνεργατικές τεχνολογίες, η απόσταση δεν αποτελεί εμπόδιο.
Εν κατακλείδι,
δεδομένων των γενικά θετικών αποτελεσμάτων αυτής της έρευνας, τα projects
ανάπτυξης εμπορικού λογισμικού θα μπορούσαν, τουλάχιστον, να δοκιμάσουν να
υιοθετήσουν και να προσαρμόσουν κάποιες από τις πρακτικές του FreeBSD.
Θα θέλαμε να
ευχαριστήσουμε τα μέλη της κοινότητας του FreeBSD που επέτρεψαν στον
υπογράφοντα να συμμετέχει στο project και παρείχαν όλα τα απαραίτητα δεδομένα
και σχόλια προκειμένου να γίνει αυτή η δουλειά. Τέλος, ο Παναγιώτης Λουρίδας
έκανε πολλές χρήσιμες παρατηρήσεις σε πρώιμες εκδόσεις αυτής της δουλειάς.
[1] Απόδοση από τον Δημήτρη Καλαμαρά, της πρωτότυπης δημοσίευσης “Global Software
Development in the FreeBSD Project” στο συνέδριο “Ιnternational Workshop on Global Software
Development for the Practitioner”,
ACM Press, σελ 73–79, Μάιος 2006.
[2] Οι οδηγίες για το στυλ του κώδικα περιέχονται FreeBSD Kernel Developer's Manual που είναι διαθέσιμο στο www.freebsd.org/docs.html