0:00:00.057,0:00:01.092 Έτσι, δαπανήσαμε ένα σύνολο μικρών στρογγυλών του χρόνου 0:00:01.092,0:00:03.032 κατά τα τελευταία δύο διαλέξεις 0:00:03.032,0:00:05.082 μιλάμε για διαφορετικά είδη των δοκιμών 0:00:05.082,0:00:08.021 σχετικά με την μονάδα δοκιμές έναντι της δοκιμής ολοκλήρωσης 0:00:08.021,0:00:10.010 Μας μίλησε σχετικά με τον τρόπο χρήσης RSpec 0:00:10.010,0:00:12.049 για να απομονώσετε πραγματικά τα τμήματα του κώδικα που θέλετε να ελέγξετε 0:00:12.049,0:00:14.090 έχετε επίσης, το γνωρίζετε, λόγω σπίτι 3, 0:00:14.090,0:00:18.017 και άλλα πράγματα, όπως το κάνουμε BDD, 0:00:18.017,0:00:20.062 όταν μας έχετε χρησιμοποιούν Αγγούρι για να ενεργοποιήσετε τις ιστορίες του χρήστη 0:00:20.062,0:00:22.095 σε, ουσιαστικά, οι δοκιμές ολοκλήρωσης και αποδοχή 0:00:22.095,0:00:25.061 Έτσι που έχετε δει δοκιμές σε δυο διαφορετικά επίπεδα 0:00:25.061,0:00:27.063 και ο στόχος εδώ είναι είδος για να κάνουμε μερικές παρατηρήσεις 0:00:27.063,0:00:29.092 να, γνωρίζετε, ας αντιγράφων ασφαλείας λίγο bit 0:00:29.092,0:00:33.001 Δείτε τη συνολική εικόνα και μπορείτε να συνενώσετε αυτά τα πράγματα 0:00:33.001,0:00:34.095 Έτσι αυτό είδος εκτείνεται σε υλικό 0:00:34.095,0:00:37.000 που καλύπτει τρεις ή τέσσερις ενότητες στο βιβλίο 0:00:37.000,0:00:39.061 και θέλω να χτυπήσει μόνο τα υψηλά σημεία σε διάλεξη 0:00:39.061,0:00:41.046 Έτσι μια ερώτηση που προέρχεται 0:00:41.046,0:00:43.025 Είμαι βέβαιος ότι κατέληξε για εσάς 0:00:43.025,0:00:44.052 όπως σας κάνουν σπίτι 0:00:44.052,0:00:45.069 είναι: "πόσο δοκιμές είναι αρκετά;" 0:00:45.069,0:00:48.049 Και, δυστυχώς, για πολύ καιρό 0:00:48.049,0:00:51.009 είδος του αν το ερώτημα στη βιομηχανία 0:00:51.009,0:00:52.017 η απάντηση ήταν βασικά 0:00:52.017,0:00:53.017 «Καλά, έχουμε μια προθεσμία αποστολής, 0:00:53.017,0:00:54.099 Έτσι όμως η δοκιμή πολύ μπορούμε να κάνουμε 0:00:54.099,0:00:56.066 πριν από την προθεσμία αυτή, αυτό είναι πόσο." 0:00:56.066,0:00:58.015 Αυτό είναι τι έχετε χρόνο για. 0:00:58.015,0:01:00.002 Έτσι, ξέρετε, ότι μια μικρή αναστροφή 0:01:00.002,0:01:01.011 προφανώς δεν είναι πολύ καλή 0:01:01.011,0:01:02.054 Έτσι, μπορείτε να κάνετε λίγο καλύτερα, δικαίωμα; 0:01:02.054,0:01:03.070 Είστε εκεί κάποια στατική μέτρα 0:01:03.070,0:01:06.003 όπως πόσες γραμμές κώδικα σας app διαθέτει 0:01:06.003,0:01:08.021 και πόσες γραμμές των δοκιμών που έχετε; 0:01:08.021,0:01:10.029 Και δεν είναι ασυνήθιστο στη βιομηχανία 0:01:10.029,0:01:12.068 σε ένα καλά κομμάτι λογισμικού 0:01:12.068,0:01:14.057 για τον αριθμό των γραμμών των δοκιμών 0:01:14.057,0:01:17.073 να υπερβαίνουν κατά πολύ τον αριθμό των γραμμών του κώδικα 0:01:17.073,0:01:19.075 Έτσι, ακέραιο πολλαπλάσιο δεν είναι ασυνήθιστο 0:01:19.075,0:01:21.084 Και θεωρώ ακόμη και για είδος της, γνωρίζετε, 0:01:21.084,0:01:23.022 έρευνα κώδικα ή παλι 0:01:23.022,0:01:26.085 ποσοστό, γνωρίζετε, ίσως 1.5 δεν είναι παράλογο 0:01:26.085,0:01:30.005 έτσι μία δυόμισι φορές το ποσό των Κώδικας δοκιμής 0:01:30.005,0:01:32.024 όπως έχετε κωδικό εφαρμογής 0:01:32.024,0:01:34.022 Και σε πολλά συστήματα παραγωγής 0:01:34.022,0:01:35.027 όπου είναι πολύ συμπαθητικοί πληροφορίες για τη δοκιμή 0:01:35.027,0:01:36.091 είναι πολύ υψηλότερα από αυτό 0:01:36.091,0:01:38.015 Έτσι ίσως καλύτερα να θέσω μια ερώτηση: 0:01:38.015,0:01:39.047 Αντί να λέει "πόσο δοκιμές είναι αρκετά;" 0:01:39.047,0:01:42.049 είναι να ζητήσουμε από το "πόσο καλές είναι οι δοκιμές που κάνω τώρα; 0:01:42.049,0:01:44.035 Πώς διεξοδική είναι;" 0:01:44.035,0:01:45.056 Αργότερα σε αυτό το εξάμηνο 0:01:45.056,0:01:46.056 Καθηγητής Sen θα μιλήσουμε για 0:01:46.056,0:01:48.018 λίγο σχετικά με τυπικές μεθόδους 0:01:48.018,0:01:50.085 και ταξινόμηση του τι είναι στα σύνορα της δοκιμές και τον εντοπισμό σφαλμάτων 0:01:50.085,0:01:52.068 Αλλά δύο πράγματα που μπορούμε να μιλήσουμε για 0:01:52.068,0:01:54.007 με βάση αυτό που ήδη γνωρίζετε 0:01:54.007,0:01:57.074 είναι ορισμένες βασικές έννοιες σχετικά με τη δοκιμή κάλυψης 0:01:57.074,0:01:59.054 Και αν και θα ήθελα να πω 0:01:59.054,0:02:01.001 γνωρίζετε, έχετε λέμε όλα μαζί 0:02:01.001,0:02:03.003 Τυπικές μέθοδοι, πραγματικά δεν λειτουργούν σε μεγάλα συστήματα 0:02:03.003,0:02:05.033 Πιστεύω ότι η δήλωση αυτή, κατά τη γνώμη μου προσωπική 0:02:05.033,0:02:07.001 αληθεύει όντως πολύ λιγότερο από ό, τι ήταν 0:02:07.001,0:02:09.019 Πιστεύω ότι υπάρχουν ορισμένες συγκεκριμένες θέσεις 0:02:09.019,0:02:10.052 ιδιαίτερα σε δοκιμές και τον εντοπισμό σφαλμάτων 0:02:10.052,0:02:12.084 όπου τυπικές μέθοδοι να προχωρήσει γρήγορα 0:02:12.084,0:02:15.075 και Koushik Sen, είναι ένας από τους ηγέτες που 0:02:15.075,0:02:17.094 Έτσι θα έχετε την ευκαιρία να ακούσουμε περισσότερα σχετικά με αυτό αργότερα 0:02:17.094,0:02:21.043 αλλά προς το παρόν νομίζω, είδους ψωμί και βουτύρου 0:02:21.043,0:02:22.073 Ας είναι λόγος για κάλυψη μέτρησης 0:02:22.073,0:02:24.047 επειδή αυτό είναι όπου το καουτσούκ πληροί της οδού 0:02:24.047,0:02:26.020 όσον αφορά τον τρόπο σας θα αξιολογηθούν 0:02:26.020,0:02:28.063 Εάν το κάνετε αυτό για πραγματικά χρήματα 0:02:28.063,0:02:29.052 Τι είναι λοιπόν κάποια βασικά στοιχεία; 0:02:29.052,0:02:30.078 Εδώ είναι μια πραγματικά απλή κλάση που μπορείτε να χρησιμοποιήσετε 0:02:30.078,0:02:32.090 να μιλάμε για διαφορετικούς τρόπους για τη μέτρηση 0:02:32.090,0:02:34.080 Πώς μας δοκιμής καλύπτει αυτόν τον κωδικό 0:02:34.080,0:02:36.063 Και υπάρχουν μερικά διαφορετικά επίπεδα 0:02:36.063,0:02:37.085 με διαφορετικές ορολογίες 0:02:37.085,0:02:40.073 Δεν είναι πραγματικά καθολική σε όλα τα σπίτια του λογισμικού 0:02:40.073,0:02:42.064 Αλλά ένα κοινό σύνολο ορολογία 0:02:42.064,0:02:43.064 ότι εκθέτει το βιβλίο 0:02:43.064,0:02:44.068 είναι θα μπορούσε να μιλάμε για S0 0:02:44.068,0:02:47.045 όπου μόλις θα σημαίνουν σας έχετε ονομάζεται μία φορά κάθε μέθοδος 0:02:47.045,0:02:50.045 Έτσι ώστε να γνωρίζετε, εάν καλέσετε foo και κλήση ράβδου, είστε έτοιμοι 0:02:50.045,0:02:52.015 Αυτό είναι κάλυψη S0: δεν τρομερά εις βάθος 0:02:52.015,0:02:54.068 Είναι λίγο πιο αυστηρά, S1, 0:02:54.068,0:02:56.013 μπορούμε να πούμε, μας κλήση της κάθε μεθόδου 0:02:56.013,0:02:57.028 από κάθε τόπο που θα μπορούσε να ονομαστεί 0:02:57.028,0:02:58.082 Συνεπώς τι σημαίνει αυτό; 0:02:58.082,0:03:00.007 Αυτό σημαίνει, για παράδειγμα 0:03:00.007,0:03:01.012 δεν είναι αρκετό για την κλήση ράβδου 0:03:01.012,0:03:02.095 Έχετε για να βεβαιωθείτε ότι έχετε να το ονομάσουμε 0:03:02.095,0:03:05.057 τουλάχιστον μία φορά από εδώ 0:03:05.057,0:03:07.016 και αυτό απαιτεί μία φορά 0:03:07.016,0:03:10.037 από οποιαδήποτε εξωτερικά καθήκοντα που μπορεί να θέσει το 0:03:10.037,0:03:12.081 C0, που είναι ό, τι τα μέτρα που SimpleCov 0:03:12.081,0:03:15.099 (όσοι από εσάς έχετε πάρει SimpleCov και εκτέλεση) 0:03:15.099,0:03:18.052 ουσιαστικά, λέει που έχετε εκτελείται κάθε δήλωση 0:03:18.052,0:03:20.004 έχετε θίξατε κάθε δήλωση στον κώδικά σας μία φορά 0:03:20.004,0:03:22.048 Αλλά την επιφύλαξη εκεί είναι ότι 0:03:22.048,0:03:25.058 conditionals μετράνε πραγματικά μόνο από μία πρόταση 0:03:25.058,0:03:28.091 Οπότε, αν εσείς, ανεξάρτητα από το ποια υποκατάστημα αυτό "Εάν" που τραβήξατε 0:03:28.091,0:03:31.074 όσο διάστημα θίξατε ένα από το άλλο σκέλος 0:03:31.074,0:03:33.035 που έχετε εκτελείται η "Εάν «δήλωση 0:03:33.035,0:03:35.066 Συνεπώς, ακόμη και C0 είναι ακόμη, γνωρίζετε, είδος επιφανειακή κάλυψης 0:03:35.066,0:03:37.026 Αλλά, όπως θα δούμε 0:03:37.026,0:03:39.023 ο τρόπος που θα θέλετε να διαβάσετε πληροφορίες είναι: 0:03:39.023,0:03:41.079 Εάν λαμβάνετε * κακό * κάλυψη σε επίπεδο C0 0:03:41.079,0:03:44.007 στη συνέχεια έχετε πραγματικά πολύ άσχημα κάλυψης 0:03:44.007,0:03:46.008 Επομένως, εάν δεν είστε είδος των αποφάσεων 0:03:46.008,0:03:47.037 Αυτό το απλό επίπεδο επιφανειακή κάλυψης 0:03:47.037,0:03:50.002 στη συνέχεια δοκιμής σας είναι πιθανώς ελλειπείς 0:03:50.002,0:03:51.091 C1 είναι το επόμενο βήμα επάνω από αυτό 0:03:51.091,0:03:53.071 Θα μπορούσαμε να πούμε: 0:03:53.071,0:03:55.019 Λοιπόν, πρέπει να λάβουμε κάθε υποκατάστημα προς τις δύο κατευθύνσεις 0:03:55.019,0:03:56.061 Έτσι, όταν κάνουμε αυτή τη δήλωση "if" 0:03:56.061,0:03:58.066 θα πρέπει να βεβαιωθείτε ότι 0:03:58.066,0:03:59.092 θα κάνουμε το "Εάν x" μέρος μία φορά 0:03:59.092,0:04:05.013 και το "αν δεν x" τμήμα τουλάχιστον μία φορά σε πληρούν C1 0:04:05.013,0:04:08.036 Μπορείτε να προσθέσετε που με απόφαση κάλυψη 0:04:08.036,0:04:09.063 λέει: λοιπόν, αν τώρα να... 0:04:09.063,0:04:12.036 Εάν έχουμε δηλώσεων "if" όπου η Συνθήκη 0:04:12.036,0:04:13.088 αποτελείται από πολλούς όρους 0:04:13.088,0:04:15.071 θα πρέπει να βεβαιωθείτε ότι κάθε δευτερεύουσα έκφραση 0:04:15.071,0:04:17.097 έχει αξιολογηθεί τις δύο κατευθύνσεις 0:04:17.097,0:04:19.067 Με άλλα λόγια, αυτό σημαίνει ότι 0:04:19.067,0:04:22.041 Αν τώρα την αποτυχία αυτή δήλωση "if" 0:04:22.041,0:04:24.034 θα πρέπει να βεβαιωθείτε ότι αυτό αποτύχει, τουλάχιστον μία φορά 0:04:24.034,0:04:26.044 επειδή y ήταν false σε τουλάχιστον μια φορά επειδή z ήταν ψευδείς 0:04:26.044,0:04:28.088 Με άλλα λόγια, κάθε δευτερεύουσα έκφραση που θα μπορούσε να 0:04:28.088,0:04:31.021 ανεξάρτητα, αλλάζουν το αποτέλεσμα της κατάστασης 0:04:31.021,0:04:34.048 πρέπει να ασκείται κατά τις δύο κατευθύνσεις 0:04:34.048,0:04:36.003 Και, στη συνέχεια, 0:04:36.003,0:04:38.052 είδος, το ένα, γνωρίζετε, πολλοί άνθρωποι προσβλέπουν σε 0:04:38.052,0:04:41.026 αλλά υπάρχει διαφωνία σχετικά με τον τρόπο πολύ πιο αξιόλογες είναι 0:04:41.026,0:04:42.083 είναι μπορείτε να κάθε διαδρομή μέσω του κώδικα 0:04:42.083,0:04:45.053 Προφανώς, αυτό είναι είδος δύσκολο επειδή 0:04:45.053,0:04:48.033 τείνει να είναι εκθετική του αριθμού των συνθηκών 0:04:48.033,0:04:53.008 Και γενικά είναι δύσκολο 0:04:53.008,0:04:55.031 να αξιολογήσει εάν έχετε λάβει κάθε διαδρομή μέσω του κώδικα 0:04:55.031,0:04:57.001 Υπάρχουν τυπικές τεχνικές που μπορείτε να χρησιμοποιήσετε 0:04:57.001,0:04:58.083 να σας πω όπου βρίσκονται οι οπές 0:04:58.083,0:05:01.031 όμως είναι ότι, η γραμμή κάτω 0:05:01.031,0:05:03.004 σε πιο εμπορικού λογισμικού σπίτια 0:05:03.004,0:05:04.089 θα έλεγα, δεν υπάρχει πλήρης συναίνεση 0:05:04.089,0:05:06.070 σχετικά με τον τρόπο πολύ πιο πολύτιμο C2 είναι 0:05:06.070,0:05:08.068 σε σύγκριση με C0 ή C1 0:05:08.068,0:05:10.013 Έτσι, πιστεύω ότι, για την τάξη μας 0:05:10.013,0:05:11.067 σας να εκτεθεί στην ιδέα 0:05:11.067,0:05:13.020 για το πώς μπορείτε να χρησιμοποιήσετε πληροφορίες κάλυψης 0:05:13.020,0:05:16.040 SimpleCov εκμεταλλεύεται ορισμένες ενσωματωμένες δυνατότητες Ruby 0:05:16.040,0:05:18.009 για να σας δώσω C0 κάλυψης 0:05:18.009,0:05:19.062 [] Δεν πολύ ωραία εκθέσεις 0:05:19.062,0:05:21.025 Μπορούμε να το δούμε αυτό είδος 0:05:21.025,0:05:22.096 στο επίπεδο των μεμονωμένων γραμμών στο αρχείο σας 0:05:22.096,0:05:24.091 Μπορείτε να δείτε τι είναι σας κάλυψης 0:05:24.091,0:05:27.015 και πιστεύω ότι αυτό είναι είδος, γνωρίζετε 0:05:27.015,0:05:31.018 μια καλή αρχή για πού είμαστε 0:05:31.018,0:05:33.076 Έτσι, έχοντας δείτε ένα είδος διαφορετικές γεύσεις των δοκιμών 0:05:33.076,0:05:37.020 Ενίσχυση των πίσω και Κοιτώντας πίσω από την μεγάλη εικόνα 0:05:37.020,0:05:38.098 Τι είναι το διαφορετικό είδος των δοκιμών 0:05:38.098,0:05:40.078 που έχουμε δει συγκεκριμένα; 0:05:40.078,0:05:42.032 και τι είναι μειονεκτημάτων 0:05:42.032,0:05:43.089 μεταξύ χρησιμοποιώντας αυτά τα διαφορετικά είδη δοκιμές; 0:05:43.089,0:05:47.016 Έτσι έχουμε δει στο επίπεδο των επιμέρους κλάδους ή μεθόδους 0:05:47.016,0:05:50.009 χρησιμοποιούμε RSpec, με την εκτεταμένη χρήση χλευάζει και stubbing 0:05:50.009,0:05:53.004 Έτσι, για παράδειγμα, όταν κάνουμε μέθοδοι δοκιμών του μοντέλου 0:05:53.004,0:05:55.057 Αυτό θα είναι ένα παράδειγμα της μονάδας δοκιμές 0:05:55.057,0:05:59.025 Κάναμε επίσης κάτι που είναι αρκετά παρόμοια με 0:05:59.025,0:06:00.097 λειτουργική ή λειτουργική μονάδα δοκιμής 0:06:00.097,0:06:02.071 Όταν υπάρχουν περισσότερες από μία λειτουργική μονάδα συμμετέχουν 0:06:02.071,0:06:04.065 Έτσι, για παράδειγμα, όταν κάναμε προδιαγραφές του ελεγκτή 0:06:04.065,0:06:07.085 το είδαμε — μας προσομοιώσετε μια ενέργεια POST 0:06:07.085,0:06:09.029 αλλά να θυμάστε ότι η ενέργεια POST 0:06:09.029,0:06:10.086 πρέπει να περάσει το υποσύστημα δρομολόγησης 0:06:10.086,0:06:12.042 πριν από αυτό παίρνει στον ελεγκτή 0:06:12.042,0:06:14.048 Μόλις γίνει ο ελεγκτής θα προσπαθήσει για την απόδοση μιας προβολής 0:06:14.048,0:06:16.007 Έτσι στην πραγματικότητα υπάρχει άλλα τεμάχια 0:06:16.007,0:06:17.067 που συνεργάζονται με τον ελεγκτή 0:06:17.067,0:06:19.099 ότι πρέπει να εργάζονται για προδιαγραφές του ελεγκτή να περάσει 0:06:19.099,0:06:21.051 Έτσι, που είναι κάπου inbetween: 0:06:21.051,0:06:23.035 Όταν κάνουμε περισσότερο από μία μόνο μέθοδος 0:06:23.035,0:06:25.000 αγγίζει περισσότερο από μία και μοναδική κλάση 0:06:25.000,0:06:27.000 αλλά εμείς, ακόμη, συγκέντρωση προσοχή [μας] 0:06:27.000,0:06:28.088 σε ένα σχετικά στενό slice του συστήματος σε μια εποχή 0:06:28.088,0:06:31.044 και εξακολουθεί να χρησιμοποιούμε την χλευάζει και stubbing εκτεταμένα 0:06:31.044,0:06:35.030 για να απομονώσετε είδους η συμπεριφορά που θέλουμε για τη δοκιμή 0:06:35.030,0:06:36.091 Και στη συνέχεια στο επίπεδο της σενάρια Αγγούρι 0:06:36.091,0:06:38.047 αυτά είναι περισσότερο σαν ολοκλήρωσης ή των δοκιμών του συστήματος 0:06:38.047,0:06:41.069 Αυτά ασκούν πλήρεις διαδρομές σε όλη την εφαρμογή 0:06:41.069,0:06:43.044 Αγγίζουν πιθανότατα πολύ διαφορετικές ενότητες 0:06:43.044,0:06:46.003 Τους κάνετε ελάχιστη χρήση των mocks και των στελεχών 0:06:46.003,0:06:48.032 Επειδή μέρος του στόχου της μια ολοκλήρωση δοκιμής 0:06:48.032,0:06:50.099 είναι ακριβώς για να ελέγξετε την αλληλεπίδραση μεταξύ τεμαχίων 0:06:50.099,0:06:53.021 Έτσι, δεν θέλετε να το απόκομμα ή να ελέγξετε αυτές τις αλληλεπιδράσεις 0:06:53.021,0:06:54.080 Θέλετε να αφήσετε το σύστημα να κάνει πραγματικά 0:06:54.080,0:06:56.030 Τι θα κάνει πραγματικά 0:06:56.030,0:06:58.025 Εάν αυτό ήταν ένα σενάριο που συμβαίνουν στην παραγωγή 0:06:58.025,0:07:00.069 Πώς θα συγκρίνουμε αυτά τα διαφορετικά είδη δοκιμές; 0:07:00.069,0:07:02.038 Υπάρχει λίγα διαφορετικούς άξονες που μπορούμε να εξετάσουμε 0:07:02.038,0:07:05.007 Ένας από αυτούς είναι χρόνο και αν χρειαστεί να εκτελέσετε 0:07:05.007,0:07:06.090 Τώρα, τόσο το RSpec όσο και το Αγγούρι 0:07:06.090,0:07:09.013 έχουν, είδος, χρόνους υψηλό εκκίνησης και πράγματα όπως αυτή 0:07:09.013,0:07:10.008 Αλλά, όπως θα δείτε 0:07:10.008,0:07:11.090 καθώς αρχίζετε προσθήκη όλο και περισσότερες δοκιμές RSpec 0:07:11.090,0:07:14.038 και τη χρήση autotest ώστε να εκτελούνται στο παρασκήνιο 0:07:14.038,0:07:17.088 σε μεγάλο βαθμό, μια φορά RSpec είδος ξεκινήσει το εφαλτήριο 0:07:17.088,0:07:19.092 εκτελείται πολύ γρήγορα προδιαγραφές 0:07:19.092,0:07:21.095 ότι η εκτέλεση Αγγούρι δυνατότητες μόλις καθυστερεί πολύ 0:07:21.095,0:07:24.059 όπως ουσιαστικά πυρκαγιές σας ολόκληρο εφαρμογής 0:07:24.059,0:07:26.010 Και αργότερα σε αυτό το εξάμηνο 0:07:26.010,0:07:28.086 θα δούμε ένας τρόπος για να Αγγούρι ακόμα χαμηλότερες — 0:07:28.086,0:07:30.070 που είναι να πετύχει την πυρκαϊά μέχρι ένα ολόκληρο πρόγραμμα περιήγησης 0:07:30.070,0:07:33.045 βασικά ενεργεί σαν μια μαριονέτα, απομακρυσμένο έλεγχο Firefox 0:07:33.045,0:07:35.083 Έτσι μπορείτε να ελέγξετε κώδικα Javascript 0:07:35.083,0:07:37.000 Θα κάνουμε το ότι όταν εμείς πραγματικά — 0:07:37.000,0:07:40.032 Πιστεύω ότι θα είμαστε σε θέση να εργαστείτε με τους φίλους μας σε SourceLabs 0:07:40.032,0:07:42.080 Έτσι μπορείτε να το κάνετε στο σύννεφο — που θα είναι συναρπαστικές 0:07:42.080,0:07:45.083 Έτσι, "εκτέλεση fast" έναντι "αργή εκτέλεση" 0:07:45.083,0:07:46.068 Ανάλυση: 0:07:46.068,0:07:48.025 Εάν το σφάλμα συμβαίνει σε σας μονάδα δοκιμές 0:07:48.025,0:07:49.075 συνήθως είναι πολύ εύκολη 0:07:49.075,0:07:52.029 για να υπολογίσει και να παρακολουθήσετε αυτό το αρχείο προέλευσης αυτού του σφάλματος είναι 0:07:52.029,0:07:53.071 επειδή οι δοκιμές είναι τόσο απομονωμένος 0:07:53.071,0:07:56.025 Σας έχετε stubbed που ό, τι δεν έχει σημασία 0:07:56.025,0:07:58.025 και σας εστιάζοντας μόνο τη συμπεριφορά του ενδιαφέροντος 0:07:58.025,0:07:59.076 Έτσι, εάν έχετε κάνει καλή δουλειά που κάνουν 0:07:59.076,0:08:01.097 όταν κάτι πάει λάθος σε μία από τις δοκιμές 0:08:01.097,0:08:03.045 δεν υπάρχει σε πολλά μέρη 0:08:03.045,0:08:04.088 κάτι που μπορούσε να πάει στραβά 0:08:04.088,0:08:07.041 Αντίθετα, εάν εκτελείτε ένα σενάριο Αγγούρι 0:08:07.041,0:08:08.089 Ιδού, γνωρίζετε, 10 βήματα 0:08:08.089,0:08:10.031 και αγγίζει κάθε βήμα 0:08:10.031,0:08:11.061 ένα σωρό τεμάχια το app 0:08:11.061,0:08:12.091 Αυτό θα μπορούσε να πάρει πολύ καιρό 0:08:12.091,0:08:14.076 για να λάβετε πραγματικά στο κάτω μέρος ενός σφάλματος 0:08:14.076,0:08:16.014 Επομένως, είναι είδος του ανταλλαγή 0:08:16.014,0:08:17.054 μεταξύ πόσο καλά μπορεί να σας localize σφάλματα 0:08:17.054,0:08:20.065 Κάλυψη: 0:08:20.065,0:08:23.002 Είναι δυνατόν αν γράψετε μια καλή σουίτα 0:08:23.002,0:08:24.072 μονάδα και λειτουργικές δοκιμές 0:08:24.072,0:08:26.020 Μπορείτε να λάβετε πραγματικά υψηλή κάλυψη 0:08:26.020,0:08:27.085 Μπορείτε να εκτελέσετε την έκθεσή σας SimpleCov 0:08:27.085,0:08:30.080 και πράγματι, μπορείτε να αναγνωρίσετε συγκεκριμένες γραμμές στα αρχεία σας 0:08:30.080,0:08:32.036 που δεν έχουν γίνει ασκείται από οποιαδήποτε δοκιμή 0:08:32.036,0:08:34.016 και στη συνέχεια μπορείτε να πάτε δικαίωμα σε δοκιμές που καλύπτουν τους 0:08:34.016,0:08:36.014 Έτσι, έχει καθορίσει Τρόπος βελτίωσης σας κάλυψης 0:08:36.014,0:08:37.057 για παράδειγμα, σε επίπεδο C0 0:08:37.057,0:08:40.021 είναι κάτι πολύ πιο εύκολα να γίνει με μονάδα δοκιμές 0:08:40.021,0:08:42.018 ότι, με μια δοκιμή Αγγούρι — 0:08:42.018,0:08:43.078 ένα σενάριο Αγγούρι — 0:08:43.078,0:08:45.076 σας * είναι * συγκινητικό πολλά τμήματα του κώδικα 0:08:45.076,0:08:47.080 αλλά σας κάνουν πολύ αραιοκατοικημένες 0:08:47.080,0:08:49.038 Έτσι, εάν ο στόχος σας είναι να σηκωθείτε σας κάλυψης 0:08:49.038,0:08:51.031 Χρησιμοποιήστε τα εργαλεία στο βρίσκονται στα επίπεδα μονάδα 0:08:51.031,0:08:53.007 έτσι ώστε να μπορείτε να εστιάζοντας στην κατανόηση 0:08:53.007,0:08:54.074 ποια τμήματα ή κωδικός είναι undertested 0:08:54.074,0:08:56.055 και στη συνέχεια μπορείτε να γράψετε πολύ στοχοθετημένες δοκιμές 0:08:56.055,0:08:58.086 απλώς να εστιασθεί τους 0:08:58.086,0:09:01.043 Και, να ταξινομήσετε, γνωρίζετε, προκειμένου να ενοποιήσουμε αυτά τα κομμάτια 0:09:01.043,0:09:03.039 οι δοκιμές μονάδα 0:09:03.039,0:09:05.059 απομόνωσή τους και τους εξαίρετου ψηφίσματος 0:09:05.059,0:09:07.039 τείνουν να χρησιμοποιήσετε πολλά mocks 0:09:07.039,0:09:09.012 για να απομονώσετε το συμπεριφορές που σας δεν νοιάζονται για 0:09:09.012,0:09:11.020 Αλλά αυτό σημαίνει ότι, εξ ορισμού 0:09:11.020,0:09:12.070 που δεν ελέγχετε τις διασυνδέσεις 0:09:12.070,0:09:14.099 και είναι είδος ένα "παραλήφθηκαν Σοφία" στο λογισμικό 0:09:14.099,0:09:16.069 ότι πολλές από τις ενδιαφέρουσες σφάλματα 0:09:16.069,0:09:18.076 παρατηρούνται κατά τις διασυνδέσεις μεταξύ τεμάχια 0:09:18.076,0:09:20.078 και δεν ταξινομηθούν του μέσα σε μια κλάση ή μέσα σε μια μέθοδο — 0:09:20.078,0:09:22.040 αυτές είναι είδος την εύκολη bugs για να παρακολουθήσετε το 0:09:22.040,0:09:24.026 Και στο άλλο άκρο 0:09:24.026,0:09:26.081 όσο περισσότερο έχετε έναντι της δοκιμής ολοκλήρωσης ακραίες 0:09:26.081,0:09:29.072 που έπρεπε να εξαρτώνται όλο και λιγότερο mocks 0:09:29.072,0:09:30.090 για αυτόν ακριβώς τον λόγο 0:09:30.090,0:09:32.066 Σήμερα είδαμε, εάν που δοκιμάζετε κάτι σαν 0:09:32.066,0:09:34.015 να πω, σε ένα service-oriented αρχιτεκτονική 0:09:34.015,0:09:35.089 Όταν πρέπει να αλληλεπιδράσει με την απομακρυσμένη τοποθεσία 0:09:35.089,0:09:37.028 στο τέλος θα έχετε 0:09:37.028,0:09:38.094 έχοντας να κάνουμε μια δίκαιη ποσό χλευάζει και stubbing 0:09:38.094,0:09:40.028 έτσι ώστε να μην βασίζεστε στο Internet 0:09:40.028,0:09:41.067 για να σας δοκιμές να περάσει 0:09:41.067,0:09:43.006 αλλά, μιλώντας γενικά 0:09:43.006,0:09:47.014 προσπαθείτε να καταργήσετε καθώς πολλά από τα mocks που μπορείτε 0:09:47.014,0:09:48.095 και αφήστε το σύστημα να εκτελέσει τον τρόπο θα εκτελεστεί στην πραγματική ζωή 0:09:48.095,0:09:52.070 Έτσι, τα καλά νέα είναι σας * είναι * δοκιμές τις διασυνδέσεις 0:09:52.070,0:09:54.074 * αλλά * όταν κάτι πάει στραβά σε μία από τις διασυνδέσεις 0:09:54.074,0:09:57.053 επειδή το ψήφισμά σας δεν είναι τόσο καλό 0:09:57.053,0:10:00.031 θα χρειαστεί περισσότερος χρόνος για να καταλάβετε τι είναι 0:10:00.031,0:10:05.019 Έτσι, τι είδους το bit υψηλής σειράς από αυτή την ανταλλαγή 0:10:05.019,0:10:07.024 είναι δεν θέλετε πραγματικά να βασιζόμαστε 0:10:07.024,0:10:08.076 σε πολύ μεγάλο βαθμό κάθε ένα είδος της δοκιμής 0:10:08.076,0:10:10.078 Εξυπηρετούν διάφορους σκοπούς και, ανάλογα με την 0:10:10.078,0:10:13.043 προσπαθείτε να ασκήσουν σας περισσότερες διασυνδέσεις 0:10:13.043,0:10:15.089 ή προσπαθείτε να βελτιωθεί σας κάλυψη πρόστιμο κόκκους 0:10:15.089,0:10:18.003 Αυτό επηρεάζει τον τρόπο μπορείτε να αναπτύξετε σας δοκιμαστική σουίτα 0:10:18.003,0:10:20.065 και σας θα εξελιχθεί αυτό μαζί με το λογισμικό σας 0:10:20.065,0:10:24.014 Έτσι, μας έχετε χρησιμοποιήσει ένα συγκεκριμένο σύνολο ορολογία δοκιμές 0:10:24.014,0:10:26.028 Είναι η ορολογία που, από και μεγάλο 0:10:26.028,0:10:29.001 χρησιμοποιείται ευρέως στην Κοινότητα του Rails 0:10:29.001,0:10:30.060 αλλά υπάρχει κάποια παραλλαγή 0:10:30.060,0:10:33.069 [και] ορισμένοι όροι που θα ακούγεται 0:10:33.069,0:10:35.018 Αν πάτε να βρείτε δουλειά κάπου 0:10:35.018,0:10:36.093 και σας ακούμε για δοκιμή μετάλλαξης 0:10:36.093,0:10:38.072 που εμείς δεν το έχετε κάνει 0:10:38.072,0:10:40.024 Αυτή είναι μια ενδιαφέρουσα ιδέα που ήταν, νομίζω, επινοήθηκε από 0:10:40.024,0:10:43.037 Ammann και Offutt, οι οποίοι έχουν, ταξινόμηση των 0:10:43.037,0:10:44.093 το οριστικό βιβλίο για δοκιμή λογισμικού 0:10:44.093,0:10:46.048 Η ιδέα είναι: 0:10:46.048,0:10:48.000 Ας υποθέσουμε ότι θα παρουσιάζει ένα σφάλμα που σκόπιμη μου κώδικα 0:10:48.000,0:10:49.051 αναγκαστική ότι κάποια δοκιμή να αποτύχει; 0:10:49.051,0:10:53.003 Επειδή, εάν άλλαξε, γνωρίζετε, "Εάν x" να "αν όχι x" 0:10:53.003,0:10:56.010 και δεν έλεγχοι αποτύχουν, τότε είτε εγώ λείπουν κάποια κάλυψη 0:10:56.010,0:10:59.019 ή μου app είναι πολύ περίεργη και κατά κάποιον τρόπο μη προσδιοριστικών 0:10:59.019,0:11:03.099 Fuzz δοκιμών, που Koushik Sen μπορεί να μιλήσει περισσότερο για 0:11:03.099,0:11:07.085 βασικά, αυτό είναι το "10.000 πιθήκους σε γραφομηχανές 0:11:07.085,0:11:09.024 ρίχνουν τυχαίας εισόδου σε σας κώδικα" 0:11:09.024,0:11:10.037 Τι είναι το ενδιαφέρον σχετικά με αυτό είναι ότι 0:11:10.037,0:11:11.065 οι δοκιμές που έχετε κάνουμε 0:11:11.065,0:11:13.086 ουσιαστικά, είναι κατασκευασμένο για να δοκιμάσετε το app 0:11:13.086,0:11:15.058 ο τρόπος που σχεδιάστηκε 0:11:15.058,0:11:16.088 και αυτά, γνωρίζετε, fuzz δοκιμές 0:11:16.088,0:11:19.064 είναι πληροφορίες για τη δοκιμή της app με τρόπους αυτό * δεν * σημαίνει να χρησιμοποιηθεί 0:11:19.064,0:11:22.098 Έτσι, τι συμβαίνει σε περίπτωση που το πετάμε υποβολές τεράστια φόρμας 0:11:22.098,0:11:25.036 Τι θα συμβεί αν τοποθετήσετε χαρακτήρες ελέγχου φορμών σας; 0:11:25.036,0:11:27.062 Τι θα συμβεί εάν υποβάλετε ξανά και ξανά το ίδιο πράγμα; 0:11:27.062,0:11:29.093 Και, Koushik έχει μια στατιστική που 0:11:29.093,0:11:32.033 Microsoft βρίσκει έως το 20% της τους σφάλματα 0:11:32.033,0:11:34.064 χρησιμοποιούν κάποια παραλλαγή των δοκιμών fuzz 0:11:34.064,0:11:36.029 και ότι περίπου 25 % 0:11:36.029,0:11:39.021 τα κοινά προγράμματα της γραμμής εντολών Unix 0:11:39.021,0:11:40.092 μπορεί να γίνει για να διακοπεί η λειτουργία του 0:11:40.092,0:11:44.018 [όταν] τίθενται μέσω επιθετική fuzz δοκιμών 0:11:44.018,0:11:46.089 Καθορισμός χρήσης κάλυψης είναι κάτι που εμείς δεν το έχετε κάνει 0:11:46.089,0:11:48.089 αλλά είναι μια άλλη ενδιαφέρουσα ιδέα 0:11:48.089,0:11:50.089 Η ιδέα είναι ότι σε κάθε σημείο του προγράμματος μου 0:11:50.089,0:11:52.062 υπάρχει θέση όπου ορίζω — 0:11:52.062,0:11:54.046 ή αναθέσω μια τιμή σε ορισμένες μεταβλητή — 0:11:54.046,0:11:56.000 και στη συνέχεια, υπάρχει μια θέση κατάντη 0:11:56.000,0:11:57.075 όπου προφανώς πρόκειται να καταναλώνουν την τιμή — 0:11:57.075,0:11:59.058 κάποιος θα χρησιμοποιήσει την τιμή 0:11:59.058,0:12:01.013 Μου έχουν καλυφθεί κάθε ζεύγος; 0:12:01.013,0:12:02.059 Με άλλα λόγια, δεv έχω δοκιμές όπου κάθε ζεύγος 0:12:02.059,0:12:04.054 τον ορισμό μιας μεταβλητής και χρήση τους κάπου 0:12:04.054,0:12:07.014 εκτελείται σε κάποιο μέρος της μου σουίτες δοκιμής 0:12:07.014,0:12:10.071 Μερικές φορές ονομάζεται DU-κάλυψης 0:12:10.071,0:12:14.011 Και άλλοι όροι που θεωρώ ότι δεν ευρύτερα χρησιμοποιούνται πλέον 0:12:14.011,0:12:17.071 blackbox έναντι των whitebox ή blackbox, έναντι glassbox 0:12:17.071,0:12:20.025 Χονδρικά, μια δοκιμή blackbox είναι ένα που είναι γραμμένο από 0:12:20.025,0:12:22.041 την άποψη των εξωτερικών προδιαγραφών του το πράγμα 0:12:22.041,0:12:24.022 [Για παράδειγμα:] "Αυτό είναι ένα πίνακα hash 0:12:24.022,0:12:26.015 Όταν σε ένα κλειδί θα πρέπει να πίσω μια τιμή 0:12:26.015,0:12:28.011 Εάν η διαγραφή του κλειδιού που η τιμή δεν πρέπει να υπάρχουν" 0:12:28.011,0:12:29.099 Αυτό είναι μια δοκιμή blackbox, γιατί δεν λέει 0:12:29.099,0:12:32.028 τίποτα σχετικά με το πώς υλοποιείται πίνακα hash 0:12:32.028,0:12:34.072 και αυτό δεν προσπαθούν να τονίσω την εφαρμογή 0:12:34.072,0:12:36.056 Μπορεί να είναι μια αντίστοιχη δοκιμή whitebox: 0:12:36.056,0:12:38.008 «Γνωρίζω κάτι σχετικά με τη συνάρτηση κατακερματισμού 0:12:38.008,0:12:39.098 και πρόκειται να δημιουργήσει επίτηδες 0:12:39.098,0:12:41.088 τα κλειδιά κατακερματισμού σε περιπτώσεις μου δοκιμής 0:12:41.088,0:12:43.078 που προκαλούν πολλές συγκρούσεις κατακερματισμού 0:12:43.078,0:12:45.095 για να βεβαιωθείτε ότι εγώ δοκιμές τμήμα της λειτουργικότητας" 0:12:45.095,0:12:49.007 Τώρα, ένα C0 δοκιμή κάλυψη εργαλείο, όπως SimpleCov 0:12:49.007,0:12:52.001 θα αποκαλύψει ότι, εάν όλα τα είχατε είναι blackbox δοκιμές 0:12:52.001,0:12:53.028 Ίσως διαπιστώσετε ότι 0:12:53.028,0:12:55.056 κάλυψη κώδικα σύγκρουσης δεν ήταν πλήττεται και πολύ συχνά 0:12:55.056,0:12:56.075 Και που θα μπορούσε να συμβουλή σας και να πω: 0:12:56.075,0:12:58.028 "Ok, αν θέλω πραγματικά να την ενισχύσει — 0:12:58.028,0:13:00.008 για μία, αν θέλω να ενισχύσει την κάλυψη για τις δοκιμές αυτές 0:13:00.008,0:13:02.006 τώρα πρέπει να γράψετε μια whitebox ή glassbox δοκιμή 0:13:02.006,0:13:04.057 Πρέπει να εξετάσετε το εσωτερικό, δείτε τι σημαίνει την εφαρμογή 0:13:04.057,0:13:05.061 συγκεκριμένες λύσεις 0:13:05.061,0:13:10.060 να προσπαθήσει να σπάσει την εφαρμογή με κακό τρόπους" 0:13:10.060,0:13:13.075 Έτσι, νομίζω, δοκιμές είναι ένα είδος τρόπο ζωής, σωστά; 0:13:13.075,0:13:16.069 Έχουμε πάρει από τη φάση της 0:13:16.069,0:13:18.033 "Θα οικοδομούμε το όλο θέμα και στη συνέχεια εμείς θα τη δοκιμάσετε" 0:13:18.033,0:13:19.092 και έχουμε πάρει στην φάση της 0:13:19.092,0:13:20.077 "Μας δοκιμάζετε δρόμος" 0:13:20.077,0:13:22.048 Δοκιμή είναι πραγματικά περισσότερο σαν εργαλείο ανάπτυξης 0:13:22.048,0:13:24.022 και όπως τόσα πολλά εργαλεία ανάπτυξης 0:13:24.022,0:13:25.062 εξαρτάται από την αποτελεσματικότητα της 0:13:25.062,0:13:27.013 σχετικά με το αν χρησιμοποιείτε μια καλαίσθητη τρόπο 0:13:27.013,0:13:31.002 Έτσι, μπορούμε να πούμε: "καλά, ας δούμε — μου κλώτσησε λάστιχα 0:13:31.002,0:13:33.048 Γνωρίζετε, εγώ που τροφοδοτούνται από το πρόγραμμα περιήγησης, προσπάθησα δύο πράγματα 0:13:33.048,0:13:35.097 (ζητωκραυγές χέρι) Μοιάζει λειτουργεί! Αναπτύξετε!" 0:13:35.097,0:13:38.045 Αυτό είναι, προφανώς, μια περιφρόνηση κάτι περισσότερο από ό, τι θα θέλετε να 0:13:38.045,0:13:41.024 Και, από τον τρόπο, ένα από τα πράγματα που ανακαλύψαμε 0:13:41.024,0:13:43.077 με αυτό online μαθήματος που μόλις εκκίνηση 0:13:43.077,0:13:45.090 Όταν 60.000 άτομα είναι εγγεγραμμένοι κατά τη διάρκεια 0:13:45.090,0:13:48.099 και 0,1% από αυτά τα άτομα έχουν πρόβλημα 0:13:48.099,0:13:50.083 θα λάβετε 60 μηνύματα ηλεκτρονικού ταχυδρομείου 0:13:50.083,0:13:53.078 Το πόρισμα είναι: όταν η τοποθεσία σας χρησιμοποιείται από πολλά άτομα 0:13:53.078,0:13:55.089 ορισμένες ηλίθια σφάλμα που δεν μπορέσατε να βρείτε 0:13:55.089,0:13:57.018 αλλά ότι θα μπορούσαν να έχουν βρεθεί με δοκιμή 0:13:57.018,0:13:59.080 πολύ γρήγορα θα μπορούσε να δημιουργήσει * μια παρτίδα * του πόνου 0:13:59.080,0:14:02.023 Από την άλλη πλευρά, δεν θέλετε να είναι δογματική και να πω 0:14:02.023,0:14:04.056 "ΕΕΕ, μέχρις ότου έχουμε κάλυψης 100% και κάθε δοκιμής είναι πράσινο 0:14:04.056,0:14:06.005 Εμείς οπωσδήποτε δεν θα περιλαμβάνεται" 0:14:06.005,0:14:07.012 Δεν είναι υγιές είτε 0:14:07.012,0:14:08.048 Και η ποιότητα δοκιμής 0:14:08.048,0:14:10.057 δεν είναι απαραίτητα ο συσχετισμός με τη δήλωση 0:14:10.057,0:14:11.064 εκτός εάν έχετε να πείτε κάτι 0:14:11.064,0:14:12.068 σχετικά με την ποιότητα των σας δοκιμών 0:14:12.068,0:14:14.029 μόνο και μόνο επειδή που έχετε εκτελείται κάθε γραμμή 0:14:14.029,0:14:17.010 δεν σημαίνει ότι έχετε ελέγξει τις ενδιαφέρουσες υποθέσεις 0:14:17.010,0:14:18.068 Έτσι, κάπου εν τω μεταξύ, θα μου πείτε 0:14:18.068,0:14:20.014 "Καλά, θα χρησιμοποιήσουμε κάλυψη εργαλεία για τον εντοπισμό 0:14:20.014,0:14:23.004 undertested ή κακώς έχουν δοκιμαστεί σε τμήματα του κώδικα 0:14:23.004,0:14:24.073 και θα τους χρησιμοποιήσουμε ως κατευθυντήρια γραμμή 0:14:24.073,0:14:27.011 για την ταξινόμηση της βοήθειας να βελτιωθεί μας επίπεδο συνολικής εμπιστοσύνης" 0:14:27.011,0:14:29.024 Να θυμάστε, όμως Αζίλ είναι σχετικά με την αποδοχή των αλλαγών 0:14:29.024,0:14:30.032 και διαχείρισή τους 0:14:30.032,0:14:32.002 Μέρος της αλλαγής είναι τα πράγματα θα αλλάξει αυτό θα προκαλέσει 0:14:32.002,0:14:33.038 σφάλματα που δεν μπορείτε να προβλέψετε 0:14:33.038,0:14:34.031 και η σωστή αντίδραση είναι: 0:14:34.031,0:14:36.026 Είναι αρκετά άνετο για τα εργαλεία δοκιμών 0:14:36.026,0:14:37.064 [αυτό] ότι μπορείτε να βρείτε γρήγορα τα λάθη αυτά 0:14:37.064,0:14:39.025 Γράψτε μια δοκιμή που αναπαράγει το σφάλμα 0:14:39.025,0:14:40.062 Και στη συνέχεια, να τη δοκιμή πράσινο 0:14:40.062,0:14:41.061 Μπορείτε στη συνέχεια θα το διορθώσετε πραγματικά 0:14:41.061,0:14:43.004 Αυτό σημαίνει ότι, ο τρόπος που πραγματικά μπορείτε να διορθώσετε ένα σφάλμα είναι 0:14:43.004,0:14:45.049 Εάν δημιουργήσατε μια δοκιμή που σωστά απέτυχε 0:14:45.049,0:14:46.088 για να αναπαραγάγετε το σφάλμα 0:14:46.088,0:14:48.055 και στη συνέχεια επανήλθε και καθορισθεί κώδικα 0:14:48.055,0:14:49.057 για να κάνετε τις δοκιμές αυτές περνούν 0:14:49.057,0:14:51.073 Ομοίως, δεν θέλετε να πω 0:14:51.073,0:14:53.036 "Καλά, μονάδα δοκιμές σας δώσει καλύτερη κάλυψη 0:14:53.036,0:14:54.073 Τους κάνετε πιο εμπεριστατωμένη και λεπτομερή 0:14:54.073,0:14:56.044 Ας εστιασθεί όλων μας ενέργειας που" 0:14:56.044,0:14:57.062 σε αντίθεση με 0:14:57.062,0:14:58.093 "Ω, εστιασθεί δοκιμές ολοκλήρωσης 0:14:58.093,0:15:00.006 επειδή είναι πιο ρεαλιστική, σωστά; 0:15:00.006,0:15:01.056 Αντικατοπτρίζουν αυτό τον πελάτη που είπε θέλουν 0:15:01.056,0:15:03.034 Έτσι, εάν οι δοκιμές ολοκλήρωσης 0:15:03.034,0:15:05.067 εξ ορισμού μας σύσκεψη ανάγκη πελάτη". 0:15:05.067,0:15:07.034 Και πάλι, δύο άκρα είναι είδος ανθυγιεινά 0:15:07.034,0:15:09.079 επειδή κάθε μία από αυτές μπορεί να εντοπίσετε προβλήματα 0:15:09.079,0:15:11.031 που θα η απόκλιση από την άλλη 0:15:11.031,0:15:12.060 Έτσι, έχοντας έναν καλό συνδυασμό αυτών 0:15:12.060,0:15:15.042 είναι το είδος του σύνολο είναι όλα σχετικά με 0:15:15.042,0:15:18.072 Είναι το τελευταίο πράγμα που θέλω να αφήσω με, νομίζω ότι 0:15:18.072,0:15:20.036 όσον αφορά τις δοκιμές, είναι "TDD έναντι 0:15:20.036,0:15:22.005 Αυτό που αποκαλώ συμβατικών εντοπισμού σφαλμάτων — 0:15:22.005,0:15:24.004 δηλαδή, ο τρόπος που το ότι όλοι μας είδος κάνουμε 0:15:24.004,0:15:25.051 ακόμη και αν λέμε ότι δεν το κάνουμε" 0:15:25.051,0:15:26.064 και όλοι προσπαθούμε να πάρετε καλύτερα, δικαίωμα; 0:15:26.064,0:15:27.085 Είμαστε όλοι είδος στο περιθώριο βιβλιοδεσίας 0:15:27.085,0:15:29.036 Ορισμένοι από εμάς εξετάζουν τα αστέρια 0:15:29.036,0:15:31.011 προσπαθεί να βελτιώσει τις πρακτικές 0:15:31.011,0:15:33.099 Αλλά, έχοντας τώρα έζησε με αυτό για 3 ή 4 ετών ο ίδιος 0:15:33.099,0:15:35.091 και — θα είναι έντιμη — πριν από 3 χρόνια δεν κάνω TDD 0:15:35.091,0:15:37.079 Θα το κάνουμε τώρα, επειδή θεωρώ ότι είναι καλύτερο 0:15:37.079,0:15:40.081 και εδώ είναι μου απόσταξη, γιατί νομίζω ότι δουλεύει για μένα 0:15:40.081,0:15:43.032 Συγγνώμη, τα χρώματα είναι λίγο περίεργο 0:15:43.032,0:15:45.000 αλλά στην αριστερή στήλη του πίνακα 0:15:45.000,0:15:46.034 [] λέει "Συμβατικό εντοπισμού σφαλμάτων" 0:15:46.034,0:15:47.044 και η δεξιά πλευρά λέει "TDD" 0:15:47.044,0:15:49.069 Τι είναι λοιπόν ο τρόπος που χρησιμοποίησα για να γράψετε κώδικα; 0:15:49.069,0:15:51.056 Ίσως ορισμένοι από εσάς εξακολουθεί να κάνετε αυτό 0:15:51.056,0:15:53.013 Γράφω ένα σωρό γραμμές 0:15:53.013,0:15:54.043 ίσως μερικές δεκάδες γραμμές κώδικα 0:15:54.043,0:15:55.059 Είμαι * βεβαιωθείτε ότι * είναι σωστή — 0:15:55.059,0:15:56.061 Εννοώ, μου * am * ένα καλό προγραμματιστή, σωστά; 0:15:56.061,0:15:57.099 Αυτό δεν είναι που σκληρά 0:15:57.099,0:15:59.002 Μπορώ να τον εκτελέσω – δεν λειτουργεί 0:15:59.002,0:16:01.098 OK, φωτιά μέχρι το πρόγραμμα εντοπισμού σφαλμάτων – αρχίζουν να βάζουν στο του printf 0:16:01.098,0:16:04.088 Εάν σας χρησιμοποιεί TDD τι θα κάνω αντίθετα; 0:16:04.088,0:16:08.022 Καλά θα γράφω ένα * μερικές * γραμμές κώδικα, έχοντας γράψει πρώτα μια δοκιμή 0:16:08.022,0:16:10.071 Τόσο ως σύντομα, όπως η δοκιμή πηγαίνει από κόκκινο σε πράσινο 0:16:10.071,0:16:12.064 Γνωρίζω ότι απέστειλα ο κωδικός που εργάζεται — 0:16:12.064,0:16:15.013 ή τουλάχιστον τα μέρη της συμπεριφοράς που θα είχα κατά νουν 0:16:15.013,0:16:16.096 Τα τμήματα της συμπεριφοράς έργο, διότι είχα μια δοκιμή 0:16:16.096,0:16:19.056 OK, πίσω στο συμβατικό εντοπισμού σφαλμάτων: 0:16:19.056,0:16:21.073 Εκτελώ προγράμματος μου, που προσπαθεί να βρει τα σφάλματα 0:16:21.073,0:16:23.028 Ξεκινώ την τοποθέτηση στο printf του παντού 0:16:23.028,0:16:24.062 για να εκτυπώσετε τις τιμές των πραγμάτων 0:16:24.062,0:16:25.064 που είναι πολύ διασκεδαστικό 0:16:25.064,0:16:26.073 Όταν προσπαθείτε να διαβάσετε τους 0:16:26.073,0:16:28.014 εκτός από τις 500 γραμμές της εξόδου του αρχείου καταγραφής 0:16:28.014,0:16:29.035 ότι θα λάβετε σε ένα Σιδηροτροχιές app 0:16:29.035,0:16:30.087 προσπαθούμε να βρούμε * σας * του printf 0:16:30.087,0:16:32.035 γνωρίζετε, "γνωρίζω τι θα κάνω — 0:16:32.035,0:16:34.008 Θα σε βάλω σε 75 αστερίσκους πριν και μετά 0:16:34.008,0:16:36.043 Αυτό θα καταστήσει αναγνώσιμο"(γέλια) 0:16:36.043,0:16:38.071 Ποιος δεν — Ok, να αυξήσει τα χέρια σας, εάν δεν το κάνετε! 0:16:38.071,0:16:40.090 Ευχαριστώ πολύ για σας εντιμότητα. (γέλια) Ok. 0:16:40.090,0:16:43.014 Ή — Ή θα μπορούσε να κάνει κάτι άλλο που πρέπει, θα μπορούσα να πω: 0:16:43.014,0:16:45.030 Αντί να εκτυπώσετε την τιμή μιας μεταβλητής 0:16:45.030,0:16:47.039 γιατί δεν γράφω μια δοκιμή που επιθεωρεί το 0:16:47.039,0:16:48.079 στο η προσδοκία που πρέπει να 0:16:48.079,0:16:50.090 και θα γνωρίζω αμέσως στο φωτεινό κόκκινο γράμματα 0:16:50.090,0:16:53.033 Εάν δεν πληρούται αυτή την προσμονή 0:16:53.033,0:16:56.005 Εντάξει, εγώ πίσω για το συμβατικό debugging πλευρά: 0:16:56.005,0:16:58.090 Εγώ ξεσπάσει το big guns: μου απομακρύνετε το Ruby πρόγραμμα εντοπισμού σφαλμάτων 0:16:58.092,0:17:02.044 Ορίζω ένα σημείο διακοπής εντοπισμού σφαλμάτων, και να ξεκινήσω τώρα * tweaking * και να πω 0:17:02.044,0:17:04.085 "Ω, ας δούμε, θα πρέπει να ξεπεράσουμε αυτή τη δήλωση «αν» 0:17:04.085,0:17:06.002 Συνεπώς, πρέπει να οριστεί ότι πράγμα 0:17:06.002,0:17:07.063 Ω, πρέπει να καλέσετε τη μέθοδο αυτή και επομένως θα πρέπει να..." 0:17:07.063,0:17:08.065 Όχι! 0:17:08.065,0:17:10.087 Εγώ * θα μπορούσε να * αντίθετα — αν πρόκειται να το κάνουμε αυτό έτσι κι αλλιώς — 0:17:10.087,0:17:13.000 Ας κάνουμε αυτό απλώς, σε ένα αρχείο, η οποία έχει συσταθεί ορισμένες mocks και τα αποκόμματα 0:17:13.000,0:17:16.045 για να ελέγξετε τη διαδρομή κώδικα, να ακολουθήσουν τον δρόμο που θέλω 0:17:16.045,0:17:19.013 Και τώρα, "Ok, σίγουρα θα έχετε καθοριστεί! 0:17:19.013,0:17:22.012 Θα πάρω από το πρόγραμμα εντοπισμού σφαλμάτων, το εκτελέσετε ξανά όλα! " 0:17:22.012,0:17:24.022 Και, φυσικά, 9 φορές από 10, δεν διορθώσετε αυτό 0:17:24.022,0:17:26.072 ή σας είδος εν μέρει έχει καθορισθεί αλλά εντελώς δεν μπορείτε να διορθώσετε το 0:17:26.072,0:17:30.040 και τώρα πρέπει να κάνετε μη αυτόματη όλα αυτά όλα άνω ξανά 0:17:30.040,0:17:32.086 ή το * έχω ήδη μια δέσμη των δοκιμών 0:17:32.086,0:17:34.031 και σας μπορούν απλώς επανεκτέλεση τους αυτόματα 0:17:34.031,0:17:35.056 και θα μπορούσα, εάν ορισμένα από αυτά δεν 0:17:35.056,0:17:36.087 "Ω, σας διόρθωσε το όλο θέμα 0:17:36.087,0:17:38.040 Κανένα πρόβλημα, θα μόλις μετάβαση πίσω!" 0:17:38.040,0:17:39.096 Έτσι, το συμπέρασμα είναι ότι 0:17:39.096,0:17:41.095 γνωρίζετε, σας * θα μπορούσε να * το κάνουμε στην αριστερή πλευρά 0:17:41.095,0:17:45.004 αλλά χρησιμοποιείτε τις ίδιες τεχνικές και στις δύο περιπτώσεις 0:17:45.004,0:17:48.062 Η μόνη διαφορά είναι, σε μία περίπτωση το κάνετε με μη αυτόματο τρόπο 0:17:48.062,0:17:50.004 που είναι βαρετό και επιρρεπής 0:17:50.004,0:17:51.078 Στην άλλη περίπτωση που κάνετε λίγο περισσότερη εργασία 0:17:51.078,0:17:53.095 αλλά μπορείτε να το κάνετε αυτόματη και επαναλαμβανόμενης 0:17:53.095,0:17:55.071 και έχουν, ξέρετε, ορισμένες υψηλή εμπιστοσύνη 0:17:55.071,0:17:57.003 ότι, καθώς αλλάζετε τα πράγματα στον κώδικά σας 0:17:57.003,0:17:58.092 δεν γίνεται ανασυσκευασία πράγματα που χρησιμοποιούνται για την επεξεργασία 0:17:58.092,0:18:00.091 και ουσιαστικά είναι πιο παραγωγικοί 0:18:00.091,0:18:02.047 Έτσι κάνετε όλα τα ίδια πράγματα 0:18:02.047,0:18:04.037 αλλά με, ένα είδος, το «δέλτα"επιπλέον εργασία 0:18:04.037,0:18:07.086 χρησιμοποιείτε σας προσπάθεια σε πολύ υψηλότερο μόχλευση 0:18:07.086,0:18:10.036 Γι είδος άποψή μου είναι καλό να TDD 0:18:10.036,0:18:11.088 Είναι πραγματικά, να μην απαιτεί νέες δεξιότητες 0:18:11.088,0:18:15.011 Αυτό ακριβώς απαιτεί [] να refactor τις υπάρχουσες δεξιότητές σας 0:18:15.011,0:18:18.014 Επίσης, προσπάθησε όταν σας — ξανά, ειλικρινείς Εξομολογήσεις, δεξιά; — 0:18:18.014,0:18:19.034 όταν άρχισα να κάνει αυτό ήταν σαν 0:18:19.034,0:18:21.049 "Ok, εγώ πρόκειται να διδάσκει μια σειρά μαθημάτων επί σιδηροτροχιών 0:18:21.049,0:18:22.065 Εγώ πραγματικά θα πρέπει να επικεντρωθεί στις δοκιμές 0:18:22.065,0:18:24.032 Έτσι πήγα πίσω με κάποιον κώδικα που έστειλα επιστολή 0:18:24.032,0:18:26.087 Αυτό ήταν * εργασίας * — γνωρίζετε, που ήταν αξιοπρεπή κώδικα — 0:18:26.087,0:18:29.006 και άρχισα προσπαθώντας να γράψει δοκιμές για 0:18:29.006,0:18:31.019 και ήταν * τόσο επίπονη * 0:18:31.019,0:18:33.033 επειδή ο κώδικας δεν ήταν γραμμένο με τρόπο που ήταν αναπτύξετε 0:18:33.033,0:18:34.097 Υπήρχαν κάθε είδους αλληλεπιδράσεων 0:18:34.097,0:18:36.038 Υπήρχαν, όπως, ένθετα conditionals 0:18:36.038,0:18:38.083 Και αν θέλετε να απομονώσετε μια ιδιαίτερη δήλωση 0:18:38.083,0:18:41.070 και να το δοκιμάσετε — δοκιμή έναυσμα — μόνο η δήλωση 0:18:41.070,0:18:44.000 το ποσό της πράγματα που θα πρέπει να οριστεί στον σας δοκιμής 0:18:44.000,0:18:45.009 να συμβεί — 0:18:45.009,0:18:46.040 να θυμάστε όταν μίλησε για ναυάγια διακωμωδώ αμαξοστοιχίας — 0:18:46.040,0:18:48.014 πρέπει να ορίσετε όλες τις εν λόγω υποδομή 0:18:48.014,0:18:49.063 απλώς, για να αποκτήσετε το * μία * γραμμή κώδικα 0:18:49.063,0:18:51.015 και να που κάνετε και να πας 0:18:51.015,0:18:52.074 "Gawd, δοκιμές πραγματικά δεν είναι αξίζει! 0:18:52.074,0:18:54.034 Έγραψα 20 γραμμές του προγράμματος εγκατάστασης 0:18:54.034,0:18:56.059 έτσι ώστε θα μπορούσαν να δοκιμάζω δύο γραμμές στη μου συνάρτηση!" 0:18:56.059,0:18:58.085 Αυτό που πραγματικά λέγοντάς σας — όπως αντιλαμβάνομαι τώρα — 0:18:58.085,0:19:00.042 είναι η συνάρτηση σας είναι * κακό * 0:19:00.042,0:19:01.049 Είναι μια κακή γραπτή συνάρτηση 0:19:01.049,0:19:02.052 Δεν πρόκειται για μια συνάρτηση αναπτύξετε 0:19:02.052,0:19:03.088 Ότι το πήρε πάρα πολλά κινητά στοιχεία 0:19:03.088,0:19:06.026 των οποίων εξαρτήσεις * μπορεί να * έχει διακοπεί 0:19:06.026,0:19:07.070 Δεν υπάρχει καμία ραφές μου συνάρτησης 0:19:07.070,0:19:11.008 αυτό επιτρέψτε μου να μεμονωμένα, να ελέγξετε τις διαφορετικές συμπεριφορές 0:19:11.008,0:19:12.083 Και μόλις ξεκινήσετε να κάνει την πρώτη ανάπτυξη δοκιμής 0:19:12.083,0:19:15.043 γιατί πρέπει να γράψετε σας δοκιμές σε μικρά κομμάτια 0:19:15.043,0:19:17.053 είδος του θέτει το ζήτημα αυτό να εξαφανιστούν 0:19:17.053,9:59:59.000 Έτσι ώστε να έχει μου Θεοφάνια