Κέρδη:
- Δυνατότητα αποτροπής της τεχνητής νοημοσύνης από την αποδοχή της λανθασμένης συμπεριφοράς ως «σωστή» με τον υπολογισμό της αναμενόμενης τιμής σε μοναδιαίες δοκιμές ανεξάρτητα από τον κανόνα αποδοχής
- Δυνατότητα εκτύπωσης γρήγορων, ανεξάρτητων και επαναλαμβανόμενων δοκιμών εφαρμόζοντας αρχές AAA και FIRST και κοροϊδεύοντας τις εξωτερικές εξαρτήσεις
- Δυνατότητα δοκιμής δοκιμών με μετάλλαξη (σπάσιμο κωδικού) και αναγνώριση κώδικα δύσκολα στη δοκιμή ως μυρωδιά σχεδιασμού
Το μεγαλύτερο και ταχύτερο επίπεδο της πυραμίδας δοκιμών είναι η δοκιμή μονάδας — δοκιμή που επαληθεύει μια λειτουργία ή ένα μικρό κομμάτι κώδικα σε απομόνωση από οτιδήποτε άλλο. Χιλιάδες δοκιμές μονάδων εκτελούνται σε δευτερόλεπτα και εντοπίζουν ένα σφάλμα ενώ ο κώδικας βρίσκεται ακόμα στην οθόνη του προγραμματιστή. Η τεχνητή νοημοσύνη (AI) είναι ίσως πιο ικανή στην παραγωγή δοκιμών μονάδας: της δίνεις μια λειτουργία, η τεχνητή νοημοσύνη παράγει δεκάδες δοκιμές. Αλλά αυτή ακριβώς η ευκολία δημιουργεί τη μεγαλύτερη παγίδα: η τεχνητή νοημοσύνη παράγει εύκολα τεστ που «ανάβουν πράσινα αλλά δεν επαληθεύουν τίποτα» ή αποδέχονται την τρέχουσα (ίσως ελαττωματική) συμπεριφορά του κώδικα ως «σωστή». Σε αυτήν την ενότητα θα μάθετε πώς να γράφετε πραγματικά προστατευτικές δοκιμές μονάδας με AI και τη σχέση μεταξύ του ελεγχόμενου κώδικα και του AI.
Ιδιότητες μιας καλής δοκιμής μονάδας: ΠΡΩΤΟ
Οι καλές δοκιμές μονάδων ακολουθούν τις ΠΡΩΤΕΣ αρχές: Γρήγορες, Ανεξάρτητες (οι δοκιμές δεν πρέπει να εξαρτώνται μεταξύ τους), Επαναλαμβανόμενες (επαναλαμβανόμενες — το ίδιο αποτέλεσμα σε οποιοδήποτε περιβάλλον), Αυτοεπικυρούμενο (καθαρό πέρασμα/αποτυχία), Έγκαιρο (στην ώρα). Υπενθυμίστε στον εαυτό σας αυτές τις αρχές όταν πραγματοποιείτε δοκιμές παραγωγής AI. Ζητήστε συγκεκριμένα το τεστ να μην εξαρτάται από τον έξω κόσμο (πραγματική βάση δεδομένων, δίκτυο, ρολόι) για να είναι "ανεξάρτητο" και "επαναλαμβανόμενο".
ΑΑΑ μοτίβο και εκφραστική επιβεβαίωση
Μια δοκιμή στερεάς μονάδας ακολουθεί τη δομή AAA: Τακτοποίηση (προετοιμασία — ρύθμιση εισόδων και εξαρτήσεων), Ενεργοποίηση (εκτέλεση — κλήση της υπό δοκιμή συνάρτησης), Επιβεβαίωση (επικύρωση — συγκρίνετε το αποτέλεσμα με την αναμενόμενη τιμή). Το κρίσιμο είναι ο ισχυρισμός. Το πιο συνηθισμένο λάθος που κάνει η τεχνητή νοημοσύνη είναι η εξαγωγή του ισχυρισμού από την έξοδο του υπό δοκιμή κώδικα - τη λογική "ό,τι επιστρέφει ο κώδικας είναι αληθινό". Αυτό κάνει το τεστ χωρίς νόημα. Ο σωστός τρόπος είναι να προσδιορίσετε την αναμενόμενη τιμή ανεξάρτητα (από τα κριτήρια αποδοχής, υπολογίστε την χειροκίνητα).
Προσοχή: Εάν πείτε στο AI "γράψτε μια δοκιμή για αυτήν τη συνάρτηση", το AI μπορεί να εκτελέσει τη συνάρτηση και να γράψει την έξοδο της ως "αναμενόμενη". Αυτό το τεστ περνάει ακόμα και αν η συνάρτηση είναι ψευδής. Αντίθετα, πείτε "υπολογίζετε τα αναμενόμενα αποτελέσματα σύμφωνα με αυτούς τους κανόνες, μην αναφέρετε την τρέχουσα έξοδο της συνάρτησης".
Κοροϊδίες, στελέχη και εξαρτήσεις
Η δοκιμή μονάδας απαιτεί απομόνωση. Εάν η συνάρτησή σας εξαρτάται από μια βάση δεδομένων ή ένα API, αντικαθίστανται από εικονικά αντικείμενα (ψευδή/στέλωμα — ένα ελεγχόμενο, εικονικό υποκατάστατο για την πραγματική εξάρτηση) στη δοκιμή. Αυτό καθιστά τη δοκιμή γρήγορη, ανεξάρτητη και αναπαραγώγιμη. Το AI μπορεί να παράγει εικονική εγκατάσταση. Αλλά προσέξτε την υπερβολική κοροϊδία: αν κοροϊδεύετε τα πάντα, το τεστ θα επαληθεύσει μόνο «τι επιστρέφει η κοροϊδία», όχι την πραγματική λογική. Ισορροπία: μιμηθείτε τον έξω κόσμο, εκτελέστε την πραγματική λογική υπό δοκιμή.
Δοκιμαστικότητα και AI
Υπάρχει μια ενδιαφέρουσα ανατροφοδότηση: ο κώδικας που είναι δύσκολο να δοκιμαστεί είναι συχνά κακώς σχεδιασμένος κώδικας. Εάν το AI έχει πρόβλημα να γράψει δοκιμές σε μια συνάρτηση (πάρα πολλές εξαρτήσεις, κρυφή παγκόσμια κατάσταση, παρενέργειες), αυτό είναι μια μυρωδιά σχεδιασμού. Το να ρωτήσετε την τεχνητή νοημοσύνη «πώς θα αναμορφώνατε αυτόν τον κώδικα για να τον κάνετε ελεγχόμενο» οδηγεί σε καλύτερη δοκιμή και καλύτερο κώδικα.
Παραμετροποιημένες δοκιμές και ποικιλομορφία δεδομένων
Το να γράφεις ένα ξεχωριστό τεστ κάθε φορά για να επαληθεύεις τον ίδιο κανόνα με διαφορετικές εισόδους είναι κουραστικό και δύσκολο να διατηρηθεί. Η παραμετροποιημένη δοκιμή - μια δομή που εκτελεί επανειλημμένα την ίδια λογική δοκιμής σε μια λίστα εισόδων και αναμενόμενων αποτελεσμάτων - εξαλείφει αυτήν την επανάληψη: ένα μόνο σώμα δοκιμής τροφοδοτείται με δεκάδες ζεύγη εισόδου. Η τεχνητή νοημοσύνη είναι πολύ αποτελεσματική στην παραγωγή αυτών των πινάκων αναμενόμενων αποτελεσμάτων όταν της δίνετε τους κανόνες αποδοχής. Συγκεκριμένα, καταγράφει συστηματικά τις οριακές τιμές και τις τάξεις ισοδυναμίας.
Υπάρχει όμως και εδώ μια παγίδα: το AI τείνει να εξάγει τα αναμενόμενα αποτελέσματα στον πίνακα που δημιουργείται από τον υπό δοκιμή κώδικα. Αυτό το σφάλμα είναι ακόμη πιο επικίνδυνο στις παραμετροποιημένες δοκιμές, επειδή μια μόνο εσφαλμένη λογική ακυρώνει δεκάδες γραμμές. Επομένως, η στήλη του αναμενόμενου αποτελέσματος να υπολογίζεται πάντα ανεξάρτητα σύμφωνα με τον κανόνα αποδοχής και να επικυρώνετε με μη αυτόματο τρόπο τουλάχιστον μερικές σειρές. Ζητήστε επίσης μια στήλη περιγραφής "τι αντιπροσωπεύει κάθε σειρά"? Έτσι, όταν μια σειρά σπάει, βλέπετε αμέσως ποια κατάσταση έχει σπάσει.
Συμβουλή: Προσθέστε σκόπιμα μια «σειρά παγίδας» στον παραμετροποιημένο πίνακα δοκιμών — δηλαδή, πληκτρολογήστε εσφαλμένα το αποτέλεσμα. Εάν αυτή η γραμμή δεν γίνει κόκκινη όταν εκτελείτε τη δοκιμή, η δοκιμή σας δεν επαληθεύει στην πραγματικότητα αυτήν την κατάσταση. Αυτός είναι ένας γρήγορος έλεγχος μακέτας.
Αδύναμη προτροπή / Ισχυρή προτροπή
Αδύναμο: "Γράψτε μια δοκιμή μονάδας για αυτήν τη συνάρτηση."
Ισχυρό: Γράψτε δοκιμές μονάδας [γλώσσας/πλαισίου] για τη συνάρτηση "taxCalculate(amount, rate). Κανόνας αποδοχής: αποτέλεσμα = ποσό * ποσοστό, στρογγυλοποιημένο σε 2 δεκαδικά ψηφία. Το αρνητικό ποσό ή το ποσοστό εμφανίζει σφάλμα. Επιστρέφει 0 εάν το ποσοστό είναι 0. Χρησιμοποιήστε τη δομή AAA. Υπολογίστε μη αυτόματα τις αναμενόμενες τιμές σύμφωνα με ΑΥΤΟΥΣ κανόνες. Μεγάλο, στρογγυλό προς δεκαδικό ψηφίο.
Ισχυρή προτροπή. Δίνει τον κανόνα αποδοχής, την ανεξάρτητη προσδοκία αναμενόμενης αξίας, τη δομή και τις ακραίες περιπτώσεις. Έτσι, το τεστ γίνεται ο θεματοφύλακας του κανόνα και όχι ο καθρέφτης του κώδικα.
Πίνακας ποιότητας δοκιμής μονάδας
σύμπτωμα
Κακή δοκιμή (ψεύτικη εμπιστοσύνη)
καλό τεστ
ισχυρίζονται
Κανένα ή "μη μηδενικό"
Αναμενόμενη συγκεκριμένη αξία
Αναμενόμενη πηγή αξίας
Έξοδος της συνάρτησης
Κανόνας αποδοχής / χειροκίνητος υπολογισμός
εθισμός
Πραγματικό DB/δίκτυο/ώρα
Μονωμένο με μακέτα/στέλο
θήκη άκρης
Μόνο χαρούμενος δρόμος
όριο, αρνητικό, σφάλμα
Όταν σπάσεις τον κωδικό
παραμένει πράσινο
γίνεται κόκκινο
Όνομα
Δοκιμή 1, μέθοδος δοκιμής
περιγράφει τον κανόνα που επιβεβαιώνει
Τέσσερα πρότυπα με δυνατότητα αντιγραφής
1) Δοκιμή μονάδας βάσει κανόνων:
Ο ρόλος σας: ανώτερος μηχανικός δοκιμών λογισμικού. Γράψτε μια δοκιμή μονάδας για την ακόλουθη συνάρτηση με [γλώσσα/πλαίσιο]: [υπογραφή]. Κανόνες αποδοχής: [κανόνες].- Χρησιμοποιήστε δομή ΑΑΑ.- Υπολογίστε μη αυτόματα τις αναμενόμενες τιμές σύμφωνα με ΑΥΤΟΥΣ κανόνες. ΜΗΝ αναφέρετε την τρέχουσα έξοδο της λειτουργίας. - Καλύψτε το όριο, το αρνητικό, το σφάλμα και την ευτυχισμένη διαδρομή με ξεχωριστές δοκιμές. - Αφήστε κάθε όνομα δοκιμής να περιγράφει τον κανόνα που επαληθεύει. - Κλείστε τις εξωτερικές εξαρτήσεις. Κάντε την πραγματική λογική να λειτουργήσει.
2) Έλεγχος αντίστασης μετάλλαξης:
Ελέγξτε αυτές τις δοκιμές μονάδας. Καταγράψτε 5 μικρές τροποποιήσεις που θα μπορούσα να κάνω στον υπό δοκιμή κώδικα (a - αντί για +, a >= αντί για >, μια μετατόπιση ορίων) και πείτε μου για κάθε ένα ΠΟΙΟ από αυτά τα τεστ θα γίνει κόκκινο; Εάν δεν επιστραφεί κανένα, η δοκιμή είναι ανεπαρκής. Κωδικός + δοκιμές: [επικόλληση]
3) Ανασκόπηση δυνατότητας δοκιμής:
Γιατί είναι δύσκολο να γράψετε μια δοκιμή μονάδας για αυτήν τη λειτουργία; Κρυφός εθισμός, παγκόσμια θέση, παρενέργειες, υπάρχουν πολλές ευθύνες; Προτείνετε ελάχιστη ανακατασκευή για να είναι ελεγχόμενη. μην αλλάξεις συμπεριφορά. Κωδικός: [επικόλληση]
4) Ημιτελής ολοκλήρωση σεναρίου:
Δίνονται οι ακόλουθες λειτουργίες και οι διαθέσιμες δοκιμές. Καταγράψτε ποια συμπεριφορά/περίπτωση άκρης δεν έχει δοκιμαστεί ΠΟΤΕ (κενό πεδίου) και προσθέστε μια δοκιμή για καθεμία. Συνάρτηση+δοκιμές: [επικόλληση]
τρεις μίνι θήκες
Περίπτωση 1 — Δοκιμή αντικατοπτρισμού του κώδικα. Ένας προγραμματιστής ζήτησε από το AI να γράψει μια δοκιμή για τη λειτουργία στρογγυλοποίησης. 10 δοκιμές ήταν πράσινες. Στην πραγματικότητα, η συνάρτηση στρογγυλοποιούσε προς τη λάθος κατεύθυνση, αλλά το AI είχε πάρει τις αναμενόμενες τιμές από την έξοδο της συνάρτησης, επομένως οι δοκιμές θεώρησαν το σφάλμα "αληθές". Όταν οι αναμενόμενες τιμές υπολογίστηκαν χειροκίνητα με το πρότυπο "οδηγούμενο από κανόνες", 4 δοκιμές έγιναν κόκκινες και αποκαλύφθηκε το πραγματικό σφάλμα.
Περίπτωση 2 — Η τιμή του ελέγχου μετάλλαξης. Μία ομάδα βασίστηκε σε 45 δοκιμές μονάδων. Δοκίμασε 20 μικρές τροποποιήσεις στον κώδικα με έναν "έλεγχο ευρωστίας μετάλλαξης". Οι δοκιμές έπιασαν μόνο 11 από αυτούς. Οι υπόλοιπες 9 διαταραχές πέρασαν αθόρυβα. Η ομάδα ενίσχυσε τα αδύναμα τεστ. Ένα πραγματικό σφάλμα υπολογισμού εντοπίστηκε από αυτές τις βελτιωμένες δοκιμές στην επόμενη έκδοση.
Περίπτωση 3 — Η μη ελεγχόμενη είναι μια μυρωδιά σχεδιασμού. Το AI δεν μπορούσε να γράψει δοκιμές για μια συνάρτηση παραγγελίας, χρειαζόταν συνεχώς την πραγματική βάση δεδομένων. Το πρότυπο "επισκόπηση δυνατότητας δοκιμής" έδειξε ότι η συνάρτηση ενσωματώνει πρόσβαση στη βάση δεδομένων. Όταν αφαιρέθηκε η ένεση εξάρτησης, μπορούσαν να γραφτούν δοκιμές και ο κωδικός έγινε πιο καθαρός.
Συνήθη λάθη
- Εξαγωγή της αναμενόμενης τιμής από τον κώδικα. Το AI δέχεται την έξοδο λειτουργίας ως "σωστή". δοκιμή που επιβεβαιώνει τον ελαττωματικό κωδικό.
- Δοκιμή χωρίς ισχυρισμό ή με ασήμαντο ισχυρισμό. "Δεν έβαλε λάθος, πέρασε" λογική? Δεν επιβεβαιώνει τίποτα.
- Ακραία κοροϊδία. Κοροϊδεύοντας τα πάντα και δοκιμάζοντας μόνο αυτό που επιστρέφει η παρωδία. η πραγματική λογική δεν δοκιμάζεται.
- Μόνο ο ευτυχισμένος δρόμος. Παράκαμψη οριακών, αρνητικών και καταστάσεων σφάλματος.
- Δεν δοκιμάζεται σπάζοντας τον κώδικα. Εμπιστοσύνη στο πράσινο χωρίς έλεγχο για μετάλλαξη.
- Αγνοώντας τη μη ελεγχόμενη. Δεν αναγνωρίζουμε και δεν διορθώνουμε τον κακό σχεδιασμό αντί να πιέζουμε σκληρές δοκιμές.
Συνοπτικά
Οι δοκιμές μονάδων είναι το ταχύτερο και μεγαλύτερο στρώμα της πυραμίδας δοκιμής. Πιάνει το λάθος την πιο φθηνή στιγμή. Η τεχνητή νοημοσύνη είναι πολύ ικανή να παράγει δοκιμές μονάδων, αλλά η μεγαλύτερη παγίδα του είναι να γράφει δοκιμές που θεωρούν τη λανθασμένη συμπεριφορά ως «σωστή» εξάγοντας την αναμενόμενη τιμή από τον ίδιο τον κώδικα. Λύση: δώστε τους κανόνες αποδοχής, υπολογίστε τις αναμενόμενες τιμές με μη αυτόματο τρόπο, εφαρμόστε τις αρχές AAA και FIRST, κοροϊδέψτε τον έξω κόσμο και εκτελέστε την πραγματική λογική και δοκιμάστε κάθε δοκιμή με μετάλλαξη (σπάζοντας τον κώδικα). Ο κώδικας που είναι δύσκολο να δοκιμαστεί είναι ένα σημάδι σχεδιασμού που χρειάζεται επιδιόρθωση.
Εργασία εφαρμογής
Επιλέξτε μια συνάρτηση που περιέχει έναν επιχειρηματικό κανόνα από το δικό σας έργο. Γράψτε κανόνες αποδοχής και ζητήστε από το AI να γράψει δοκιμές με το πρότυπο «δοκιμή μονάδας βάσει κανόνων». Να υπολογίσετε τις αναμενόμενες τιμές με μη αυτόματο τρόπο. Στη συνέχεια, εφαρμόστε τον «έλεγχο ευρωστίας μετάλλαξης»: κάντε τουλάχιστον 5 μικρές διακοπές στον κώδικα και μετρήστε πόσες δοκιμές γίνονται κόκκινες. Προσθήκη νέας δοκιμής για αδιευκρίνιστες διαφθορές. Αναφέρετε πόσες διακοπές εντοπίστηκαν (όπως η βαθμολογία μετάλλαξης).
λίστα ελέγχου
- [ ] Έδωσα τους κανόνες αποδοχής και υπολόγισα τις αναμενόμενες τιμές με μη αυτόματο τρόπο.
- [ ] Βεβαιώθηκα ότι οι δοκιμές δεν άντλησαν την αναμενόμενη τιμή από τον κωδικό.
- [ ] Έχω καθιερώσει ανεξάρτητες δοκιμές ακολουθώντας τις οδηγίες AAA και FIRST.
- [ ] Χλεύασα τις εξωτερικές εξαρτήσεις και έτρεξα την πραγματική λογική.
- [ ] Κάλυψα περιπτώσεις ορίων, αρνητικών και σφαλμάτων.
- [ ] Σπάζοντας τον κώδικα (μετάλλαξη) απέδειξα ότι τα τεστ όντως προστατεύουν.