Τι είναι το Unit Testing;

Τι είναι το Unit Testing;

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

Στο SDLC, STLC, V Model, η δοκιμή μονάδας είναι το πρώτο επίπεδο δοκιμής που πραγματοποιείται πριν από τη δοκιμή ολοκλήρωσης. Η δοκιμή μονάδας είναι ένα λευκόBox τεχνική δοκιμής που συνήθως εκτελείται από τον προγραμματιστή. Αν και, σε έναν πρακτικό κόσμο λόγω χρονικής δυσκολίας ή απροθυμίας των προγραμματιστών σε δοκιμές, οι μηχανικοί QA κάνουν επίσης δοκιμές μονάδων.

Τι είναι ο έλεγχος μονάδας

Εξήγηση βίντεο δοκιμής μονάδας

Γιατί να εκτελέσετε Δοκιμές Μονάδας;

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

Ακολουθούν οι βασικοί λόγοι για την εκτέλεση δοκιμών μονάδας στη μηχανική λογισμικού:

Επίπεδα δοκιμής μονάδων
Επίπεδα δοκιμής μονάδων
  1. Οι δοκιμές μονάδων βοηθούν στη διόρθωση σφαλμάτων νωρίς στον κύκλο ανάπτυξης και στην εξοικονόμηση κόστους.
  2. Βοηθά τους προγραμματιστές να κατανοήσουν τη βάση του κώδικα δοκιμής και τους επιτρέπει να κάνουν αλλαγές γρήγορα
  3. Οι καλές δοκιμές μονάδων χρησιμεύουν ως τεκμηρίωση έργου
  4. Οι δοκιμές μονάδων βοηθούν στην επαναχρησιμοποίηση κώδικα. Μεταφέρετε και τους δύο κωδικούς σας και τις δοκιμές σας στο νέο σας έργο. Τροποποιήστε τον κώδικα μέχρι να τρέξουν ξανά οι δοκιμές.

Πώς να εκτελέσετε τη δοκιμή μονάδας

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

Η δοκιμή μονάδας είναι δύο τύπων

  • Χειροκίνητο
  • Αυτοματοποιημένη

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

Κάτω από την αυτοματοποιημένη προσέγγιση-

  • Ένας προγραμματιστής γράφει μια ενότητα κώδικα στην εφαρμογή μόνο για να δοκιμάσει τη λειτουργία. Αργότερα θα σχολίαζαν και τελικά θα αφαιρούσαν τον κωδικό δοκιμής όταν αναπτυχθεί η εφαρμογή.
  • Ένας προγραμματιστής θα μπορούσε επίσης να απομονώσει τη λειτουργία για να τη δοκιμάσει πιο αυστηρά. Αυτή είναι μια πιο ενδελεχής πρακτική δοκιμής μονάδας που περιλαμβάνει αντιγραφή και επικόλληση κώδικα στο δικό της περιβάλλον δοκιμών παρά στο φυσικό του περιβάλλον. Η απομόνωση του κώδικα βοηθά στην αποκάλυψη περιττών εξαρτήσεων μεταξύ του κώδικα που ελέγχεται και άλλων μονάδων ή χώρων δεδομένων στο προϊόν. Αυτές οι εξαρτήσεις μπορούν στη συνέχεια να εξαλειφθούν.
  • Ένας κωδικοποιητής χρησιμοποιεί γενικά ένα UnitTest Framework για την ανάπτυξη αυτοματοποιημένων δοκιμών. Χρησιμοποιώντας ένα πλαίσιο αυτοματισμού, ο προγραμματιστής κωδικοποιεί κριτήρια στη δοκιμή για να επαληθεύσει την ορθότητα του κώδικα. Κατά την εκτέλεση των δοκιμαστικών περιπτώσεων, το πλαίσιο καταγράφει τις περιπτώσεις αποτυχίας δοκιμής. Πολλά πλαίσια θα επισημαίνουν αυτόματα και θα αναφέρουν, συνοπτικά, αυτά αποτυχημένες δοκιμαστικές περιπτώσεις. Ανάλογα με τη σοβαρότητα μιας αποτυχίας, το πλαίσιο μπορεί να σταματήσει τις επόμενες δοκιμές.
  • Η ροή εργασίας του Unit Testing είναι 1) Create Test Cases 2) Review/Rework 3) Baseline 4) Execute Test Cases.

Τεχνικές Δοκιμών Μονάδων

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

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

  • Κάλυψη δήλωσης
  • Κάλυψη απόφασης
  • Κάλυψη Υποκαταστήματος
  • Κάλυψη κατάστασης
  • Κάλυψη μηχανών πεπερασμένης κατάστασης

