Τι είναι το Module Testing; Ορισμός, Παραδείγματα
⚡ Έξυπνη Σύνοψη
Ο έλεγχος των ενοτήτων ελέγχει μεμονωμένα υποπρογράμματα, υπορουτίνες, κλάσεις και διαδικασίες και όχι το συναρμολογημένο πρόγραμμα, επομένως τα ελαττώματα εμφανίζονται μέσα σε ένα μικρό, καλά κατανοητό μπλοκ κώδικα όπου ο εντοπισμός και η επιδιόρθωσή τους είναι φθηνός.

Τι είναι το Module Testing;
Δοκιμή ενότητας είναι ένας τύπος δοκιμής λογισμικού που ελέγχει μεμονωμένα υποπρογράμματα, υπορουτίνες, κλάσεις ή διαδικασίες σε ένα πρόγραμμα. Αντί να δοκιμάζεται ολόκληρο το πρόγραμμα λογισμικού ταυτόχρονα, η δοκιμή ενοτήτων συνιστά τη δοκιμή των μικρότερων δομικών στοιχείων του προγράμματος.
Ο έλεγχος των μονάδων είναι σε μεγάλο βαθμό προσανατολισμένος στο λευκό κουτί. Ο στόχος του ελέγχου των μονάδων δεν είναι να καταδείξει την ορθή λειτουργία της μονάδας, αλλά να καταδείξει την παρουσία ενός σφάλματος σε αυτήν. Αυτή η αντιστροφή έχει σημασία: μια εκτέλεση που δεν βρίσκει τίποτα δεν έχει επιβεβαιώσει πολύ λίγα, ενώ μια εκτέλεση που αποκαλύπτει ένα ελάττωμα έχει κάνει τη δουλειά της.
Η δοκιμή σε επίπεδο ενότητας επιτρέπει επίσης την εισαγωγή παραλληλισμού στη διαδικασία δοκιμής, επειδή δημιουργεί την ευκαιρία να δοκιμάσετε πολλαπλές ενότητες ταυτόχρονα αντί να περιμένετε μια πλήρη κατασκευή.
Γιατί να κάνετε Δοκιμή Ενοτήτων
Συνιστάται η δοκιμή μονάδων επειδή αλλάζει τα οικονομικά της ανίχνευσης ελαττωμάτων.
- Η πιθανότητα εντοπισμού σφαλμάτων ή bugs σε μικρότερα τμήματα ενός προγράμματος αυξάνεται.
- Πολλαπλές ενότητες μπορούν να δοκιμαστούν ταυτόχρονα και επομένως η προσέγγιση υποστηρίζει παράλληλες δοκιμές.
- Η πολυπλοκότητα των δοκιμών μπορεί να αντιμετωπιστεί εύκολα, καθώς κάθε ενότητα εξετάζεται ξεχωριστά.
- Ένα ελάττωμα που εντοπίστηκε μέσα σε μία ενότητα είναι tracείναι εφικτό σε μια μικρή ποσότητα κώδικα, επομένως ο χρόνος εντοπισμού σφαλμάτων μειώνεται απότομα.
Πώς να κάνετε Δοκιμή Ενοτήτων;
σχεδιάζοντας ένα περίπτωση δοκιμής είναι το σημαντικό τμήμα του ελέγχου μονάδων. Κατά τον σχεδιασμό περιπτώσεων δοκιμών για μια δοκιμή μονάδας, ένας ελεγκτής πρέπει να λάβει υπόψη δύο πράγματα.
- Προδιαγραφές για τη μονάδα
- Ο πηγαίος κώδικας της ενότητας
Αναλύστε τη λογική της ενότητας χρησιμοποιώντας ένα ή περισσότερα από τα λευκό κουτί μεθόδους και στη συνέχεια συμπληρώνουν αυτές τις δοκιμαστικές περιπτώσεις εφαρμόζοντας μαύρο κουτί μεθόδους στις προδιαγραφές της ενότητας. Οι ρεαλιστικές τιμές έχουν την ίδια σημασία με τις επιλεγμένες διαδρομές, επομένως προετοιμάστε το δεδομένα δοκιμής παράλληλα με τις υποθέσεις και όχι εκ των υστέρων.
Μόλις σχεδιαστούν οι δοκιμαστικές περιπτώσεις, το επόμενο βήμα είναι ο συνδυασμός των ενοτήτων για τη δοκιμή. Η μέθοδος που χρησιμοποιείται είναι είτε μια οριακό είτε για μη αυξητικός μέθοδος.
- Μη σταδιακή μέθοδος — όλες οι ενότητες δοκιμάζονται ανεξάρτητα. Αρχικά συνδυάζει όλες τις ενότητες και στη συνέχεια δοκιμάζει ολόκληρο το πρόγραμμα.
- Αυξητική μέθοδος — κάθε ενότητα δοκιμάζεται πρώτα και στη συνέχεια προστίθεται σταδιακά στη συλλογή που έχει υποβληθεί σε δοκιμή. Πραγματοποιεί μια σταδιακή επανάληψη της δοκιμής.
- Στο πλαίσιο των σταδιακών δοκιμών υπάρχουν δύο προσεγγίσεις, από πάνω προς τα κάτω και από κάτω προς τα πάνω δοκιμών.
- Για την εκτέλεση της ενότητας με τα επιλεγμένα δεδομένα, απαιτείται ένας οδηγός για την παροχή των δεδομένων δοκιμής, την παρακολούθηση της εκτέλεσης και την καταγραφή των αποτελεσμάτων.
Η επιλογή μεταξύ των δύο μεθόδων είναι μια αντιστάθμιση μεταξύ της προσπάθειας εγκατάστασης και της διαγνωστικότητας.
| Άποψη | Αυξητική μέθοδος | Μη σταδιακή μέθοδος |
| Συνδυασμός | Μία ενότητα κάθε φορά, προστίθεται σε μια δοκιμασμένη συλλογή | Όλες οι ενότητες συνδυάστηκαν και στη συνέχεια δοκιμάστηκαν μαζί |
| Απαιτείται σκαλωσιά | Περισσότεροι οδηγοί και stubs, γραμμένοι σταδιακά | Λιγότερες διπλές δοκιμές, καθώς υπάρχουν πραγματικές ενότητες |
| Λανθασμένη απομόνωση | Ισχυρό — μια βλάβη υποδεικνύει την ενότητα που μόλις προστέθηκε | Αδύναμο — μια αποτυχία θα μπορούσε να προέλθει από οπουδήποτε |
| κατάλληλο για | Μεγάλες κατασκευές με πολλές αλληλεπιδρώσες ενότητες | Μικρά προγράμματα με λίγες ενότητες και χαμηλή σύνδεση |
Οδηγοί και Stub σε Δοκιμές Μονάδων
Ο προαναφερθείς οδηγός είναι το μισό ενός ζεύγους. Επειδή μια μονάδα υπό δοκιμή σπάνια βρίσκεται στην κορυφή ή στο κάτω μέρος της αλυσίδας κλήσεων, οι δοκιμαστές αντικαθιστούν με εικονικό κώδικα ό,τι λείπει εκατέρωθεν αυτής.
- Οδηγός — αντικαθιστά την καλούσα ενότητα πάνω από αυτήν που βρίσκεται υπό δοκιμή. Παρέχει τα δεδομένα δοκιμής, καλεί την ενότητα, παρακολουθεί την εκτέλεση και καταγράφει τα αποτελέσματα. Η δοκιμή από κάτω προς τα πάνω εξαρτάται από τους οδηγούς, επειδή οι κατώτερες ενότητες είναι έτοιμες πριν από τις υψηλότερες.
- Στέλεχος — αντικαθιστά μια καλούμενη ενότητα κάτω από αυτήν που βρίσκεται υπό δοκιμή. Δέχεται την κλήση και επιστρέφει μια σταθερή, γνωστή απόκριση, ώστε η ενότητα που βρίσκεται υπό δοκιμή να μπορεί να ολοκληρώσει τη διαδρομή της. Η δοκιμή από πάνω προς τα κάτω εξαρτάται από τα stubs, επειδή οι υψηλότερες ενότητες είναι έτοιμες πρώτες.
Μια επεξεργασμένη υπόθεση καθιστά τη σύζευξη συγκεκριμένη. Εάν μια ενότητα υπολογισμού πληρωμής ολοκληρωθεί ενώ η οθόνη ολοκλήρωσης αγοράς που την καλεί δεν είναι, ένας οδηγός τροφοδοτεί τη ενότητα με ένα σύνολο συνόλων παραγγελιών και καταγράφει τι επιστρέφεται. Εάν η υπηρεσία αναζήτησης φόρων που καλεί η ενότητα είναι επίσης ολοκληρωμένη, ένα απόκομμα επιστρέφει έναν σταθερό φορολογικό συντελεστή, επομένως ο υπολογισμός εξακολουθεί να εκτελείται. Κανένα κομμάτι της σκαλωσιάς δεν αποστέλλεται. Και τα δύο απορρίπτονται μόλις φτάσουν οι πραγματικές ενότητες, γι' αυτό και η παρερμηνεία των δοκιμών διπλασιασμού αναφέρεται αργότερα ως επαναλαμβανόμενη πρόκληση.
Παραδείγματα Συμβουλών για Δοκιμή Ενοτήτων
Ακολουθούν μερικές συμβουλές που πρέπει να λάβετε υπόψη πριν από την εκτέλεση δοκιμών ενότητας.
- RevΕξετάστε τις δοκιμαστικές περιπτώσεις πριν τις χρησιμοποιήσετε.
- Αποφύγετε τη σύγχυση σχετικά με την πηγή των αποκλίσεων.
- Χρησιμοποιήστε αυτοματοποιημένα εργαλεία δοκιμών.
- Εξετάστε τις μεταβλητές που θα έπρεπε να παραμείνουν αμετάβλητες.
- Εναλλάξτε τις ενότητες μεταξύ των δοκιμαστών για να αποφύγετε τους αυτοέλεγχους.
- Επαναχρησιμοποιήστε τις δοκιμαστικές περιπτώσεις.
Η πέμπτη συμβουλή έχει μεγαλύτερο βάρος από ό,τι υποδηλώνει το μέγεθός της. Ένας προγραμματιστής που δοκιμάζει μόνο την ενότητα που μόλις γράφτηκε επαναλαμβάνει τις ίδιες υποθέσεις που προκάλεσαν το ελάττωμα, επομένως η εναλλαγή ενοτήτων μεταξύ των ατόμων είναι ένα από τα φθηνότερα οφέλη ποιότητας που διατίθενται.
Δοκιμή μονάδας έναντι δοκιμής ενότητας
Οι δύο όροι χρησιμοποιούνται εναλλακτικά σε πολλές ομάδες, ωστόσο η συγγραφή και το πεδίο εφαρμογής διαφέρουν.
| Δοκιμή ενότητας | Δοκιμή μονάδας |
| Οι δοκιμές ενότητας είναι μια συλλογή δοκιμών που γράφτηκαν από έναν υπεύθυνο δοκιμών μετά την εγγραφή κάποιου κώδικα από έναν προγραμματιστή | Δοκιμές μονάδας είναι μια συλλογή δοκιμών που γράφονται από έναν προγραμματιστή κατά τη διάρκεια της διαδικασίας ανάπτυξης λογισμικού |
| Οι δοκιμές ενότητας μπορεί να περιλαμβάνουν τον συνδυασμό των δοκιμών ενότητας | Η δοκιμή μονάδων μπορεί να δοκιμάσει μονάδες μεμονωμένα. |
Δοκιμή ενότητας έναντι δοκιμής στοιχείων έναντι δοκιμής ολοκλήρωσης
Η δοκιμή μονάδων βρίσκεται επίσης δίπλα σε δύο γειτονικά επίπεδα που είναι εύκολο να συγχέονται με αυτήν. Ο πίνακας τα χωρίζει με βάση το τι υπόκειται σε δοκιμή και ποιος το εκτελεί συνήθως.
| Άποψη | Δοκιμή ενότητας | Δοκιμή εξαρτημάτων | Δοκιμή ολοκλήρωσης |
| Υπό δοκιμή | Ένα υποπρόγραμμα, κλάση ή διαδικασία | Ένα αυτόνομο στοιχείο με τις άμεσες εξαρτήσεις του | Οι διεπαφές μεταξύ συνδυασμένων ενοτήτων |
| Συνήθης ιδιοκτήτης | Ελεγκτής, αφού γραφτεί ο κώδικας | Δοκιμαστής | Δοκιμαστής ολοκλήρωσης |
| Σκαλωσιά | Οδηγοί και αποκόμματα | Stubs για εξωτερικές εξαρτήσεις | Σταδιακά λιγότερα διπλά τεστ |
| Ελάττωμα αποκαλυφθέν | Λογικό σφάλμα μέσα στην ενότητα | Σφάλμα συμπεριφοράς στο στοιχείο | Σφάλμα διεπαφής και διέλευσης δεδομένων |
Σε καθημερινή χρήση δοκιμή εξαρτημάτων και η δοκιμή μονάδων αντιμετωπίζονται συχνά ως η ίδια δραστηριότητα, ενώ δοκιμή ολοκλήρωσης ξεκινά μόνο αφού οι επιμέρους ενότητες έχουν περάσει η καθεμία ξεχωριστά.
Προκλήσεις στη Δοκιμή Ενοτήτων
Αυτές είναι οι προκλήσεις που αντιμετωπίζουν οι ομάδες συχνότερα όταν εισάγονται οι δοκιμές ενοτήτων.
- Η μη σταδιακή δοκιμή απαιτεί περισσότερη δουλειά — ο συνδυασμός όλων των στοιχείων πρώτα σημαίνει ότι μια μεμονωμένη αποτυχία μπορεί να στείλει τους δοκιμαστές πίσω σε ολόκληρο το πρόγραμμα.
- Το τεστ παρεξήγησης διπλασιάζεται — ένα stub που επιστρέφει μια μη ρεαλιστική τιμή παράγει μια πράσινη εκτέλεση που δεν αποδεικνύει τίποτα.
- Δοκιμές εντοπισμού σφαλμάτων συχνά — ο κώδικας σκαλωσιάς φέρει τα δικά του ελαττώματα και ο χρόνος που αφιερώνεται στην επιδιόρθωση ενός προγράμματος οδήγησης είναι χρόνος που δεν αφιερώνεται στον έλεγχο της ενότητας.
- Πρέπει να κατανοήσετε τον κώδικα — ο προσανατολισμός του λευκού κουτιού σημαίνει ότι ένας δοκιμαστής που δεν μπορεί να διαβάσει την ενότητα δεν μπορεί να σχεδιάσει ουσιαστικές περιπτώσεις για αυτήν.
