-
Έτσι, δαπανήσαμε ένα σύνολο μικρών στρογγυλών του χρόνου
-
κατά τα τελευταία δύο διαλέξεις
-
μιλάμε για διαφορετικά είδη των δοκιμών
-
σχετικά με την μονάδα δοκιμές έναντι της δοκιμής ολοκλήρωσης
-
Μας μίλησε σχετικά με τον τρόπο χρήσης RSpec
-
για να απομονώσετε πραγματικά τα τμήματα του κώδικα που θέλετε να ελέγξετε
-
έχετε επίσης, το γνωρίζετε, λόγω σπίτι 3,
-
και άλλα πράγματα, όπως το κάνουμε BDD,
-
όταν μας έχετε χρησιμοποιούν Αγγούρι για να ενεργοποιήσετε τις ιστορίες του χρήστη
-
σε, ουσιαστικά, οι δοκιμές ολοκλήρωσης και αποδοχή
-
Έτσι που έχετε δει δοκιμές σε δυο διαφορετικά επίπεδα
-
και ο στόχος εδώ είναι είδος για να κάνουμε μερικές παρατηρήσεις
-
να, γνωρίζετε, ας αντιγράφων ασφαλείας λίγο bit
-
Δείτε τη συνολική εικόνα και μπορείτε να συνενώσετε αυτά τα πράγματα
-
Έτσι αυτό είδος εκτείνεται σε υλικό
-
που καλύπτει τρεις ή τέσσερις ενότητες στο βιβλίο
-
και θέλω να χτυπήσει μόνο τα υψηλά σημεία σε διάλεξη
-
Έτσι μια ερώτηση που προέρχεται
-
Είμαι βέβαιος ότι κατέληξε για εσάς
-
όπως σας κάνουν σπίτι
-
είναι: "πόσο δοκιμές είναι αρκετά;"
-
Και, δυστυχώς, για πολύ καιρό
-
είδος του αν το ερώτημα στη βιομηχανία
-
η απάντηση ήταν βασικά
-
«Καλά, έχουμε μια προθεσμία αποστολής,
-
Έτσι όμως η δοκιμή πολύ μπορούμε να κάνουμε
-
πριν από την προθεσμία αυτή, αυτό είναι πόσο."
-
Αυτό είναι τι έχετε χρόνο για.
-
Έτσι, ξέρετε, ότι μια μικρή αναστροφή
-
προφανώς δεν είναι πολύ καλή
-
Έτσι, μπορείτε να κάνετε λίγο καλύτερα, δικαίωμα;
-
Είστε εκεί κάποια στατική μέτρα
-
όπως πόσες γραμμές κώδικα σας app διαθέτει
-
και πόσες γραμμές των δοκιμών που έχετε;
-
Και δεν είναι ασυνήθιστο στη βιομηχανία
-
σε ένα καλά κομμάτι λογισμικού
-
για τον αριθμό των γραμμών των δοκιμών
-
να υπερβαίνουν κατά πολύ τον αριθμό των γραμμών του κώδικα
-
Έτσι, ακέραιο πολλαπλάσιο δεν είναι ασυνήθιστο
-
Και θεωρώ ακόμη και για είδος της, γνωρίζετε,
-
έρευνα κώδικα ή παλι
-
ποσοστό, γνωρίζετε, ίσως 1.5 δεν είναι παράλογο
-
έτσι μία δυόμισι φορές το ποσό των Κώδικας δοκιμής
-
όπως έχετε κωδικό εφαρμογής
-
Και σε πολλά συστήματα παραγωγής
-
όπου είναι πολύ συμπαθητικοί πληροφορίες για τη δοκιμή
-
είναι πολύ υψηλότερα από αυτό
-
Έτσι ίσως καλύτερα να θέσω μια ερώτηση:
-
Αντί να λέει "πόσο δοκιμές είναι αρκετά;"
-
είναι να ζητήσουμε από το "πόσο καλές είναι οι δοκιμές που κάνω τώρα;
-
Πώς διεξοδική είναι;"
-
Αργότερα σε αυτό το εξάμηνο
-
Καθηγητής Sen θα μιλήσουμε για
-
λίγο σχετικά με τυπικές μεθόδους
-
και ταξινόμηση του τι είναι στα σύνορα της δοκιμές και τον εντοπισμό σφαλμάτων
-
Αλλά δύο πράγματα που μπορούμε να μιλήσουμε για
-
με βάση αυτό που ήδη γνωρίζετε
-
είναι ορισμένες βασικές έννοιες σχετικά με τη δοκιμή κάλυψης
-
Και αν και θα ήθελα να πω
-
γνωρίζετε, έχετε λέμε όλα μαζί
-
Τυπικές μέθοδοι, πραγματικά δεν λειτουργούν σε μεγάλα συστήματα
-
Πιστεύω ότι η δήλωση αυτή, κατά τη γνώμη μου προσωπική
-
αληθεύει όντως πολύ λιγότερο από ό, τι ήταν
-
Πιστεύω ότι υπάρχουν ορισμένες συγκεκριμένες θέσεις
-
ιδιαίτερα σε δοκιμές και τον εντοπισμό σφαλμάτων
-
όπου τυπικές μέθοδοι να προχωρήσει γρήγορα
-
και Koushik Sen, είναι ένας από τους ηγέτες που
-
Έτσι θα έχετε την ευκαιρία να ακούσουμε περισσότερα σχετικά με αυτό αργότερα
-
αλλά προς το παρόν νομίζω, είδους ψωμί και βουτύρου
-
Ας είναι λόγος για κάλυψη μέτρησης
-
επειδή αυτό είναι όπου το καουτσούκ πληροί της οδού
-
όσον αφορά τον τρόπο σας θα αξιολογηθούν
-
Εάν το κάνετε αυτό για πραγματικά χρήματα
-
Τι είναι λοιπόν κάποια βασικά στοιχεία;
-
Εδώ είναι μια πραγματικά απλή κλάση που μπορείτε να χρησιμοποιήσετε
-
να μιλάμε για διαφορετικούς τρόπους για τη μέτρηση
-
Πώς μας δοκιμής καλύπτει αυτόν τον κωδικό
-
Και υπάρχουν μερικά διαφορετικά επίπεδα
-
με διαφορετικές ορολογίες
-
Δεν είναι πραγματικά καθολική σε όλα τα σπίτια του λογισμικού
-
Αλλά ένα κοινό σύνολο ορολογία
-
ότι εκθέτει το βιβλίο
-
είναι θα μπορούσε να μιλάμε για S0
-
όπου μόλις θα σημαίνουν σας έχετε ονομάζεται μία φορά κάθε μέθοδος
-
Έτσι ώστε να γνωρίζετε, εάν καλέσετε foo και κλήση ράβδου, είστε έτοιμοι
-
Αυτό είναι κάλυψη S0: δεν τρομερά εις βάθος
-
Είναι λίγο πιο αυστηρά, S1,
-
μπορούμε να πούμε, μας κλήση της κάθε μεθόδου
-
από κάθε τόπο που θα μπορούσε να ονομαστεί
-
Συνεπώς τι σημαίνει αυτό;
-
Αυτό σημαίνει, για παράδειγμα
-
δεν είναι αρκετό για την κλήση ράβδου
-
Έχετε για να βεβαιωθείτε ότι έχετε να το ονομάσουμε
-
τουλάχιστον μία φορά από εδώ
-
και αυτό απαιτεί μία φορά
-
από οποιαδήποτε εξωτερικά καθήκοντα που μπορεί να θέσει το
-
C0, που είναι ό, τι τα μέτρα που SimpleCov
-
(όσοι από εσάς έχετε πάρει SimpleCov και εκτέλεση)
-
ουσιαστικά, λέει που έχετε εκτελείται κάθε δήλωση
-
έχετε θίξατε κάθε δήλωση στον κώδικά σας μία φορά
-
Αλλά την επιφύλαξη εκεί είναι ότι
-
conditionals μετράνε πραγματικά μόνο από μία πρόταση
-
Οπότε, αν εσείς, ανεξάρτητα από το ποια υποκατάστημα αυτό "Εάν" που τραβήξατε
-
όσο διάστημα θίξατε ένα από το άλλο σκέλος
-
που έχετε εκτελείται η "Εάν «δήλωση
-
Συνεπώς, ακόμη και C0 είναι ακόμη, γνωρίζετε, είδος επιφανειακή κάλυψης
-
Αλλά, όπως θα δούμε
-
ο τρόπος που θα θέλετε να διαβάσετε πληροφορίες είναι:
-
Εάν λαμβάνετε * κακό * κάλυψη σε επίπεδο C0
-
στη συνέχεια έχετε πραγματικά πολύ άσχημα κάλυψης
-
Επομένως, εάν δεν είστε είδος των αποφάσεων
-
Αυτό το απλό επίπεδο επιφανειακή κάλυψης
-
στη συνέχεια δοκιμής σας είναι πιθανώς ελλειπείς
-
C1 είναι το επόμενο βήμα επάνω από αυτό
-
Θα μπορούσαμε να πούμε:
-
Λοιπόν, πρέπει να λάβουμε κάθε υποκατάστημα προς τις δύο κατευθύνσεις
-
Έτσι, όταν κάνουμε αυτή τη δήλωση "if"
-
θα πρέπει να βεβαιωθείτε ότι
-
θα κάνουμε το "Εάν x" μέρος μία φορά
-
και το "αν δεν x" τμήμα τουλάχιστον μία φορά σε πληρούν C1
-
Μπορείτε να προσθέσετε που με απόφαση κάλυψη
-
λέει: λοιπόν, αν τώρα να...
-
Εάν έχουμε δηλώσεων "if" όπου η Συνθήκη
-
αποτελείται από πολλούς όρους
-
θα πρέπει να βεβαιωθείτε ότι κάθε δευτερεύουσα έκφραση
-
έχει αξιολογηθεί τις δύο κατευθύνσεις
-
Με άλλα λόγια, αυτό σημαίνει ότι
-
Αν τώρα την αποτυχία αυτή δήλωση "if"
-
θα πρέπει να βεβαιωθείτε ότι αυτό αποτύχει, τουλάχιστον μία φορά
-
επειδή y ήταν false σε τουλάχιστον μια φορά επειδή z ήταν ψευδείς
-
Με άλλα λόγια, κάθε δευτερεύουσα έκφραση που θα μπορούσε να
-
ανεξάρτητα, αλλάζουν το αποτέλεσμα της κατάστασης
-
πρέπει να ασκείται κατά τις δύο κατευθύνσεις
-
Και, στη συνέχεια,
-
είδος, το ένα, γνωρίζετε, πολλοί άνθρωποι προσβλέπουν σε
-
αλλά υπάρχει διαφωνία σχετικά με τον τρόπο πολύ πιο αξιόλογες είναι
-
είναι μπορείτε να κάθε διαδρομή μέσω του κώδικα
-
Προφανώς, αυτό είναι είδος δύσκολο επειδή
-
τείνει να είναι εκθετική του αριθμού των συνθηκών
-
Και γενικά είναι δύσκολο
-
να αξιολογήσει εάν έχετε λάβει κάθε διαδρομή μέσω του κώδικα
-
Υπάρχουν τυπικές τεχνικές που μπορείτε να χρησιμοποιήσετε
-
να σας πω όπου βρίσκονται οι οπές
-
όμως είναι ότι, η γραμμή κάτω
-
σε πιο εμπορικού λογισμικού σπίτια
-
θα έλεγα, δεν υπάρχει πλήρης συναίνεση
-
σχετικά με τον τρόπο πολύ πιο πολύτιμο C2 είναι
-
σε σύγκριση με C0 ή C1
-
Έτσι, πιστεύω ότι, για την τάξη μας
-
σας να εκτεθεί στην ιδέα
-
για το πώς μπορείτε να χρησιμοποιήσετε πληροφορίες κάλυψης
-
SimpleCov εκμεταλλεύεται ορισμένες ενσωματωμένες δυνατότητες Ruby
-
για να σας δώσω C0 κάλυψης
-
[] Δεν πολύ ωραία εκθέσεις
-
Μπορούμε να το δούμε αυτό είδος
-
στο επίπεδο των μεμονωμένων γραμμών στο αρχείο σας
-
Μπορείτε να δείτε τι είναι σας κάλυψης
-
και πιστεύω ότι αυτό είναι είδος, γνωρίζετε
-
μια καλή αρχή για πού είμαστε
-
Έτσι, έχοντας δείτε ένα είδος διαφορετικές γεύσεις των δοκιμών
-
Ενίσχυση των πίσω και Κοιτώντας πίσω από την μεγάλη εικόνα
-
Τι είναι το διαφορετικό είδος των δοκιμών
-
που έχουμε δει συγκεκριμένα;
-
και τι είναι μειονεκτημάτων
-
μεταξύ χρησιμοποιώντας αυτά τα διαφορετικά είδη δοκιμές;
-
Έτσι έχουμε δει στο επίπεδο των επιμέρους κλάδους ή μεθόδους
-
χρησιμοποιούμε RSpec, με την εκτεταμένη χρήση χλευάζει και stubbing
-
Έτσι, για παράδειγμα, όταν κάνουμε μέθοδοι δοκιμών του μοντέλου
-
Αυτό θα είναι ένα παράδειγμα της μονάδας δοκιμές
-
Κάναμε επίσης κάτι που είναι αρκετά παρόμοια με
-
λειτουργική ή λειτουργική μονάδα δοκιμής
-
Όταν υπάρχουν περισσότερες από μία λειτουργική μονάδα συμμετέχουν
-
Έτσι, για παράδειγμα, όταν κάναμε προδιαγραφές του ελεγκτή
-
το είδαμε — μας προσομοιώσετε μια ενέργεια POST
-
αλλά να θυμάστε ότι η ενέργεια POST
-
πρέπει να περάσει το υποσύστημα δρομολόγησης
-
πριν από αυτό παίρνει στον ελεγκτή
-
Μόλις γίνει ο ελεγκτής θα προσπαθήσει για την απόδοση μιας προβολής
-
Έτσι στην πραγματικότητα υπάρχει άλλα τεμάχια
-
που συνεργάζονται με τον ελεγκτή
-
ότι πρέπει να εργάζονται για προδιαγραφές του ελεγκτή να περάσει
-
Έτσι, που είναι κάπου inbetween:
-
Όταν κάνουμε περισσότερο από μία μόνο μέθοδος
-
αγγίζει περισσότερο από μία και μοναδική κλάση
-
αλλά εμείς, ακόμη, συγκέντρωση προσοχή [μας]
-
σε ένα σχετικά στενό slice του συστήματος σε μια εποχή
-
και εξακολουθεί να χρησιμοποιούμε την χλευάζει και stubbing εκτεταμένα
-
για να απομονώσετε είδους η συμπεριφορά που θέλουμε για τη δοκιμή
-
Και στη συνέχεια στο επίπεδο της σενάρια Αγγούρι
-
αυτά είναι περισσότερο σαν ολοκλήρωσης ή των δοκιμών του συστήματος
-
Αυτά ασκούν πλήρεις διαδρομές σε όλη την εφαρμογή
-
Αγγίζουν πιθανότατα πολύ διαφορετικές ενότητες
-
Τους κάνετε ελάχιστη χρήση των mocks και των στελεχών
-
Επειδή μέρος του στόχου της μια ολοκλήρωση δοκιμής
-
είναι ακριβώς για να ελέγξετε την αλληλεπίδραση μεταξύ τεμαχίων
-
Έτσι, δεν θέλετε να το απόκομμα ή να ελέγξετε αυτές τις αλληλεπιδράσεις
-
Θέλετε να αφήσετε το σύστημα να κάνει πραγματικά
-
Τι θα κάνει πραγματικά
-
Εάν αυτό ήταν ένα σενάριο που συμβαίνουν στην παραγωγή
-
Πώς θα συγκρίνουμε αυτά τα διαφορετικά είδη δοκιμές;
-
Υπάρχει λίγα διαφορετικούς άξονες που μπορούμε να εξετάσουμε
-
Ένας από αυτούς είναι χρόνο και αν χρειαστεί να εκτελέσετε
-
Τώρα, τόσο το RSpec όσο και το Αγγούρι
-
έχουν, είδος, χρόνους υψηλό εκκίνησης και πράγματα όπως αυτή
-
Αλλά, όπως θα δείτε
-
καθώς αρχίζετε προσθήκη όλο και περισσότερες δοκιμές RSpec
-
και τη χρήση autotest ώστε να εκτελούνται στο παρασκήνιο
-
σε μεγάλο βαθμό, μια φορά RSpec είδος ξεκινήσει το εφαλτήριο
-
εκτελείται πολύ γρήγορα προδιαγραφές
-
ότι η εκτέλεση Αγγούρι δυνατότητες μόλις καθυστερεί πολύ
-
όπως ουσιαστικά πυρκαγιές σας ολόκληρο εφαρμογής
-
Και αργότερα σε αυτό το εξάμηνο
-
θα δούμε ένας τρόπος για να Αγγούρι ακόμα χαμηλότερες —
-
που είναι να πετύχει την πυρκαϊά μέχρι ένα ολόκληρο πρόγραμμα περιήγησης
-
βασικά ενεργεί σαν μια μαριονέτα, απομακρυσμένο έλεγχο Firefox
-
Έτσι μπορείτε να ελέγξετε κώδικα Javascript
-
Θα κάνουμε το ότι όταν εμείς πραγματικά —
-
Πιστεύω ότι θα είμαστε σε θέση να εργαστείτε με τους φίλους μας σε SourceLabs
-
Έτσι μπορείτε να το κάνετε στο σύννεφο — που θα είναι συναρπαστικές
-
Έτσι, "εκτέλεση fast" έναντι "αργή εκτέλεση"
-
Ανάλυση:
-
Εάν το σφάλμα συμβαίνει σε σας μονάδα δοκιμές
-
συνήθως είναι πολύ εύκολη
-
για να υπολογίσει και να παρακολουθήσετε αυτό το αρχείο προέλευσης αυτού του σφάλματος είναι
-
επειδή οι δοκιμές είναι τόσο απομονωμένος
-
Σας έχετε stubbed που ό, τι δεν έχει σημασία
-
και σας εστιάζοντας μόνο τη συμπεριφορά του ενδιαφέροντος
-
Έτσι, εάν έχετε κάνει καλή δουλειά που κάνουν
-
όταν κάτι πάει λάθος σε μία από τις δοκιμές
-
δεν υπάρχει σε πολλά μέρη
-
κάτι που μπορούσε να πάει στραβά
-
Αντίθετα, εάν εκτελείτε ένα σενάριο Αγγούρι
-
Ιδού, γνωρίζετε, 10 βήματα
-
και αγγίζει κάθε βήμα
-
ένα σωρό τεμάχια το app
-
Αυτό θα μπορούσε να πάρει πολύ καιρό
-
για να λάβετε πραγματικά στο κάτω μέρος ενός σφάλματος
-
Επομένως, είναι είδος του ανταλλαγή
-
μεταξύ πόσο καλά μπορεί να σας localize σφάλματα
-
Κάλυψη:
-
Είναι δυνατόν αν γράψετε μια καλή σουίτα
-
μονάδα και λειτουργικές δοκιμές
-
Μπορείτε να λάβετε πραγματικά υψηλή κάλυψη
-
Μπορείτε να εκτελέσετε την έκθεσή σας SimpleCov
-
και πράγματι, μπορείτε να αναγνωρίσετε συγκεκριμένες γραμμές στα αρχεία σας
-
που δεν έχουν γίνει ασκείται από οποιαδήποτε δοκιμή
-
και στη συνέχεια μπορείτε να πάτε δικαίωμα σε δοκιμές που καλύπτουν τους
-
Έτσι, έχει καθορίσει Τρόπος βελτίωσης σας κάλυψης
-
για παράδειγμα, σε επίπεδο C0
-
είναι κάτι πολύ πιο εύκολα να γίνει με μονάδα δοκιμές
-
ότι, με μια δοκιμή Αγγούρι —
-
ένα σενάριο Αγγούρι —
-
σας * είναι * συγκινητικό πολλά τμήματα του κώδικα
-
αλλά σας κάνουν πολύ αραιοκατοικημένες
-
Έτσι, εάν ο στόχος σας είναι να σηκωθείτε σας κάλυψης
-
Χρησιμοποιήστε τα εργαλεία στο βρίσκονται στα επίπεδα μονάδα
-
έτσι ώστε να μπορείτε να εστιάζοντας στην κατανόηση
-
ποια τμήματα ή κωδικός είναι undertested
-
και στη συνέχεια μπορείτε να γράψετε πολύ στοχοθετημένες δοκιμές
-
απλώς να εστιασθεί τους
-
Και, να ταξινομήσετε, γνωρίζετε, προκειμένου να ενοποιήσουμε αυτά τα κομμάτια
-
οι δοκιμές μονάδα
-
απομόνωσή τους και τους εξαίρετου ψηφίσματος
-
τείνουν να χρησιμοποιήσετε πολλά mocks
-
για να απομονώσετε το συμπεριφορές που σας δεν νοιάζονται για
-
Αλλά αυτό σημαίνει ότι, εξ ορισμού
-
που δεν ελέγχετε τις διασυνδέσεις
-
και είναι είδος ένα "παραλήφθηκαν Σοφία" στο λογισμικό
-
ότι πολλές από τις ενδιαφέρουσες σφάλματα
-
παρατηρούνται κατά τις διασυνδέσεις μεταξύ τεμάχια
-
και δεν ταξινομηθούν του μέσα σε μια κλάση ή μέσα σε μια μέθοδο —
-
αυτές είναι είδος την εύκολη bugs για να παρακολουθήσετε το
-
Και στο άλλο άκρο
-
όσο περισσότερο έχετε έναντι της δοκιμής ολοκλήρωσης ακραίες
-
που έπρεπε να εξαρτώνται όλο και λιγότερο mocks
-
για αυτόν ακριβώς τον λόγο
-
Σήμερα είδαμε, εάν που δοκιμάζετε κάτι σαν
-
να πω, σε ένα service-oriented αρχιτεκτονική
-
Όταν πρέπει να αλληλεπιδράσει με την απομακρυσμένη τοποθεσία
-
στο τέλος θα έχετε
-
έχοντας να κάνουμε μια δίκαιη ποσό χλευάζει και stubbing
-
έτσι ώστε να μην βασίζεστε στο Internet
-
για να σας δοκιμές να περάσει
-
αλλά, μιλώντας γενικά
-
προσπαθείτε να καταργήσετε καθώς πολλά από τα mocks που μπορείτε
-
και αφήστε το σύστημα να εκτελέσει τον τρόπο θα εκτελεστεί στην πραγματική ζωή
-
Έτσι, τα καλά νέα είναι σας * είναι * δοκιμές τις διασυνδέσεις
-
* αλλά * όταν κάτι πάει στραβά σε μία από τις διασυνδέσεις
-
επειδή το ψήφισμά σας δεν είναι τόσο καλό
-
θα χρειαστεί περισσότερος χρόνος για να καταλάβετε τι είναι
-
Έτσι, τι είδους το bit υψηλής σειράς από αυτή την ανταλλαγή
-
είναι δεν θέλετε πραγματικά να βασιζόμαστε
-
σε πολύ μεγάλο βαθμό κάθε ένα είδος της δοκιμής
-
Εξυπηρετούν διάφορους σκοπούς και, ανάλογα με την
-
προσπαθείτε να ασκήσουν σας περισσότερες διασυνδέσεις
-
ή προσπαθείτε να βελτιωθεί σας κάλυψη πρόστιμο κόκκους
-
Αυτό επηρεάζει τον τρόπο μπορείτε να αναπτύξετε σας δοκιμαστική σουίτα
-
και σας θα εξελιχθεί αυτό μαζί με το λογισμικό σας
-
Έτσι, μας έχετε χρησιμοποιήσει ένα συγκεκριμένο σύνολο ορολογία δοκιμές
-
Είναι η ορολογία που, από και μεγάλο
-
χρησιμοποιείται ευρέως στην Κοινότητα του Rails
-
αλλά υπάρχει κάποια παραλλαγή
-
[και] ορισμένοι όροι που θα ακούγεται
-
Αν πάτε να βρείτε δουλειά κάπου
-
και σας ακούμε για δοκιμή μετάλλαξης
-
που εμείς δεν το έχετε κάνει
-
Αυτή είναι μια ενδιαφέρουσα ιδέα που ήταν, νομίζω, επινοήθηκε από
-
Ammann και Offutt, οι οποίοι έχουν, ταξινόμηση των
-
το οριστικό βιβλίο για δοκιμή λογισμικού
-
Η ιδέα είναι:
-
Ας υποθέσουμε ότι θα παρουσιάζει ένα σφάλμα που σκόπιμη μου κώδικα
-
αναγκαστική ότι κάποια δοκιμή να αποτύχει;
-
Επειδή, εάν άλλαξε, γνωρίζετε, "Εάν x" να "αν όχι x"
-
και δεν έλεγχοι αποτύχουν, τότε είτε εγώ λείπουν κάποια κάλυψη
-
ή μου app είναι πολύ περίεργη και κατά κάποιον τρόπο μη προσδιοριστικών
-
Fuzz δοκιμών, που Koushik Sen μπορεί να μιλήσει περισσότερο για
-
βασικά, αυτό είναι το "10.000 πιθήκους σε γραφομηχανές
-
ρίχνουν τυχαίας εισόδου σε σας κώδικα"
-
Τι είναι το ενδιαφέρον σχετικά με αυτό είναι ότι
-
οι δοκιμές που έχετε κάνουμε
-
ουσιαστικά, είναι κατασκευασμένο για να δοκιμάσετε το app
-
ο τρόπος που σχεδιάστηκε
-
και αυτά, γνωρίζετε, fuzz δοκιμές
-
είναι πληροφορίες για τη δοκιμή της app με τρόπους αυτό * δεν * σημαίνει να χρησιμοποιηθεί
-
Έτσι, τι συμβαίνει σε περίπτωση που το πετάμε υποβολές τεράστια φόρμας
-
Τι θα συμβεί αν τοποθετήσετε χαρακτήρες ελέγχου φορμών σας;
-
Τι θα συμβεί εάν υποβάλετε ξανά και ξανά το ίδιο πράγμα;
-
Και, Koushik έχει μια στατιστική που
-
Microsoft βρίσκει έως το 20% της τους σφάλματα
-
χρησιμοποιούν κάποια παραλλαγή των δοκιμών fuzz
-
και ότι περίπου 25 %
-
τα κοινά προγράμματα της γραμμής εντολών Unix
-
μπορεί να γίνει για να διακοπεί η λειτουργία του
-
[όταν] τίθενται μέσω επιθετική fuzz δοκιμών
-
Καθορισμός χρήσης κάλυψης είναι κάτι που εμείς δεν το έχετε κάνει
-
αλλά είναι μια άλλη ενδιαφέρουσα ιδέα
-
Η ιδέα είναι ότι σε κάθε σημείο του προγράμματος μου
-
υπάρχει θέση όπου ορίζω —
-
ή αναθέσω μια τιμή σε ορισμένες μεταβλητή —
-
και στη συνέχεια, υπάρχει μια θέση κατάντη
-
όπου προφανώς πρόκειται να καταναλώνουν την τιμή —
-
κάποιος θα χρησιμοποιήσει την τιμή
-
Μου έχουν καλυφθεί κάθε ζεύγος;
-
Με άλλα λόγια, δεv έχω δοκιμές όπου κάθε ζεύγος
-
τον ορισμό μιας μεταβλητής και χρήση τους κάπου
-
εκτελείται σε κάποιο μέρος της μου σουίτες δοκιμής
-
Μερικές φορές ονομάζεται DU-κάλυψης
-
Και άλλοι όροι που θεωρώ ότι δεν ευρύτερα χρησιμοποιούνται πλέον
-
blackbox έναντι των whitebox ή blackbox, έναντι glassbox
-
Χονδρικά, μια δοκιμή blackbox είναι ένα που είναι γραμμένο από
-
την άποψη των εξωτερικών προδιαγραφών του το πράγμα
-
[Για παράδειγμα:] "Αυτό είναι ένα πίνακα hash
-
Όταν σε ένα κλειδί θα πρέπει να πίσω μια τιμή
-
Εάν η διαγραφή του κλειδιού που η τιμή δεν πρέπει να υπάρχουν"
-
Αυτό είναι μια δοκιμή blackbox, γιατί δεν λέει
-
τίποτα σχετικά με το πώς υλοποιείται πίνακα hash
-
και αυτό δεν προσπαθούν να τονίσω την εφαρμογή
-
Μπορεί να είναι μια αντίστοιχη δοκιμή whitebox:
-
«Γνωρίζω κάτι σχετικά με τη συνάρτηση κατακερματισμού
-
και πρόκειται να δημιουργήσει επίτηδες
-
τα κλειδιά κατακερματισμού σε περιπτώσεις μου δοκιμής
-
που προκαλούν πολλές συγκρούσεις κατακερματισμού
-
για να βεβαιωθείτε ότι εγώ δοκιμές τμήμα της λειτουργικότητας"
-
Τώρα, ένα C0 δοκιμή κάλυψη εργαλείο, όπως SimpleCov
-
θα αποκαλύψει ότι, εάν όλα τα είχατε είναι blackbox δοκιμές
-
Ίσως διαπιστώσετε ότι
-
κάλυψη κώδικα σύγκρουσης δεν ήταν πλήττεται και πολύ συχνά
-
Και που θα μπορούσε να συμβουλή σας και να πω:
-
"Ok, αν θέλω πραγματικά να την ενισχύσει —
-
για μία, αν θέλω να ενισχύσει την κάλυψη για τις δοκιμές αυτές
-
τώρα πρέπει να γράψετε μια whitebox ή glassbox δοκιμή
-
Πρέπει να εξετάσετε το εσωτερικό, δείτε τι σημαίνει την εφαρμογή
-
συγκεκριμένες λύσεις
-
να προσπαθήσει να σπάσει την εφαρμογή με κακό τρόπους"
-
Έτσι, νομίζω, δοκιμές είναι ένα είδος τρόπο ζωής, σωστά;
-
Έχουμε πάρει από τη φάση της
-
"Θα οικοδομούμε το όλο θέμα και στη συνέχεια εμείς θα τη δοκιμάσετε"
-
και έχουμε πάρει στην φάση της
-
"Μας δοκιμάζετε δρόμος"
-
Δοκιμή είναι πραγματικά περισσότερο σαν εργαλείο ανάπτυξης
-
και όπως τόσα πολλά εργαλεία ανάπτυξης
-
εξαρτάται από την αποτελεσματικότητα της
-
σχετικά με το αν χρησιμοποιείτε μια καλαίσθητη τρόπο
-
Έτσι, μπορούμε να πούμε: "καλά, ας δούμε — μου κλώτσησε λάστιχα
-
Γνωρίζετε, εγώ που τροφοδοτούνται από το πρόγραμμα περιήγησης, προσπάθησα δύο πράγματα
-
(ζητωκραυγές χέρι) Μοιάζει λειτουργεί! Αναπτύξετε!"
-
Αυτό είναι, προφανώς, μια περιφρόνηση κάτι περισσότερο από ό, τι θα θέλετε να
-
Και, από τον τρόπο, ένα από τα πράγματα που ανακαλύψαμε
-
με αυτό online μαθήματος που μόλις εκκίνηση
-
Όταν 60.000 άτομα είναι εγγεγραμμένοι κατά τη διάρκεια
-
και 0,1% από αυτά τα άτομα έχουν πρόβλημα
-
θα λάβετε 60 μηνύματα ηλεκτρονικού ταχυδρομείου
-
Το πόρισμα είναι: όταν η τοποθεσία σας χρησιμοποιείται από πολλά άτομα
-
ορισμένες ηλίθια σφάλμα που δεν μπορέσατε να βρείτε
-
αλλά ότι θα μπορούσαν να έχουν βρεθεί με δοκιμή
-
πολύ γρήγορα θα μπορούσε να δημιουργήσει * μια παρτίδα * του πόνου
-
Από την άλλη πλευρά, δεν θέλετε να είναι δογματική και να πω
-
"ΕΕΕ, μέχρις ότου έχουμε κάλυψης 100% και κάθε δοκιμής είναι πράσινο
-
Εμείς οπωσδήποτε δεν θα περιλαμβάνεται"
-
Δεν είναι υγιές είτε
-
Και η ποιότητα δοκιμής
-
δεν είναι απαραίτητα ο συσχετισμός με τη δήλωση
-
εκτός εάν έχετε να πείτε κάτι
-
σχετικά με την ποιότητα των σας δοκιμών
-
μόνο και μόνο επειδή που έχετε εκτελείται κάθε γραμμή
-
δεν σημαίνει ότι έχετε ελέγξει τις ενδιαφέρουσες υποθέσεις
-
Έτσι, κάπου εν τω μεταξύ, θα μου πείτε
-
"Καλά, θα χρησιμοποιήσουμε κάλυψη εργαλεία για τον εντοπισμό
-
undertested ή κακώς έχουν δοκιμαστεί σε τμήματα του κώδικα
-
και θα τους χρησιμοποιήσουμε ως κατευθυντήρια γραμμή
-
για την ταξινόμηση της βοήθειας να βελτιωθεί μας επίπεδο συνολικής εμπιστοσύνης"
-
Να θυμάστε, όμως Αζίλ είναι σχετικά με την αποδοχή των αλλαγών
-
και διαχείρισή τους
-
Μέρος της αλλαγής είναι τα πράγματα θα αλλάξει αυτό θα προκαλέσει
-
σφάλματα που δεν μπορείτε να προβλέψετε
-
και η σωστή αντίδραση είναι:
-
Είναι αρκετά άνετο για τα εργαλεία δοκιμών
-
[αυτό] ότι μπορείτε να βρείτε γρήγορα τα λάθη αυτά
-
Γράψτε μια δοκιμή που αναπαράγει το σφάλμα
-
Και στη συνέχεια, να τη δοκιμή πράσινο
-
Μπορείτε στη συνέχεια θα το διορθώσετε πραγματικά
-
Αυτό σημαίνει ότι, ο τρόπος που πραγματικά μπορείτε να διορθώσετε ένα σφάλμα είναι
-
Εάν δημιουργήσατε μια δοκιμή που σωστά απέτυχε
-
για να αναπαραγάγετε το σφάλμα
-
και στη συνέχεια επανήλθε και καθορισθεί κώδικα
-
για να κάνετε τις δοκιμές αυτές περνούν
-
Ομοίως, δεν θέλετε να πω
-
"Καλά, μονάδα δοκιμές σας δώσει καλύτερη κάλυψη
-
Τους κάνετε πιο εμπεριστατωμένη και λεπτομερή
-
Ας εστιασθεί όλων μας ενέργειας που"
-
σε αντίθεση με
-
"Ω, εστιασθεί δοκιμές ολοκλήρωσης
-
επειδή είναι πιο ρεαλιστική, σωστά;
-
Αντικατοπτρίζουν αυτό τον πελάτη που είπε θέλουν
-
Έτσι, εάν οι δοκιμές ολοκλήρωσης
-
εξ ορισμού μας σύσκεψη ανάγκη πελάτη".
-
Και πάλι, δύο άκρα είναι είδος ανθυγιεινά
-
επειδή κάθε μία από αυτές μπορεί να εντοπίσετε προβλήματα
-
που θα η απόκλιση από την άλλη
-
Έτσι, έχοντας έναν καλό συνδυασμό αυτών
-
είναι το είδος του σύνολο είναι όλα σχετικά με
-
Είναι το τελευταίο πράγμα που θέλω να αφήσω με, νομίζω ότι
-
όσον αφορά τις δοκιμές, είναι "TDD έναντι
-
Αυτό που αποκαλώ συμβατικών εντοπισμού σφαλμάτων —
-
δηλαδή, ο τρόπος που το ότι όλοι μας είδος κάνουμε
-
ακόμη και αν λέμε ότι δεν το κάνουμε"
-
και όλοι προσπαθούμε να πάρετε καλύτερα, δικαίωμα;
-
Είμαστε όλοι είδος στο περιθώριο βιβλιοδεσίας
-
Ορισμένοι από εμάς εξετάζουν τα αστέρια
-
προσπαθεί να βελτιώσει τις πρακτικές
-
Αλλά, έχοντας τώρα έζησε με αυτό για 3 ή 4 ετών ο ίδιος
-
και — θα είναι έντιμη — πριν από 3 χρόνια δεν κάνω TDD
-
Θα το κάνουμε τώρα, επειδή θεωρώ ότι είναι καλύτερο
-
και εδώ είναι μου απόσταξη, γιατί νομίζω ότι δουλεύει για μένα
-
Συγγνώμη, τα χρώματα είναι λίγο περίεργο
-
αλλά στην αριστερή στήλη του πίνακα
-
[] λέει "Συμβατικό εντοπισμού σφαλμάτων"
-
και η δεξιά πλευρά λέει "TDD"
-
Τι είναι λοιπόν ο τρόπος που χρησιμοποίησα για να γράψετε κώδικα;
-
Ίσως ορισμένοι από εσάς εξακολουθεί να κάνετε αυτό
-
Γράφω ένα σωρό γραμμές
-
ίσως μερικές δεκάδες γραμμές κώδικα
-
Είμαι * βεβαιωθείτε ότι * είναι σωστή —
-
Εννοώ, μου * am * ένα καλό προγραμματιστή, σωστά;
-
Αυτό δεν είναι που σκληρά
-
Μπορώ να τον εκτελέσω – δεν λειτουργεί
-
OK, φωτιά μέχρι το πρόγραμμα εντοπισμού σφαλμάτων – αρχίζουν να βάζουν στο του printf
-
Εάν σας χρησιμοποιεί TDD τι θα κάνω αντίθετα;
-
Καλά θα γράφω ένα * μερικές * γραμμές κώδικα, έχοντας γράψει πρώτα μια δοκιμή
-
Τόσο ως σύντομα, όπως η δοκιμή πηγαίνει από κόκκινο σε πράσινο
-
Γνωρίζω ότι απέστειλα ο κωδικός που εργάζεται —
-
ή τουλάχιστον τα μέρη της συμπεριφοράς που θα είχα κατά νουν
-
Τα τμήματα της συμπεριφοράς έργο, διότι είχα μια δοκιμή
-
OK, πίσω στο συμβατικό εντοπισμού σφαλμάτων:
-
Εκτελώ προγράμματος μου, που προσπαθεί να βρει τα σφάλματα
-
Ξεκινώ την τοποθέτηση στο printf του παντού
-
για να εκτυπώσετε τις τιμές των πραγμάτων
-
που είναι πολύ διασκεδαστικό
-
Όταν προσπαθείτε να διαβάσετε τους
-
εκτός από τις 500 γραμμές της εξόδου του αρχείου καταγραφής
-
ότι θα λάβετε σε ένα Σιδηροτροχιές app
-
προσπαθούμε να βρούμε * σας * του printf
-
γνωρίζετε, "γνωρίζω τι θα κάνω —
-
Θα σε βάλω σε 75 αστερίσκους πριν και μετά
-
Αυτό θα καταστήσει αναγνώσιμο"(γέλια)
-
Ποιος δεν — Ok, να αυξήσει τα χέρια σας, εάν δεν το κάνετε!
-
Ευχαριστώ πολύ για σας εντιμότητα. (γέλια) Ok.
-
Ή — Ή θα μπορούσε να κάνει κάτι άλλο που πρέπει, θα μπορούσα να πω:
-
Αντί να εκτυπώσετε την τιμή μιας μεταβλητής
-
γιατί δεν γράφω μια δοκιμή που επιθεωρεί το
-
στο η προσδοκία που πρέπει να
-
και θα γνωρίζω αμέσως στο φωτεινό κόκκινο γράμματα
-
Εάν δεν πληρούται αυτή την προσμονή
-
Εντάξει, εγώ πίσω για το συμβατικό debugging πλευρά:
-
Εγώ ξεσπάσει το big guns: μου απομακρύνετε το Ruby πρόγραμμα εντοπισμού σφαλμάτων
-
Ορίζω ένα σημείο διακοπής εντοπισμού σφαλμάτων, και να ξεκινήσω τώρα * tweaking * και να πω
-
"Ω, ας δούμε, θα πρέπει να ξεπεράσουμε αυτή τη δήλωση «αν»
-
Συνεπώς, πρέπει να οριστεί ότι πράγμα
-
Ω, πρέπει να καλέσετε τη μέθοδο αυτή και επομένως θα πρέπει να..."
-
Όχι!
-
Εγώ * θα μπορούσε να * αντίθετα — αν πρόκειται να το κάνουμε αυτό έτσι κι αλλιώς —
-
Ας κάνουμε αυτό απλώς, σε ένα αρχείο, η οποία έχει συσταθεί ορισμένες mocks και τα αποκόμματα
-
για να ελέγξετε τη διαδρομή κώδικα, να ακολουθήσουν τον δρόμο που θέλω
-
Και τώρα, "Ok, σίγουρα θα έχετε καθοριστεί!
-
Θα πάρω από το πρόγραμμα εντοπισμού σφαλμάτων, το εκτελέσετε ξανά όλα! "
-
Και, φυσικά, 9 φορές από 10, δεν διορθώσετε αυτό
-
ή σας είδος εν μέρει έχει καθορισθεί αλλά εντελώς δεν μπορείτε να διορθώσετε το
-
και τώρα πρέπει να κάνετε μη αυτόματη όλα αυτά όλα άνω ξανά
-
ή το * έχω ήδη μια δέσμη των δοκιμών
-
και σας μπορούν απλώς επανεκτέλεση τους αυτόματα
-
και θα μπορούσα, εάν ορισμένα από αυτά δεν
-
"Ω, σας διόρθωσε το όλο θέμα
-
Κανένα πρόβλημα, θα μόλις μετάβαση πίσω!"
-
Έτσι, το συμπέρασμα είναι ότι
-
γνωρίζετε, σας * θα μπορούσε να * το κάνουμε στην αριστερή πλευρά
-
αλλά χρησιμοποιείτε τις ίδιες τεχνικές και στις δύο περιπτώσεις
-
Η μόνη διαφορά είναι, σε μία περίπτωση το κάνετε με μη αυτόματο τρόπο
-
που είναι βαρετό και επιρρεπής
-
Στην άλλη περίπτωση που κάνετε λίγο περισσότερη εργασία
-
αλλά μπορείτε να το κάνετε αυτόματη και επαναλαμβανόμενης
-
και έχουν, ξέρετε, ορισμένες υψηλή εμπιστοσύνη
-
ότι, καθώς αλλάζετε τα πράγματα στον κώδικά σας
-
δεν γίνεται ανασυσκευασία πράγματα που χρησιμοποιούνται για την επεξεργασία
-
και ουσιαστικά είναι πιο παραγωγικοί
-
Έτσι κάνετε όλα τα ίδια πράγματα
-
αλλά με, ένα είδος, το «δέλτα"επιπλέον εργασία
-
χρησιμοποιείτε σας προσπάθεια σε πολύ υψηλότερο μόχλευση
-
Γι είδος άποψή μου είναι καλό να TDD
-
Είναι πραγματικά, να μην απαιτεί νέες δεξιότητες
-
Αυτό ακριβώς απαιτεί [] να refactor τις υπάρχουσες δεξιότητές σας
-
Επίσης, προσπάθησε όταν σας — ξανά, ειλικρινείς Εξομολογήσεις, δεξιά; —
-
όταν άρχισα να κάνει αυτό ήταν σαν
-
"Ok, εγώ πρόκειται να διδάσκει μια σειρά μαθημάτων επί σιδηροτροχιών
-
Εγώ πραγματικά θα πρέπει να επικεντρωθεί στις δοκιμές
-
Έτσι πήγα πίσω με κάποιον κώδικα που έστειλα επιστολή
-
Αυτό ήταν * εργασίας * — γνωρίζετε, που ήταν αξιοπρεπή κώδικα —
-
και άρχισα προσπαθώντας να γράψει δοκιμές για
-
και ήταν * τόσο επίπονη *
-
επειδή ο κώδικας δεν ήταν γραμμένο με τρόπο που ήταν αναπτύξετε
-
Υπήρχαν κάθε είδους αλληλεπιδράσεων
-
Υπήρχαν, όπως, ένθετα conditionals
-
Και αν θέλετε να απομονώσετε μια ιδιαίτερη δήλωση
-
και να το δοκιμάσετε — δοκιμή έναυσμα — μόνο η δήλωση
-
το ποσό της πράγματα που θα πρέπει να οριστεί στον σας δοκιμής
-
να συμβεί —
-
να θυμάστε όταν μίλησε για ναυάγια διακωμωδώ αμαξοστοιχίας —
-
πρέπει να ορίσετε όλες τις εν λόγω υποδομή
-
απλώς, για να αποκτήσετε το * μία * γραμμή κώδικα
-
και να που κάνετε και να πας
-
"Gawd, δοκιμές πραγματικά δεν είναι αξίζει!
-
Έγραψα 20 γραμμές του προγράμματος εγκατάστασης
-
έτσι ώστε θα μπορούσαν να δοκιμάζω δύο γραμμές στη μου συνάρτηση!"
-
Αυτό που πραγματικά λέγοντάς σας — όπως αντιλαμβάνομαι τώρα —
-
είναι η συνάρτηση σας είναι * κακό *
-
Είναι μια κακή γραπτή συνάρτηση
-
Δεν πρόκειται για μια συνάρτηση αναπτύξετε
-
Ότι το πήρε πάρα πολλά κινητά στοιχεία
-
των οποίων εξαρτήσεις * μπορεί να * έχει διακοπεί
-
Δεν υπάρχει καμία ραφές μου συνάρτησης
-
αυτό επιτρέψτε μου να μεμονωμένα, να ελέγξετε τις διαφορετικές συμπεριφορές
-
Και μόλις ξεκινήσετε να κάνει την πρώτη ανάπτυξη δοκιμής
-
γιατί πρέπει να γράψετε σας δοκιμές σε μικρά κομμάτια
-
είδος του θέτει το ζήτημα αυτό να εξαφανιστούν
-
Έτσι ώστε να έχει μου Θεοφάνια