Για περισσότερα στο ανατρέξτε https://www.guru99.com/code-coverage.html

Παράδειγμα δοκιμής μονάδας: Mock Objects

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

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

Εργαλεία δοκιμής μονάδων

Υπάρχουν πολλά αυτοματοποιημένα λογισμικά δοκιμών μονάδας διαθέσιμα για να βοηθήσουν στη δοκιμή μονάδας στη δοκιμή λογισμικού. Θα δώσουμε μερικά παραδείγματα παρακάτω:

  1. Junit: Το Junit είναι ένα δωρεάν εργαλείο δοκιμών για το οποίο χρησιμοποιείται Java γλώσσα προγραμματισμού. Παρέχει ισχυρισμούς για τον προσδιορισμό της μεθόδου δοκιμής. Αυτό το εργαλείο δοκιμάζει πρώτα τα δεδομένα και στη συνέχεια εισάγεται στο κομμάτι του κώδικα.
  2. Μονάδα: Το NUnit χρησιμοποιείται ευρέως για χρήση πλαισίου δοκιμής μονάδων για όλες τις γλώσσες .net. Είναι ένα εργαλείο ανοιχτού κώδικα που επιτρέπει τη μη αυτόματη σύνταξη σεναρίων. Υποστηρίζει δοκιμές βάσει δεδομένων που μπορούν να εκτελούνται παράλληλα.
  3. JMockit: Το JMockit είναι εργαλείο δοκιμών μονάδας ανοιχτού κώδικα. Είναι ένα εργαλείο κάλυψης κώδικα με μετρήσεις γραμμής και διαδρομής. Επιτρέπει την κοροϊδία API με σύνταξη εγγραφής και επαλήθευσης. Αυτό το εργαλείο προσφέρει κάλυψη γραμμής, κάλυψη διαδρομής και κάλυψη δεδομένων.
  4. EMMA: Το EMMA είναι μια εργαλειοθήκη ανοιχτού κώδικα για την ανάλυση και την αναφορά κώδικα γραμμένου Java γλώσσα. Τύποι κάλυψης υποστήριξης Emma όπως μέθοδος, γραμμή, βασικό μπλοκ. Είναι Java-βασισμένο ώστε να είναι χωρίς εξωτερικές εξαρτήσεις βιβλιοθήκης και να έχει πρόσβαση στον πηγαίο κώδικα.
  5. Μονάδα PHPU: Το PHPUnit είναι ένα εργαλείο δοκιμής μονάδων για προγραμματιστή PHP. Παίρνει μικρά τμήματα κώδικα που ονομάζονται μονάδες και δοκιμάζει το καθένα ξεχωριστά. Το εργαλείο επιτρέπει επίσης στους προγραμματιστές να χρησιμοποιούν προκαθορισμένες μεθόδους διεκδίκησης για να επιβεβαιώσουν ότι ένα σύστημα συμπεριφέρεται με συγκεκριμένο τρόπο.

Αυτά είναι μερικά μόνο από τα διαθέσιμα εργαλεία δοκιμής μονάδων. Υπάρχουν πολλά περισσότερα, ειδικά για Γλώσσες Γ και Java, αλλά σίγουρα θα βρείτε ένα εργαλείο δοκιμής μονάδων για τις προγραμματιστικές σας ανάγκες, ανεξάρτητα από τη γλώσσα που χρησιμοποιείτε.

Test Driven Development (TDD) & Unit Testing

Η δοκιμή μονάδων στο TDD περιλαμβάνει μια εκτεταμένη χρήση πλαισίων δοκιμών. Ένα πλαίσιο δοκιμής μονάδας χρησιμοποιείται για τη δημιουργία αυτοματοποιημένων δοκιμών μονάδας. Τα πλαίσια δοκιμής μονάδων δεν είναι μοναδικά για το TDD, αλλά είναι απαραίτητα για αυτό. Παρακάτω βλέπουμε μερικά από αυτά που φέρνει το TDD στον κόσμο των δοκιμών μονάδων:

  • Τα τεστ γράφονται πριν από τον κώδικα
  • Βασιστείτε σε μεγάλο βαθμό στα πλαίσια δοκιμής
  • Όλες οι κατηγορίες στις εφαρμογές είναι δοκιμασμένες
  • Η γρήγορη και εύκολη ενσωμάτωση είναι δυνατή

Μύθος δοκιμής μονάδων

Μύθος: Απαιτεί χρόνο και είμαι πάντα υπερπρογραμματισμένος
Ο κώδικάς μου είναι σταθερός ροκ! Δεν χρειάζομαι δοκιμές μονάδας.

