Μονάδα 4 / 12

Αναθεώρηση Κώδικα, Ανακατασκευή και Τεχνικό Χρέος

Κέρδη:

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

Στη μηχανική λογισμικού, ο κώδικας διαβάζεται πολύ περισσότερο από ό, τι γράφεται. Μια γραμμή κώδικα γράφεται μία φορά, αλλά διαβάζεται, τροποποιείται και βασίζεται δεκάδες φορές κατά τη διάρκεια των μηνών. Αυτός είναι ο λόγος για τον οποίο η αναθεώρηση κώδικα (επισκόπηση του κώδικα κάποιου άλλου ή του δικού σας κώδικα για λογική, αναγνωσιμότητα και ασφάλεια) και η ανακατασκευή (βελτίωση της δομής του κώδικα χωρίς αλλαγή της συμπεριφοράς του) βρίσκονται στο επίκεντρο της μηχανικής. Η τεχνητή νοημοσύνη γίνεται ένα ισχυρό «δεύτερο μάτι» για αυτές τις δύο εργασίες: προτείνει γρήγορα αναγνωσιμότητα, επισημαίνει προβλήματα λογικής και ασφάλειας που παραβλέπονται και σπάει μια μεγάλη ανακατασκευή σε μικρότερα ασφαλή βήματα. Υπάρχει όμως ένας κρίσιμος κανόνας: η ανακατασκευή δεν πρέπει να αλλάζει συμπεριφορά και το μόνο που εγγυάται αυτό είναι η δοκιμή.

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

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

Χρήση τεχνητής νοημοσύνης στην αναθεώρηση δομημένου κώδικα

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

  1. Δώστε το πεδίο εφαρμογής. Τι κώδικα, τι να κάνω, σε ποιο πλαίσιο λειτουργεί.
  2. Καθορίστε τον άξονα προτεραιότητας. Ακρίβεια και ασφάλεια πρώτα, αναγνωσιμότητα δεύτερο.
  3. Ζητήστε συγκεκριμένη διόρθωση. «Γιατί το πρόβλημα» και «συνιστώμενη επιδιόρθωση» για κάθε εύρημα.
  4. Επαληθεύετε τα ευρήματα. Η τεχνητή νοημοσύνη παράγει επίσης ψευδώς θετικά αποτελέσματα. Επαληθεύστε κάθε εύρημα έναντι κώδικα και δοκιμών.

Προτροπή δομημένης αναθεώρησης: "Εξετάστε την ακόλουθη λειτουργία σαν ανώτερος μηχανικός. Καταγράψτε τα ευρήματα με σειρά σπουδαιότητας και σημειώστε τα με αυτές τις ετικέτες: [CRITICAL] logic/security, [MEDIUM] edge case/performance, [LOW] readability/name. Κωδικός: [code]"

Προτροπή ελέγχου εστιασμένη στην ασφάλεια: "Ελέγξτε αυτόν τον κωδικό μόνο για λόγους ασφαλείας: έλλειψη επικύρωσης εισόδου, κίνδυνος έγχυσης, έλλειψη ελέγχου εξουσιοδότησης, διαρροή εμπιστευτικών πληροφοριών, ανασφαλείς προεπιλογές. Προσθέστε ένα παράδειγμα σεναρίου επίθεσης σε κάθε εύρημα. Εάν δεν υπάρχει πρόβλημα ασφαλείας, δηλώστε ξεκάθαρα "Δεν βρήκα κανένα κρίσιμο ζήτημα ασφαλείας". Κωδικός: [κωδικός]".

Προσοχή: Ακριβώς επειδή το AI λέει "κανένα πρόβλημα" δεν είναι απόδειξη ότι δεν υπάρχει πρόβλημα. Το AI μπορεί να παράγει ψευδώς αρνητικά. μπορεί να παρακάμψει ένα πραγματικό ζήτημα ασφάλειας. Η αναθεώρηση τεχνητής νοημοσύνης συμπληρώνει, όχι αντικαθιστά, επανεξέταση από ανθρώπους και δοκιμές ασφάλειας. Στον κρίσιμο για την ασφάλεια κώδικα τον τελευταίο λόγο έχει ο αρμόδιος μηχανικός.

Test-Preserved Refactoring

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

  1. Δοκιμάστε την τρέχουσα συμπεριφορά. Διαφορετικά, ζητήστε από το AI να δημιουργήσει ένα «τεστ χαρακτηρισμού» (τεστ που καταγράφει την τρέχουσα συμπεριφορά ως έχει).
  2. Διορθώστε το με μικρά βήματα. Η δοκιμή πρέπει να παραμένει πράσινη σε κάθε βήμα.
  3. Εκτελέστε το μετά από κάθε βήμα. Πιάστε την παλινδρόμηση νωρίς.

Προτροπή ασφαλούς σχεδίου ανακατασκευής: "Η ακόλουθη συνάρτηση 60 γραμμών κάνει πάρα πολλά και είναι δυσανάγνωστη. Θέλω να την αναδιαμορφώσω ΧΩΡΙΣ αλλαγή της συμπεριφοράς της. Πρώτα: αναφέρω ποιες περιπτώσεις δοκιμών χρειάζομαι για να κλειδώσω την τρέχουσα συμπεριφορά. Στη συνέχεια: σπάστε την ανακατασκευή σε μικρά βήματα, καθένα από τα οποία μπορεί να εκτελεστεί ενώ οι δοκιμές είναι πράσινες. Μην γράψετε ακόμα τον πρώτο κώδικα του σχεδίου."

Αδύναμη προτροπή / Ισχυρή προτροπή

