Μονάδα 5 / 12

Δοκιμαστική Παραγωγή και Διασφάλιση Ποιότητας

Κέρδη:

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

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

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

Οι δύο όψεις της δοκιμής: Διόρθωση συμπεριφοράς έναντι επαλήθευσης

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

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

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

Βήμα προς βήμα: Γράψτε ισχυρά τεστ με AI

  1. Δώστε τις προδιαγραφές, όχι μόνο τον κωδικό. Εάν προσθέσετε τις πληροφορίες "Αυτή η λειτουργία πρέπει να το κάνει", το AI μπορεί να γράψει τη σωστή προσδοκία. Θα ελέγξει την τρέχουσα συμπεριφορά εάν απλώς παρέχετε τον κωδικό.
  2. Ρωτήστε για edge case. Κενό, μηδενικό, μηδέν, αρνητικό, πολύ μεγάλο, κακή μορφή, ταυτόχρονη χρήση — ρητά διεκδικήστε από την ευτυχισμένη διαδρομή.
  3. Προσδιορίστε το πλαίσιο και το στυλ δοκιμής. "χρησιμοποιήστε pytest", "Arrange-Act-Assert pattern", "άσε κάθε δοκιμή να δοκιμάσει ένα πράγμα" κ.λπ.
  4. Ελέγξτε τις προσδοκίες (βεβαίωση). Συγκρίνετε με την προδιαγραφή που ελέγχει κάθε ισχυρισμός για τη σωστή τιμή.
  5. Κλείσε τα κενά στο πεδίο εφαρμογής. Δώστε υπάρχοντα τεστ και ρωτήστε "ποιοι κλάδοι και ποιες περιπτώσεις δεν έχουν δοκιμαστεί;" σε κάνει να ρωτήσεις? στη συνέχεια επαληθεύστε τις πρόσθετες δοκιμές που παράγονται.

Τρεις Μίνι Θήκες

Περίπτωση 1 — Κάλυψη από 52% έως 85%. Η δοκιμαστική κάλυψη μιας ενότητας υπηρεσιών ήταν 52%. Η ομάδα τροφοδότησε τις υπάρχουσες δοκιμές στο AI, έβαλε να καταγράψει τους μη δοκιμασμένους κλάδους και να δημιουργήσει δοκιμές για αυτούς. Με τον ανθρώπινο έλεγχο, η κάλυψη αυξήθηκε στο 85%. Στη διαδικασία, το AI αποκάλυψε ένα πραγματικό σφάλμα (μια διαδρομή που επέστρεψε τον λάθος κωδικό σφάλματος) σε έναν κλάδο σφαλμάτων που δεν είχε δοκιμαστεί ποτέ πριν.

Περίπτωση 2 — Η παγίδα καθήλωσης ψευδών προσδοκιών. Μια συνάρτηση στρογγυλοποίησης χρημάτων ήταν στην πραγματικότητα λάθος. Αντί να στρογγυλοποιηθεί στο 2,675 στο 2,67, στρογγυλοποιήθηκε στο 2,67 αντί για το 2,68. Το AI κοίταξε τον κώδικα και έγραψε assert round_money(2.675) == 2.67 — παγώνοντας το σφάλμα ως "αληθές". Όταν ο προγραμματιστής διάβασε τις προδιαγραφές, διόρθωσε την προσδοκία και έπιασε το πραγματικό σφάλμα. Η δοκιμή του κανόνα, όχι του κώδικα, έκανε τη διαφορά.

Περίπτωση 3 — Έκρηξη κατάστασης ακμής. Όταν ζητάτε από το AI μόνο "περιπτώσεις άκρων" για μια συνάρτηση εύρους ημερομηνιών. Παρήγαγε 8 περιπτώσεις όπως έναρξη=τέλος, αντίστροφο διάστημα, δίσεκτο έτος 29 Φεβρουαρίου, διαφορετικές ζώνες ώρας και μηδενικό διάστημα. Δύο από αυτά (αντίστροφη απόσταση και δίσεκτο έτος) προκαλούσαν στην πραγματικότητα το σφάλμα. Η μη αυτόματη εξέταση αυτών των περιπτώσεων συχνά παραλείπεται. Η τεχνητή νοημοσύνη έγινε εδώ ένας συνεργάτης «καταιγισμού ιδεών» στην πρώτη περίπτωση.

Τέσσερα αντιγράψιμα πρότυπα

Παραγωγή δοκιμής με βάση τις προδιαγραφές:

Ρόλος: Ένας προγραμματιστής που γράφει δοκιμές. Πλαίσιο: {{pytest/JUnit/Jest...}}. Τι πρέπει να κάνει η συνάρτηση (προδιαγραφή): {{rule}}Γράψτε δοκιμές για την ακόλουθη συνάρτηση. Γράψτε τις προσδοκίες σύμφωνα με τις προδιαγραφές, ΟΧΙ την τρέχουσα έξοδο του κώδικα. Happy path + προσθέστε τουλάχιστον 4 θήκες άκρων. Αφήστε κάθε δοκιμή να δοκιμάσει ένα πράγμα, χρησιμοποιήστε περιγραφικό όνομα. {{λειτουργία}}

Καταιγισμός ιδεών Edge case:

