Πώς να κατακτήσετε τον παλαιού κώδικα

Σε κάποιο σημείο της καριέρας σας στον προγραμματιστή, το αφεντικό σας θα σας παραδώσει ένα κομμάτι παλαιού κώδικα - κώδικα που έγραψε κάποιος άλλος εδώ και πολύ καιρό. Το αφεντικό σας θα σας πει να μάθετε αυτόν τον παλαιό κώδικα, να τον διορθώσετε και να προσθέσετε νέες δυνατότητες σε αυτόν.

Έχω βρεθεί σε αυτήν την κατάσταση πολλές φορές τις τελευταίες δύο δεκαετίες. Μπορώ να βοηθήσω.

Πώς να κατανοήσετε τον παλαιό κώδικα

Εάν είστε τυχεροί, θα έχετε τεκμηρίωση ή τουλάχιστον in-line σχόλια. Ίσως ένας ή δύο από τους αρχικούς συγγραφείς θα εξακολουθούν να είναι κοντά σας για να σας βοηθήσουν. Αλλά τις περισσότερες φορές, δεν θα είστε τόσο τυχεροί.

Ας μιλήσουμε για το τι πρόκειται να κάνετε σε αυτές τις άτυχες περιπτώσεις.

Πρώτον, πρέπει να είστε ταπεινοί. Σεβαστείτε τον κώδικα και τους προγραμματιστές που τον έγραψαν.

Είναι εύκολο να κοιτάξετε τη δουλειά που ήρθε πριν από εσάς και να αποφασίσετε ότι δεν είναι καλό και ότι μπορείτε να κάνετε καλύτερα. Αυτή είναι η λάθος στάση. Θα σας οδηγήσει σε μια πολύ επικίνδυνη πορεία.

Εάν ακολουθήσετε αυτήν την επικίνδυνη πορεία, θα αρχίσετε να κάνετε αλλαγές πριν κατανοήσετε σωστά τον αντίκτυπο αυτών των αλλαγών. Θα «διορθώσετε» πράγματα που δεν είναι σπασμένα, επειδή είναι γραμμένα σε στυλ που δεν σας αρέσει ή βασίζονται σε έναν παλαιότερο τρόπο να κάνετε πράγματα. Τελικά, θα χάσετε έναν απίστευτο χρόνο με αυτήν τη στάση.

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

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

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

Μην αδειάσετε Αδειάστε τη βάση κώδικα σας.

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

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

Καθώς προχωράτε, σχεδιάστε ένα διάγραμμα ακολουθίας για να δείξετε τι συμβαίνει. Εάν δεν είστε σίγουροι τι είναι ένα διάγραμμα ακολουθίας ή πώς να σχεδιάσετε ένα, ρίξτε μια ματιά σε αυτόν τον δωρεάν οδηγό. Εάν δεν έχετε ένα καλό εργαλείο για τη σχεδίαση UML, εδώ είναι δωρεάν.

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

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

Για πόντους μπόνους, φροντίστε να μοιραστείτε τις σημειώσεις και τα διαγράμματά σας. Τοποθετήστε τα σε ένα πολύ ορατό μέρος όπου ο επόμενος προγραμματιστής που θα έρθει μαζί του μπορεί εύκολα να τους ανακαλύψει. Μην ανησυχείτε για να τα κάνετε τέλεια ή ακόμα και όμορφα. Απλά κάντε ό, τι μπορείτε. Κάθε λίγο βοηθάει.

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

Τρόπος διόρθωσης κώδικα παλαιού τύπου

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

Αυτό σας δίνει μια καταπακτή διαφυγής. Το χειρότερο σενάριο, εάν απομακρυνθείτε για να αντιμετωπίσετε κάποια άλλη προτεραιότητα - ή αν έχετε μια αυστηρή προθεσμία - τουλάχιστον θα έχετε συγκεντρώσει κάποιο κώδικα εργασίας στον οποίο μπορείτε να επιστρέψετε.

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

Ο Martin Fowler έχει δημιουργήσει έναν κατάλογο refactorings που θα σας δώσει μια καλή ιδέα για τους τύπους αλλαγών που μπορείτε να κάνετε για να βελτιώσετε σταδιακά μια βάση κώδικα. Δείτε το εδώ. Η ιδέα είναι να αφήνετε πάντα τον κώδικα σε καλύτερη κατάσταση από ό, τι ήταν όταν τον βρήκατε.

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

Εδώ τα πράγματα γίνονται τριχωτά. Πρέπει να είσαι απόλυτα ειλικρινής με τον εαυτό σου για το ποια είναι η ελάχιστη βιώσιμη αλλαγή. Κάθε ίνα της ύπαρξής σας θα θέλει να ξεχωρίσει τον κώδικα και να ξαναγράψει το όλο θέμα. Μην το κάνεις!

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

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

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

Και πάλι, πρέπει να είσαι βάναυσος ειλικρινής με τον εαυτό σου σχετικά με το κόστος / όφελος μιας επανεγγραφής ή επανασχεδιασμού. Πρέπει να αποδεχτείτε ότι, τελικά, αυτό θα είναι επιχειρηματική απόφαση και όχι τεχνική.