ΑΔΥΝΑΜΟΣ: "Κάντε αυτόν τον κώδικα καλύτερο." (Αποτελέσ [κωδικός]"

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

Διαχείριση Τεχνικού Χρέους

Προσέγγιση

Βραχυπρόθεσμα

μακροπρόθεσμα

αγνοώντας το χρέος

γρήγορη πρόοδο

Παράλυση συντήρησης, επιβράδυνση της ομάδας

ξαναγράψτε τα πάντα

Ανάπτυξη μόνιμου χαρακτηριστικού

Αβέβαιη απόδοση, υψηλό ρίσκο

Μετρημένη, προστατευμένη με δοκιμή ανακατασκευή

μικρή επιβράδυνση

Βιώσιμη ταχύτητα

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

Μίνι Θήκες

Περίπτωση 1 — Σιωπηλή παλινδρόμηση. Ένας προγραμματιστής λέει στο AI να «απλοποιήσει αυτή τη λειτουργία». Το AI μεταφράζει μια συνθήκη λανθασμένα και ο υπολογισμός της επιστροφής έχει σπάσει. Δεδομένου ότι δεν υπάρχει δοκιμή, το σφάλμα εμφανίζεται μετά από 3 εβδομάδες με ένα παράπονο πελάτη. Η ομάδα κάνει την ίδια δουλειά γράφοντας πρώτα ένα τεστ χαρακτηρισμού και πιάνει το σφάλμα με ένα κόκκινο τεστ στην πρώτη διαδρομή.

Περίπτωση 2 — Χρήσιμο δεύτερο μάτι. Σε μια αναθεώρηση κώδικα, το AI συνειδητοποιεί ότι η εξουσιοδότηση χρήστη ελέγχεται μόνο στη διεπαφή και όχι στον διακομιστή. Αυτή είναι μια ευπάθεια μη εξουσιοδοτημένης πρόσβασης. Ο Μηχανικός προσθέτει έλεγχο εξουσιοδότησης από την πλευρά του διακομιστή. Η επιθεώρηση AI αποτρέπει ένα πραγματικό περιστατικό ασφαλείας.

Περίπτωση 3 — Εσφαλμένη θετική. Το AI λέει "αυτή η μεταβλητή δεν χρησιμοποιείται ποτέ, διαγράψτε την". Ωστόσο, χρησιμοποιείται έμμεσα μέσω ενός μηχανισμού μεταβλητής ανάκλασης. Εάν ο μηχανικός δεν επαληθεύσει την πρόταση σε σχέση με τη δοκιμή, θα διαγραφόταν και θα προέκυπτε σφάλμα χρόνου εκτέλεσης. Κάθε εύρημα AI πρέπει να επιβεβαιώνεται πριν από την εφαρμογή.

Συνήθη λάθη

  • Ανακατασκευή χωρίς δοκιμή. Δεν υπάρχει τίποτα που να διασφαλίζει τη διατήρηση της συμπεριφοράς.
  • Εφαρμογή ευρημάτων AI χωρίς επικύρωσή τους. Τα ψευδώς θετικά και τα ψευδώς αρνητικά συμβαίνουν και τα δύο.
  • Χάσιμο ανθρώπινου χρόνου σε προβλήματα μορφής. Η εστίαση σε εργασίες που μπορούν να επιλυθούν με αυτοματοποιημένα εργαλεία επισκιάζει τους πραγματικούς κινδύνους.
  • Λαμβάνοντας την απάντηση "Κανένα πρόβλημα" ως εγγύηση. Η τεχνητή νοημοσύνη μπορεί να παρακάμψει την ευπάθεια. απαιτείται ανθρώπινη επανεξέταση.
  • Προσπαθώντας να εξοφλήσει ολόκληρο το χρέος με τη μία. Οι μεγάλες επαναλήψεις είναι επικίνδυνες. Προτιμώνται τα βήματα που μετρώνται και προστατεύονται με δοκιμές.

Συνοπτικά

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

Εργασία εφαρμογής

Πάρτε μια γραμμή 40-70, κάπως περίπλοκη συνάρτηση που έχετε (ή βάλτε το AI να δημιουργήσει). Αρχικά ακολουθήστε την προτροπή δομημένης αναθεώρησης και ταξινομήστε τα ευρήματα ως [ΚΡΙΤΙΚΑ]/[ΜΕΣΑΙΑ]/[ΧΑΜΗΛΟ]. Επαληθεύστε χειροκίνητα τουλάχιστον ένα εύρημα σε σχέση με τον κωδικό. Στη συνέχεια, με την προτροπή του ασφαλούς σχεδίου ανακατασκευής, δημιουργήστε πρώτα και εκτελέστε τις δοκιμές χαρακτηρισμού, στη συνέχεια εφαρμόστε την ανακατασκευή σε μικρά βήματα και επαληθεύστε ότι οι δοκιμές παραμένουν πράσινες σε κάθε βήμα.

λίστα ελέγχου

  • [ ] Δόμησα την κριτική με ετικέτες προτεραιότητας (κρίσιμες/μεσαίες/χαμηλές).
  • [ ] Έχω επαληθεύσει τουλάχιστον ένα εύρημα AI σε σχέση με τον κωδικό/δοκιμή.
  • [ ] Δοκίμασα την τρέχουσα συμπεριφορά πριν από την αναπαράσταση.
  • [ ] Έκανα τις αλλαγές σε μικρά βήματα και έτρεξα δοκιμές σε κάθε βήμα.
  • [ ] Προσδιόρισα τον περιορισμό "Η συμπεριφορά πρέπει να παραμείνει ίδια" στη γραμμή εντολών.
  • [ ] Έχω επιβεβαιώσει ότι τα ευρήματα ασφαλείας απαιτούν ανθρώπινη επιβεβαίωση.