Συγγραφή κώδικα, δοκιμασία, επαλήθευση. Γιάννης Σμαραγδάκης

Σχετικά έγγραφα
οκιμασία και πλάνο δοκιμασίας

Εισαγωγή στην. Γιάννης Σμαραγδάκης

Προδιαγραφές Απαιτήσεων Γιάννης Σμαραγδάκης

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων

Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού Πολυπλοκότητα

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

Κεφάλαιο : Εισαγωγή Στον Προγραμματισμό. (Διάλεξη 2) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ. Περιεχόμενα

Ασφαλή Συστήματα Μέθοδοι ελέγχου και εξακρίβωσης ορθής λειτουργίας

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

Εισαγωγή στην πληροφορική

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΚΕΦΑΛΑΙΑ XIII, XIV. Εκσφαλμάτωση προγράμματος - Κύκλος Ζωής Λογισμικού

Μεταγλωττιστές Βελτιστοποίηση

Εισαγωγή στην Επιστήμη των Υπολογιστών

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού

Εισαγωγικές Έννοιες. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

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

Δομές Δεδομένων & Αλγόριθμοι

2 n N: 0, 1,..., n A n + 1 A

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 2: Μαθηματικό Υπόβαθρο

ΛΟΓΙΚΑ ΔΙΑΓΡΑΜΜΑΤΑ. Γ Λυκείου Κατεύθυνσης Mike Trimos

2. Εισαγωγή στον Προγραμματισμό

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Κωδικοποίηση και Έλεγχος Ορθότητας

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Υπολογιστικό Πρόβληµα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 1 Ο. Εισαγωγή στις έννοιες Πρόβλημα, Αλγόριθμος, Προγραμματισμός, Γλώσσες Προγραμματισμού

ΚΕΝΤΡΙΚΗ ΟΡΓΑΝΩΤΙΚΗ ΕΠΙΤΡΟΠΗ 8 ου ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ 1996 ΠΡΟΚΑΤΑΡΚΤΙΚΗ ΦΑΣΗ ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΘΕΜΑΤΑ ΓΥΜΝΑΣΙΟΥ

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB)

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Μεταγλωττιστές Βελτιστοποίηση

8 Τεχνικός Εφαρμογών Πληροφορικής με Πολυμέσα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

Μορφές αποδείξεων. Μαθηματικά Πληροφορικής 2ο Μάθημα. Μορφές αποδείξεων (συνέχεια)

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Προδιαγραφές Απαιτήσεων Επικύρωση Απαιτήσεων

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Αρχές Προγραμματισμού Υπολογιστών

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Σημειωματάριο Δευτέρας 4 Δεκ. 2017

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΗΣ

Αναλύσεις Προγραμμάτων και Ψηφιακά Νομίσματα. Γιάννης Σμαραγδάκης, ΕΚΠΑ

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΗΥ Λογική. Διδάσκων: Δημήτρης Πλεξουσάκης Καθηγητής

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Άσκηση 1 (α) Να διατυπώσετε την πιο κάτω λογική έκφραση στη Visual Basic κάνοντας χρήση μεταβλητών:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Λογική. Ενότητα 1: Εισαγωγή. Δημήτρης Πλεξουσάκης Τμήμα Επιστήμης Υπολογιστών

ΜΕΘΟΔΟΛΟΓΙΕΣ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Αλγόριθμοι. Χαρίκλεια Τσαλαπάτα 29/2/2012

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

Γ-ΓΥΜΝΑΣΙΟΥ (1) ΣΕΛ 1 / 6

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 4: Εισαγωγή / Σύνολα

Εισαγωγή στην πληροφορική

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Ανάλυση της Ορθότητας Προγραμμάτων

Μαθηματική Λογική και Λογικός Προγραμματισμός

Μορφές αποδείξεων Υπάρχουν πολλά είδη αποδείξεων. Εδώ θα δούμε τα πιο κοινά: Εξαντλητική μέθοδος ή μέθοδος επισκόπησης. Οταν το πρόβλημα έχει πεπερασμ

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo

