Software bug
Ένα σφάλμα λογισμικού είναι ένα πρόβλημα στον κώδικα ενός προγράμματος υπολογιστή που το κάνει να μην λειτουργεί σωστά. Μπορεί να προκαλέσουν αναστάτωση στον χρήστη και να κάνουν τον υπολογιστή του να καταρρεύσει ή να παγώσει. Τα περισσότερα προγράμματα υπολογιστών έχουν σφάλματα. Ένα πρόγραμμα που έχει μεγάλο αριθμό σφαλμάτων (ή ενδεχομένως ένα ή λίγα σοβαρά σφάλματα) λέγεται ότι είναι προβληματικό.
Τα περισσότερα σφάλματα προκαλούνται από κακό προγραμματισμό του προγραμματιστή, αλλά μερικές φορές μπορεί να προκληθούν από προβλήματα του μεταγλωττιστή. Όταν εντοπίζονται σφάλματα, οι άνθρωποι στέλνουν αναφορές σφαλμάτων στον προγραμματιστή για να τον ενημερώσουν για το σφάλμα και να τον αφήσουν να το διορθώσει.
Μερικές φορές, οι άνθρωποι λένε ότι ο υπολογιστής τους έχει σφάλμα όταν κάτι δεν πάει καλά με αυτόν. Το πρόβλημα συνήθως προκαλείται από έναν ιό υπολογιστή που έχει μολύνει τον υπολογιστή τους και τον κάνει να αργεί ή να κάνει διάφορα πράγματα.
Ορισμένα σφάλματα είναι αβλαβή, για παράδειγμα, πολλά βιντεοπαιχνίδια επιτρέπουν λανθασμένα στα αντικείμενα να κινούνται μέσα από τοίχους. Άλλα σφάλματα είναι πιο σοβαρά, για παράδειγμα, ένα σφάλμα σε ένα σύστημα πλοήγησης που προκαλεί την έκρηξη ενός αεροπλάνου.
Τύποι σφαλμάτων
Υπερχείλιση buffer
Μια υπερχείλιση buffer συμβαίνει όταν ένα πρόγραμμα γράφει ή διαβάζει από μια περιοχή μνήμης στην οποία δεν πρέπει να έχει πρόσβαση.
Αριθμητική υπερχείλιση
Μια αριθμητική υπερχείλιση συμβαίνει όταν ένας αριθμός που περιέχεται σε μια μεταβλητή αυξάνεται πέρα από τον υψηλότερο αριθμό που επιτρέπει η μεταβλητή. Αυτό συνήθως προκαλεί την επαναφορά του αριθμού στο μηδέν.
Απέραντος βρόχος
Ένας άπειρος βρόχος συμβαίνει όταν ένα πρόγραμμα εισέρχεται σε έναν βρόχο (μια σειρά εντολών που επαναλαμβάνεται πολλές φορές) και δεν υπάρχει τρόπος να βγει από τον βρόχο. Αυτό μπορεί να προκαλέσει το πάγωμα του προγράμματος.
Σφάλματα στρογγυλοποίησης
Εάν μια μεταβλητή κινητής υποδιαστολής δεν έχει αρκετή ακρίβεια, ο αριθμός που αποθηκεύεται σε αυτήν μπορεί να είναι ανακριβής. Αυτό μπορεί να προκαλέσει διάφορα προβλήματα ανάλογα με τον τύπο του προγράμματος, για παράδειγμα μπορεί να προκαλέσει την πλοήγηση ενός προγράμματος πλοήγησης σε μια μη προβλεπόμενη τοποθεσία ή παραμορφωμένο ήχο σε ένα πρόγραμμα εγγραφής ήχου.
Διαίρεση με το μηδέν
Η διαίρεση με το μηδέν είναι άκυρη μαθηματική πράξη. Αν ένα πρόγραμμα διαιρέσει έναν ακέραιο με το μηδέν, θα καταρρεύσει. Στο Linux, το μήνυμα που εμφανίζεται όταν εμφανίζεται αυτό το σφάλμα είναι "floating point exception", παρόλο που δεν εμπλέκονται αριθμοί κινητής υποδιαστολής. Τα μαθηματικά κινητής υποδιαστολής επιτρέπουν μερικές φορές τη διαίρεση με το μηδέν. Αυτό συνήθως οδηγεί σε μια ειδική τιμή "not a number".
Προβλήματα αποκοπής
Στα βιντεοπαιχνίδια, τα προβλήματα αποκοπής, που ονομάζονται επίσης προβλήματα ανίχνευσης σύγκρουσης, εμφανίζονται όταν ένα αντικείμενο περνάει μέσα από ένα εμπόδιο (όπως ένας τοίχος, ένα πάτωμα ή μια οροφή) από το οποίο δεν προοριζόταν να περάσει. Αυτό είναι ένα πολύ συνηθισμένο σφάλμα που συναντάται σε πολλά βιντεοπαιχνίδια. Αυτό μπορεί να συμβεί, για παράδειγμα, στο Doom 2, όταν ένα συντριμμένο τέρας ανασταίνεται από ένα αρχιβίλλιο. Τα προβλήματα αποκοπής μπορούν συχνά να χρησιμοποιηθούν ως τακτική εξοικονόμησης χρόνου σε speedruns, για παράδειγμα, στο Super Mario 64 είναι δυνατόν να παραλείψετε να ανεβείτε τη σπειροειδή σκάλα στο κάστρο πηδώντας μέσα από το ταβάνι.
Σφάλματα ασφαλείας
Τα σφάλματα ασφαλείας είναι σφάλματα που επιτρέπουν σε έναν εισβολέα είτε να αποκτήσει πρόσβαση στον υπολογιστή, είτε να προκαλέσει την κατάρρευση του υπολογιστή. Η πρόκληση κατάρρευσης του υπολογιστή ονομάζεται επίθεση άρνησης παροχής υπηρεσιών. Τα σφάλματα ασφαλείας θεωρούνται ιδιαίτερα σημαντικό να διορθωθούν επειδή μπορεί να επιτρέψουν σε εισβολείς να κλέψουν σημαντικές πληροφορίες, όπως αριθμούς πιστωτικών καρτών ή κωδικούς πρόσβασης. Παραδείγματα σφαλμάτων ασφαλείας είναι το Heartbleed και το Shellshock.
Misbugs
Ένα misbug είναι ένα σφάλμα που έχει χρησιμοποιηθεί ως χαρακτηριστικό γνώρισμα. Ένα παράδειγμα θα ήταν ένα σφάλμα σε ένα τηλέφωνο Android που επιτρέπει στους χρήστες να αποκτήσουν πρόσβαση root.
Σφάλματα υλικού
Ορισμένα σφάλματα επηρεάζουν το υλικό (τα φυσικά μέρη ενός υπολογιστή) αντί για το λογισμικό. Για παράδειγμα, η εκτέλεση της εντολής lock cmpxchg8b eax
σε παλιούς επεξεργαστές Pentium θα προκαλούσε τη διακοπή λειτουργίας του επεξεργαστή μέχρι την επανεκκίνηση. Δεδομένου ότι τα σφάλματα υλικού είναι φυσικά σχεδιαστικά ελαττώματα, δεν μπορούν να διορθωθούν με μια ενημέρωση λογισμικού, αν και μπορεί να είναι δυνατή η παράκαμψη (απόκρυψη) του σφάλματος με μια ενημέρωση λογισμικού.
Ερωτήσεις και απαντήσεις
Q: Τι είναι ένα σφάλμα λογισμικού;
A: Ένα σφάλμα λογισμικού είναι ένα πρόβλημα στον κώδικα ενός προγράμματος υπολογιστή που το κάνει να μην λειτουργεί σωστά.
Ερ: Ποιες είναι οι συνέπειες ενός σφάλματος λογισμικού;
A: Ένα σφάλμα λογισμικού μπορεί να προκαλέσει ταλαιπωρία στον χρήστη και μπορεί να κάνει τον υπολογιστή του να καταρρεύσει ή να παγώσει.
Ερ: Όλα τα προγράμματα υπολογιστών έχουν σφάλματα;
Α: Ναι, τα περισσότερα προγράμματα υπολογιστών έχουν σφάλματα.
Ε: Τι είναι ένα πρόγραμμα με σφάλματα;
Α: Ένα πρόγραμμα με σφάλματα είναι ένα πρόγραμμα που έχει μεγάλο αριθμό σφαλμάτων ή ενδεχομένως ένα ή λίγα σοβαρά σφάλματα.
Ερ: Ποιος είναι υπεύθυνος για τα περισσότερα σφάλματα στα προγράμματα υπολογιστών;
Α: Τα περισσότερα σφάλματα οφείλονται σε κακό προγραμματισμό από τον προγραμματιστή, αλλά μερικές φορές μπορεί να οφείλονται σε προβλήματα του μεταγλωττιστή.
Ερ: Τι κάνουν οι άνθρωποι όταν βρίσκουν ένα σφάλμα σε ένα πρόγραμμα υπολογιστή;
Α: Όταν εντοπίζονται σφάλματα, οι άνθρωποι στέλνουν αναφορές σφαλμάτων στον προγραμματιστή για να τον ενημερώσουν για το σφάλμα και να τον αφήσουν να το διορθώσει.
Ε: Τι εννοούν οι άνθρωποι όταν λένε ότι ο υπολογιστής τους έχει σφάλμα;
Α: Όταν οι άνθρωποι λένε ότι ο υπολογιστής τους έχει σφάλμα, συνήθως εννοούν ότι κάτι δεν πάει καλά με αυτόν, το οποίο συνήθως προκαλείται από έναν ιό υπολογιστή που έχει μολύνει τον υπολογιστή τους και τον κάνει να αργεί ή να κάνει διαφορετικά πράγματα.