Κέρδη:
- Δυνατότητα αποτελεσματικής περιγραφής ενός σφάλματος στην τεχνητή νοημοσύνη με μήνυμα σφάλματος, ίχνος στοίβας και μικρότερο παράδειγμα αναπαραγωγής
- Δυνατότητα εκτέλεσης μιας συστηματικής ροής εντοπισμού σφαλμάτων με AI για την εύρεση της βασικής αιτίας υποθέτοντας και περιορίζοντας την βήμα προς βήμα
- Δυνατότητα επαλήθευσης ότι η διόρθωση που πρότεινε η τεχνητή νοημοσύνη διόρθωσε πραγματικά το πρόβλημα με αναπαραγωγή και δοκιμή παλινδρόμησης
Ο εντοπισμός σφαλμάτων είναι το καθήκον να ανακαλύψουμε γιατί ένα πρόγραμμα συμπεριφέρεται διαφορετικά από το αναμενόμενο και να το διορθώσουμε, και καταναλώνει πολύ χρόνο από τους περισσότερους μηχανικούς. Ο καλός εντοπισμός σφαλμάτων δεν βασίζεται σε ένα παιχνίδι εικασίας, αλλά σε συστηματικό περιορισμό: αποσαφηνίστε το σύμπτωμα, υποθέστε, δοκιμάστε την υπόθεση, φτάστε στη βασική αιτία. Η τεχνητή νοημοσύνη είναι ένας πολύ ισχυρός συνεργάτης σε αυτόν τον κύκλο. Αλλά μόνο αν του δώσεις τις σωστές πληροφορίες. Λέγοντας "ο κώδικας δεν λειτουργεί, διορθώστε τον" αναγκάζει το AI να μαντέψει και να κάνει γενικές προτάσεις. Δώστε του το πλήρες μήνυμα σφάλματος, το ίχνος στοίβας και το μικρότερο δείγμα αναπαραγωγής και μαζί θα βρείτε τη βασική αιτία.
Σε αυτήν την ενότητα θα δούμε πώς να περιγράψουμε αποτελεσματικά ένα σφάλμα στην τεχνητή νοημοσύνη, να περιορίσουμε τις υποθέσεις βήμα προς βήμα και να επαληθεύσουμε μέσω δοκιμής παλινδρόμησης ότι η προτεινόμενη επιδιόρθωση λύνει πραγματικά το πρόβλημα. Θυμηθείτε: η "διόρθωση" ενός σφάλματος και η "καταστολή του συμπτώματος του σφάλματος" είναι δύο διαφορετικά πράγματα. Η διόρθωση που έγινε χωρίς να βρεθεί η βασική αιτία μεταφέρει το σφάλμα σε άλλο σημείο.
Έννοιες: Ίχνη στοίβας: Μια ένδειξη που δείχνει ποιες συναρτήσεις κλήθηκαν με ποια σειρά τη στιγμή του σφάλματος. Minimal repro: Ο απλούστερος, συντομότερος κωδικός/είσοδος που ενεργοποιεί το σφάλμα. Βασική αιτία: Η πραγματική πηγή του προβλήματος, όχι το σύμπτωμα. Δοκιμή παλινδρόμησης: Δοκιμή που διασφαλίζει ότι το ίδιο σφάλμα δεν επαναλαμβάνεται.
Περιγραφή ενός σφάλματος στο AI
Η πιθανότητα η τεχνητή νοημοσύνη να βρει τη βασική αιτία είναι ευθέως ανάλογη με την ποιότητα των πληροφοριών που παρέχετε. Μια καλή περιγραφή σφάλματος περιλαμβάνει: τι προσπαθήσατε να κάνετε, τι περιμένατε, τι συνέβη, το ακριβές κείμενο σφάλματος και ίχνος στοίβας, τον εμπλεκόμενο κώδικα, το περιβάλλον (γλώσσα/έκδοση/OS) και το μικρότερο δείγμα που προκάλεσε το σφάλμα.
- Διευκρινίστε το σύμπτωμα. Με τη μορφή "Αναμενόμενο X, ενημερωμένο Υ".
- Επικολλήστε το πλήρες κείμενο σφάλματος και ίχνος στοίβας. Μην το συντομεύσετε, μην το λογοκρίνετε, αλλά μην σπάσετε τη δομή.
- Δώστε τη μικρότερη αναπαραγωγή. Ελάχιστη είσοδος και κωδικός που ενεργοποιεί το σφάλμα.
- Προσδιορίστε το περιβάλλον. Έκδοση γλώσσας, έκδοση βιβλιοθήκης, περιβάλλον χρόνου εκτέλεσης.
Αποτελεσματική προτροπή περιγραφής σφάλματος: "Κάνω διόρθωση σφαλμάτων. Πληροφορίες:- Τι προσπαθώ να κάνω: [X]- Αναμενόμενη συμπεριφορά: [Y]- Πραγματική συμπεριφορά: [Z]- Πλήρες μήνυμα σφάλματος και ίχνος στοίβας: [επικόλληση]- Περιβάλλον: [γλώσσα/έκδοση, βιβλιοθήκη/έκδοση]- Η πρώτη φορά που εμπλέκεται κώδικας: [Χοντρική με σειρά πιθανότητας και πείτε μου τι έλεγχο να επαληθεύσω για το καθένα».
Στένοντας Ροή από Υπόθεση
Η συστηματική αποσφαλμάτωση είναι η τέχνη της εξάλειψης των δυνατοτήτων μία προς μία. Χρησιμοποιήστε AI για να δημιουργήσετε υποθέσεις και σχεδιάστε το πείραμα για να ελέγξετε κάθε υπόθεση. Στη συνέχεια, εκτελέστε το πείραμα και επιστρέψτε το αποτέλεσμα. Αυτός ο κύκλος είναι πολύ πιο γρήγορος από τη συνήθεια να κάνετε τυχαίες αλλαγές και να σταματάτε, που ονομάζεται «διόρθωση σφαλμάτων κυνηγετικού όπλου».
Προτροπή βοήθειας για δυαδική αναζήτηση (διχοτόμηση): "Αυτό το σφάλμα δεν υπήρχε χθες, υπάρχει σήμερα. Θέλω να μάθω ποια από τις τελευταίες 20 αλλαγές έφερε το σφάλμα με διχοτόμηση. Δώστε μου ένα βήμα προς βήμα σχέδιο: ποιο σημείο να δοκιμάσω, σε ποιο μισό να πάω ανάλογα με το αποτέλεσμα. Επίσης, πείτε μου ακριβώς τι να ελέγξω σε κάθε βήμα."
Προτροπή στρατηγικής εισαγωγής αρχείου καταγραφής: "Δεν μπορώ να βρω το σφάλμα επειδή δεν μπορώ να δω τις ενδιάμεσες τιμές σε αυτήν τη συνάρτηση. Πείτε μου σε ποια σημεία πρέπει να προσθέσω γραμμές καταγραφής που εκτυπώνουν ποιες μεταβλητές. Προσθέστε μια εξήγηση "τι θα μάθω από αυτό το αρχείο καταγραφής" για κάθε αρχείο καταγραφής. Καθορίστε επίσης τις προειδοποιήσεις που θα με εμποδίσουν να καταγράψω εμπιστευτικά δεδομένα."
Συμβουλή: Εάν δεν μπορείτε να επιλύσετε ένα σφάλμα, τις περισσότερες φορές το πρόβλημα είναι κάπου που υποθέσατε εσφαλμένα. Ρωτήστε την AI «ποια υπόθεση μου θα μπορούσε να είναι λάθος;» Το να ρωτάς θα σου σπάσει την τύφλωση. Τα πιο σκληρά λάθη κρύβονται στο σημείο που λέτε "Είμαι σίγουρος ότι αυτό λειτουργεί σωστά".
Αδύναμη προτροπή / Ισχυρή προτροπή
WEAK:"Ο κώδικας μου δίνει ένα σφάλμα, διορθώστε το: [200 γραμμές κώδικα]"(Αποτέλεσμα: Η τεχνητή νοημοσύνη δεν γνωρίζει ποιο είναι το σφάλμα, τι αναμένεται. δίνει γενικές προτάσεις με βάση εικασίες, οι περισσότερες από αυτές είναι άχρηστες.) ΔΥΝΑΤΟ:"Παίρνω NullPointerException. Αναμένεται: η λίστα χρηστών πρέπει να επιστραφεί. Statual to gets. [επικόλληση].Περιβάλλον: Java 17. Ελάχιστη επανάληψη: Συμβαίνει όταν η λίστα χρηστών είναι κενή, αλλά όχι όταν είναι γεμάτη Σχετικές 15 γραμμές: Εξηγήστε τη βασική αιτία και γιατί ενεργοποιείται η κενή λίστα.
Η ισχυρή προτροπή βάζει το σφάλμα στο πλαίσιο: σε αυτή την περίπτωση συμβαίνει (κενή λίστα), οπότε δεν συμβαίνει (πλήρης λίστα). Αυτή η μοναδική ένδειξη ("συμβαίνει όταν είναι άδειο") δείχνει σχεδόν άμεσα τη βασική αιτία. Δεδομένου ότι αυτές οι πληροφορίες δεν είναι διαθέσιμες στο αδύναμο μήνυμα, το AI κάνει μια τυφλή εικασία.
Επαλήθευση της επιδιόρθωσης
Μια επιδιόρθωση είναι μια πραγματική λύση μόνο εάν κάνει τρία πράγματα:
έλεγχος
Ερώτηση
Πώς να επαληθεύσετε
Έχει φύγει το σφάλμα;
Η ίδια είσοδος λειτουργεί τώρα;
Εκτελέστε ξανά το minimal repro
Δεν υπάρχουν νέα σφάλματα;
Έχει χαλάσει κάτι άλλο;
Εκτελέστε ολόκληρη τη δοκιμαστική σουίτα
Δεν θα επαναληφθεί;
Θα εμφανιστεί ξανά το ίδιο σφάλμα;
Προσθήκη δοκιμής παλινδρόμησης για αυτό το σενάριο
Οι διορθώσεις που γίνονται χωρίς να βρεθεί η βασική αιτία συχνά καταστέλλουν το σύμπτωμα. Για παράδειγμα, η παρατήρηση ενός μηδενικού σφάλματος με "παράλειψη εάν είναι μηδενική" καθιστά τον πραγματικό λόγο, "γιατί τα δεδομένα γίνονται μηδενικά;" αόρατο και το σφάλμα επαναλαμβάνεται αλλού.
Μίνι Θήκες
Περίπτωση 1 — Η παγίδα καταστολής των συμπτωμάτων. Μια ομάδα θέτει σε σίγαση ένα περιστασιακό μηδενικό σφάλμα με ένα try-catch. Το σφάλμα εξαφανίζεται αλλά μετά από 2 εβδομάδες τα δεδομένα εμφανίζονται να λείπουν. Ο πραγματικός λόγος είναι ότι μια υπηρεσία επιστρέφει μηδενική κατά το χρονικό όριο. Όταν ρωτάτε την τεχνητή νοημοσύνη «γιατί γίνεται μηδενική;», προκύπτει η βασική αιτία. Η πραγματική επιδιόρθωση διαρκεί 1 ώρα αλλά είναι μόνιμη.
Περίπτωση 2 — Ελάχιστη ισχύς επαναφοράς. Ένας προγραμματιστής δεν μπορεί να διορθώσει ένα σφάλμα που λέει ότι "κολλάει κάθε τόσο". Μειώνει το σφάλμα στη μικρότερη είσοδο με την πρόταση του AI: το πρόβλημα παρουσιάζεται μόνο με ονόματα αρχείων που περιέχουν τουρκικούς χαρακτήρες (σφάλμα κωδικοποίησης). Όταν 300 γραμμές αβεβαιότητας μειωθούν σε 5 γραμμές οριστικής επανάληψης, η λύση γίνεται προφανής.
Περίπτωση 3 — Δοκιμή αντιπαλίνδρομης. Το AI διορθώνει ένα σφάλμα υπολογισμού ημερομηνίας. Ο μηχανικός δεν είναι ικανοποιημένος με αυτό. προσθέτει μια δοκιμή παλινδρόμησης για το λανθασμένο σενάριο (τέλος μήνα, 31 Ιανουαρίου + 1 μήνας). Όταν μια άλλη αλλαγή αγγίζει την ίδια περιοχή 4 μήνες αργότερα, το τεστ γίνεται κόκκινο και το σφάλμα συλλαμβάνεται πριν φτάσει στην παραγωγή.
Συνήθη λάθη
- Σημαίνει «δεν λειτουργεί, διορθώστε το». Χωρίς κείμενο σφάλματος, προσδοκία και repro, το AI εικάζεται.
- Μη δίνοντας το ίχνος στοίβας. Το ίχνος στοίβας συχνά υποδεικνύει άμεσα τη βασική αιτία.
- Συνεχίστε να κάνετε τυχαίες αλλαγές. Πειράματα χωρίς τη δημιουργία μιας υπόθεσης χάνουν χρόνο.
- Καταστολή του συμπτώματος και απώλεια της βασικής αιτίας. Το λάθος ξαναγεννιέται αλλού.
- Μη εξασφάλιση της επιδιόρθωσης με δοκιμή παλινδρόμησης. Το ίδιο σφάλμα επανέρχεται σιωπηλά στο μέλλον.
Συνοπτικά
Ο αποτελεσματικός εντοπισμός σφαλμάτων είναι συστηματικός περιορισμός, όχι εικασία. Η παροχή στο AI του πλήρους κειμένου σφάλματος, του ίχνους στοίβας, της ελάχιστης αναπαραγωγής και των πληροφοριών περιβάλλοντος αυξάνει εκθετικά τις πιθανότητες εύρεσης της βασικής αιτίας. Χρησιμοποιήστε AI για να δημιουργήσετε υποθέσεις και σχεδιάστε το πείραμα για να ελέγξετε κάθε υπόθεση. Εκτελείτε το πείραμα. Σκεφτείτε μια επιδιόρθωση "ολοκληρώθηκε" μόνο όταν δείτε ότι το σφάλμα έχει φύγει, δεν εισάγονται νέα σφάλματα και προστατεύεται με δοκιμή παλινδρόμησης.
Εργασία εφαρμογής
Σκεφτείτε ένα πραγματικό ή τεχνητό σφάλμα. Πρώτα μειώστε το σφάλμα στη μικρότερη αναπαραγωγή (σε ποια είσοδο εμφανίζεται, σε ποια όχι). Χρησιμοποιώντας την προτροπή αποτελεσματικής συνταγής σφαλμάτων, ζητήστε από το AI 3 υποθέσεις βασικής αιτίας και ένα βήμα επαλήθευσης για καθεμία. Βρείτε τη βασική αιτία δοκιμάζοντας τις υποθέσεις μία προς μία, διορθώστε την και, στη συνέχεια, γράψτε και εκτελέστε μια δοκιμή παλινδρόμησης για αυτό το σενάριο για να δείξετε ότι το σφάλμα έχει φύγει και η δοκιμή παρέχει προστασία.
λίστα ελέγχου
- [ ] Διευκρίνισα το σύμπτωμα ως "αναμενόμενο vs συνειδητοποιημένο".
- [ ] Έδωσα το πλήρες κείμενο σφάλματος και το stack trace στο AI.
- [ ] Μείωσα το σφάλμα στη μικρότερη αναπαραγωγή.
- [ ] Δοκιμάζοντας τις υποθέσεις μία προς μία, βρήκα τη βασική αιτία.
- [ ] Αντί να καταστείλω το σύμπτωμα, διόρθωσα τη βασική αιτία.
- [ ] Πρόσθεσα και έτρεξα μια δοκιμή παλινδρόμησης για το ίδιο σφάλμα.