Διαδρομή 02Μάθημα 3 / 6

Χρησιμοποιήστε τα tests ως αποδεικτικά στοιχεία

Επιλέξτε ελέγχους που μπορούν να απορρίψουν λανθασμένη συμπεριφορά. Εξετάστε τα παραγόμενα tests τόσο προσεκτικά όσο και την παραγόμενη υλοποίηση.

Πρακτικό επίπεδο11 minΕλέγχθηκε

Εκδότης Πώς γράφουμε

Ελέγξτε τι κατανοήσατεΈνα παραγόμενο test χρησιμοποιεί mock της συνάρτησης εξουσιοδότησης που επιτρέπει πάντα την πρόσβαση. Τι αποδεικνύει ένα επιτυχές αποτέλεσμα;Κάντε την άσκηση
Ένα παραγόμενο test χρησιμοποιεί mock της συνάρτησης εξουσιοδότησης που επιτρέπει πάντα την πρόσβαση. Τι αποδεικνύει ένα επιτυχές αποτέλεσμα;

Τι θα μάθετε

  • Συνδέστε κάθε σημαντική απαίτηση με έναν ουσιαστικό έλεγχο.
  • Διακρίνετε τα αποδεικτικά στοιχεία από unit, integration και end-to-end tests.
  • Εντοπίστε ένα test που επαναλαμβάνει την ίδια λανθασμένη υπόθεση με την υλοποίηση.

Ξεκινήστε από την απαίτηση

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

Για μια πλασματική εξαγωγή δεδομένων οργανισμού, η κύρια απαίτηση είναι η απομόνωση δεδομένων. Ένας χρήστης του οργανισμού A δεν πρέπει να λαμβάνει εγγραφές του οργανισμού B. Ένα test που ελέγχει μόνο μια επιτυχή λήψη δεν αποδεικνύει αυτή την απαίτηση.

Ζητήστε από τον agent να εξηγήσει τη σχέση ανάμεσα στην απαίτηση και στο assertion. Έτσι εντοπίζονται ευκολότερα περιπτώσεις που λείπουν, πριν μεγαλώσει η σουίτα tests.

Επιλέξτε την κατάλληλη έκταση δοκιμής

Ένα unit test μπορεί να ελέγξει γρήγορα έναν μικρό μετασχηματισμό. Ένα integration test μπορεί να ελέγξει πώς συνεργάζονται τα συστατικά. Ένα end-to-end test μπορεί να ελέγξει μια σημαντική ακολουθία ενεργειών χρήστη μέσα στην εγκατεστημένη ή σε αντιπροσωπευτική εφαρμογή.

Χρησιμοποιήστε τη μικρότερη έκταση που παρέχει τα απαιτούμενα αποδεικτικά στοιχεία. Ένα εργαλείο μορφοποίησης δεν χρειάζεται πλήρες test προγράμματος περιήγησης για κάθε είσοδο. Ένα όριο εξουσιοδότησης μπορεί να χρειάζεται πραγματικό route και πραγματική διαδρομή πρόσβασης στα δεδομένα. Μια κρίσιμη αλληλεπίδραση στο πρόγραμμα περιήγησης χρειάζεται αποδεικτικά στοιχεία για την αποδοσμένη διεπαφή.

ΙσχυρισμόςΠαράδειγμα αποδεικτικού στοιχείου
Η έξοδος CSV κάνει σωστό escaping ενός εισαγωγικούUnit test με εισαγωγικό σε πεδίο
Άλλος οργανισμός δεν μπορεί να διαβάσει την εξαγωγήIntegration test μέσω πραγματικής εξουσιοδότησης
Ένας χρήστης πληκτρολογίου μπορεί να ξεκινήσει την εξαγωγήTest προγράμματος περιήγησης και χειροκίνητος έλεγχος με πληκτρολόγιο
Μια αποτυχημένη εξαγωγή δίνει χρήσιμο σφάλμαΈλεγχος διαδρομής αστοχίας στη σχετική διεπαφή