Κεφάλαιο : Εισαγωγή Στον Προγραμματισμό. (Διάλεξη 2) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Σημασιολογική Ανάλυση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

ιαφάνειες παρουσίασης #1

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Βασικές Έννοιες Αλγορίθμων. Βασικές Εντολές Αλγορίθμων (Κεφ. 2ο Παρ. 2.4)

Θεωρία Υπολογισμού Άρτιοι ΑΜ. Διδάσκων: Σταύρος Κολλιόπουλος. eclass.di.uoa.gr. Περιγραφή μαθήματος

Θεωρία Υπολογισμού Αρτιοι ΑΜ Διδάσκων: Σταύρος Κολλιόπουλος eclass.di.uoa.gr

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

ΔΙΑΛΕΞΗ ΙΙ ΕΝΑ ΒΗΜΑ ΠΑΡΑΠΑΝΩ ΜΕ SCRATCH ΕΠΙΛΕΓΩΝΤΑΣ & ΕΠΑΝΑΛΑΜΒΑΝΟΝΤΑΣ

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Σημειώσεις στο μάθημα «Στοιχεία Προγραμματισμού σε Γραφικό Περιβάλλον»

Έλεγχος Προγραμμάτων και Συστήματος

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο

Μορφές αποδείξεων. Μαθηματικά Πληροφορικής 2ο Μάθημα. Μορφές αποδείξεων (συνέχεια) Εξαντλητική μέθοδος

Περιεχόμενα. Εισαγωγή του επιμελητή, Γιάννης Σταματίου 15 Πρόλογος 17 Εισαγωγή 23. Μέρος I. ΕΠΑΝΑΛΗΠΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΑΝΑΛΛΟΙΩΤΕΣ ΣΥΝΘΗΚΕΣ

Transcript:

Συγγραφή κώδικα, δοκιμασία, επαλήθευση Γιάννης Σμαραγδάκης

Προδιαγραφή απαιτήσεων Σχεδιασμός συνεπείς σχέσεις Υψηλό επίπεδο συνεπείς σχέσεις Χαμηλό επίπεδο συνεπείς σχέσεις Πλάνο δοκιμών Κώδικας

Συγγραφή κώδικα εν έχουμε να πούμε πολλά. Θυμηθείτε τι έχουμε πει από την αρχή του εξαμήνου ο κώδικας αντιπροσωπεύει συνήθως γύρω το 15% της προσπάθειας ανάπτυξης λογισμικού αλλά όλα τα άλλα γίνονται για να δουλέψει σωστά αυτό το 15% ο κώδικας πρέπει να ακολουθεί τις προδιαγραφές σχεδίασης τμηματική σχεδίαση, κρύψιμο πληροφορίας ρ Κακός/καλός κώδικας γράφεται σε οποιαδήποτε γλώσσα αν και οι μοντέρνες γλώσσες ενθαρύνουν ιδιότητες καλού κώδικα

Η συγγραφή κώδικα είναι στενά συνδεδεμένη με τη δοκιμασία του Η ουσία είναι η έλλειψη ελαττωμάτων (faults) που εκφράζονται σαν αστοχίες (failures)

Τεχνικές αξιοπιστίας Αποφυγή ελαττωμάτων (fault avoidance): τεχνικές ανάπτυξης λογισμικού που μειώνουν τα σφάλματα π.χ. καλός σχεδιασμός, ανάπτυξη προτύπων, μαθηματικές προδιαγραφές Εξάλειψη ελαττωμάτων (fault elimination): τεχνικές ανάλυσης που ανακαλύπτουν ελαττώματα δοκιμασία, στατική ανάλυση, επιθεώρηση κώδικα, επαλήθευση Πρόβλεψη ελαττωμάτων (fault prediction): τεχνικές ανάλυση που προβλέπουν την ύπαρξη σφαλμάτων μέτρα ποιότητας, διαδικασίες εκτίμησης Ανοχή ελαττωμάτων (fault tolerance): τεχνικές εκτέλεσης προγράμματος που ανιχνεύουν και διορθώνουν σφάλματα πριν υπάρξει αστοχία κώδικας ανάκαμψης, n-version programming

