Οι διαλέξεις του μαθήματος θα γίνονται σε ημέρες και ώρες που αναφέρονται παρακάτω, στην Πολυτεχνειούπολη
Ζωγράφου, Κτίριο Ηλεκτρολόγων, 1ος όροφος, Αίθουσα Συνεδριάσεων 1.1.31 (δίπλα στο CoreLab).
Γενικά
Ενημερωτικό φυλλάδιο (PDF) με την περιγραφή του μαθήματος.
Οι διαλέξεις και η διδακτέα ύλη δεν ακολουθούν κάποιο βιβλίο, διότι ως επί το πλείστον το μάθημα εξετάζει σύγχρονα ερευνητικά θέματα που δεν έχουν ακόμα συμπεριληφθεί σε κάποιο σύγγραμμα. Όμως έχει εκτενείς σημειώσεις (τις διαφάνειες της κάθε παράδοσης) όπως επίσης και μια σειρά από papers της σύγχρονης ερευνητικής βιβλιογραφίας των αντίστοιχων τομέων. Όλο το υλικό του μαθήματος υπάρχει διαθέσιμο ή προσπελάσιμο σε ηλεκτρονική μορφή.
Από την τρίτη εβδομάδα του μαθήματος και μετά, η κάθε παράδοση θα περιλαμβάνει παρουσίαση και συζήτηση πάνω σε κάποια papers. Οι φοιτητές θα πρέπει να έχουν διαβάσει τα αντίστοιχα papers πριν τη συζήτησή τους και να έχουν στείλει στο διδάσκονταμέσω e-mail
μια σύντομη περιγραφή (περίπου μισή-μία σελίδα ανά paper) των πλεονεκτημάτων και μειονεκτημάτων του κάθε paper
μια σειρά από θέματα προς συζήτηση (φυσικά σχετικά με τα papers).
Η αποστολή των παραπάνω πρέπει να γίνει το αργότερο μέχρι την προηγούμενη της αντίστοιχης παράδοσης. Οι φοιτητές μπορούν να παραλείψουν το πολύ δύο (2) τέτοιες αποστολές χωρίς να μειωθεί η βαθμολογία τους. Η συνεργασία φοιτητών στο παραπάνω δεν επιτρέπεται.
Εκτός από τα παραπάνω, το μάθημα θα περιλαμβάνει και συγκεκριμένες ασκήσεις ή και projects πάνω στη χρήση συγκεκριμένων εργαλείων λογισμικού που εξετάζονται στο μάθημα. Περισσότερες πληροφορίες θα δοθούν κατά τη χρονική στιγμή ανακοίνωσης των ασκήσεων.
Chandrasehkar Boyapati, Sarfraz Khurshid, and Darko Marinov. Korat: Automated testing based on Java predicates Proceedings of the ACM SIGSOFT International Symposium on Software Testing and Analysis(ISSTA 2002), pages 123-133, Rome, Italy, July 2002.
Παράδοση 2/11/2006, 15:00-18:00
Debugging
Debuggers
Degugging χωρίς Debuggers
Απλοποίηση εισόδου που οδηγεί σε εσφαλμένη εκτέλεση (simpifying failure-inducing input)
Ralf Hildebrandt and Andreas Zeller. Simplifying Failure-Inducing Input Proceedings of the ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2000), pages 135-145, Portland, Oregon, August 2000.
Stefan Savage, Michael Burrows, Greg Nelson, Patrick Sobalvarro, and Thomas Anderson. Eraser: a dynamic data race detector for multithreaded programs Proceedings of the 16th ACM Symposium on Operating System Principles (SOSP'97),
pages 27-37, Saint Malo, France, October 1997.
Also in ACM Transactions on Computer Systems (TOCS), 15(4):391-411, November 1997. (journal version)
Seth Hallem, Benjamin Chelf, Yichen Xie, and Dawson Engler. A System and Language for Building System-Specific, Static Analyses Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2002), pages 69-82, Berlin, Germany, June 2002.
ESC/Java2 (Extended Static Checker for Java version 2)
Papers
Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge, Greg Nelson, James B. Saxe, and Raymie Stata. Extended Static Checking for Java Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2002), pages 234-245, Berlin, Germany, June 2002.
David Hovemeyer and William Pugh. Finding Bugs is Easy
SIGPLAN Notices, 39(12):92-106, December 2004.
Nick Rutar, Christian Almazan, and Jeff Foster. A Comparison of Bug Finding Tools for Java Proceedings of the 15th International Symposium on Software Reliability Engineering (ISSRE 2004), pages 245-256, St. Malo, France, November 2004.
George C. Necula, Jeremy Condit, Matthew Harren, Scott McPeak, and Westley Weimer. CCured: Type-safe retrofitting of legacy software
ACM Transactions on Programming Languages and Systems (TOPLAS), 27(3):477-526, May 2005.
Dan Grossman, Michael Hicks, Trevor Jim, and Greg Morrisett. Cyclone: a type-safe dialect of C
C/C++ Users Journal, 23(1), January 2005.
Nikhil Swamy, Michael Hicks, Greg Morrisett, Dan Grossman, and Trevor Jim. Safe manual memory management in Cyclone
Science of Computer Programming, 62(2):122-144, November 2006.
Recommended Survey Article on Region-Based Memory Management
Στο μάθημα εξετάσαμε πολλά εργαλεία για εύρεση σφαλμάτων σε προγράμματα.
Ο σκοπός του project είναι να χρησιμοποιήσετε κάποια από αυτά σε
προγράμματα με μη αμελητέο μέγεθος, ούτως ώστε τόσο να εξοικειωθείτε με
αυτά όσο και να βγάλετε τα δικά σας συμπεράσματα για τα πλεονεκτήματα
και μειονεκτήματα τόσο των δυνατοτήτων τους στην ανεύρεση σφαλμάτων
όσο και της ευχρησίας τους. Επίσης, ένας άλλος σκοπός του project είναι
να συνειδητοποιήσετε τι σημαίνει ανίχνευση σφαλμάτων σε κώδικα που είναι
πολύπλοκος και δεν τον έχετε γράψει οι ίδιοι. Παρακάτω περιγράφεται
συνοπτικά ένα "ελάχιστο" (θα καταλάβετε γιατί) project για ανίχνευση
σφαλμάτων σε προγράμματα γραμμένα σε C.
Όπως είδαμε υπάρχουν διαθέσιμα διάφορα εργαλεία ανίχνευσης σφαλμάτων (π.χ.
Valgrind,
Splint,
CCured), και
άλλα όπως αυτό της Coverity
μπορούν να χρησιμοποιηθούν free of charge σε open-source projects.
λογισμικά ανοιχτού κώδικα με αρκετό κώδικα σε C και με σχετικά
disciplined style of programming είναι τα εξής:
XXX Prolog
size:
about 150 files totalling 52 KLOC in the emu directory
Σε κάθε project έστω ότι δουλεύουν n φοιτητές. Το project
συνίσταται στο να χρησιμοποιηθούν n+1 εργαλεία σε
n+1 προγράμματα (κάποια 2 από τα παραπάνω και άλλα
n-1 της επιλογής σας, αλλά πρέπει να είναι αντίστοιχου
μεγέθους) για την εύρεση σφαλμάτων στα προγράμματα αυτά και να γραφεί
ένα report που να καταγράφει τις εμπειρίες και τα συμπεράσματα της
ενασχόλησης με το project.
Τόσο για το report όσο και για την επιλογή των εργαλείων οι φοιτητές
μπορούν να συμβουλευθούν τα παρακάτω papers που κάνουν κάτι αντίστοιχο.