Περίληψη
Τα προγράμματα λογισμικού είναι πλέον αναπόσπαστο τμήμα της ζωής μας και την επηρεάζουν ποικιλοτρόπως σε όλους τους τομείς τους: από τον τομέα της επικοινωνίας, μέχρι την ενημέρωση, από την οικονομία έως την επεξεργασία δεδομένων και από την ψυχαγωγία στον ελεύθερο χρόνο μας έως την έρευνα για φάρμακα. Η ποικιλία των προγραμμάτων λογισμικού τα οποία είναι διαθέσιμα προς χρήση για τους σκοπούς που ήδη αναφέραμε είναι τεράστια, ενώ αντίστοιχα σημαντική ποικιλομορφία υφίσταται και στις μεθόδους και διαδικασίες ανάπτυξης των προγραμμάτων. Επιπλέον, τα προγράμματα εξελίσσονται με την πάροδο του χρόνου, οδηγώντας είτε σε καινούργιες εκδόσεις είτε σε νέα προγράμματα με εκτεταμένες λειτουργικότητες.Η παροχή εγγυήσεων λειτουργίας για τα προγραμμάτων λογισμικού είναι ένας πολύ σημαντικός τομέας, στον οποίο έχουν αναπτυχθεί και εφαρμόζονται πολυάριθμες τεχνικές και μέθοδοι που σκοπό έχουν την επίτευξη της μέγιστη δυνατής διασφάλισης της ποιότητας των προγραμμάτων, τόσο ως προς τις λειτουργικές το ...
Τα προγράμματα λογισμικού είναι πλέον αναπόσπαστο τμήμα της ζωής μας και την επηρεάζουν ποικιλοτρόπως σε όλους τους τομείς τους: από τον τομέα της επικοινωνίας, μέχρι την ενημέρωση, από την οικονομία έως την επεξεργασία δεδομένων και από την ψυχαγωγία στον ελεύθερο χρόνο μας έως την έρευνα για φάρμακα. Η ποικιλία των προγραμμάτων λογισμικού τα οποία είναι διαθέσιμα προς χρήση για τους σκοπούς που ήδη αναφέραμε είναι τεράστια, ενώ αντίστοιχα σημαντική ποικιλομορφία υφίσταται και στις μεθόδους και διαδικασίες ανάπτυξης των προγραμμάτων. Επιπλέον, τα προγράμματα εξελίσσονται με την πάροδο του χρόνου, οδηγώντας είτε σε καινούργιες εκδόσεις είτε σε νέα προγράμματα με εκτεταμένες λειτουργικότητες.Η παροχή εγγυήσεων λειτουργίας για τα προγραμμάτων λογισμικού είναι ένας πολύ σημαντικός τομέας, στον οποίο έχουν αναπτυχθεί και εφαρμόζονται πολυάριθμες τεχνικές και μέθοδοι που σκοπό έχουν την επίτευξη της μέγιστη δυνατής διασφάλισης της ποιότητας των προγραμμάτων, τόσο ως προς τις λειτουργικές τους απαιτήσεις (ιδίως αναφορικά με τις διαστάσεις της ορθότητας και της πληρότητας), αλλά και ως προς τις μη λειτουργικές τους απαιτήσεις, συμπεριλαμβάνοντας μεταξύ άλλων τις διαστάσεις των επιδόσεων, της αξιοπιστίας, της συντηρησιμότητας, της ασφάλειας, της διαλειτουργικότητας κ.ο.κ. Μία σημαντική μέθοδος για την παροχή των εγγυήσεων, είναι ο έλεγχος των προγραμμάτων.Τα προγράμματα μπορούν να ελεγχθούν είτε στατικά είτε δυναμικά. Στις στατικές δοκιμές, τα προγράμματα δεν εκτελούνται αλλά αναλύονται τα χαρακτηριστικά του περιεχομένου τους (εντολές προγραμματισμού) και η δομή τους, ενώ στις δυναμικές δοκιμές πραγματοποιείται εκτέλεση των προγραμμάτων και εξετάζονται η συμπεριφορά τους και οι καταγραφές της εκτέλεσής της. Μερικές από τις κατηγορίες/μέθοδους δοκιμής λογισμικού είναι:• λειτουργικός έλεγχος, δηλαδή έλεγχος εάν οι λειτουργίες εκτελούνται σωστά και με ακρίβεια. Ο λειτουργικός έλεγχος περιλαμβάνει δοκιμές μονάδας, δοκιμές ενοποίησης, δοκιμές συστήματος, δοκιμές αποδοχής κ.λπ.• μη λειτουργικές δοκιμές, δηλαδή δοκιμές για να προσδιοριστεί εάν πληρούνται οι μη λειτουργικές απαιτήσεις του λογισμικού, όπως ασφάλεια, απόδοση, χρηστικότητα, συμβατότητα κ.λπ.Επιπρόσθετα, τα προγράμματα λογισμικού τυπικά συνοδεύονται από άδειες χρήσης, οι οποίες προσδιορίζουν με ποιους τρόπους μπορεί να χρησιμοποιηθεί το ίδιο το πρόγραμμα ή/και ο κώδικάς του (στην περίπτωση που ο κώδικας του προγράμματος είναι διαθέσιμος). Η παροχή κατάλληλου πλαισίου αδειοδότησης είναι σημαντική, τόσο αναφορικά με την ανάπτυξη της καινοτομίας, όσο και αναφορικά με τις εγγυήσεις που μπορούν να έχουν οι χρήστες για τη χρήση του λογισμικού, εμπεδώνοντας αίσθηση ασφάλειας.Η παρούσα διατριβή εξετάζει αυτές τις δύο πτυχές προτείνοντας νέες, καινοτόμες μέθοδους για (α) τον έλεγχο και (β) το πλαίσιο αδειοδότησης του λογισμικού. Ειδικότερα:Στο Κεφάλαιο 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 παρατίθεται μία σύνοψη της διδακτορικής διατριβής και σκιαγραφούνται μελλοντικές κατευθύνσεις έρευνας.
περισσότερα
Περίληψη σε άλλη γλώσσα
Software programs are now an indispensable part of our lives, affecting them in a multiple ways across a number of sectors:, from communication to information, from economy to data processing and from entertainment in leisure time to drug research. The variety of software programs that are available for use in the context of the above mentioned domains is vast, while a correspondingly wide divergence exists in the area of methods and procedures of software development. Moreover, programs evolve along the passage of time, leading either to new versions, or to new programs with extended functionalities.The provision of guarantees concerning the correct operation of the software programs is a very important topic, where various techniques and methods have been developed and applied to achieve the highest possible quality of the programs, both in terms of functionality and interoperability with other programs. The execution of tests is one of the main methods for providing guarantees.Progr ...
Software programs are now an indispensable part of our lives, affecting them in a multiple ways across a number of sectors:, from communication to information, from economy to data processing and from entertainment in leisure time to drug research. The variety of software programs that are available for use in the context of the above mentioned domains is vast, while a correspondingly wide divergence exists in the area of methods and procedures of software development. Moreover, programs evolve along the passage of time, leading either to new versions, or to new programs with extended functionalities.The provision of guarantees concerning the correct operation of the software programs is a very important topic, where various techniques and methods have been developed and applied to achieve the highest possible quality of the programs, both in terms of functionality and interoperability with other programs. The execution of tests is one of the main methods for providing guarantees.Programs can be tested either statically or dynamically. In static testing, programs are not executed but rather traits of their content (programming instructions) and structure are analyzed, while in dynamic testing, programs are executed and their behavior and traces are examined. Some of the software testing categories/methods are:• functional testing i.e. testing whether functionalities are executed correctly and accurately; functional testing is subdivided into unit testing, integration testing, system testing, acceptance testing.• non-functional testing, i.e. tests to determine whether non-functional requirements of the software, such as security, performance, usability, compatibility etc. are met.Additionally, software programs are typically shipped with licenses, which specify how the program itself and/or its code (if the program code is available) can be used. The provision of a suitable licensing framework is important, both concerning the development of innovations and regarding the guarantees offered to users for the use of the software, instigating a sense of safety and stability.This thesis examines these two aspects proposing new, innovative methods for (a) software program testing and (b) the software licensing framework. More specifically:In Chapter 1 a new framework for managing the software testing code is introduced, which can be used in combination with all existing control testing methods, and for all programming languages. The overarching idea of the new framework is that all available tests are maintained centrally, in one or more repositories, and each test is annotated with meta-information about the code elements and the versions for which it is intended. Then, during the phase of creating and testing an executable program, depending on the code and the version being tested, the appropriate/corresponding tests are identified, extracted, and used. Some of the advantages of the new method are that (a) tests are written only once and can then be used for unlimited programs and versions, (b) tests can be used to validate programs with dynamic features, (c) it supports and promotes test-driven development, (d) it supports testing software programs with different configurations, (e) it supports feature-based builds, and (f) it supports comparing and combining the functions of different versions of programs.In Chapter 2 the method described in Chapter 1 is extended to the area of mobile device applications, covering features related to the intricacies and particularities of the mobile application ecosystem, such as the diversity of devices and operating systems, the need for energy conservation, changes in network connectivity, and so on.Chapters 3-4 present two use cases for the software control code management framework that aim to enhance software security. Specifically, in Chapter 3 we present a software vulnerability management framework to minimize the risk associated with attacks on Internet of Things (IoT) systems. This framework facilitates (a) configuring software to include only the necessary capabilities, (b) performing securityrelated testing and compiling software vulnerability lists across the platform, and (c) prioritizing vulnerability remediation, taking into account the impact of each vulnerability, the associated technical debt for its remediation, and the available security budget. The proposed framework can be used as an aid in the implementation of the IoT platform by software architects, developers as well as information security specialists.In Chapter 4, a method for minimizing the risk due to software libraries is proposed, which is based on the framework presented in Chapters 1-2. In modern Internet of Things (IoT) systems, but also more broadly in software systems, libraries are used to implement the required functions. Libraries, however, often contain vulnerabilities, which can be exploited by attackers, and lead to security incidents. In many cases, the functionality required by an application is implemented by a series of alternative libraries, with each library having its own list of vulnerabilities, while variations may also exist in other non-functional properties (e.g. execution performance, memory footprint, etc.). The proposed approach can automate the task of minimizing the risk level of IoT systems (or software in general) due to vulnerabilities in the libraries required by the software under test. The proposed approach exploits knowledge about the libraries that provide equivalent functionality to automatically evaluate the risk level of candidate library combinations, and finally selects the library combination that presents the minimum risk level to integrate into the executable. In addition, the risk level of candidate applications is continuously monitored for new vulnerabilities or implementation fixes, triggering new risk assessments and generating new executables, as appropriate.In Chapters 5-6 of the thesis, a dynamic testing method is studied, in which all possible execution paths for specific inputs are executed. These methods help in locating intermittent faults in the code, i.e. faults that occur rarely, and only when the execution of the program follows specific paths in the code due to specific inputs, unexpected interactions, conditions in the application environment, etc. In these methods, specific access patterns to shared variables are identified that indicate with a high probability the existence of intermittent faults in the code. The user is then asked to check the corresponding points in the code, in order to decide whether an error actually exists. In particular, the algorithm presented in Chapter 5 examines access patterns considering only direct dependencies between shared variables, while in Chapter 6 an extension of the algorithm is presented which additionally considers indirect dependencies between shared variables.In Chapter 7, a method for tentatively patenting software is proposed, which allows for safeguarding intellectual property with reduced cost, thus making the patent acquisition process accessible to anyone interested. Furthermore, reference is made to existing software licenses and a new versatile licensing framework is proposed that gives elevated flexibility in the choice of license, and provides information about its duration and additional guarantees to software artifact users.Finally, Chapter 8 summarizes the doctoral thesis and outlines future research directions.
περισσότερα