Ευθραυστότητα λογισμικού

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

Ο όρος προέρχεται από ανάλογα φαινόμενα ευθραυστότητας στην μεταλλουργία.

Συχνά, μία μοναδική αλλαγή σε ένα πρόγραμμα καταλήγει σε αλυσιδωτές αλλαγές (ripple effects).

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

Η ευθραυστότητα στο λογισμικό μπορεί να προκαλείται από αλγόριθμους που δεν δουλεύουν καλά για όλο το φάσμα των δεδομένων εισόδου. Ένα καλό παράδειγμα είναι ένας αλγόριθμος που επιτρέπει μια διαίρεση με το μηδέν να συμβεί, ή μια εξίσωση που χρησιμοποιείται για να βγάλει αποτελέσματα πέρα από από τα δεδομένα για τα οποία έχει φτιαχτεί. Μια άλλη αιτία είναι η χρήση δομών δεδομένων που οριοθετούν πολύ αυστηρά τις πιθανές τιμές. Αυτό ήταν κοινό φαινόμενο στα τέλη της δεκαετίας του 1990 όταν οι χρήστες κατάλαβαν πως το λογισμικό τους είχε χώρο μόνο για δυο ψηφία στο έτος και αυτό έκανε τους προγραμματιστές να ανανεώσουν ξαφνικά τεράστιες ποσότητες εύθραυστου λογισμικού πριν το έτος 2000. Μια άλλη πιο συχνή μορφή ευθραυστότητας είναι στα γραφικά περιβάλλοντα που έχουν φτιαχτεί με λάθος υποθέσεις. Για παράδειγμα, μια χρήστρια ή ένας χρήστης μπορεί να έχει μια οθόνη χαμηλής ανάλυσης, και το λογισμικό να ανοίξει ένα παράθυρο πολύ μεγάλο για να χωρέσει στη μικρή οθόνη. Ένα άλλο συχνό πρόβλημα εμφανίζεται όταν η χρήστρια ή ο χρήστης έχει μια χρωματική παλέττα διαφορετική από τη προκαθορισμένη, με αποτέλεσμα το κείμενο να φαίνεται με το ίδιο χρώμα που έχει και το φόντο, ή όταν η χρήστρια ή ο χρήστης χρησιμοποιεί μια γραμματοσειρά διαφορετική από τη προκαθορισμένη, που δεν χωράει στον χώρο που έχει διατεθεί για αυτή κι έτσι «κόβονται» οδηγίες και ετικέττες.

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

Μερικά παραδείγματα για τις αιτίες που μπορεί να κάνουν το λογισμικό εύθραυστο είναι τα εξής:

  • Οι χρήστριες και οι χρήστες αναμένουν οτι το λογισμικό θα έχει ένα περιβάλλον χρήστη που θα είναι γενικά σταθερό. Μόλις μια νέα δυνατότητα εισάγεται στο λογισμικό και γίνεται ορατή στις χρήστριες και στους χρήστες, είναι πολύ δύσκολο να τις πείσεις να δεχτούν μεγάλες αλλαγές σε αυτή τη δυνατότητα, ακόμη κι όταν αυτή δεν είναι καλά σχεδιασμένη ή η ύπαρξή της προκαλεί μεταγενέστερα προβλήματα.
  • Η ποσότητα τεκμηρίωσης που περιγράφει τη συμπεριφορά του λογισμικού μπορεί να είναι πολύ μεγάλη κι έτσι θα ήταν ακριβό να ξαναγραφτεί. Επιπρόσθετα, είναι πρακτικά αδύνατον να ανανεωθούν όλες οι κόπιες της τεκμηρίωσης, οπότε οι χρήστριες και οι χρήστες κατά πάσα πιθανότητα θα συνεχίσουν να αναφέρονται σε παλιά εγχειρίδια
  • Οι προγραμματίστριες και προγραμματιστές που έφτιαξαν το αρχικό σύστημα (και ξέρουν πώς λειτουργεί) μπορεί να έχουν φύγει και να μην έχουν αφήσει πίσω τους επαρκή τεκμηρίωση για το πώς δουλεύει εσωτερικά το λογισμικό. Πολλές μικρές λεπτομέρειες για το τρόπο λειτουργίας του συστήματος μπορεί να μεταφέρονταν μόνο από στόμα σε στόμα, και αυτές οι πληροφορίες μπορεί να έχουν φύγει ή χαθεί. Η προσπάθεια εύρεσης τέτοιων πληροφοριών ονομάζεται αρχαιολογία λογισμικού.
  • Οι διορθώσεις λογισμικού που έχουν πιθανότατα εκδοθεί όσα χρόνια εργαζόταν το σύστημα και άλλαζαν τη συμπεριφορά του, αν και διόρθωναν κάποιο πρόβλημα σε αυτό, μπορεί τελικά να να ήταν η αιτία εισαγωγής πιο δύσκολα εντοπίσημων λαθών στο λογισμικό. Έτσι οι αλλαγές σε ένα διορθωμένο σύστημα μπορεί να είναι πιο δύσκολες.
  • Πιο δύσκολες μορφές ευθραυστότητας εμφανίζονται σε συστήματα τεχνητής νοημοσύνης: αυτά συχνά κάνουν υποθέσεις για τα δεδομένα εισόδου, που μπορεί να μην αναφέρονται καν μέσα στο λογισμικό, κι αν αυτές οι υποθέσεις δεν ευσταθούν τότε το σύστημα θα έχει απρόβλεπτη συμπεριφορά.
  • Τα συστήματα μπορεί επίσης να γίνουν εύθραυστα λόγω του φαινομένου της κόλασης απαιτήσεων. Όταν ένα μέρος του συστήματος εξαρτάται από ένα άλλο για να βγάλει αποτελέσματα μέσα σε συγκεκριμένο εύρος τιμών, τότε αν το άλλο κομμάτι έχει αλλάξει μπορεί οι τιμές που θα παραχθούν να είναι εκτός του επιτρεπόμενου εύρους, κι έτσι θα δημιουργηθούν λάθη σε άλλα μέρη του συστήματος, είτε κατά την παραγωγή του είτε κατά την εκτέλεσή του.

Παραδείγματα ευθραυστότητας λογισμικού

Επεξεργασία
  • Η πτήση 501 του Ariane 5, όπου αριθμητικά αποτελέσματα εκτός του επιτρεπόμενου εύρους τιμών στους υπολογισμούς ταχύτητας έβγαλαν το σύστημα πλοήγησης εκτός ελέγχου.
  • Συχνά τα συστήματα είναι εύθραυστα σε ιδιαίτερες ή ακραίες περιπτώσεις (corner cases).
  • Το λειτουργικό σύστημα Microsoft Windows κρατάει ακόμα κάποια μορφή συμβατότητας με παλιότερες εκδόσεις, κάτι που σημαίνει πως ο κώδικας δεν έχει ανανεωθεί από την πρώτη έκδοση. Επίσης, η ασφάλεια δεν ήταν σημαντικό θέμα στην εποχή πριν το διαδίκτυο, κάτι που έγινε πρόβλημα τη τελευταία δεκαετία.[2][3]

Παραπομπές

Επεξεργασία
  1. «Βασικές Αρχές Σχεδίασης» (PDF). 
  2. Perspectives from the Field: Bruce Schneier, Encryption Expert
  3. Microsoft on security and code leak

Περισσότερο διάβασμα

Επεξεργασία