Μετάβαση στο περιεχόμενο
Topos Uranos

Περίληψη

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

Μαθησιακοί στόχοι

  1. Να οργανώνει ένα πρόγραμμα σε περισσότερα αρθρώματα με κεφαλίδες, φρουρούς και συμβάσεις, να το μεταγλωττίζει χωριστά και να διαγιγνώσκει τα μηνύματα του συνδέτη.
  2. Να δοκιμάζει ένα άρθρωμα με βάση την προδιαγραφή του, με ένα πρόγραμμα αυτοματοποιημένων δοκιμών που εκτελείται υπό τους ανιχνευτές, και να ελέγχει με ισχυρισμούς ό,τι δεν μπορεί να συμβεί.
  3. Να εντοπίζει ένα σφάλμα με μέθοδο (αναπαραγωγή, ελαχιστοποίηση, διατύπωση υποθέσεων, διχοτόμηση) και με τον αποσφαλματωτή, και να τεκμηριώνει την έρευνα.
  4. Να αναγνωρίζει την απροσδιόριστη συμπεριφορά που έδειξε ο κύκλος, μαζί με ό,τι ανιχνεύει κάθε περίπτωση, και την παραβίαση του κανόνα του ενός ορισμού που κανείς δεν διαγιγνώσκει.
  5. Να ενοποιεί όλο τον κύκλο σε ένα έργο: να προσδιορίζει, να αποσυνθέτει, να κατασκευάζει, να δοκιμάζει, να μετρά το κόστος και να αποσφαλματώνει ένα πρόγραμμα διαχείρισης πινακοποιημένων δεδομένων.

Όσα πέτυχε η ενότητα

Η ενότητα έθεσε ως σκοπό να διδάξει πώς οργανώνονται, επαληθεύονται και αποσφαλματώνονται προγράμματα που δεν χωρούν πια σε ένα αρχείο ούτε στο μυαλό. Ο σκοπός εκπληρώθηκε στηριγμένος σε όσα η εισαγωγή δήλωσε ως γνωστά: τη δήλωση και τον ορισμό, τη μεταγλώττιση και τη σύνδεση, τη σύμβαση, την αναλλοίωτη και τη δυαδική αναζήτηση. Το πρόγραμμα του καταλόγου βιβλίων με το οποίο άνοιξε η ενότητα, που χωρούσε σε ένα αρχείο, αντέγραφε το parseInt άλλη μια φορά και παρέλειπε σιωπηλά το «Εκατό χρόνια μοναξιά» επειδή έγραφε < εκεί όπου η προδιαγραφή έλεγε «συμπεριλαμβανομένων και των δύο», ξαναγράφεται στην τελευταία παράγραφο αυτού του μαθήματος ως τελική εργασία: τέσσερα αρθρώματα με συμβάσεις, ένα κύριο πρόγραμμα που απαντά σε εντολές και ένα πρόγραμμα δοκιμών με είκοσι πέντε περιπτώσεις. Δύο από αυτές τις περιπτώσεις, «μεταξύ, όρια» και «μεταξύ, ένα έτος», αποτυγχάνουν με τη συνθήκη του αρχικού προγράμματος, και γι’ αυτό το σφάλμα δεν θα επέστρεφε χωρίς να το αντιληφθεί κανείς.

Πολλά αρχεία και δικές μας βιβλιοθήκες

Το μάθημα Πολλά αρχεία και δικές μας βιβλιοθήκες χώρισε ένα πρόγραμμα σε μια κεφαλίδα που δηλώνει, ένα αρχείο υλοποίησης που ορίζει και ένα main.cpp που χρησιμοποιεί. Παρουσίασε τους φρουρούς συμπερίληψης, που εμποδίζουν τη διπλή συμπερίληψη μέσα σε μια μονάδα μετάφρασης· τον κανόνα του ενός ορισμού, που εξηγεί τα «multiple definition» και «undefined reference» και δίνει στο inline τη σημερινή του σημασία ως άδεια· τη χωριστή μεταγλώττιση με το -c, που επαναμεταγλωττίζει μόνο τα αντικειμενικά αρχεία των οποίων άλλαξαν τα πηγαία αρχεία ή οι κεφαλίδες· και μια δική μας βιβλιοθήκη με συναρτήσεις από μαθήματα που προηγήθηκαν.

Δοκιμές

Το μάθημα Δοκιμές προγραμμάτων δίδαξε πώς παράγονται οι περιπτώσεις από μια προδιαγραφή, κατά περιοχές, όρια και ειδικές περιπτώσεις, με το αναμενόμενο αποτέλεσμα υπολογισμένο με άλλον δρόμο· πώς γράφεται ένα πρόγραμμα αυτοματοποιημένων δοκιμών που αναφέρει μόνο τις αποτυχίες και τερματίζει με κωδικό 0 ή 1· πώς χρησιμοποιείται το assert για ό,τι δεν μπορεί να συμβεί, με τη γνώση ότι το -DNDEBUG το σβήνει μαζί με τη συνθήκη του· πώς δοκιμάζουμε κατά τη μεταγλώττιση με static_assert και constexpr· και πώς εκτελούνται οι δοκιμές με τους ανιχνευτές (τον ανιχνευτή σφαλμάτων μνήμης, AddressSanitizer, και τον ανιχνευτή απροσδιόριστης συμπεριφοράς, UndefinedBehaviorSanitizer). Όλα στηρίζονται στην προειδοποίηση του Ντάικστρα: μια δοκιμή δείχνει την παρουσία σφαλμάτων, ποτέ την απουσία τους.

Αποσφαλμάτωση

Το μάθημα Αποσφαλμάτωση προγραμμάτων παρουσίασε την αποσφαλμάτωση ως πειραματική μέθοδο: αναπαραγωγή της αστοχίας, διατύπωση διαψεύσιμων υποθέσεων, απόφαση ανάμεσά τους με πειράματα και διχοτόμηση του ύποπτου τμήματος. Ανέπτυξε το εργαλείο (-g χωρίς βελτιστοποίηση, τη ρύθμιση του Visual Studio Code στα τρία συστήματα, μια πραγματική συνεδρία του GDB, τα απλά σημεία διακοπής και τα σημεία διακοπής υπό συνθήκη, τα βήματα και τη στοίβα κλήσεων) και τις στρατηγικές που αξίζουν περισσότερο από αυτό: ελαχιστοποίηση της περίπτωσης, αναζήτηση του τελευταίου σωστού σημείου με ισχυρισμούς και εκκίνηση από το πρώτο δικό μας πλαίσιο της αναφοράς του ανιχνευτή.