Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου

Αναζήτηση

Βρες
Εμφάνιση

14.1.3 Αξιοπιστία

Ο όρος αναφέρεται στη συνεχή και ομοιόμορφη λειτουργία ενός προγράμματος. Πράγματι χρησιμοποιώντας ένα πρόγραμμα περιμένουμε από αυτό, να συμπεριφέρεται βάση των προδιαγραφών, ακόμα και κάτω από τις δυσμενέστερες συνθήκες.

Συνήθη λάθη χειρισμού, ή ακόμη ηθελημένα λάθη που επιζητούν τα όρια του προγράμματος, μπορούν να καταρρακώσουν την αξιοπιστία του.

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

Συνήθως τα προβλήματα αξιοπιστίας παρουσιάζονται σε πραγματικές συνθήκες λειτουργίας των προγραμμάτων, όταν ο χρήστης του προγράμματος δεν είναι πλέον ο κ. Τέλειος αλλά αντίθετα ο κ. Άσχετος.

Ας δώσουμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε ένα πρόγραμμα που διαβάζει δύο αριθμούς και εμφανίζει το άθροισμα τους. Προφανώς από το πρόγραμμα περιμένουμε, όσο του δίνουμε αριθμούς, να μας δίνει το άθροισμα. Τι θα κάνει όμως το πρόγραμμα, αν του δώσουμε ετερόσημους αριθμούς; θα πρέπει να μας δώσει το αλγεβρικό τους άθροισμα. Το ίδιο θα πρέπει να συμβεί και αν του δώσουμε δύο αρνητικούς αριθμούς. Αν του δώσουμε έναν αριθμό και ένα γράμμα όμως; Εδώ έχουμε αλλαγή στον τύπο δε δομένων και ένα πρόγραμμα που δουλεύει αξιόπιστα, πρέπει να απορρίψει το γράμμα σαν δεδομένο ακατάλληλο για επεξεργασία και να ζητήσει άλλο αποδεκτό τύπο δεδομένου.

Σε άλλη περίπτωση δίνεται ημερομηνία από το πληκτρολόγιο (ημέρα, μήνας, έτος), και ζητείται να βρεθεί σε ποια ημέρα της εβδομάδας αντιστοιχεί. Άραγε πως θα συμπεριφερθεί το πρόγραμμα αν του δώσουμε ενδεικτικά: Αρνητικό αριθμό ή μηδέν στην θέση της ημέρας, του μήνα ή του έτους; Αριθμό μήνα μεγαλύτερο του 12; Αριθμό ημέρας 32; Εδώ έχουμε τιμές εκτός ορίων υπολογισμού, προφανώς ένα αξιόπιστο πρόγραμμα πρέπει να απορρίπτει κάθε τέτοια ημερομηνία και να ζητά άλλη αποδεκτή τιμή ημερομηνίας.

Παραδείγματα τιμών άλλου τύπου από τον αναμενόμενο είναι και τα: - Τι πρέπει να κάνει ένα πρόγραμμα που στα γράμματα ενός ονοματεπώνυμου δίνονται και αριθμοί; - Τι πρέπει να κάνει ένα πρόγραμμα όταν τα ψηφία του ταχυδρομικού κώδικα είναι λιγότερα από πέντε; - Τι πρέπει να κάνει ένα πρόγραμμα που του δίδονται γράμματα στη θέση αριθμών; Παραδείγματα τιμών εκτός ορίου υπολογισμών είναι και τα: - Δίνεται δυαδικός αριθμός. Ζητείται να μετατραπεί στον αντίστοιχό του δεκαδικό. Προφανώς στην είσοδο πρέπει να γίνονται δεκτά μόνο ψηφία 0 και 1. - Δίνεται ρωμαϊκός αριθμός. Ζητείται να μετατραπεί στον αντίστοιχό του δεκαδικό. Προφανώς στην είσοδο πρέπει κατ’ αρχήν να γίνονται δεκτοί μόνο χαρακτήρες I, V, X, L, C, D, M, αλλά και μία ακόμα σειρά ελέγχων προκειμένου να γίνει αποδεκτός ο συνδυασμός των ορθών χαρακτήρων.

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

