Ένας προγραμματιστής ανοίγει ένα αίτημα έλξης που προσθέτει έναν υπολογισμό έκπτωσης σε μια υπηρεσία ολοκλήρωσης αγοράς. Οι δοκιμές περνούν και η διαφορά είναι σύντομη. Ένας κριτικός την εγκρίνει σε δύο λεπτά με το "LGTM". Τρεις μήνες αργότερα, ένας συμπαίκτης πρέπει να αλλάξει την ίδια συνάρτηση και ανακαλύπτει ότι αναμειγνύει κανόνες τιμολόγησης, στρογγυλοποιήσεις και πρόσβαση σε βάσεις δεδομένων σε ένα μέρος. Κανείς δεν μπορεί να πει με σιγουριά τι επιτρέπεται να κάνει.
Αυτό είναι ένα ενδεικτικό σενάριο, όχι ένα τεκμηριωμένο περιστατικό. Δείχνει τι πρέπει να παράγει η αξιολόγηση κώδικα από ομοτίμους όταν λειτουργεί ως μαθησιακή δραστηριότητα: έναν αξιολογητή που μπορεί να δει μια πιθανή αλλαγή, να εντοπίσει την ανησυχία που δεν είναι ακόμη σφάλμα και να την εξηγήσει με τρόπο που ο συγγραφέας να μπορεί να ενεργήσει.
Αυτός ο οδηγός απευθύνεται σε επικεφαλής μηχανικής υποστήριξης και διευθυντές μηχανικών. Δείχνει πώς να σχεδιάζετε ασκήσεις επανάληψης κώδικα που αναπτύσσουν αυτήν την δεξιότητα επίτηδες, αντί να ελπίζουν ότι οι κριτές θα την επιλέξουν από την ουρά. Καλύπτει το πρόβλημα απόδοσης, τα κενά που πρέπει να διαγνωστούν, τον τρόπο δομής της προετοιμασίας και της εξάσκησης, ένα λειτουργικό παράδειγμα και τον τρόπο ελέγχου της μεταφοράς της δεξιότητας σε πραγματικές αξιολογήσεις. Ζητήστε από τους ανώτερους μηχανικούς να επικυρώσουν κάθε περίπτωση, ελάττωμα και κριτήριο πριν τη χρησιμοποιήσετε.
Τι είναι οι ασκήσεις επανάληψης κώδικα;
Οι ασκήσεις αναθεώρησης κώδικα είναι δομημένες πρακτικές εργασίες στις οποίες ένας προγραμματιστής εξετάζει μια προετοιμασμένη αλλαγή, εξηγεί τι βρήκε και γιατί είναι σημαντική και λαμβάνει σχόλια σχετικά με την ποιότητα αυτής της εξήγησης. Διαφέρουν από τις αναθεωρήσεις που κάνει η ομάδα σας καθημερινά. Η αλλαγή επιλέγεται εκ των προτέρων, οι ανησυχίες σε αυτήν είναι γνωστές και ο στόχος είναι η βελτίωση του αναθεωρητή και όχι η μεταφορά της αλλαγής.
Γρήγορα γεγονότα
| Ερώτηση | Σύντομη απάντηση |
|---|---|
| Ποια είναι η εργασία; | Εξηγήστε τα ευρήματα της αξιολόγησης και δώστε σχόλια με βάση τα οποία ο συγγραφέας μπορεί να ενεργήσει. |
| Τι βαθμολογία βαθμολογείτε; | Ακρίβεια των ευρημάτων και πόσο χρήσιμη είναι η εξήγηση. |
| Αρκεί να μετράμε τα ελαττώματα; | Όχι. Οι κριτικές αφορούν κάτι περισσότερο από ελαττώματα, επομένως μια άσκηση που ανταμείβει μόνο τον αριθμό των σφαλμάτων εκπαιδεύει τη λάθος συνήθεια. |
| Ποια είναι η γνωστική απαίτηση; | Αναλύστε και αξιολογήστε ένα σχέδιο και, στη συνέχεια, δημιουργήστε μια καλύτερη πρόταση. |
| Ποιος επικυρώνει την υπόθεση; | Ένας διευθυντής μηχανικής ή ένας ανώτερος μηχανικός που κατέχει τη βάση κώδικα. |
| Τι δεν μπορούν να διορθώσουν οι ασκήσεις; | Χρόνος αναθεώρησης, ασαφής ιδιοκτησία και πίεση για γρήγορη συγχώνευση. |
| Πώς ξέρεις ότι λειτούργησε; | Μια νέα, απαρατήρητη αλλαγή που αξιολογήθηκε με βάση συμφωνημένα κριτήρια, καθώς και μια παρακολούθηση πραγματικών αξιολογήσεων. |
1. Περιγράψτε το πρόβλημα απόδοσης
Ξεκινήστε με την εργασία, με μία πρόταση: δεδομένης μιας αλλαγής, ο κριτής εξηγεί τι βρήκε, γιατί είναι σημαντική και τι θα μπορούσε να κάνει ο συγγραφέας γι' αυτήν. Η λέξη-κλειδί είναι «εξηγεί». Ο εντοπισμός ενός προβλήματος είναι η μισή δεξιότητα. Το να το διατυπώσετε έτσι ώστε ένας συνάδελφος με διαφορετική άποψη να μπορεί να το καταλάβει, να το ζυγίσει και να δράσει είναι το άλλο μισό.
Η έρευνα σχετικά με την αναθεώρηση σύγχρονου κώδικα υποστηρίζει την παρατήρηση πέρα από το bug-hunting. Σε μια μελέτη της Microsoft, οι Bacchelli και Bird παρατήρησαν, πήραν συνεντεύξεις και πραγματοποίησαν έρευνα σε προγραμματιστές και διευθυντές. Διαπίστωσαν ότι η εύρεση ελαττωμάτων εξακολουθούσε να είναι το κύριο κίνητρο για αναθεώρηση, αλλά ότι οι κριτικές αφορούσαν λιγότερο ελαττώματα από ό,τι ανέμεναν οι άνθρωποι. Παρείχαν επίσης και άλλα οφέλη, όπως η ανταλλαγή γνώσεων, η επίγνωση της ομάδας και οι εναλλακτικές λύσεις, και οι ερευνητές περιέγραψαν την κατανόηση του κώδικα και των αλλαγών ως την βασική πτυχή της αναθεώρησης (Bacchelli και Bird, ICSE 2013). Πρόκειται για μια μελέτη των ομάδων μιας εταιρείας, οπότε χρησιμοποιήστε την ως λόγο για να σχεδιάσετε με γνώμονα την κατανόηση και όχι ως συντελεστή για τη δική σας.
Το δημοσιευμένο πρότυπο αξιολόγησης της Google υποδεικνύει το ίδιο. Υποδεικνύει στους αξιολογητές να προτιμούν την έγκριση μιας αλλαγής όταν αυτή βελτιώνει σίγουρα τη συνολική εύρυθμη λειτουργία του κώδικα, ακόμη και αν δεν είναι τέλεια, και αναφέρει ότι η αξιολόγηση μπορεί να διδάξει στους προγραμματιστές κάτι νέο, επομένως τα σχόλια που βοηθούν κάποιον να μάθει είναι ευπρόσδεκτα (Πρακτικές Μηχανικής Google). Και οι δύο πηγές περιγράφουν την αναθεώρηση ως έναν τόπο όπου ασκείται και διαβιβάζεται κρίση. Αυτό ακριβώς θα πρέπει να επαναλαμβάνουν οι ασκήσεις σας.
2. Διάγνωση των κενών μάθησης και πλαισίου
Συγκρίνετε την εργασία με ό,τι εφαρμόζει και αξιολογεί το τρέχον πρόγραμμά σας.
- Χρησιμοποιεί η τρέχουσα πρακτική την πραγματική εργασία; Αν οι νέοι κριτικοί μαθαίνουν διαβάζοντας έναν οδηγό στυλ και στη συνέχεια εξετάζοντας ζωντανά αιτήματα pull requests, εξασκούνται σε πραγματική δουλειά χωρίς να υπάρχει ασφαλές μέρος για να κάνουν λάθος. Αν η αξιολόγηση είναι ένα κουίζ για την εθιμοτυπία της κριτικής, μετράει την ανάκληση των κανόνων, όχι την ικανότητα εφαρμογής τους σε μια αλλαγή.
- Ποια είναι η γνωστική απαίτηση; Στην αναθεωρημένη ταξινόμηση του Bloom, η κρίση για το αν ένα σχέδιο είναι ορθό και η στάθμιση των αντισταθμίσεών του βρίσκεται στα επίπεδα ανάλυσης και αξιολόγησης, και η πρόταση για μια καλύτερη δομή φτάνει στο επίπεδο δημιουργίας. Αν οι ασκήσεις σας ρωτούν μόνο "τι κάνει αυτός ο κώδικας;", σταματούν στην κατανόηση. Ο οδηγός μας για αντιστοίχιση μαθησιακών δραστηριοτήτων με την Ταξινόμηση του Bloom δείχνει πώς να αντιστοιχίσετε τη δραστηριότητα στο επίπεδο.
- Μήπως κάτι άλλο εκτός από την ικανότητα μπαίνει εμπόδιο; Ελέγξτε τον χρόνο αξιολόγησης, τα εργαλεία, την ιδιοκτησία και τους κανόνες της ομάδας. Εάν οι κριτές έχουν πέντε λεπτά ανά αίτημα έλξης, καμία άσκηση δεν θα παράγει μια στοχαστική εξήγηση. Εάν οι συγγραφείς εκλάβουν κάθε σχόλιο ως κριτική, οι κριτές θα μαλακώσουν τα ευρήματά τους μέχρι να μην πουν τίποτα. Αναφέρετε αυτές τις αιτίες στους ανθρώπους που μπορούν να τις διορθώσουν.
3. Προετοιμασία σχεδιασμού, πρακτική και ανατροφοδότηση
Αναθέστε σε κάθε στάδιο μια ξεχωριστή εργασία.
Παρασκευή. Ελέγξτε τι χρειάζονται οι κριτές πριν ξεκινήσουν: τη λίστα ελέγχου αξιολόγησης της ομάδας, τις αρχές σχεδιασμού στις οποίες βασίζεται και τον τρόπο ανάγνωσης μιας διαφοράς στα εργαλεία σας. Διατηρήστε τον δικό σας ρυθμό και σύντομο. Ένας έλεγχος ανάκλησης επιβεβαιώνει μόνο τις προϋποθέσεις και δεν αποτελεί απόδειξη ότι κάποιος μπορεί να κάνει αξιολόγηση.
Πρακτική. Χρησιμοποιήστε προετοιμασμένες αλλαγές με έναν μικρό αριθμό προβληματισμών διαφορετικών ειδών: ένα σφάλμα ορθότητας, ένα πρόβλημα συντηρησιμότητας, όπως οι μικτές ευθύνες στο αρχικό παράδειγμα, ένα ασαφές όνομα ή μια δοκιμή που λείπει και κάποιος κώδικας που είναι καλός. Ζητήστε από τον κριτή να γράψει το σχόλιο που θα άφηνε, να κατατάξει τους προβληματισμούς και να πει ποιες περαιτέρω πληροφορίες θα ήθελε. Το πρακτικό μάθημα του CodeRefinery δείχνει το σχήμα: οι άνθρωποι ανοίγουν ένα αίτημα έλξης που περιέχει ένα μικρό τυπογραφικό λάθος και ένα μεγαλύτερο λάθος και στη συνέχεια το εξετάζουν ως ομότιμοι (CodeRefinery, Εξάσκηση στην αξιολόγηση κώδικα). Δημιουργήστε το δικό σας από τη δική σας βάση κώδικα, ώστε οι συμβάσεις και οι συμβιβασμοί να είναι πραγματικοί.
Ανατροφοδότηση. Συνδέστε το με τις αποφάσεις που έλαβε ο κριτικός. Η φράση "Παρατηρήσατε το πρόβλημα στρογγυλοποίησης, αλλά το σχόλιό σας έλεγε 'αυτό φαίνεται λάθος' χωρίς να αναφέρει ποια εισαγωγή το χαλάει" είναι πιο χρήσιμη από τη φράση "βρέθηκαν 2 από 4".
Ζωντανή εισαγωγή ή ασύγχρονη αξιολόγηση; Η ζωντανή συμβολή προσθέτει μεγαλύτερη αξία όταν μια ανησυχία είναι ασαφής και οι κριτές μαθαίνουν ακούγοντας έναν ανώτερο μηχανικό να λέει γιατί θα την έθεταν ή θα την απέρριπταν. Η ασύγχρονη αξιολόγηση είναι αρκετή για τη σύγκριση σχολίων με μια σχολιασμένη αξιολόγηση ειδικού.
4. Εργαστείτε με ένα ρεαλιστικό παράδειγμα
Ενδεικτικά. Ένας διευθυντής μηχανικής θα πρέπει να επικυρώσει την περίπτωση και τα κριτήρια απάντησης πριν από τη χρήση.
Η υπόθεση. Μια αλλαγή προσθέτει έναν υπολογισμό έκπτωσης σε μια υπηρεσία ολοκλήρωσης αγοράς. Περνάει τις δοκιμές της. Σε μία συνάρτηση, εφαρμόζει ποσοστιαίες και σταθερές εκπτώσεις, στρογγυλοποιεί το αποτέλεσμα, γράφει στη βάση δεδομένων και στέλνει ένα συμβάν. Έχει μία δοκιμή, για μία μόνο ποσοστιαία έκπτωση.
Το έργο. Ο κριτικός γράφει τα σχόλια που θα αφήσει, κατατάσσει τις ανησυχίες του και λέει τι θα πρέπει να γνωρίζει πριν από την έγκριση.
Μια πρώτη προσπάθεια. «Φαίνεται μια χαρά, το τεστ περνάει. Ίσως να το χωρίσουμε;» Ο κριτικός έχει παρατηρήσει κάτι αλλά δεν έχει πει τι, γιατί έχει σημασία ή τι πρέπει να κάνει. Ο συγγραφέας δεν μπορεί να αναλάβει δράση βάσει αυτού.
Σχόλια και επανάληψη. Ο συντονιστής ρωτά: τι θα κινδύνευε να προκαλέσει βλάβη σε μια μελλοντική αλλαγή σε αυτήν τη λειτουργία; Τι θα ζητούσατε από τον συγγραφέα να προσθέσει πριν την εγκρίνετε; Η επανάληψη ζητά ένα συγκεκριμένο σχόλιο για κάθε ανησυχία, με τον λόγο και μια πρόταση.
Μια πιο δυνατή προσπάθεια. «Η συνάρτηση εφαρμόζει δύο είδη έκπτωσης, στρογγυλοποιήσεις, αποθηκεύσεις και δημοσιεύσεις ενός συμβάντος, επομένως μια αλλαγή στη στρογγυλοποίηση θα μπορούσε να αλλάξει τι αποθηκεύουμε και τι δημοσιεύουμε ταυτόχρονα. Θα ζητούσα οι κανόνες τιμολόγησης να μετατραπούν σε μια καθαρή συνάρτηση που μπορούμε να δοκιμάσουμε από μόνη της. Η μοναδική δοκιμή καλύπτει μόνο ένα ποσοστό έκπτωσης. Θα ζητούσα μια σταθερή έκπτωση και μια παραγγελία που μηδενίζει το σύνολο. Δεν είμαι σίγουρος αν το συμβάν προορίζεται να ενεργοποιηθεί όταν το σύνολο είναι μηδέν, επομένως θα ρωτούσα τον συγγραφέα.» Παρατηρήστε ότι αυτό το σχόλιο κατονομάζει την ανησυχία, δίνει τον λόγο, κάνει μια συγκεκριμένη πρόταση και δηλώνει τι δεν γνωρίζει ο κριτικός.
5. Αξιολόγηση ικανότητας και σχεδιασμός μεταφοράς
Απόδειξη ικανότητας είναι η απόδοση σε μια νέα αλλαγή που ο κριτής δεν έχει δει. Βαθμολογήστε την ακρίβεια των ευρημάτων και τη χρησιμότητα της εξήγησης. Μια απλή ρουμπρίκα χρησιμοποιεί μια κλίμακα από 0 έως 2 ανά κριτήριο:
| Κριτήριο | Παρατηρήσιμα στοιχεία |
|---|---|
| Εκτέλεση εργασιών | Εντοπίζει τις σχετικές ανησυχίες στην αλλαγή και καταγράφει τα αποδεικτικά στοιχεία για κάθε μία από αυτές. |
| Αιτιολογία | Εξηγεί γιατί κάθε ανησυχία έχει σημασία, προσφέρει μια εναλλακτική λύση και αναφέρει τι παραμένει αβέβαιο. |
| Όρια | Ακολουθεί τους κανόνες αξιολόγησης της ομάδας και ζητά βοήθεια ή πληροφορίες όταν λείπει η αυθεντία ή το πλαίσιο. |
Άγκυρες: 0 σημαίνει απόντες ή μη υποστηριζόμενοι, 1 σημαίνει μερικοί με σχετικές παραλείψεις και 2 σημαίνει πλήρεις και δικαιολογημένοι με βάση συμφωνημένα κριτήρια. Ορίστε τα κρίσιμα σφάλματα ξεχωριστά, για παράδειγμα, εγκρίνοντας μια αλλαγή με κίνδυνο απώλειας δεδομένων, έτσι ώστε μια καλή συνολική βαθμολογία να μην μπορεί να την αποκρύψει. Προσαρμόστε τα κριτήρια με τον υπεύθυνο μηχανικής. Αυτή η ρουμπρίκα είναι μια αρχική πρόταση, όχι ένα επικυρωμένο πρότυπο ετοιμότητας. Για περισσότερες πληροφορίες σχετικά με τη συλλογιστική βαθμολόγησης, ανατρέξτε στον οδηγό μας για σχεδιασμός διαδραστικής πρακτικής με χρήσιμη ανατροφοδότηση.
Σχεδιάστε τη μεταφορά. Μετά την άσκηση, ελέγξτε ένα δείγμα των πραγματικών αξιολογήσεων του αξιολογητή μερικές εβδομάδες αργότερα, χρησιμοποιώντας τα ίδια κριτήρια. Συγκρίνετε με μια βασική τιμή που ελήφθη πριν από την εκπαίδευση και ορίστε τον πληθυσμό και το χρονοδιάγραμμα εκ των προτέρων. Εξετάστε άλλες αλλαγές που συνέβησαν την ίδια περίοδο, όπως ένα νέο εργαλείο αξιολόγησης ή μια αλλαγή προσωπικού, πριν πιστώσετε τις ασκήσεις.
6. Εκτελέστε την άσκηση ζωντανά ή με τον δικό σας ρυθμό με το AhaSlides
Μπορείτε να εκτελέσετε την άσκηση σε ένα εργαστήριο ή να αφήσετε τους αξιολογητές να την επεξεργαστούν μόνοι τους. Σε μια ζωντανή συνεδρία, δείξτε την προετοιμασμένη αλλαγή και χρησιμοποιήστε διαδραστικές διαφάνειες για τη συζήτηση:
- Επιλέξτε απάντηση για το "ποια ανησυχία θα θέσετε πρώτα;", με τις προβληματικές επιλογές ως επιλογές. Δείξτε το spread πριν αποκαλύψετε τη δική σας κατάταξη.
- Άνοιγμα τελείωσε για το "γράψτε το σχόλιο που θα αφήσετε". Οι κριτές μπορούν να συγκρίνουν τη διατύπωσή τους με άλλων, όπου φαίνεται η δεξιότητα επεξήγησης.
- Κλίμακα διαβάθμισης για το «πόσο σοβαρό είναι αυτό;», ώστε η ομάδα να μπορεί να δει πού διαφέρουν οι κρίσεις και να συζητήσει το γιατί.
Για τους κριτές που δεν μπορούν να παραστούν, η ίδια ακολουθία μπορεί να χρησιμοποιηθεί με τον δικό τους ρυθμό, με την σχολιασμένη κριτική ειδικού να εμφανίζεται μετά από κάθε απάντηση. Αντιμετωπίστε οποιονδήποτε ισχυρισμό σχετικά με την εκτέλεση κώδικα, τις ενσωματώσεις ή τις λειτουργίες τεχνητής νοημοσύνης ως μη επιβεβαιωμένο μέχρι να τον δοκιμάσετε με το δικό σας υλικό.
Αν εκπαιδεύετε επίσης κριτικούς σε κώδικα γραμμένο από τεχνητή νοημοσύνη, ανατρέξτε στον συνοδευτικό οδηγό μας στο Εκπαίδευση αναθεώρησης κώδικα που δημιουργείται από τεχνητή νοημοσύνηΑυτή η ανάρτηση αφορά τον έλεγχο της παραγόμενης παραγωγής. Αυτή αφορά τον τρόπο με τον οποίο οι άνθρωποι αξιολογούν την εργασία ο ένας του άλλου και πώς εξηγούν τι βρίσκουν.
Περιορισμοί που ενδέχεται να παραμείνουν
- Ώρα αναθεώρησης. Ένα στοχαστικό σχόλιο διαρκεί περισσότερο από το "LGTM" και οι προθεσμίες ωθούν προς τη σύντομη εκδοχή.
- Κανόνες ομάδας. Εάν η ανατροφοδότηση εκληφθεί ως προσωπική κριτική, οι κριτές θα μετριάσουν ή θα απορρίψουν τα ευρήματά τους.
- Κάλυψη υπόθεσης. Μία άσκηση δείχνει κάποια είδη ανησυχίας. Μια βαθμολογία δεν περιγράφει γενικά την κρίση ενός κριτή.
- ΜΕΤΑΦΟΡΑ. Η απόδοση σε ένα εργαστήριο δεν είναι η ίδια με την απόδοση σε μια πολυσύχναστη ουρά, οπότε ελέγξτε και πραγματικές κριτικές.
Ονομάστε τα αυτά στους χορηγούς νωρίς και σχεδιάστε ξεχωριστές διορθώσεις. Οι ασκήσεις βελτιώνουν αυτό που μπορεί να δει και να εξηγήσει ένας κριτικός. Δεν δημιουργούν τον χρόνο ή τους κανόνες.
Συχνές ερωτήσεις
Τι είναι οι ασκήσεις επανάληψης κώδικα;
Πρόκειται για προετοιμασμένες πρακτικές εργασίες στις οποίες ένας προγραμματιστής εξετάζει μια αλλαγή με γνωστές ανησυχίες, γράφει τα σχόλια που θα αφήσει και λαμβάνει σχόλια σχετικά με την ακρίβεια και τη χρησιμότητα. Στόχος είναι η ανάπτυξη της δεξιότητας του κριτή και όχι η μεταφορά της αλλαγής.
Πώς αξιολογείτε εάν η κρίση ενός κριτή έχει βελτιωθεί;
Δώστε μια νέα αλλαγή που δεν έχουν δει και βαθμολογήστε τα ευρήματα και την εξήγηση με βάση τα συμφωνημένα κριτήρια. Στη συνέχεια, ελέγξτε ένα δείγμα πραγματικών κριτικών μερικές εβδομάδες αργότερα. Ένα κουίζ σχετικά με τους κανόνες αξιολόγησης επιβεβαιώνει μόνο τις προϋποθέσεις.
Η αξιολόγηση κώδικα από ομότιμους αφορά κυρίως την εύρεση σφαλμάτων;
Η εύρεση ελαττωμάτων εξακολουθεί να αποτελεί κύριο κίνητρο, αλλά μια μελέτη στη Microsoft διαπίστωσε ότι οι αξιολογήσεις αφορούσαν λιγότερο ελαττώματα από το αναμενόμενο και επίσης παρείχαν ανταλλαγή γνώσεων και ευαισθητοποίηση της ομάδας. Ασκήσεις σχεδιασμού που επιβραβεύουν την εξήγηση και την κατανόηση, καθώς και τον αριθμό των ελαττωμάτων.
Από πού να αρχίσω
Επιλέξτε ένα είδος αλλαγής που η ομάδα σας εξετάζει συχνά. Γράψτε τη δήλωση απόδοσης, ζητήστε από έναν ανώτερο μηχανικό να προετοιμάσει μια αλλαγή με τρία ή τέσσερα σημεία αναφοράς και συντάξτε μια ρουμπρίκα τριών κριτηρίων με κλίμακα από το 0 έως το 2 και μια λίστα κρίσιμων σφαλμάτων. Εφαρμόστε την πιλοτικά σε μια μικρή ομάδα και, στη συνέχεια, συγκρίνετε τις επόμενες πραγματικές αξιολογήσεις τους με μια γραμμή βάσης.
Για να δείτε πώς μια άσκηση αναθεώρησης θα μπορούσε να εκτελεστεί ζωντανά με τη δική σας ομάδα και να επαναχρησιμοποιηθεί με τον δικό σας ρυθμό στη συνέχεια, εξερευνήστε το AhaSlides.








