Αν χρειάστηκε ποτέ να εντοπίσετε ένα σφάλμα στον κώδικά σας, τότε ξέρετε πόσο απογοητευτικό μπορεί να είναι. Αυτή η απογοήτευση αυξάνεται μόνο εάν εργάζεστε σε μια μεγάλη βάση κωδικών.
Η δοκιμή σάς επιτρέπει να ελέγξετε εάν τα αποτελέσματα του κώδικά σας ταιριάζουν με τις προσδοκίες σας. Με αυτόν τον τρόπο, μπορείτε εύκολα να εντοπίσετε και να διορθώσετε ένα πρόβλημα πριν από την ανάπτυξη της εφαρμογής σας. Εκτός από το ότι σας βοηθά να εντοπίσετε τα σφάλματα κώδικα πιο γρήγορα, η δοκιμή σας αναγκάζει επίσης να γράψετε καλό κώδικα.
1. Στατική Δοκιμή
Ο στατικός έλεγχος αναφέρεται σε δοκιμές που εκτελούνται χωρίς την εκτέλεση κώδικα. Αυτό συμβαίνει συγκρίνοντας τον κώδικα με κανόνες κωδικοποίησης που είχαν οριστεί προηγουμένως. Οι συνήθεις τρόποι διεξαγωγής στατικών δοκιμών περιλαμβάνουν το lining και τον έλεγχο τύπου.
Το linting περιλαμβάνει τον έλεγχο του κώδικα για προγραμματιστικά και στυλιστικά λάθη. Ένα linter αναλύει τον κώδικα και επισημαίνει πιθανά σφάλματα. Παραδείγματα εργαλείων linting είναι τα EsLint, PyLint και CSSLint.
Ο έλεγχος τύπων είναι η διαδικασία επιβολής κανόνων πληκτρολόγησης και περιορισμών στις τιμές. Ορισμένες γλώσσες προγραμματισμού πληκτρολογούνται έντονα, πράγμα που σημαίνει ότι παρουσιάζουν σφάλματα όταν οι τιμές δεν είναι σωστά πληκτρολογημένες.
Ωστόσο, ορισμένες γλώσσες όπως η JavaScript έχουν αδύναμο σύστημα πληκτρολόγησης και είναι πιο επιεικής. Σε αυτές τις γλώσσες, τα λάθη είναι δύσκολο να εντοπιστούν και μια βιβλιοθήκη ελέγχου τύπου είναι απαραίτητη. Για JavaScript, μπορείτε χρησιμοποιήστε TypeScript για να επιβάλετε ισχυρή πληκτρολόγηση.
Μπορείτε επίσης να χρησιμοποιήσετε εργαλεία στατικής ανάλυσης για αυτόματη ανάλυση κώδικα. Αυτά τα εργαλεία επαληθεύουν την ποιότητα του κώδικα και αναφέρουν τυχόν προβλήματα που εντοπίζει. Παραδείγματα εργαλείων στατικής ανάλυσης στην αγορά είναι τα SonarQube, DeepSource και SpotBugs. Όταν επιλέγετε έναν στατικό αναλυτή, βεβαιωθείτε ότι υποστηρίζει τη γλώσσα προγραμματισμού σας.
2. Δοκιμές Μονάδων
Οι δοκιμές μονάδας ελέγχουν τα μικρότερα ελεγχόμενα μέρη μιας εφαρμογής για να προσδιορίσουν εάν λειτουργούν όπως αναμένεται. Μπορείτε να γράψετε δοκιμές μονάδων για συναρτήσεις, μονάδες, αντικείμενα κ.λπ.
Ενώ οι δοκιμές μονάδας μπορεί να είναι χρονοβόρες, θα εξοικονομήσουν περισσότερο χρόνο από ό, τι θα ξοδεύατε αποσφαλμάτωση της εφαρμογής αφού γράψετε όλο τον κώδικα.
Γενικά, η δοκιμή μονάδας αποτελείται από τέσσερα βήματα:
- Δημιουργία των δοκιμών
- Επανεξέταση του τεστ
- Βασοποίηση
- Εκτέλεση του τεστ.
Μπορείτε να γράψετε δοκιμές μονάδων με μη αυτόματο τρόπο ή να τις αυτοματοποιήσετε χρησιμοποιώντας ένα πλαίσιο δοκιμής μονάδας. Σε μια χειροκίνητη δοκιμή, θα γράφατε κώδικα για να δοκιμάσετε τη λειτουργία ή τη μονάδα που χρειάζεστε και, στη συνέχεια, θα διαγράψετε τον κωδικό δοκιμής.
Εάν χρησιμοποιείτε πλαίσιο, καθορίστε τη μονάδα που δοκιμάζετε και τα αναμενόμενα αποτελέσματα και, στη συνέχεια, εκτελέστε τη δοκιμή. Στη συνέχεια, το πλαίσιο δοκιμών θα καταγράφει τις δοκιμές που αποτυγχάνουν και περνούν. Γενικά είναι καλύτερο να χρησιμοποιήσετε ένα πλαίσιο επειδή είναι πιο γρήγορο.
Όταν γράφετε μια δοκιμή μονάδας, βεβαιωθείτε ότι η μονάδα που δοκιμάζετε είναι ανεξάρτητη. Εάν βασίζεται σε εξωτερικά δεδομένα όπως μεταβλητές, μπορείτε να χρησιμοποιήσετε κοροϊδίες. Τα mocks αντικαθιστούν τα δεδομένα που λείπουν που χρησιμοποιούνται στη μονάδα.
Για παράδειγμα, εάν δοκιμάζετε μια συνάρτηση που βασίζεται σε δεδομένα που λαμβάνονται από ένα API, μπορείτε να δημιουργήσετε ένα πλαστό αντικείμενο δεδομένων για δοκιμαστικούς σκοπούς.
3. Δοκιμές ολοκλήρωσης
Οι δοκιμές ολοκλήρωσης ελέγχουν πώς λειτουργούν τα διαφορετικά στοιχεία μαζί. Αυτό είναι σε αντίθεση με τις δοκιμές μονάδας που δοκιμάζουν ανεξάρτητα εξαρτήματα. Γράφετε τεστ ολοκλήρωσης μετά από δοκιμές μονάδας.
Οι δοκιμές ενσωμάτωσης είναι απαραίτητες καθώς διασφαλίζουν ότι η λογική της εφαρμογής σας ισχύει.
Για παράδειγμα, εξετάστε δύο λειτουργικές μονάδες: μια που ανακτά δεδομένα από ένα API και μια άλλη που τα αναλύει. Θα θέλατε να βεβαιωθείτε ότι ο κώδικάς σας έλαβε τα σωστά δεδομένα και τα ανέλυσε σωστά.
Εδώ μπαίνει η δοκιμή ολοκλήρωσης. Εξασφαλίζει ότι δεν υπάρχουν σφάλματα στη λογική ροή από τη μια μονάδα στην άλλη.
4. Δοκιμές από άκρο σε άκρο
Η δοκιμή από άκρο σε άκρο ελέγχει τη ροή της εφαρμογής από την οπτική γωνία του τελικού χρήστη. Η διαδικασία ελέγχει την εφαρμογή από την αρχή μέχρι το τέλος, καθώς ο χρήστης θα χρησιμοποιήσει την εφαρμογή. Αυτές οι δοκιμές παρέχουν μεγαλύτερη κάλυψη από τις δοκιμές μονάδας ή τις δοκιμές ολοκλήρωσης.
Οι δοκιμές από άκρο σε άκρο καθορίζουν τις εξαρτήσεις, τις βάσεις δεδομένων και την εξωτερική επικοινωνία της εφαρμογής. Αναπαράγουν ένα σενάριο του πραγματικού κόσμου όσο το δυνατόν ακριβέστερα.
Για παράδειγμα, κατά τη δοκιμή μιας φόρμας εγγραφής, μια δοκιμή από άκρο σε άκρο θα δοκιμάσει διαφορετικά σενάρια όπως:
- Ένας χρήστης που υποβάλλει τόσο το email όσο και τον κωδικό πρόσβασης
- Ένας χρήστης που χρησιμοποιεί αδύναμο κωδικό πρόσβασης
- Ένας χρήστης που χρησιμοποιεί μη έγκυρο email
- Ένας χρήστης που υποβάλλει μόνο ένα email
- Ένας χρήστης που υποβάλλει μόνο κωδικό πρόσβασης
Οι δοκιμές από άκρο σε άκρο διασφαλίζουν ότι η εφαρμογή συμπεριφέρεται όπως αναμένεται σε αυτά τα σενάρια.
Τεστ Γραφής vs. Κώδικας γραφής
Η δοκιμή της εφαρμογής σας νωρίς στη διαδικασία ανάπτυξης είναι ζωτικής σημασίας. Ενώ όλες αυτές οι δοκιμές είναι απαραίτητες, είναι σημαντικό να βρείτε μια ισορροπία που λειτουργεί για εσάς. Διαφορετικά, θα ξοδέψετε πολύ χρόνο γράφοντας δοκιμές αντί για κώδικα.
Η δοκιμή μονάδας είναι ζωτικής σημασίας για τις περισσότερες εφαρμογές και ίσως θέλετε να αφιερώσετε αρκετό χρόνο σε αυτήν. Αφού εκτελέσετε δοκιμές μονάδων, μπορείτε να είστε βέβαιοι ότι τα δομικά στοιχεία της εφαρμογής σας λειτουργούν σωστά.