Abstract : | Οι προγραμματιστές στην βιομηχανία του λογισμικού ξοδεύουν σημαντικό μέρος του χρόνου τους στην δοκιμή του λογισμικού τους και στην διόρθωση σφαλμάτων λογισμικού. Για να γίνει αυτό πιο αποτελεσματικά, υιοθετούν αυτοματοποιημένα εργαλεία εύρεσης σφαλμάτων στη διαδικασία ανάπτυξής του λογισμικού τους. Τέτοια εργαλεία εύρεσης σφαλμάτων βασίζονται στην ανάλυση του κώδικα ή τεχνικές ελέγχου λογισμικού και ο στόχος τους είναι ο εντοπισμός σφαλμάτων λογισμικού, που διαφορετικά θα ήταν δύσκολο να αποκαλυφθούν μέσω χειροκίνητων δοκιμών.Μία τρέχουσα πρόκληση στον αυτόματο έλεγχο λογισμικού είναι η ανίχνευση βαθιά κρυμμένων ελαττωμάτων σε λογισμικό που παρουσιάζει περίπλοκη λειτουργικότητα. Τέτοιου είδους σφάλματα είναι πολύ εύκολο να παραμείνουν απαρατήρητα, δεδομένου ότι το λογισμικό δεν εμφανίζει προειδοποιήσεις ή άλλες αστοχίες κατά την εκτέλεσή του. Επίσης, ένα άλλο σημαντικό μειονέκτημα των υπαρχόντων εργαλείων για ανίχνευσης σφαλμάτων λογισμικού είναι η περιορισμένη εφαρμοσιμότητά τους. Πράγματι, πολλά από αυτά τα εργαλεία είναι προσαρμοσμένα για συγκεκριμένο είδος λογισμικού.Η διατριβή ερευνά την βελτίωση της αποτελεσματικότητας του αυτόματου ελέγχου λογισμικού εισάγοντας τεχνικές αφαίρεσης στην διεργασία του ελέγχου. Ο σκοπός αυτών των τεχνικών αφαίρεσης είναι η δημιουργία μια κοινής πλατφόρμας για τον εντοπισμό σφαλμάτων σε συστήματα και προγράμματα λογισμικού που παρουσιάζουν ανομοιογενείς λειτουργικότητες, διεπαφές ή σημασιολογίες. Η παρούσα διατριβή εισάγει δύο τεχνικές αφαίρεσης και μέσω αυτών, λύνει τρία σημαντικά προβλήματα: την αυτόματη ανίχνευση (1) σφαλμάτων τύπων σε μεταγλωττιστές, (2) σφαλμάτων σε λογισμικό οδηγούμενο από τα δεδομένα, και (3) σφαλμάτων εξαρτήσεων στους πόρους του συστήματος αρχείων.Η εργασία που παρουσιάστηκε σε αυτή τη διατριβή βελτίωσε ουσιαστικά την αξιοπιστία του καθιερωμένου λογισμικού που χρησιμοποιείται από εκατομμύρια χρήστες και εφαρμογές. Συνολικά, οι τεχνικές και τα εργαλεία εύρεσης σφαλμάτων μας οδήγησαν στην αποκάλυψη και τη διόρθωση περισσότερων από 400 σφαλμάτων που βρέθηκαν σε δημοφιλή συστήματα λογισμικού.Αυτή η διατριβή παρουσιάζει πρακτικό αντίκτυπο στη βιομηχανία λογισμικού και ανοίγει νέες ερευνητικές ευκαιρίες που σχετίζονται με την εφαρμογή εννοιών γλώσσων προγραμματισμού στον έλεγχο του λογισμικού. Developers spend considerable amount of their time in testing their software and fixing software bugs. To do so more effectively, they automate the process of finding deep software bugs that are challenging to uncover via manually-written test cases by integrating automated bug-finding tools in the software development process. A challenge of automated bug detection is the identification of subtle and latent defects in software that involves complex functionality. This is because such bugs are easy to remain unnoticed as the software under test does not complain with warnings or other runtime failures (e.g., crashes) during its execution. Another shortcoming of many existing bug-finding tools is their limited applicability. Indeed, many of them are tailored to specific piece of software. To tackle the aforementioned issues, this thesis investigates ways for improving the effectiveness and applicability of automated software testing by introducing different forms of abstractions in testing workflow. The aim of these abstractions is to provide a common platform for the identification of (subtle) bugs in software systems and programs that exhibit dissimilar interfaces, implementations, or semantics. The thesis demonstrates this concept by applying abstractions in the context of three important problems: the detection of (1) compiler typing bugs, (2) bugs in data-centric software, and (3) dependency bugs in file system resources. The work presented in this thesis substantially improved the reliability of well-established and critical software used by millions of users and applications. Overall,our bug-finding techniques and tools led to the disclosure and fix of more than 400 bugs found in popular software systems. This thesis exhibits practical impact on the software industry, benefits real-world developers, and opens new research opportunities associated with the application of programming language concepts to automated software testing and software reliability.
|
---|