Table of Contents
Κατά τη διατήρηση και βελτίωση των μηχανικών συστημάτων, οι οργανισμοί αντιμετωπίζουν συχνά μια κρίσιμη απόφαση: θα πρέπει να αναπροσανατολίσουν τα υπάρχοντα συστατικά ή να τα ξαναγράψουν εξ ολοκλήρου; Η κατανόηση των διαφορών, των πλεονεκτημάτων και των μειονεκτημάτων κάθε προσέγγισης είναι απαραίτητη για να κάνετε ενημερωμένες επιλογές που ευθυγραμμίζονται με τους στόχους του έργου και τους περιορισμούς των πόρων.
Κατανόηση της Αντιδραστικής
Στόχος του είναι να ενισχύσει την ποιότητα του κώδικα, την αναγνωσιμότητα και τη διατηρησιμότητα, ενώ παράλληλα διατηρεί τη συμπεριφορά του συστήματος. Αυτή η προσέγγιση χρησιμοποιείται συχνά για τη μείωση του τεχνικού χρέους και την προετοιμασία συστημάτων για τη μελλοντική ανάπτυξη. Η αναπαράσταση δεν αφορά την προσθήκη χαρακτηριστικών.
Αισθητικές Βελτιώσεις και Μυρίστες Κώδικα
Παραδείγματα περιλαμβάνουν τον διπλό κώδικα, τις μεγάλες μεθόδους, τις μεγάλες κατηγορίες και την υπερβολική σύζευξη. Με τη συστηματική εξάλειψη αυτών των μυρωδιών, οι ομάδες μπορούν να κάνουν τη βάση κώδικα πιο αρθρωτή και δοκιμαστική. Εργαλεία όπως στατικοί αναλυτές και χαρακτηριστικά αναπαράγοντα IDE (π.χ., Μετονομασία, Μέθοδος Εξαγωγής, Pull Up) βοηθούν στην αυτοματοποίηση πολλών από αυτές τις μετατροπές.
Πότε να Αναπαράγοντας
Η αναπαράσταση είναι πιο αποτελεσματική όταν το υπάρχον σύστημα είναι ακόμα δομικά υγιές αλλά έχει συσσωρεύσει μετριοπαθές τεχνικό χρέος. Είναι επίσης κατάλληλο όταν η επιχειρηματική λογική είναι πολύπλοκη και καταληπτή, καθώς ξαναγράφει τον κίνδυνο να χάσει τη γνώση του χώρου που κερδίζεται δύσκολα. Ομάδες που ασκούν συνεχή αναπαράσταση ως μέρος του κύκλου ανάπτυξής τους (π.χ., ο κανόνας-πρόσκοπος αγόρι-βρίσκει ότι η βάση κώδικα παραμένει υγιής και η ανάγκη για μεγάλες επαναγραφές μειώνεται. Η αναπαράσταση είναι λιγότερο επικίνδυνη επειδή μπορείτε να επικυρώσετε την ορθότητα σταδιακά μέσω δοκιμών και μικρών εφαρμογών.
Κατανόηση της επανάληψης
Η επαναγραφή, από την άλλη πλευρά, περιλαμβάνει την ανάπτυξη ενός νέου συστήματος από το μηδέν ή την ουσιαστική αναθεώρηση του υπάρχοντος. Αυτή η μέθοδος συνήθως επιλέγεται όταν το τρέχον σύστημα είναι ξεπερασμένο, πολύ περίπλοκο, ή δεν ανταποκρίνεται πλέον στις επιχειρηματικές ανάγκες. Η αναγραφή μπορεί να παρέχει μια νέα αρχή, επιτρέποντας την εφαρμογή της σύγχρονης αρχιτεκτονικής και τεχνολογιών. Ωστόσο, σημαίνει επίσης την απόρριψη ετών διορθώσεων σφαλμάτων, βελτιστοποιήσεων, και θεσμικής γνώσης θαμμένος στον παλιό κώδικα.
Γκρίνφιλντ εναντίον Μπράουνφιλντ Ξαναγράφει
Μια νέα έκδοση του πράσινου πεδίου ξεκινά με ένα κενό σχιστόλιθο, χτίζοντας το σύστημα σε ένα εντελώς νέο περιβάλλον. Αυτό συμβαίνει συχνά όταν η αρχική πλατφόρμα είναι παρωχημένη (π.χ., μεταναστεύοντας από το Cobol στην Java) ή όταν το σύστημα πρέπει να είναι πλήρως εκ νέου αρχιδιασμένο για την κλιμακωσιμότητα.
Πότε να ξαναγράψετε
Η επαναγραφή δικαιολογείται όταν το τρέχον σύστημα έχει φτάσει σε ένα σημείο όπου ο αναπαράγοντας θα κόστιζε περισσότερο από την ανοικοδόμηση. Οι δείκτες περιλαμβάνουν: η βάση κώδικα είναι μη δοκιμαστή, η αρχιτεκτονική αποτρέπει τις απαραίτητες αλλαγές (π.χ. δεν μπορεί να κλιμακωθεί οριζόντια), ή η στοίβα τεχνολογίας δεν υποστηρίζεται πλέον. Ένα άλλο σενάριο είναι όταν το επιχειρηματικό μοντέλο έχει μετατοπιστεί τόσο δραματικά ώστε το κληροδοτημένο σύστημα δεν μπορεί να προσαρμοστεί χωρίς πλήρη ανακατασκευή. Η επαναγραφή μπορεί επίσης να είναι μια στρατηγική κίνηση για να κερδίσει ανταγωνιστικό πλεονέκτημα υιοθετώντας νέα παραδείγματα όπως οι μικρουπηρεσίες ή οι serverless.
Συγκρίνοντας τους κινδύνους και το κόστος
Και οι δύο προσεγγίσεις φέρουν διακριτά προφίλ κινδύνου και δομές κόστους. Κατανόηση αυτών βοηθά τις ομάδες ευθυγραμμίζουν την επιλογή τους με την οργανωτική ανοχή κινδύνου και τους κύκλους του προϋπολογισμού.
Παράγοντες Κινδύνου
Αναπαράγοντας κινδύνους: Ο μεγαλύτερος κίνδυνος είναι ότι η αναπαράσταση δεν τελειώνει ποτέ ⁇ γίνεται ένας ατελείωτος κύκλος μικρών βελτιώσεων ενώ τα υποκείμενα προβλήματα του συστήματος εξακολουθούν να υπάρχουν. Ένας άλλος κίνδυνος είναι ⁇ αναπαράγοντας κόπωση ⁇ όπου η ομάδα χάνει κίνητρο επειδή η πρόοδος είναι αργή και αόρατη στους ενδιαφερόμενους. Ωστόσο, η αναπαράγοντας έχει συνήθως χαμηλότερο κίνδυνο ανά αλλαγή, επειδή κάθε τροποποίηση είναι μικρή και αναστρέψιμη.
Αναγραφή κινδύνων: Η πιο γνωστή προειδοποίηση προέρχεται από το άρθρο του Τζόελ Σπόλσκι ⁇ Things You Would Never Do, Part I ⁇ ], όπου υποστηρίζει ότι η επανεγγραφή συχνά οδηγεί στη ναυτιλία ενός buggy, feature-κακός χρόνια αντικατάστασης αργότερα.
Ανάλυση κόστους
Μια μελέτη του Ινστιτούτου Μηχανικών Λογισμικού διαπίστωσε ότι ο καθορισμός ενός ελαττώματος μετά την απελευθέρωση κοστίζει 10 ⁇ 100x περισσότερο από το να το διορθώσει κατά τη διάρκεια του σχεδιασμού ⁇ αλλά ο επαναπροσδιορισμός πιάνει πολλά ελαττώματα νωρίς βελτιώνοντας τη σαφήνεια του κώδικα. Η αναγραφή απαιτεί μια μεγάλη προκαταβολική επένδυση: πρέπει να επαναδιαλύσετε, να επαναδιατυπώσετε, να επανακωδικοποιήσετε και να ελέγξετε τα πάντα. Το συνολικό κόστος της ιδιοκτησίας (TCO) για μια επανέκδοση συχνά υπερβαίνει αυτό του επαναπροσδιορισμού σε έναν ορίζοντα 3 ⁇ 5 ετών, εκτός αν το κληροδότημα είναι πραγματικά μη βιώσιμο. Ωστόσο, μια επανέναρξη μπορεί να μειώσει το λειτουργικό κόστος (π.χ., cloud υποδομή, αδειοδότηση) που αναπτύχθηκε κάποτε.
Πλαίσιο απόφασης για τους ηγέτες μηχανικών
Η επιλογή μεταξύ αναπαράγοντα και επαναγραφή εξαρτάται από διάφορους παράγοντες όπως η πολυπλοκότητα του συστήματος, οι επιχειρηματικές προτεραιότητες, οι διαθέσιμοι πόροι, και οι μακροπρόθεσμοι στόχοι.
Εκτίμηση της υγείας του συστήματος
Εκτελέστε μια συστηματική ανάλυση της βάσης κώδικα χρησιμοποιώντας μετρήσεις όπως κυκλοματική πολυπλοκότητα, κάλυψη κώδικα, ζεύξη, και πυκνότητα ελαττωμάτων. Εργαλεία όπως SonarQube ή CodeClimate μπορεί να παρέχει αντικειμενικά δεδομένα. Αν το σύστημα σκορ σε κακή διατηρησιμότητα, αλλά η επιχειρηματική λογική είναι σταθερή, αναπαράγοντα μπορεί να είναι αρκετό. Αν η αρχιτεκτονική είναι θεμελιωδώς ελαττωματική (π.χ., μονολιθικά σπαγγέτι που δεν μπορεί να αρθρωθεί), μια επανέκδοση μπορεί να είναι απαραίτητη.
Ευθυγράμμιση Επιχειρηματικών Στόχων
Αν ο στόχος είναι να επιταχύνει την παράδοση χαρακτηριστικών μέσα στο επόμενο τρίμηνο, ο επαναπροσδιορισμός είναι συνήθως ασφαλέστερος. Αν ο στόχος είναι να εισέλθει σε μια νέα αγορά που απαιτεί ριζικά διαφορετικές επιδόσεις ή κλιμακωτή χαρακτηριστικά, μια επανέναρξη θα μπορούσε να δικαιολογηθεί. Ενεργοποιήστε τους ιδιοκτήτες προϊόντων και τους ενδιαφερόμενους φορείς για να διευκρινίσετε το ⁇ γιατί ⁇ Για παράδειγμα, μια εκκίνηση μπορεί να επιλέξει να ξαναγράψει για να ανατρέψουν γρήγορα, ενώ μια επιχείρηση με κρίσιμα συστήματα κληρονομιάς θα μπορούσε να προτιμά την αύξηση του συντελεστή για να αποφύγει το χρόνο downtime.
Ικανότητα ομάδας και θεσμική γνώση
Αν η αναπαράσταση βασίζεται σε μεγάλο βαθμό στην κατανόηση του υπάρχοντος συστήματος. Αν οι αρχικοί συγγραφείς είναι ακόμα στην ομάδα, η αναπαράσταση είναι πιο αποτελεσματική. Αν η βάση κώδικα είναι ένα μαύρο κουτί με λίγη τεκμηρίωση, μια επανέκδοση μπορεί να φαίνεται δελεαστική ⁇ αλλά φέρει τον κίνδυνο επανάληψης των σφαλμάτων του παρελθόντος. Σε αυτή την περίπτωση, σκεφτείτε μια ⁇ επανεγγραφή με διατήρηση ⁇ : οικοδομήστε το νέο σύστημα παράλληλα, αλλά εξαγάγετε τους κανόνες των επιχειρήσεων από τον παλιό κώδικα μέσω προσεκτικής ανάγνωσης και αυτοματοποιημένης δοκιμής πριν απορρίψετε το παλιό σύστημα.
Παραδείγματα Πραγματικού-Παγκόσμιου
Εξετάζοντας πώς άλλες οργανώσεις έχουν περιηγηθεί αυτή την επιλογή μπορεί να παρέχει πρακτικές γνώσεις.
Παράδειγμα: Αναπαράσταση του Basecamp του HEY
Κατά την ανάπτυξη της υπηρεσίας ηλεκτρονικού ταχυδρομείου HEY, η ομάδα του Basecamp επέλεξε να αναπροσανατολίσει την υπάρχουσα βάση κώδικα Rails αντί να ξαναγράψει από το μηδέν. Εξήγαγαν συστηματικά τη λογική τομέα σε αντικείμενα υπηρεσιών, βελτίωσαν την κάλυψη δοκιμών και εξάλειψαν τον νεκρό κώδικα. Αυτό τους επέτρεψε να στείλουν το προϊόν σύμφωνα με το χρονοδιάγραμμα, διατηρώντας τη βάση κώδικα διατηρητέα. Η ομάδα κατέγραψε την προσέγγισή τους[[LFT:1], τονίζοντας ότι η στοιχειώδης βελτίωση ήταν το κλειδί για τη διατήρηση της βαθιάς κατανόησης του χειρισμού email.
Παράδειγμα: Επανεγγραφή FreshBooks
Η απόφαση ήρθε μετά από χρόνια πάλης με την απόδοση και τους αρχιτεκτονικούς περιορισμούς που δεν μπορέσαμε να διορθώσουμε. Η επανέκδοση πήρε πάνω από 2 χρόνια και κόστισε δεκάδες εκατομμύρια δολάρια, αλλά τους επέτρεψε να εξυπηρετήσουν μεγαλύτερους πελάτες και να μειώσουν το κόστος στήριξης. Ο Διευθύνων Σύμβουλος σημείωσε ότι η επανεγγραφή ήταν ⁇ το δυσκολότερο πράγμα που έχουμε κάνει ποτέ ⁇ αλλά ήταν απαραίτητο για την επιχείρηση να επιβιώσει. Το έργο τους μετά τη σφαγή υπογραμμίζει τη σημασία της ευθυγράμμισης μεταξύ επιχειρηματικής όρασης και τεχνικής αρχιτεκτονικής.
Παράδειγμα: Η Κοινότητα των Αντιδραστήρων του Martin Fowler
Ο Martin Fowler, συγγραφέας του βιβλίου Refactoring: Βελτιώνοντας το Design of Existing Code, έχει υποστηρίξει εδώ και καιρό την αναπαράσταση της επαναγραφής. Υποστηρίζει ότι τα περισσότερα συστήματα μπορούν να βελτιωθούν σταδιακά αν οι ομάδες επενδύσουν σε αυτοματοποιημένες δοκιμές και συνεχή ολοκλήρωση. Ο κατάλογος του refactering[ παρέχει αποδεδειγμένα πρότυπα που μπορεί να εφαρμόσει οποιαδήποτε ομάδα. Η προοπτική του Fowler είναι ότι η επαναγραφή θα πρέπει να είναι μια τελευταία λύση, όχι ένα πρώτο ένστικτο.
Συμπέρασμα: Κάνοντας τη σωστή επιλογή
Η σωστή διαδρομή περιλαμβάνει συχνά ένα συνδυασμό: τον αναπαράγοντα τα μέρη που διασώζονται, και ξαναγράφετε μόνο εκείνα τα συστατικά που είναι πέρα από την επισκευή. Χρησιμοποιήστε το πλαίσιο που περιγράφεται εδώ για να αξιολογήσει την υγεία της βάσης κώδικα σας, ευθυγραμμίζονται με τους επιχειρηματικούς στόχους, και τη γνώση ομάδα μόχλευσης. Κάνοντας μια ενημερωμένη επιλογή, μπορείτε να οδηγήσετε την οργάνωσή σας προς πιο ισχυρή, αποτελεσματική, και προσαρμοστικά συστήματα που υποστηρίζουν την ανάπτυξη χωρίς να πέσει στην παγίδα των πρόωρων ξαναγραφών ή ατελείωτη επαναξιολόγηση.