Το Refactoring πηγαίου κώδικα (source code) είναι η διαδικασία κατά την οποία γίνεται αναδιοργάνωση - βελτίωση του πηγαίου κώδικα σε ένα project, αλλά χωρίς να γίνονται αλλαγές στη λειτουργικότητα του προγράμματος. Τα πολύπλοκα και μεγάλα τμήματα κώδικα μπορούν να απλοποιηθούν σε μικρότερα κομμάτια, καθώς και να εξαλειφθεί ο συχνά επαναλαμβανόμενες γραμμές του κώδικας ώστε σταδιακά να προκύψει αυτό που λέμε clean code.

Αυτή η διαδικασία αποτελεί σημαντικό μέρος στα πλαίσια ανάπτυξης ενός project και ειδικά σε όσους αναπτύσσουν web applications και γενικότερα λογισμικό με τη μεθοδολογία agile. Ο βασικός στόχος είναι δημιουργήσει Clean Code δηλαδή κώδικάς που μπορεί να διαβαστεί εύκολα, να συντηρηθεί και να επεκταθεί.

Ειδικά στο Laravel το service container βοηθάει στo refactoring και τη δημιουργία clean code. Τα πλεονεκτήματα του refactoring είναι πολλά και το πιο βασικό είναι ότι θα μειώσει το technical debt που δημιουργείται στα projects με τη πάροδο του χρόνου. Επιπλέον για να αποφεχθούν τα προβλήματα παράλληλα θα πρέπει να υπάρχει ήδη και μια διαδικασία τεσταρίσματος  όπως είναι τα unit tests.

Μερικές τεχνικές refactoring

Τρεις βασικές τεχνικές είναι οι παρακάτω

  • Απλοποίηση μεθόδων καθώς ο κώδικας μεγαλώνει και γίνεται και γίνεται μακροσκελής κώδικα σε μια μέθοδο, επιβάλλεται να σπάσει σε μικρότερα μέρη - μεθόδους. Για παράδειγμα ιδανικά μια κλάση (Class) θα πρέπει να έχει το πολύ 200 γραμμές κώδικα και μια μέθοδος το μέγιστο 50-60 γραμμές.
  • Ενοποίηση κώδικα. Χρησιμοποιείται για να εξαλειφθούν τα διπλότυπα μέρη του κώδικα ακολουθώντας την αρχή του Dry Principle τη δημιουργία επαναχρησιμοποιούμενων στοιχείων.
  • Μια άλλη τεχνική αναδιαμόρφωσης που περιλαμβάνει τη μεταφορά features μεταξύ αντικειμένων δημιουργώντας καινούργιες κλάσεις, καθώς και τη σωστή ονομασία των συναρτήσεων και κλάσεων ακολουθώντας τα coding standards σε κάθε γλώσσα προγραμματισμού.

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

Αλλά η χρήση των DocBlocs πριν από κάθε μέθοδο είναι απαραίτητη για να δούμε ποια είναι τα input και outputs και θα διευκολύνει το χρόνο ανάγνωσης του κώδικα από ένα web developer

Ευανάγνωστος και καθαρός κώδικας

Πολλοί developers σπαταλάνε περισσότερο χρόνο στο να διαβάζουν κώδικα παρά στο να γράφουν καινούργιο. Αυτός είναι ο λόγος για τον οποίο ένα σημαντικό πλεονέκτημα του refactoring όπου μπορεί να μειωθεί ο χρόνος στο web development καθώς και της αλληλεξάρτησης μια ομάδας προγραμματιστών που δουλεύουν στο project

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

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

Ο πολύπλοκος κώδικας δεν είναι απλά δύσκολο για κάποιον να τον κατανοήσει αλλά δεν ακολουθεί και τι καλύτερες πρακτικές του software engineering για αυτό και πρέπει να γίνονται implementation των design patterns. Σε διαφορετική περίπτωση αλλαγές του κώδικα μπορούν να κάνουν τη κατάσταση εύθραυστη και να αυξήσουν τα bugs.

Coding standards PSR-12 PHP

Για παράδειγμα στην php καλό είναι να ακολουθούμε coding standards όπως ειναι PSR για το πως πρέπει να δομήσουμε το κώδικα, όπου για παράδειγμα το PSR-12 το μέγιστο αριθμό χαρακτήρων ανα γραμμή κώδικα είναι 120 χαρακτήρες, το indentation να είναι 4 κενά, η ονοματοδοσία των μεθόδων και των συναρτήσεων να είναι camelCase, το braces { } να είναι επόμενη γραμμή για control structures και στην ίδια γραμμή για methods και functions

Η ύπαρξη quality assurance και εργαλείων software testing

Μια σουίτα δοκιμής λογισμικού για την εκτέλεση unit tests, functional test είναι κρίσιμης σημασίας για την επιβεβαίωση της ορθής λειτουργίας της εφαρμογής, το refactoring δεν πρέπει να αλλάζει τα αποτελέσματα των tests.

Τα test suits όπως το codeception για την PHP ή για frameworks όπως το Symfony Development, το Robot Framework για την Python θα πρέπει να είναι όσο το δυνατόν πιο ολοκληρωμένα και όσο προχωρά το refactoring να ενημερώνεται τα υπάρχοντα tests.

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