Εισαγωγή καινοτόμων μεθόδων στον έλεγχο και στην αδειοδότηση λογισμικού - Σωτηρόπουλος, Παναγιώτης (Πανεπιστήμιο Πελοποννήσου, 2025)
Τα προγράμματα λογισμικού είναι πλέον αναπόσπαστο τμήμα της ζωής μας και την επηρεάζουν ποικιλοτρόπως σε όλους τους τομείς τους: από τον τομέα της επικοινωνίας, μέχρι την ενημέρωση, από την οικονομία έως την επεξεργασία δεδομένων και από την ψυχαγωγία στον ελεύθερο χρόνο μας έως την έρευνα για φάρμακα. Η ποικιλία των προγραμμάτων λογισμικού τα οποία είναι διαθέσιμα προς χρήση για τους σκοπούς που ήδη αναφέραμε είναι τεράστια, ενώ αντίστοιχα σημαντική ποικιλομορφία υφίσταται και στις μεθόδους και διαδικασίες ανάπτυξης των προγραμμάτων. Επιπλέον, τα προγράμ- ματα εξελίσσονται με την πάροδο του χρόνου, οδηγώντας είτε σε καινούργιες εκδόσεις είτε σε νέα προγράμματα με εκτεταμένες λειτουργικότητες. Η παροχή εγγυήσεων λειτουργίας για τα προγραμμάτων λογισμικού είναι ένας πολύ σημαντικός τομέας, στον οποίο έχουν αναπτυχθεί και εφαρμόζονται πολυάριθμες τεχνικές και μέθοδοι που σκοπό έχουν την επίτευξη της μέγιστη δυνατής διασφάλισης της ποιότητας των προγραμμάτων, τόσο ως προς τις λειτουργικές τους απαιτήσεις (ιδίως αναφορικά με τις διαστάσεις της ορθότητας και της πληρότητας), αλλά και ως προς τις μη λειτουργικές τους απαιτήσεις, συμπεριλαμβάνοντας μεταξύ άλλων τις δι- αστάσεις των επιδόσεων, της αξιοπιστίας, της συντηρησιμότητας, της ασφάλειας, της διαλειτουργικότητας κ.ο.κ. Μία σημαντική μέθοδος για την παροχή των εγγυήσεων, είναι ο έλεγχος των προγραμμάτων. Τα προγράμματα μπορούν να ελεγχθούν είτε στατικά είτε δυναμικά. Στις στατικές δοκιμές, τα προγράμματα δεν εκτελούνται αλλά αναλύονται τα χαρακτηριστικά του περιεχομένου τους (εντολές προγραμματισμού) και η δομή τους, ενώ στις δυναμικές δοκιμές πραγματοποιείται εκτέλεση των προγραμμάτων και εξετάζονται η συμπεριφορά τους και οι καταγραφές της εκτέλεσής της. Μερικές από τις κατηγορίες/μέθοδους δοκιμής λογισμικού είναι: • λειτουργικός έλεγχος, δηλαδή έλεγχος εάν οι λειτουργίες εκτελούνται σωστά και με ακρίβεια. Ο λειτουργικός έλεγχος περιλαμβάνει δοκιμές μονάδας, δοκιμές ενοποίησης, δοκιμές συστήματος, δοκιμές αποδοχής κ.λπ. • μη λειτουργικές δοκιμές, δηλαδή δοκιμές για να προσδιοριστεί εάν πληρούν- ται οι μη λειτουργικές απαιτήσεις του λογισμικού, όπως ασφάλεια, απόδοση, χρηστικότητα, συμβατότητα κ.λπ. Επιπρόσθετα, τα προγράμματα λογισμικού τυπικά συνοδεύονται από άδειες χρήσης, οι οποίες προσδιορίζουν με ποιους τρόπους μπορεί να χρησιμοποιηθεί το ίδιο το πρό- γραμμα ή/και ο κώδικάς του (στην περίπτωση που ο κώδικας του προγράμματος εί- ναι διαθέσιμος). Η παροχή κατάλληλου πλαισίου αδειοδότησης είναι σημαντική, τόσο αναφορικά με την ανάπτυξη της καινοτομίας, όσο και αναφορικά με τις εγγυήσεις που μπορούν να έχουν οι χρήστες για τη χρήση του λογισμικού, εμπεδώνοντας αίσθηση ασφάλειας. Η παρούσα διατριβή εξετάζει αυτές τις δύο πτυχές προτείνοντας νέες, καινοτόμες μέθοδους για (α) τον έλεγχο και (β) το πλαίσιο αδειοδότησης του λογισμικού. Ει- δικότερα: Στο Κεφάλαιο 1 εισάγεται ένα νέο πλαίσιο διαχείρισης του κώδικα ελέγχου του λογισμικού, το οποίο μπορεί να εφαρμοστεί σε συνδυασμό με όλες τις υπάρχουσες μεθόδους δοκιμών ελέγχου και για όλες τις γλώσσες προγραμματισμού. Η κεντρική φιλοσοφία του νέου πλαισίου είναι ότι όλα τα διαθέσιμα τεστ/δοκιμές διατηρούν- ται κεντρικά, σε ένα ή περισσότερα αποθετήρια, και κάθε έλεγχος επισημειώνεται με μεταπληροφορίες σχετικά με τα στοιχεία του κώδικα, τις εκδόσεις λογισμικού και τα χαρακτηριστικά των εκδόσεων για τις οποίες προορίζεται. Κατόπιν, κατά τη φάση της δημιουργίας και του ελέγχου ενός εκτελέσιμου προγράμματος, ανάλογα με τον κώδικα και την έκδοση που ελέγχεται, εντοπίζονται οι κατάλληλες δοκιμές ελέγχου, οι οποίες εξάγονται και χρησιμοποιούνται. Μερικά από τα πλεονεκτήματα της νέας μεθόδου είναι ότι (α) οι δοκιμές γράφονται μόνο μία φορά και μπορούν στη συνέχεια να χρησιμοποιηθούν για οποιοδήποτε πλήθος προγραμμάτων και και εκδόσεων, (β) οι έλεγχοι μπορούν να χρησιμοποιηθούν για δοκιμές προγραμμάτων με δυναμικά χαρακ- τηριστικά (γ) υποστηρίζει και προάγει την ανάπτυξη προγραμμάτων με βάση τις δοκιμές (test-driven development), (δ) υποστηρίζει τις δοκιμές προγραμμάτων λογισμικού με διαφορετικές ρυθμίσεις, (ε) υποστηρίζει τη μεταγλώττιση και σύνδεση προγραμμάτων με βάση τα χαρακτηριστικά (feature-based builds) και (στ) υποστηρίζει τη σύγκριση και τον συνδυασμό των λειτουργιών των διαφορετικών εκδόσεων των προγραμμάτων. Στο Κεφάλαιο 2 η μέθοδος που περιγράφηκε στο Κεφάλαιο 1, επεκτείνεται σε εφαρμογές κινητών συσκευών, καλύπτοντας χαρακτηριστικά που σχετίζονται με τις ιδιαιτερότητες του οικοσυστήματος των κινητών εφαρμογών, όπως η ποικιλομορφία των συσκευών και των λειτουργικών συστημάτων, η ανάγκη για εξοικονόμηση ενέργειας, οι μεταβολές στη δικτυακή συνδεσιμότητα κ.ο.κ. Στα Κεφάλαια 3-4 παρουσιάζονται αναλυτικά δύο περιπτώσεις χρήσης του πλαισίου διαχείρισης του κώδικα ελέγχου του λογισμικού για επαύξηση της ασφάλειας του λογισ- μικού. Ειδικότερα, στο Κεφάλαιο 3 παρουσιάζουμε ένα πλαίσιο διαχείρισης ευπάθειας λογισμικού για την ελαχιστοποίηση του κινδύνου επίθεσης στα συστήματα Internet of Things (IoT). Το πλαίσιο αυτό διευκολύνει (α) τη διαμόρφωση του λογισμικού ώστε να περιλαμβάνει μόνο τις απαραίτητες δυνατότητες, (β) την εκτέλεση δοκιμών που σχετίζονται με την ασφάλεια και τη σύνταξη λιστών ευπάθειας λογισμικού σε όλη την πλατφόρμα, και γ) την ιεράρχηση της αντιμετώπισης των ευπαθειών, λαμβάνοντας υπόψη τον αντίκτυπο κάθε ευπάθειας, το σχετικό τεχνικό χρέος (technical debt) για την αποκατάστασή του και τον διαθέσιμο προϋπολογισμό ασφαλείας. Το προτεινόμενο πλαίσιο μπορεί να χρησιμοποιηθεί ως βοήθημα στην υλοποίηση της πλατφόρμας IoT από αρχιτέκτονες λογισμικού, προγραμματιστές και υπεύθυνους ασφάλειας. Στο Κεφάλαιο 4, προτείνεται μια μέθοδος για την ελαχιστοποίηση του κινδύνου που οφείλεται στο λογισμικό βιβλιοθηκών. Η προτεινόμενη μέθοδος οποία βασίζεται στο το πλαίσιο που παρουσιάζεται στα Κεφάλαια 1- 2. Στα σύγχρονα συστήματα Internet of Things (IoT), αλλά και στα συστήματα λογισμικού ευρύτερα, αξιοποιούν- ται βιβλιοθήκες για την υλοποίηση των απαιτούμενων λειτουργιών. Οι βιβλιοθήκες, ωστόσο, συχνά εμπεριέχουν τρωτά σημεία, τα οποία μπορεί να αποτελέσουν αντικεί- μενο εκμετάλλευσης από επιτιθέμενους, και να οδηγήσουν σε περιστατικά ασφάλειας. Σε πολλές περιπτώσεις, η λειτουργικότητα που απαιτείται από μια εφαρμογή υλοποιεί- ται από μια σειρά εναλλακτικών βιβλιοθηκών, με κάθε βιβλιοθήκη να έχει τη δική της λίστα ευπαθειών, ενώ διαφοροποιήσεις μπορεί να υφίστανται και σε άλλες μη λει- τουργικές ιδιότητες (π.χ. απόδοση εκτέλεσης, αποτύπωμα μνήμης κ.λπ.). Η προ- τεινόμενη προσέγγιση μπορεί να αυτοματοποιήσει την εργασία ελαχιστοποίησης του επιπέδου κινδύνου των συστημάτων IoT (ή εν γένει του λογισμικού) που οφείλεται στα τρωτά σημεία των βιβλιοθηκών που απαιτούνται από το υπό δοκιμή λογισμικό. Η προτεινόμενη προσέγγιση εκμεταλλεύεται τη γνώση σχετικά με τις βιβλιοθήκες που παρέχουν ισοδύναμη λειτουργικότητα, και αυτόματα αξιολογεί το επίπεδο κινδύνου των υποψήφιων συνδυασμών βιβλιοθηκών, και τελικά επιλέγει τον συνδυασμό βιβλιοθηκών που παρουσιάζει το ελάχιστο επίπεδο κινδύνου προκειμένου να τον ενσωματώσει στο εκτελέσιμο. Επιπλέον, το επίπεδο κινδύνου των υποψήφιων εφαρμογών παρακολου- θείται συνεχώς για εντοπισμούς νέων τρωτών σημείων ή διορθώσεις στις υλοποιήσεις, ενεργοποιώντας νέες αξιολογήσεις κινδύνου και παράγοντας νέα εκτελέσιμα αρχεία, ανάλογα με την περίπτωση. Στα Κεφάλαια 5-6 της διατριβής, μελετάται μία μέθοδος δυναμικών δοκιμών, κατά την οποία εκτελούνται όλες οι δυνατές διαδρομές εκτέλεσης για συγκεκριμένες εισό- δους. Οι μέθοδοι αυτές βοηθούν στην εύρεση διαλειπόντων σφαλμάτων (intermittent faults) στον κώδικα, σφαλμάτων δηλαδή που παρουσιάζονται σπάνια, μόνο όταν η εκτέλεση του προγράμματος ακολουθεί συγκεκριμένα μονοπάτια στον κώδικα λόγ- ω συγκεκριμένων εισόδων, απρόσμενων αλληλεπιδράσεων, συνθηκών στο περιβάλλον της εφαρμογής κ.λπ. Σε αυτές τις μεθόδους εντοπίζονται συγκεκριμένα μοτίβα πρόσ- βασης σε διαμοιραζόμενες μεταβλητές που με μεγάλη πιθανότητα υποδεικνύουν ύπαρξη διαλειπόντων σφαλμάτων στον κώδικα. Στη συνέχεια ο χρήστης καλείται να ελέγξει τα αντίστοιχα σημεία του κώδικα προκειμένου να αποφασίσει αν όντως υπάρχει σφάλ- μα. Ειδικότερα, ο αλγόριθμος που παρουσιάζεται στο Κεφάλαιο 5 εξετάζει τα μοτί- βα πρόσβασης θεωρώντας μόνο τις άμεσες εξαρτήσεις μεταξύ των διαμοιραζόμενων μεταβλητών, ενώ στο Κεφάλαιο 6 παρουσιάζεται μία επέκταση του αλγόριθμου η οποία θεωρεί και έμμεσες εξαρτήσεις μεταξύ των διαμοιραζόμενων μεταβλητών. Στο Κεφάλαιο 7, προτείνεται μία μέθοδος εν δυνάμει ευρεσιτεχνίας για το λο- γισμικό, η οποία επιτρέπει τη διασφάλιση της διανοητικής ιδιοκτησίας με περιορισμένο κόστος, καθιστώντας έτσι τη διαδικασία απόκτησης πατέντας προσιτή σε οποιονδήποτε ενδιαφερόμενο. Επιπλέον, γίνεται αναφορά στην υπάρχουσες άδειες χρήσης λογισμικού και προτείνεται μία νέα διαδικασία προσωρινής αδειοδότησης που δίνει μεγαλύτερη ευ- ελιξία στην επιλογή της άδειας, και παρέχει πληροφορίες για τη διάρκειά της στους χρήστες. Τέλος, στο Κεφάλαιο 8 παρατίθεται μία σύνοψη της διδακτορικής διατριβής και σκιαγραφούνται μελλοντικές κατευθύνσεις έρευνας.
Μ.Δ.Ε. 33
Keywords: Τεχνολογία λογισμικού; Τεχνολογικές καινοτομίες; Λογισμικό υπολογιστών-Ποιοτικός έλεγχος; Λογισμικό υπολογιστών-Δίκαιο και νομοθεσία; Software engineering; Technological innovations; Computer software-Quality control; Computer software-Law and legislation; Software testing; Intermittent faults; Fault detection; Shared variables; Model-based checking; Additional Testsuite Framework; Testsuite management; Dynamic testing; Test-driven development; Multiversion testing; Multiple environment testing; Test program repository; Feature-based testing; Internet application testing; Mobile application testing; Software patents; Software licenses; Έλεγχος λογισμικού; Διαλείποντα σφάλματα; Aνίχνευση σφαλμάτων; Διαμοιραζόμενες μεταβλητές; Έλεγχος βάσει μοντέλων; Πλαίσιο Πρόσθετων Ελέγχων; Διαχείριση κώδικα ελέγχων; Δυναμικός έλεγχος; Ανάπτυξη καθοδηγούμενη από τους ελέγχους; Έλεγχος λογισμικού πολλαπλών εκδόσεων; Έλεγχος σε πολλαπλά περιβάλλοντα; Αποθετήριο προγραμμάτων ελέγχου; Έλεγχος με βάση χαρακτηριστικά; Έλεγχος εφαρμογών διαδικτύου; Έλεγχος κινητών εφαρμογών; Πατέντες λογισμικού; Άδειες χρήσης λογισμικού