Ορισμοί οκιμασία: συστηματική (;) έρευνα στο χώρο εισόδων του προγράμματος σε αναζήτηση αστοχίας Debugging: ή ερεύνα για το ελάττωμα που προκάλεσε την αστοχία Στατική ανάλυση: η εξέταση ενός προγράμματος με σκοπό την εξαγωγή των χαρακτηριστικών συμπεριφοράς του υναμική ανάλυση: η παρατήρηση της εκτέλεσης ενός προγράμματος με σκοπό την εξαγωγή των χαρακτηριστικών συμπεριφοράς του Επαλήθευση (verification): η χρήση τεχνικών ανάλυσης για αυστηρή απόδειξη της ορθότητας του προγράμματος

Η βασική προσέγγιση είναι ίδια προδιαγραφή επιθυμητής συμπεριφοράς (για δοκιμασία και ανάλυση) ιαδικασία ανάπτυξης ιαδικασία εκτίμησης προδιαγραφή πραγματικής συμπεριφοράς αποτέλεσμα Σύγκριση συμπεριφοράς

οκιμασία προδιαγραφή επιθυμητής συμπεριφοράς Αναμενόμενες έξοδοι Αποτελέσματα προδιαγραφή πραγματικής συμπεριφοράς σύγκριση γρ η( (από άνθρωπο ή μηχανή) Σύγκριση συμπεριφοράς αποτέλεσμα

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

Πολλές διαδικασίες ανάλυσης Επιθεώρηση Συντακτική ανάλυση Σημασιολογική ανάλυση Ανάλυση ροής Επαλήθευση

προδιαγραφή επιθυμητής συμπεριφοράς μη-τυπική προδιαγραφή Επιθεώρηση κώδικας προδιαγραφή πραγματικής συμπεριφοράς επιθεώρηση η (από άνθρωπο) Σύγκριση συμπεριφοράς αποτέλεσμα

Εύκολοι στατικοί αναλυτές Έλεγχος σύνταξης parser Σημασιολογικός έλεγχος έλεγχος τύπων, κλπ. Παραδείγματα;

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Ανάλυση ροής Έλεγχος μοντέλων (model checking) Προδιαγραφή επιθυμητής συμπεριφοράς: ακολουθία από συμβάντα Πραγματική συμπεριφορά: παράγεται από μοντέλο ροής του προγράμματος οι κόμβοι ονοματίζουν ενδιαφέροντα συμβάντα όλες οι δυνατές εκτελέσεις αναπαριστώνται σαν ακολουθίες συμβάντων κατά μήκος ενός μονοπατιού ροής Σύγκριση: ανάλογα με την ερώτηση μπορεί να είναι προφανής ή αναλυτική/δύσκολη λ Παραδείγματα: κανένα αρχείο δεν διαβάζεται πριν ανοιχτεί το ασανσέρ δεν κινείται πριν κλείσουν οι πόρτες

Έλεγχος μοντέλων προδιαγραφή επιθυμητής συμπεριφοράς σειρά συμβάντων μοντέλο συμπεριφοράς προδιαγραφή πραγματικής συμπεριφοράς αλγόριθμοι σύγκρισης αποτέλεσμα Σύγκριση συμπεριφοράς

Παράδειγμα totalpay := 0.0; for i = 1 to last_employee if salary[i] < 50000. then salary[i] := salary[i] * 1.05; else salary[i] := salary[i] * 1.10; totalpay := totalpay + salary[i]; end loop; print totalpay; totalpay := 0.0; for i = 1 to last_employee salary[i] := salary[i] * 105 1.05 if salary[i] < 50000. salary[i] := salary[i] * 1.10 totalpay := totalpay + salary[i] end loop print totalpay

Σκελετός διαγράμματος ροής 6 5 1 Do 2 3 4 If 7 8 9 10 11

Σκελετός διαγράμματος με ενδιαφέροντα συμβάντα X := 6 5 Do 2 3 4 If 7 1 X := 8 9 10 11

Κάτι δεν πάει 1 καλά 6 Do 2 := X 5 3 If 7 4 X := 8 9 10 11

Καλύτερο := X 6 5 Do 2 3 4 If 7 1 X := 8 9 10 11

Πιο δύσκολο 6 5 1 Do 2 3 4 If 7 X:= 8 9 10 11 := X

Πιο σοβαρό 1 πρόβλημα Open Door Move Elevator 6 5 Do 2 3 4 Close Door If 7 8 9 10 11

Πρόβλημα 6 5 1 Do 2 3 If 7 4 Open Door Move 8 9 Elevator Close Door 10 11

Άλλο πρόβλημα; Close CoseDoor 6 5 Do 2 1 Open Door 3 4 If 7 Move 8 9 Elevator 10 11

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Απόδειξη ορθότητας xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Τυπική επαλήθευση Επιθυμητή συμπεριφορά: συνήθως σε κάποια μαθηματική λογική Συμπεριφορά: συνήθως συνάγεται από τη σημασιολογία της γλώσσας προγραμματισμού Σύγκριση: απόδειξη θεωρήματος, χρησιμοποιώντας τα αξιώματα της λογικής το αποτέλεσμα είναι σίγουρα «απόδειξη» αλλά όχι απαραίτητα «ορθότητας»

Τυπική επαλήθευση προδιαγραφή επιθυμητής συμπεριφοράς assertions σε λογική 1ής τάξεως σημασιολογία προγράμματος προδιαγραφή πραγματικής συμπεριφοράς απόδειξη (με το χέρι ή μηχανή) Σύγκριση συμπεριφοράς αποτέλεσμα

Η μέθοδος του Floyd (επαγωγικά assertions) είξε ότι κάθε τμήμα του προγράμματος συμπεριφέρεται ρ σωστά είξε με επαγωγή ότι όλες οι ακολουθίες εκτέλεσης είναι σωστές είξε ότι το πρόγραμμα σταματάει

Assertions Assertion: προδιαγραφή μιας συνθήκης που είναι αληθής σε κάποιο σημείο του προγράμματος Στη μέθοδο του Floyd γράφουμε assertions σε λογική πρώτης τάξης Τρεις τύποι assertions: o Αρχικό, As: στο αρχικό σημείο του προγράμματος o Τελικό,AF: στο τελικό o ενδιάμεσό,ai: ("loop invariants") σε διάφορα ενδιάμεσα σημεία του προγράμματος με βάση τον κανόνα: Κάθε επανάληψη του loop περνάει από τουλάχιστον ένα ενδιάμεσο assertion Αποτέλεσμα: Κάθε εκτέλεση του προγράμματος μπορεί να διαιρεθεί σε πεπερασμένο αριθμό τμημάτων κώδικα χωρίς loop που αρχίζει και τελειώνει με assertion

Θεώρημα: Μαθηματική επαγωγή: π.χ. πόσες ακμές μςστο C n Αν C n = (V n, E n ) είναι ένα πλήρες γράφημα με n κόμβους, τότε E n = n * (n-1)/2 Πώς το αποδεικνύουμε;

Βασικό συστατικό της μεθόδου του Floyd Αποδεικνύουμε ότι σε κάθε εκτέλεση αν το assertion Ai είναι αληθές τότε το Ai+1 είναι αληθές A i (C i A i+1) A i A i+1 C i κώδικας χωρίς loop Τελική υποχρέωση: αποδεικνύουμε ότι το πρόγραμμα σταματάει

Με σχήμα ενδιάμεσα assertions αρχικό assertion A i A i+1 τελικό assertion C i κώδικας χωρίς loop

Loop Invariants Το πρόβλημα είναι ότι οι πιθανές ακολουθίες εντολών σε ένα πρόγραμμα είναι άπειρες λόγω loops Λύση: το loop invariant assertion Ai αληθές για κάθε εκτέλεση του loop συνδέει με διπλανά assertions To loop invariant πρέπει να αναπαριστά την ουσία της δουλειάς που κάνει το loop

Παράδειγμα ταξινόμησης procedure sort(values, size); declare values real array[1000], temp real, i, j, size integer; ASSERT INITIAL do for i = 1 to size-1 do for j = i+1 to size if values[j] > values[i] then temp := values[i]; values[i] := values[j]; values[j] := temp; ASSERT INNER end do; ASSERT OUTER end do; ASSERT FINAL end sort;

Παράδειγμα ταξινόμησης procedure sort(values, size); declare values real array[1000], temp real, i, j, size integer; ASSERT INITIAL do for i = 1 to size-1 do for j = i+1 to size if values[j] > values[i] then temp := values[i]; values[i] := values[j]; values[j] := temp; ASSERT INNER end do; ASSERT OUTER end do; ASSERT FINAL end sort;

ASSERT OUTER values[i] values[k] for all k such that i < k size

Παράδειγμα ταξινόμησης procedure sort(values, size); declare values real array[1000], temp real, i, j, size integer; ASSERT INITIAL do for i = 1 to size-1 do for j = i+1 to size if values[j] > values[i] then temp := values[i]; values[i] := values[j]; values[j] := temp; ASSERT INNER end do; ASSERT OUTER end do; ASSERT FINAL end sort;

ASSERT INNER values[i] values[k] for all k such that i < k j

Παράδειγμα ταξινόμησης procedure sort(values, size); declare values real array[1000], temp real, i, j, size integer; ASSERT INITIAL do for i = 1 to size-1 do for j = i+1 to size if values[j] > values[i] then temp := values[i]; values[i] := values[j]; values[j] := temp; ASSERT INNER end do; ASSERT OUTER end do; ASSERT FINAL end sort;

ASSERT FINAL For all i, j, if i < j size, values[i] values [j]

Παράδειγμα ταξινόμησης procedure sort(values, size); declare values real array[1000], temp real, i, j, size integer; ASSERT INITIAL do for i = 1 to size-1 do for j = i+1 to size if values[j] > values[i] then temp := values[i]; values[i] := values[j]; values[j] := temp; ASSERT INNER end do; ASSERT OUTER end do; ASSERT FINAL end sort;

ASSERT INITIAL size > 0 and size 1000

Loop Invariants Αν θέλετε να γίνετε σοβαροί προγραμματιστές είναι απαραίτητο να σκέφτεστε τα loop invariants για κάθε loop που γράφετε Όχι αναγκαία σε αυστηρά μαθηματικά Αλλά απαραίτητο να καταλαβαίνετε πώς το invariant στηρίζει την όλη λογική του προγράμματός σας

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

Αυτόματα εργαλεία Τα εργαλεία τυπικής επαλήθευσης ή αποδείξεως θεωρημάτων είναι πιο παραγωγικά σε συνεργασία με το χρήστη η δομή της απόδειξης έρχεται από τον άνθρωπο το σύστημα επαληθεύει και κάνει «εύκολα» βήματα ο άνθρωπος επεμβαίνει συχνά και καθοδηγεί

Αποτελέσματα Έχει επιτευχθεί η τυπική επαλήθευση πολύ μεγάλων προγραμμάτων σημαντικό για πρωτόκολλα, μεταγλωττιστές, κλπ. Περιοχή με εξαιρετικά έντονη δραστηριότητα Η έρευνα σε δοκιμασία, ανάλυση, επαλήθευση προγραμμάτων είναι πλέον ένα συνεχές δοκιμασία -> επαλήθευση model checking -> δοκιμασία > επαλήθευση model checking > τυπική επαλήθευση