Για την περίπτωση των τιμών εκτός ορίου, ο τρόπος βελτίωσης της αξιοπιστίας θα στηριχθεί στους ελέγχους που θα συμπεριληφθούν στο πρόγραμμα. Προσπαθώντας για τη λύση τέτοιου είδους προβλημάτων, διαπιστώνεται ότι πρώτα πρέπει να σχεδιαστούν όλοι οι έλεγχοι και μετά η λύση του προβλήματος. Υπάρχει δηλαδή ένα "πρόβλημα μέσα στο πρόβλημα" .

Διαπιστώνεται ακόμη, ότι ένα πρόγραμμα λίγων γραμμών, λόγω των ελέγχων, κύρια των ελέγχων αποδεκτών τιμών διογκώνεται υπέρμετρα.

Δεν θα αναφερθούμε σε παραδείγματα της πρώτης περίπτωσης, επειδή η αντιμετώπιση τους είναι στενά συνδεδεμένη με τη χρησιμοποιούμενη γλώσσα προγραμματισμού.

Χωρίς πολύ καλή γνώση του χώρου του βασικού προβλήματος είναι αδύνατον να σχεδιαστούν σωστά οι απαραίτητοι έλεγχοι, ώστε το πρόγραμμα να είναι αξιόπιστο.

Ας δούμε λοιπόν ένα παράδειγμα για τη δεύτερη περίπτωση.

Παράδειγμα 4 Να κατασκευαστεί πρόγραμμα που θα ελέγχει μια ημερομηνία που δίνεται από το πληκτρολόγιο. Κατ΄ αρχήν μερικές γνωστές και "άγνωστες" πληροφορίες για τον χώρο των ημερομηνιών, προκειμένου να υπάρχει ένα ελάχιστο ποσό γνώσεων για να περιγραφούν οι σχετικοί έλεγχοι.

- Κάθε έτος έχει 365 ημέρες, εκτός αν είναι δίσεκτο, οπότε έχει 366. - Οι μήνες Ιανουάριος, Μάρτιος, Μάιος, Ιούλιος, Αύγουστος, Οκτώβριος και Δεκέμβριος έχουν 31 μέρες. - Οι μήνες Απρίλιος, Ιούνιος, Σεπτέμβριος και Νοέμβριος, έχουν 30 μέρες. - Ο Φεβρουάριος έχει 28 μέρες, εκτός αν το έτος είναι δίσεκτο, οπότε έχει 29. - Ένα έτος λέγεται δίσεκτο αν ο αριθμός του είναι πολλαπλάσιο του 4, αλλά όχι του 100, εκτός αν είναι πολλαπλάσιο του 400. Για παράδειγμα: το 1984 είναι δίσεκτο (πολλαπλάσιο του 4), το 1900 δεν είναι (πολλαπλάσιο του 4 αλλά και του 100), το 2000 είναι δίσεκτο (πολλαπλάσιο του 4, του 100, αλλά και του 400), τέλος το 1993 δεν είναι. - Το ημερολόγιο που ισχύει σήμερα είναι το Γρηγοριανό. Το εφάρμοσε ο πάπας Γρηγόριος ο ΙΓ’ την 4η Οκτωβρίου του 1582 προσθέτοντας δέκα ημέρες. Έτσι η επόμενη της 4ης Οκτωβρίου ήταν η 15η Οκτωβρίου. Στην Ελλάδα εφαρμόστηκε στις 10 Μαρτίου 1923. Έτσι η επόμενη της 10ης Μαρτίου ήταν η 23η Μαρτίου 1923.

Προσέξτε λοιπόν γιατί δεν υπάρχουν στα ελληνικά ημερολόγια οι ημερομηνίες 11/3/1923 έως 22/3/1923. Ενώ στα Ευρωπαϊκά δεν υπάρχουν οι ημερομηνίες 5/10/1582 έως 14/10/1582. Αυτό σε κάποιες περιπτώσεις μπορεί να είναι σημαντικό, ενώ για άλλες αδιάφορο.