Προετοιμαστείτε να αναφέρετε την υπόθεσή σας σε επιχειρηματικούς όρους. Τι θα κοστίσει για μια σημαντική αναδιάρθρωση του κώδικα; Ποιοι είναι οι πραγματικοί επιχειρηματικοί κίνδυνοι να μην το κάνετε; Εάν έχετε μια σταθερή θήκη, θα ακούσετε τελικά. Μην εκπλαγείτε αν χρειάζονται μερικούς ακόμη κύκλους επιδιόρθωσης.

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

Πώς να προσθέσετε νέες δυνατότητες στον κώδικα παλαιού τύπου

Τέλος, θα κληθείτε τελικά να προσθέσετε λειτουργίες στον κώδικα παλαιού τύπου. Σε αυτό το σημείο, έχετε μια σημαντική απόφαση να λάβετε. «Πηγαίνετε με τη ροή» της τρέχουσας βάσης κώδικα ή παίρνετε τα πράγματα σε μια νέα κατεύθυνση;

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

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

Εάν πιστεύετε ότι μια νέα κατεύθυνση είναι απολύτως απαραίτητη, τότε θα πρέπει να βρείτε έναν τρόπο να απομονώσετε τις αλλαγές σας και να τις συνδέσετε όσο πιο χαλαρά γίνεται με την υπάρχουσα βάση κώδικα.

Δοκιμάστε να χαράξετε τη νέα δυνατότητα ως ξεχωριστό έργο. Στη συνέχεια, μπορείτε να εκθέσετε ένα API που επιτρέπει στον κώδικα παλαιού τύπου να συνδέεται με τον νέο σας κώδικα. Αυτό το κάνει έτσι ώστε ο νέος σας κώδικας και ο παλιός κώδικας παλαιού τύπου να μην χρειάζεται να γνωρίζουν πολλά ο ένας για τον άλλον.

Αυτό αρχίζει να γίνεται λίγο δύσκολο όταν πρέπει να χρησιμοποιήσετε τη λειτουργικότητα από τον παλαιό κώδικα για να εφαρμόσετε τη νέα δυνατότητα. Ο καλύτερος τρόπος για να απομονώσετε τον παλιό κώδικα από τον νέο κώδικα είναι να χρησιμοποιήσετε το Adapter Pattern.

Το DO Factory έχει μια καλή εξήγηση για το μοτίβο προσαρμογέα:

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

Ακολουθούν ορισμένοι σύνδεσμοι για εξηγήσεις και παραδείγματα σε διάφορες γλώσσες.

  • Παράδειγμα JavaScript του μοτίβου προσαρμογέα
  • C # παράδειγμα του μοτίβου προσαρμογέα
  • Παράδειγμα Java του μοτίβου προσαρμογέα

Βασικά προϊόντα

Συνοπτικά, εδώ είναι τα βασικά σημεία που θα σας βοηθήσουν να αντιμετωπίσετε και τελικά να κατακτήσετε οποιαδήποτε βάση κώδικα:

  1. Ποτέ μην κρίνετε τον παλαιό κώδικα ή να τον αλλάξετε έως ότου αφιερώσετε χρόνο για να τον κατανοήσετε πλήρως.
  2. Τα διαγράμματα ακολουθίας είναι ο φίλος σας.
  3. Προτιμήστε μικρές, στοιχειώδεις βελτιώσεις σε σχέση με τις χονδρικές επανεγγραφές ή αλλαγές.
  4. Κάθε αλλαγή θα πρέπει να προσπαθεί να αφήσει τον κώδικα λίγο καλύτερα από ότι ήταν όταν τον βρήκατε.
  5. Εάν πρέπει να κάνετε μεγάλες αλλαγές, κάντε μια επαγγελματική υπόθεση και λάβετε πρώτα έγκριση.
  6. Κατά την προσθήκη νέων δυνατοτήτων, προσπαθήστε να "ακολουθήσετε τη ροή".
  7. Εάν πρέπει να πάρετε τον κωδικό σε μια νέα κατεύθυνση, απομονώστε τις αλλαγές σας και χρησιμοποιήστε το Adapter Pattern για ενσωμάτωση.

Ας ελπίσουμε ότι βρήκατε αυτό το άρθρο χρήσιμο. Η αποστολή μου είναι να βοηθήσω όσο περισσότερους προγραμματιστές μπορώ. Παρακαλώ ❤ προτείνουμε ❤ αυτήν την ιστορία χρησιμοποιώντας την πράσινη καρδιά παρακάτω για να βοηθήσουμε να διαδώσουμε τη λέξη.

Θέλετε να κωδικοποιήσετε καλύτερα; Γίνετε μέλος σε χιλιάδες προγραμματιστές που λαμβάνουν πολύτιμα άρθρα και πληροφορίες από εμένα κάθε εβδομάδα δωρεάν . Απλώς κάντε κλικ εδώ.