Κανένα σταθερό ποσοστό τύπων tests δεν ταιριάζει σε κάθε σύστημα. Επιλέξτε με βάση την αστοχία που χρειάζεται να εντοπίσετε και το κόστος συντήρησης του ελέγχου.

Αποφύγετε μια κοινή λανθασμένη υπόθεση

Ένας agent μπορεί να γράψει την υλοποίηση και τα tests από την ίδια παρανόηση. Τα δύο μπορεί να συμφωνούν ενώ η απαίτηση παραμένει ανεκπλήρωτη.

Υποθέστε ότι η υλοποίηση φιλτράρει εγγραφές με βάση το αναγνωριστικό οργανισμού που παρέχεται στο αίτημα. Το test χρησιμοποιεί το ίδιο αναγνωριστικό για τον συνδεδεμένο χρήστη και το αίτημα. Το test περνά. Η περίπτωση που λείπει είναι χρήστης που ζητά το αναγνωριστικό διαφορετικού οργανισμού.

Προσθέστε αυτή την περίπτωση μέσω της πραγματικής έμπιστης ταυτότητας και της διαδρομής εξουσιοδότησης. Ένα mock που επιστρέφει πάντα «επιτρέπεται» δεν μπορεί να αποδείξει απομόνωση μεταξύ tenants. Αποδεικνύει μόνο τη συμπεριφορά μετά από επιτυχή εξουσιοδότηση.

Επαληθεύστε ότι το test μπορεί να αποτύχει

Για γνωστό ελάττωμα, εκτελέστε το νέο regression test στην ελαττωματική έκδοση, σε απομονωμένο branch. Επιβεβαιώστε ότι αποτυγχάνει για τον επιδιωκόμενο λόγο. Έπειτα εφαρμόστε τη διόρθωση και εκτελέστε το ξανά.

Ένα test που αποτυγχάνει επειδή δεν μπορεί να φορτωθεί ένα fixture δεν αποτελεί ακόμη αποδεικτικό στοιχείο για την επιχειρηματική συμπεριφορά. Εξετάστε την αστοχία, όχι μόνο τον κωδικό εξόδου.

Για ευρύτερες αλλαγές, το mutation testing μπορεί να βοηθήσει να αξιολογήσετε αν επιλεγμένες αλλαγές κώδικα προκαλούν αποτυχίες tests. Έχει κόστος και δεν αντικαθιστά την ανασκόπηση απαιτήσεων. Χρησιμοποιήστε το όπου τα πρόσθετα αποδεικτικά στοιχεία στηρίζουν απόφαση με ουσιαστικές συνέπειες.

Κρατήστε τα αποδεικτικά στοιχεία συνδεδεμένα με την αλλαγή

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

Κρατήστε τα tests κατανοητά. Προτιμήστε ρητή προετοιμασία και assertion αντί για ένα μεγάλο helper που κρύβει τη σημαντική συνθήκη. Αφαιρέστε περιττούς ελέγχους όταν αυξάνουν το κόστος συντήρησης χωρίς να εντοπίζουν διαφορετική αστοχία.

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

Κάντε την άσκηση

Επιλέξτε ένα παραγόμενο test. Δηλώστε ποια απαίτηση ελέγχει. Εισαγάγετε προσωρινά το σχετικό ελάττωμα σε απομονωμένο branch. Επιβεβαιώστε ότι το test αποτυγχάνει για τον επιδιωκόμενο λόγο και μετά επαναφέρετε τον κώδικα. Καταγράψτε τι εξακολουθεί να μην καλύπτει το test.

Λήψη φύλλου εργασίας (Markdown)
Ελέγξτε τι κατανοήσατε ↑

Συνεχίστε τη μάθηση

Πηγές και πρόσθετη μελέτη

Σχετικό υλικό από την Taiga

Προηγούμενο μάθημα: Δώστε στον agent χρήσιμο πλαίσιο από το αποθετήριο