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

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

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

Για να δουλέψει ένας εκσφαλματωτής πρέπει το προς εκσφαλμάτωση πρόγραμμα να περιέχει δεδομένα του πηγαίου κώδικα που τρέχει. Σε Λειτουργικό σύστημα Linux αυτό γίνεται με την προσθήκη της παραμέτρου -g στην γραμμή εντολών που προκαλεί την μετάφραση του προγράμματος γραμμένου σε Ansi C. Ο αποσφαλματωτής καλείται εκτελώντας την εντολή sdb ή adb ή gdb ή dbx.

Διαδικασία αποσφαλμάτωσης[Επεξεργασία | επεξεργασία κώδικα]

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

  1. Επανάληψη του προβλήματος
  2. Απομόνωση του σημείου που εμφανίζεται το σφάλμα
  3. Αναγνώριση της αιτίας που το προκαλεί
  4. Διόρθωση του σφάλματος
  5. Επιβεβαίωση της διόρθωσης

Επανάληψη του προβλήματος[Επεξεργασία | επεξεργασία κώδικα]

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

Απομόνωση του σημείου που εμφανίζεται το σφάλμα[Επεξεργασία | επεξεργασία κώδικα]

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

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

Αναγνώριση της αιτίας που το προκαλεί[Επεξεργασία | επεξεργασία κώδικα]

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

Διόρθωση του σφάλματος[Επεξεργασία | επεξεργασία κώδικα]

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

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

Επιβεβαίωση της διόρθωσης[Επεξεργασία | επεξεργασία κώδικα]

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

Τεχνικές αποσφαλμάτωσης[Επεξεργασία | επεξεργασία κώδικα]

Χρήση προκαθορισμένων τιμών[Επεξεργασία | επεξεργασία κώδικα]

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

Χρησιμοποίηση ειδικών σημείων ελέγχου[Επεξεργασία | επεξεργασία κώδικα]

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

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

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]