Καταγράψτε περιπτώσεις ακμών/αστοχίας που θα πρέπει να δοκιμαστούν κατά τη δοκιμή αυτής της συνάρτησης (μηδενικό, μηδενικό, σημεία διακοπής, κακή μορφή, ταυτόχρονη εμφάνιση, εξωτερικό σφάλμα). Για κάθε περίπτωση: είσοδος, αναμενόμενη συμπεριφορά. ΜΗΝ γράψετε ακόμα κώδικα, απλώς κάντε λίστα.{{function}}

Ανάλυση κενού κάλυψης:

Ακολουθούν οι λειτουργίες και οι διαθέσιμες δοκιμές. Ποιοι κλάδοι, συνθήκες και περιπτώσεις δεν έχουν δοκιμαστεί; Καταγράψτε τις ελλείψεις και γράψτε νέα τεστ μόνο για τις ελλείψεις. Μην επαναλάβετε τα υπάρχοντα. Συνάρτηση:{{function}}Δοκιμές:{{existing_tests}}

Δοκιμαστικά δεδομένα / δημιουργία εικονικών αντικειμένων:

Δημιουργήστε ρεαλιστικά δεδομένα δοκιμής για δοκιμές {{function/service}}: έγκυρα δείγματα, δείγματα περιγράμματος και μη έγκυρα δείγματα ξεχωριστά. Προτείνετε μια απλή εικονική συμπεριφορά για την εξωτερική εξάρτηση {{X}}. Χρήση αληθινών εμπιστευτικών δεδομένων/PII. Δημιουργήστε πλαστά δεδομένα.

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

Αδύναμο: "Γράψτε μια δοκιμή για αυτήν τη συνάρτηση."
Ισχυρό: "με το pytest. Συνάρτηση apply_discount(σύνολο, ποσοστό) — κανόνας: η έκπτωση πρέπει να είναι 0%–30%, εκτός ορίων πρέπει να ρίχνει ValueError, το αποτέλεσμα πρέπει να στρογγυλοποιείται σε 2 δεκαδικά. Γράψτε τις προσδοκίες σύμφωνα με αυτόν τον ΚΑΝΟΝΑ (όχι με κωδικό). Happy path + αυτές οι ακραίες περιπτώσεις: 0%, 30%, 31% (συνολικά, 0, 31%)"

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

Τύπος δοκιμής

συνεισφορά AI

ανθρώπινος έλεγχος

Καλές δοκιμές οδικών μονάδων

γρήγορος σκελετός

Είναι σωστή η προσδοκία;

Θήκες άκρων

Εκτεταμένος καταιγισμός ιδεών

Καταργήστε τα άσχετα

Συμπλήρωση κενού πεδίου

Βρίσκει κλαδιά που παραλείφθηκαν

Επιβεβαιώστε τη σημασία

Δεδομένα δοκιμής/παρωδία

Παράγει ρεαλιστικό δείγμα

Όχι PII, έλεγχος ρεαλισμού

Οι δοκιμές διαχειρίζονται την ποιότητα, δεν την εγγυώνται

Η υψηλή κάλυψη δοκιμής δίνει εμπιστοσύνη, αλλά μπορεί επίσης να είναι παραπλανητική: 100 τοις εκατό κάλυψη σημαίνει "κάθε γραμμή εκτελέστηκε", όχι "κάθε γραμμή είναι σωστή". Είναι εύκολο να αυξηθεί η κάλυψη με AI. Η πραγματική αξία είναι να γράψετε ουσιαστικές προσδοκίες. Η αξία ενός τεστ είναι η ικανότητά του να σπάει και να σας ειδοποιεί όταν ο κωδικός έχει σπάσει. Αυτός είναι ο λόγος για τον οποίο οι δοκιμές που δημιουργούνται από την τεχνητή νοημοσύνη βασίζονται στην ερώτηση "ο κώδικας σπάει πραγματικά όταν αλλάζει;" Δοκιμάστε το με την ερώτηση. Το να σπάσετε εσκεμμένα μια γραμμή και να δείτε το διάλειμμα δοκιμής (ιδέα μετάλλαξης) είναι απόδειξη ότι το τεστ λειτούργησε.

Συμβουλή: Για να δείτε αν λειτουργεί μια δοκιμή που γράφει η τεχνητή νοημοσύνη, δημιουργήστε ένα μικρό σφάλμα στον κώδικα (π.χ. αλλάξτε το + σε ένα -) και δείτε αν η δοκιμή χαλάει. Εάν δεν σπάσει, αυτή η δοκιμή δεν σας προστατεύει.

Συνήθη λάθη

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

Συνοπτικά

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

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

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

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

  • [ ] Διακρίνω εάν η δοκιμή είναι για να διορθώσει ή να επαληθεύσει τη συμπεριφορά.
  • [ ] Όταν ζητώ μια δοκιμή, δίνω τον κανόνα (προδιαγραφή) που πρέπει να ισχύει και όχι τον κωδικό.
  • [ ] Συγκρίνω κάθε παραγόμενο ισχυρισμό με την προδιαγραφή.
  • [ ] Ζητώ ρητά περιπτώσεις αιχμής και αστοχίας.
  • [ ] Βλέπω την ποσοστιαία κάλυψη ως εργαλείο και όχι ως στόχο.
  • [ ] Δοκιμάζω εάν μια δοκιμή προστατεύει πράγματι με την έγχυση σφαλμάτων.