Μετά από αυτά σκεπτόμενοι τη λύση του προβλήματος, διαπιστώνουμε ότι θα πρέπει να κάνουμε τους παρακάτω ελέγχους. - Πρώτα να ελέγξουμε, αν δόθηκαν αρνητικοί αριθμοί στην ημερομηνία. - Μετά να ελέγξουμε, αν η ημέρα είναι υπαρκτή. Βλέπε πληροφορία για το Γρηγοριανό ημερολόγιο. - Στη συνέχεια να ελέγξουμε, αν το έτος που δόθηκε είναι δίσεκτο. Αυτή την πληροφορία θα τη χρησιμοποιήσουμε στον έλεγχο της ημέρας, όταν ο μήνας είναι ο Φεβρουάριος. - Και τέλος να ελέγξουμε, αν συνδυάζονται σωστά ο αριθμός της ημέρας με τον αριθμό του μήνα.

ΠΡΟΓΡΑΜΜΑ Ημερομηνία ΔΙΑΒΑΣΕ η, μ, ε ΚΑΛΕΣΕ Ελεγχος_1(η, μ, ε, c) ΑΝ c=0 ΤΟΤΕ ΓΡΑΨΕ `Αρνητικές τιμές' ΚΑΛΕΣΕ Ελεγχος_2(η, μ, ε, c) ΑΝ c=0 ΤΟΤΕ ΓΡΑΨΕ `Ανύπαρκτη ημερομηνία' ΚΑΛΕΣΕ Ελεγχος_3(η, μ, ε, c) ΑΝ c=0 ΤΟΤΕ ΓΡΑΨΕ `Λανθασμένη ημερομηνία' ΤΕΛΟΣ

ΔΙΑΔΙΚΑΣΙΑ Ελεγχος_1(η, μ, ε, c) ! Αρνητικές ημερομηνίες c ΑΝ ε>0 ΚΑΙ μ>0 ΚΑΙ η>0 ΤΟΤΕ c ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑ Ελεγχος_1

ΔΙΑΔΙΚΑΣΙΑ Ελεγχος_2(η, μ, ε, c) ! Ιουλιανό ημερολόγιο c ΑΝ (10

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑ Ελεγχος_2 ΔΙΑΔΙΚΑΣΙΑ Ελεγχος_3(η, μ, ε, c) ! Έλεγχος δίσεκτου έτους (αν δ=1 ΔΙΣΕΚΤΟ) ε4 ΑΝ ε4=0 ΤΟΤΕ ΑΝ ε100=0 ΤΟΤΕ ΑΝ ε400=0 ΤΟΤΕ δ ΤΕΛΟΣ_ΑΝ ΑΛΛΙΩΣ δ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ! Έλεγχος αποδεκτής ημερομηνίας (c=1 ΑΠΟΔΕΚΤΗ) c ΕΠΙΛΕΞΕ μ ΠΕΡΙΠΤΩΣΗ 1, 3, 5, 7, 8, 10, 12 ΑΝ η ΠΕΡΙΠΤΩΣΗ 4, 6, 9, 11 ΑΝ η ΠΕΡΙΠΤΩΣΗ 2 ΑΝ δ=0 ΚΑΙ η ΑΝ δ=1 ΚΑΙ η ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑ Ελεγχος_3

Ας δοθεί προσοχή στη σύνθετη συνθήκη στην ενότητα Ελεγχος_2. Ο έλεγχος σωστά γίνεται με σύνθετη συνθήκη, παρά τα όσα αντίθετα έχουν γραφτεί. Εδώ γίνεται μια ακίνδυνη καταστρατήγηση του κανόνα για λόγους συντομίας. Πραγματικά στο συγκεκριμένο σημείο δεν πρόκειται να υπάρξει καμία αλλαγή, σε οποιαδήποτε επέκταση του προγράμματος.

Το παραπάνω πρόγραμμα χρησιμοποιείται απαραιτήτως ως υποπρόγραμμα από οποιοδήποτε πρόγραμμα επεξεργάζεται ημερομηνίες που εισάγονται από το πληκτρολόγιο. Ας σημειωθεί ότι για τον έλεγχο της αποδεκτής ημερομηνίας χρειάστηκαν αρκετές γραμμές. Αυτή θα είναι η επιπλέον επιβάρυνση κάθε τέτοιου προγράμματος.