Οι μύθοι από τη φύση τους είναι ψευδείς υποθέσεις. Αυτές οι υποθέσεις οδηγούν σε έναν φαύλο κύκλο ως εξής:

Μύθος δοκιμής UNIT

Η αλήθεια είναι ότι οι δοκιμές μονάδων αυξάνουν την ταχύτητα ανάπτυξης.

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

Πλεονέκτημα δοκιμής μονάδας

  • Οι προγραμματιστές που θέλουν να μάθουν ποια λειτουργικότητα παρέχεται από μια μονάδα και πώς να τη χρησιμοποιούν μπορούν να εξετάσουν τις δοκιμές της μονάδας για να αποκτήσουν μια βασική κατανόηση του API της μονάδας.
  • Η δοκιμή μονάδας επιτρέπει στον προγραμματιστή να αναπαράγει τον κώδικα σε μεταγενέστερη ημερομηνία και να βεβαιωθεί ότι η μονάδα εξακολουθεί να λειτουργεί σωστά (π.χ. Δοκιμή παλινδρόμησης). Η διαδικασία είναι να γραφτούν δοκιμαστικές περιπτώσεις για όλες τις λειτουργίες και τις μεθόδους, έτσι ώστε κάθε φορά που μια αλλαγή προκαλεί σφάλμα, να μπορεί να εντοπιστεί και να διορθωθεί γρήγορα.
  • Λόγω της αρθρωτής φύσης της δοκιμής της μονάδας, μπορούμε να δοκιμάσουμε μέρη του έργου χωρίς να περιμένουμε την ολοκλήρωση άλλων.

Μειονεκτήματα δοκιμής μονάδας

  • Η δοκιμή μονάδας δεν μπορεί να αναμένεται να εντοπίσει κάθε σφάλμα σε ένα πρόγραμμα. Δεν είναι δυνατό να αξιολογηθούν όλες οι διαδρομές εκτέλεσης ακόμη και στα πιο ασήμαντα προγράμματα
  • Η δοκιμή μονάδων από τη φύση της εστιάζει σε μια μονάδα κώδικα. Ως εκ τούτου, δεν μπορεί να εντοπίσει σφάλματα ενοποίησης ή σφάλματα σε επίπεδο συστήματος.

Συνιστάται η χρήση δοκιμών μονάδας σε συνδυασμό με άλλες δραστηριότητες δοκιμών.

Unit Testing καλυτερα Practices

  • Οι περιπτώσεις δοκιμών μονάδας πρέπει να είναι ανεξάρτητες. Σε περίπτωση οποιασδήποτε βελτίωσης ή αλλαγής στις απαιτήσεις, οι περιπτώσεις δοκιμών μονάδας δεν θα πρέπει να επηρεάζονται.
  • Δοκιμάστε μόνο έναν κωδικό κάθε φορά.
  • Ακολουθήστε σαφείς και συνεπείς συμβάσεις ονομασίας για τις δοκιμές της μονάδας σας
  • Σε περίπτωση αλλαγής κωδικού σε οποιαδήποτε μονάδα, βεβαιωθείτε ότι υπάρχει η αντίστοιχη μονάδα Δοκιμαστική θήκη για την ενότητα και η ενότητα περνά τις δοκιμές πριν αλλάξει την υλοποίηση
  • Τα σφάλματα που εντοπίστηκαν κατά τη δοκιμή της μονάδας πρέπει να διορθωθούν πριν προχωρήσετε στην επόμενη φάση στο SDLC
  • Υιοθετήστε μια προσέγγιση "δοκιμή ως ο κωδικός σας". Όσο περισσότερο κώδικα γράψετε χωρίς δοκιμή, τόσο περισσότερες διαδρομές πρέπει να ελέγξετε για σφάλματα.

Unit Testing καλυτερα Practices

Σύνοψη

  • Η ΔΟΚΙΜΗ ΜΟΝΑΔΩΝ ορίζεται ως ένας τύπος δοκιμής λογισμικού όπου δοκιμάζονται μεμονωμένες μονάδες ή στοιχεία ενός λογισμικού.
  • Όπως μπορείτε να δείτε, μπορεί να εμπλέκονται πολλά στη δοκιμή μονάδας. Μπορεί να είναι πολύπλοκο ή μάλλον απλό ανάλογα με την εφαρμογή που δοκιμάζεται και τις στρατηγικές, τα εργαλεία και τις φιλοσοφίες που χρησιμοποιούνται. Η δοκιμή μονάδας είναι πάντα απαραίτητη σε κάποιο επίπεδο. Αυτό είναι σίγουρο.