Προγραμματισμός Αξιοπιστίας

58
χνολογία Λογισμικού Slide 1 Προγραμματισμός Αξιοπιστίας Τεχνικές προγραμματισμού για την εκπόνηση αξιόπιστων συστημάτων λογισμικού.

description

Προγραμματισμός Αξιοπιστίας. Τεχνικές προγραμματισμού για την εκπόνηση αξιόπιστων συστημάτων λογισμικού. Στόχοι. Περιγραφή τεχνικών προγραμματισμού για αξιόπιστη ανάπτυξη του συστήματος Συζήτηση της αποφυγής λαθών με κατασκευή ελαχιστοποίησης επιρεπούς σε λάθη - PowerPoint PPT Presentation

Transcript of Προγραμματισμός Αξιοπιστίας

Page 1: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 1

Προγραμματισμός Αξιοπιστίας

Τεχνικές προγραμματισμού για την εκπόνηση αξιόπιστων συστημάτων λογισμικού.

Page 2: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 2

Στόχοι

Περιγραφή τεχνικών προγραμματισμού για αξιόπιστη ανάπτυξη του συστήματος

Συζήτηση της αποφυγής λαθών με κατασκευή ελαχιστοποίησης επιρεπούς σε λάθη

Να περιγράψουμε αρχιτεκτονικές που δέχονται κρίση για λάθη

Να δείξουμε πως χειρισμός κατ΄εξαίρεση μπορεί να χρησιμοποιηθεί για την παραγωγή εύρωστων προγραμμάτων

Page 3: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 3

Θέματα

Τεχνικές αποφυγής λαθών Αντοχή σε λάθη και ανθεκτικές σε λάθη

αρχιτεκτονικές Χειρισμός κατ’ εξαίρεση και διαχείριση Αμυντικός προγραμματισμός Παραδείγματα προγραμμάτων παρουσιάζονται σε

Ada και C++

Page 4: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 4

Αξιοπιστία Λογισμικού

Γενικά, όλοι οι πελάτες αναμένουν να έχουν λογισμικό το οποίο είναι αξιόπιστο. Για μη - κρίσιμες εφαρμογές όμως, μπορεί να αποδέχονται κάποιες αστοχίες του συστήματος.

Ορισμένες εφαρμογές όμως έχουν υψηλές απαιτήσεις αξιοπιστίας και πρέπει να χρησιμοποιηθούν ειδικές προγραμματιστικές τεχνικές

Page 5: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 5

Επίτευξη Αξιοπιστίας

Αποφυγή λαθών• Το λογισμικό αναπτύσσεται με τέτοιο τρόπο ώστε να μην

περιέχει λάθη

Εύρεση λαθών• Η διαδικασία ανάπτυξης οργανώνεται με τέτοιο τρόπο ώστε τα

λάθη στο λογισμικό να βρίσκονται εύκολα και να επισκευάζονται πριν φθάσουν στον καταναλωτή

Αντοχή σε λάθη• Το λογισμικό σχεδιάζεται έτσι ώστε λάθη στο τελικό προϊόν να

μην έχουν ως αποτέλεσμα την πλήρη κατάρρευση του συστήματος

Page 6: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 6

Αποφυγή Λαθών Υπάρχουν σύγχρονες μέθοδοι της τεχνολογίας

λογισμικού που επιτρέπουν την παραγωγή λογισμικού χωρίς λάθη.

Λογισμικό χωρίς λάθη σημαίνει συμβατότητα με τις προδιαγραφές. Δεν σημαίνει λογισμικό το οποίο πάντα κάνει το σωστό αφού μπορεί να υπάρχουν λάθη στις προδιαγραφές

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

Page 7: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 7

Κόστη Απομάκρυνσης ΛαθώνCost

per errordeleted

FewNumber of residual errors

ManyVeryfew

Page 8: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 8

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

λογισμικού είναι σημαντική Πρέπει να χρησιμοποιηθεί προγραμματιστική γλώσσα

με ακριβείς εκφράσεις και έλεγχο Εκτεταμένη χρήση επαναλήψεων σε όλα τα στάδια της

διαδικασίας Απαιτεί οργανωτική δέσμευση για ποιότητα Εκτεταμένος και προσεκτικός έλεγχος του συστήματος

είναι απαραίτητος

Page 9: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 9

Ada και C++ Η Ada έχει σχεδιασθεί για μεγάλης κλίμακας

προβλήματα τεχνολογίας λογισμικού και είναι ακριβής γλώσσα. Παρόλα αυτά υπάρχουν μόνο λίγοι μεταγλωττιστές για προσωπικούς Η/Υ

Η C++ χρησιμοποιείται ευρύτατα για ανάπτυξη. Συνδυάζει την αποτελεσματικότητα γλώσσας χαμηλού επιπέδου (C) με αντικειμενοστραφή προγραμματισμό. Υπάρχει καλύτερος έλεγχος τύπων από την C αλλά όχι καλύτερος από την Ada

Page 10: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 10

Δομημένος Προγραμματισμός

Πρωτοσυζητήθηκε στο 1970's Προγραμματισμός χωρίς gotos While βρόχοι and if εντολές είναι οι μόνοι τρόποι

ελέγχου ροής. Σχεδιασμός Top-down. Σημαντικός γιατί προώθησε σκέψεις και

συζητήσεις σχετικές με προγραμματισμό.

Page 11: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 11

Δομές Επηρεπείς σε Λάθη Αριθμοί Floating-point

• Έντονα μη ακριβείς. Η έλλειψη ακρίβειας μπορεί να οδηγήσει σε άστοχες συγκρίσεις

Δείκτες• Οι δείκτες που αναφέρονται σε λάθος περιοχές μνήμης οδηγούν σε

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

Δυναμική κατανομή μνήμης• Η κατανομή μπορεί να δημιουργήσει υπερφόρτωση μνήμης

Παραλλελισμός• Μπορεί να οδηγήσει σε λάθη εξαιτίας μη αναμενομένων

αλληλεπιδράσεων

Page 12: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 12

Δομές Επηρεπείς σε Λάθη

Επανάληψη• Τα λάθη στην επανάληψη προκαλούν υπερφόρτωση μνήμης

Διακοπές• Προκαλούν τον τερματισμό μίας κρίσιμης διαδικασίας και

κάνουν το πρόγραμμα δυσκατανόητο. Είναι συγκρίσιμα με τις εντολές goto.

Δεν συνίσταται ότι αυτές οι δομές πρέπει να αποφεύγονται αλλά πρέπει να χρησιμοποιούνται με μεγάλη προσοχή.

Page 13: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 13

Απόκρυψη Πληροφορίας Η πληροφορία πρέπει να είναι εκτεθιμένη στα μέρη εκείνα

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

Αυτό οδηγεί σε αποφυγή λαθών για τους ακόλουθους τρεις λόγους :• πιθανότητα καταστροφής πληροφορίας από ατύχημα

• η πληροφορία περικλείεται από ‘firewalls’ ώστε τα προβλήματα δεν διαχέονται σε άλλα μέρη του προγράμματος

• όσο η πληροφορία είναι τοπική, ο προγραμματιστής ωθείται να κάνει λάθη και οι ελεγκτές να βρουν τα λάθη

Page 14: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 14

Τύποι Δεδομένων Κάθε στοιχείο προγράμματος πρέπει να επιτρέπει

πρόσβαση στα δεδομένα τα οποία απαιτούνται για την υλοποίηση της λειτουργίας του

Η αναπαράσταση τύπου δεδομένων πρέπει να συμφωνείται από τους χρήστες αυτού του τύπου

Η Ada, Modula-2 και C++ προσφέρουν υποστήριξη για απόκρυψη πληροφορίας

Ο τύπος συστήματος χρησιμοποιείται για την βελτίωση αναγνωσιμότητας του προγράμματος με απευθείας μοντελοποίηση των οντοτήτων του πραγματικού κόσμου

Page 15: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 15

Δηλώσεις Τύπων

Δηλώσεις τύπων στην C++• typedef enum { red, redamber, amber, green} TrafficLightColour ;

TrafficLightColour ColourShowing, NextColour ;

Δηλώσεις τύπων στην Ada• type POSITIVE is INTEGER range 1..MAXINT ;

• type OIL_STATUS is new BOOLEAN ;type DOOR_STATUS is new INTEGER ;type FUEL_STATUS is new BOOLEAN ;

Page 16: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 16

Αντικείμενα και Αφαιρετικοί Τύποι Δεδομένων

Υλοποιούνται στην C++ ως αντικείμενα και στην Ada ως πακέτα

Το όνομα του τύπου δηλώνεται μέσα στο αντικείμενο ή ADT

Οι λειτουργίες τύπων ορίζονται ως procedures ή συναρτήσεις.

Η αναπαράσταση τύπου ορίζεται στο ιδιωτικό μέρος Οι βασικές αφαιρετικές δομές δεδομένων μπορεί να

παραμετροποιηθούν με χρήση του ονόματος του τύπου.

Page 17: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 17

Εξειδικεύσεις της Ada για μία Ακέραια Ουρά

package Queue istype T is private ;procedure Put (IQ : in out T; X: INTEGER);procedure Remove (IQ : in out T; X : out INTEGER);function Size (IQ : T ) return NATURAL;

private type Q_RANGE is range 0..99 ;type Q_VEC is array ( Q_RANGE ) of INTEGER ;type T is record

The_queue: Q_VEC ;front, back : Q_RANGE ;

end record; end Queue;

Page 18: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 18

Δήλωση Κλάσεων Ουράς στην C++

class Queue {public:

Queue () ;~Queue () ;void Put ( int x ) ; // adds an item to the queueint Remove () ; // this has side effect of changing the queueint Size( ) ; // returns number of elements in the queue

private:int front, back ;int qvec [100] ;

} ;

Page 19: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 19

Γενικά Η συμπεριφορά των αντικειμένων και ADTs τα

οποία συντίθενται από άλλα αντικείμενα ή ADTs είναι συχνά ανεξάρτητη από τον τύπο των συμπεριλαμβανομένων αντικειμένων

Τα Generics είναι ένας τρόπος για συγγραφή γενικευμένων, παραμετροποιημένων ADTs και αντικειμένων να οποία πρέπει να χρησιμοποιηθούν αργότερα με ειδικούς τύπους

Και η Ada και C++ έχουν δυνατότητες για ορισμούς βασικών τύπων και κλάσεων

Page 20: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 20

Δήλωση σε Ada για μία Βασική Ουρά

generic type ELEM is private ; type Q_SIZE is range <> ;package Queue is type T is private ; procedure Put (IQ : in out T; X: ELEM ); procedure Remove (IQ : in out T; X : out ELEM ); function Size (IQ : in T ) return NATURAL ;private type Q_VEC is array (Q_SIZE) of ELEM ; type T is record The_queue: Q_VEC ; Front : Q_SIZE := Q_SIZE’FIRST ; Back: Q_SIZE := Q_SIZE’FIRST ; end record; end Queue;

Page 21: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 21

Βασική Ουρά στην C++

template<class elem>

class Queue {public:

Queue ( int size = 100 ) ; // default to queue of size 100 elements~Queue () ;void Put ( elem x ) ; elem Remove ( ) ; // this has side effect of changing queueint Size ( ) ;

private:int front, back ;elem* qvec ;

} ;

Page 22: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 22

Εισαγωγή Generics Γίνεται κατά την διάρκεια της μεταγλώττισης και

κατά συνέπεια είναι δυνατός ο έλεγχος τύπου Ada

• type IQ_SIZE is range 0..49 ; type LQ_SIZE is range 0..199 ;package Integer_queue is new Queue (ELEM => INTEGER,

Q_SIZE => IQ_SIZE ) ;package List_queue is new Queue (ELEM => List.T,

Q_SIZE => LQ_SIZE ) ;

C++• //Assume List has been defined elsewhere as a type

Queue <int> Int_queue (50) ;Queue <List> List_queue (200) ;

Page 23: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 23

Αντοχή σε Λάθη

Σε κρίσιμες καταστάσεις τα συστήματα λογισμικού πρέπει να είναι ανθεκτικά σε λάθη

Αντοχή σε λάθη σημαίνει ότι το σύστημα μπορεί να συνεχίσει την λειτουργία του ανεξάρτητα από αστοχία συστήματος

Ακόμα και αν το σύστημα έχει αποδειχθεί να είναι ανθεκτικό σε λάθη, πρέπει να είναι ανθεκτικό ακόμα και όταν η εξειδίκευση και αξιολόγηση είναι λάθος

Page 24: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 24

Δραστηριότητες Αντοχής σε Λάθη

Εύρεση Αστοχίας• Το σύστημα μπορεί να βρεί ότι συνέβη μία αστοχία

Εκτίμηση Καταστροφής• Τα μέρη του συστήματος τα οποία έχουν επηρεαστεί από την αστοχία πρέπει

να αναζητηθούν

Ανάκτηση Λάθους• Το σύστημα πρέπει να επαναφέρει την κατάστασή του σε μία γνωστή

ασφαλή κατάσταση

Επιδιόρθωση Λάθους• Το σύστημα πρέπει να τροποποιηθεί για να αποφευχθεί επανάληψη του

λάθους. Καθώς ορισμένα λάθη είναι προσωρινά, αυτό συχνά δεν είναι απαραίτητο.

Page 25: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 25

Εμφάνιση Λάθους

Πολλές αστοχίες λογισμικού είναι παροδικές και εξαρτώμενες από κάποια δεδομένα. Η λειτουργία μπορεί να συνεχισθεί με επανεκκίνηση του συστήματος.

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

Page 26: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 26

Αντοχή σε Λάθη του Υλικού Εξαρτάται από το triple-modular redundancy (TMR) Υπάρχουν τρία επαναλαμβανόμενα παρόμοια στοιχεία

που παίρνουν την ίδια είσοδο και των οποίων οι έξοδοι συγκρίνονται

Εάν μία έξοδος είναι διαφορετική αγνοείται και υποθέτουμε ότι έχει συμβεί αστοχία στοιχείου

Βασίζεται ότι οι περισσότερες αστοχίες οφείλονται σε αστοχίες στοιχείων και όχι αστοχίες σχεδιασμού και στην χαμηλή πιθανότητα για ταυτόχρονη αστοχία πολλών στοιχείων

Page 27: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 27

Αξιοπιστία Λογισμικού με TMR

A2

A1

A3

Outputcomparator

Page 28: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 28

Αναλογίες στο Λογισμικό

N-μορφή προγραμματισμού• Η ίδια εξειδίκευση υλοποιείται σε ένα αριθμό διαφορετικών

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

Βlocks επανάκτησης• Οι εκδόσεις εκτελούνται ακολουθιακά. Η έξοδος η οποία

αντιστοιχεί σε ένα έλεγχο αποδοχής επιλέγεται. Η αδυναμία είναι να βρούμε τον έλεγχο αποδοχής.

Page 29: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 29

N-έκδοσης Προγραμματισμός

Version 2

Version 1

Version 3

Outputcomparator

N-versions

Agreedresult

Page 30: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 30

N-έκδοσης Προγραμματισμός

Οι διαφορετικές εκδόσεις του συστήματος σχεδιάζονται και υλοποιούνται από διαφορετικές ομάδες. Υποθέτουμε ότι η πιθανότητα να γίνουν τα ίδια λάθη είναι μικρή

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

Page 31: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 31

Βlocks Ανάκτησης

Acceptancetest

Algorithm 2

Algorithm 1

Algorithm 3

Recoveryblocks

Test forsuccess

Retest

Retry

Retest

Try algorithm1

Continue execution ifacceptance test succeedsSignal exception if allalgorithms fail

Acceptance testfails – re-try

Page 32: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 32

Βlocks Ανάκτησης

Χρήση διαφορετικού αλγόριθμου για κάθε έκδοση για να ελαχιστοποιηθεί η πιθανότητα για κοινά λάθη

Όμως, ο σχεδιασμός του τεστ αποδοχής ε’ιναι δύσκολος και πρέπει να είναι ανεξάρτητος του υπολογισμού που χρησιμοποιείται

Όπως ο N-εκδόσεων προγραμματισμός, είναι δυνατά τα λάθη εξ αιτίας της εξειδίκευσης

Page 33: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 33

Χειρισμός κατ’ Εξαίρεση Ένα πρόγραμμα κατ΄εξαίρεση είναι ένα λάθος ή

κάποιο απρόσμενο γεγονός όπως η πρώτη της τάσης Οι δομές χειρισμού κατ’ εξαίρεση επιτρέπουν τον

χειρισμό των γεγονότων χωρίς συνεχή έλεγχο της κατάστασης για την ανίχνευση εξαιρέσεων

Η χρήση κανονικών εντολών ελέγχου για την ανεύρεση εξαιρέσεων σε μία ακολουθία ένθετων κλήσεων προσθέτει πολλές επιπλέον ρντολές και κόστος στον προγραμματισμό

Page 34: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 34

Εξαιρέσεις σε Ένθετες Κλήσεις Συναρτήσεων

B;

A

C;

B

CCall

sequence

Exceptionoccurrence

Exceptionreturn

Page 35: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 35

Χειρισμός Εξαιρέσεων στην Ada Η Ada έχει ενσωματωμένο μηχανισμό εξαιρέσεων και

έτσι ονόματα μπορούν να συνδεθούν με εξαιρέσεις Η μεταφορά προσοχής σε εξαιρέσεις ονομάζεται

ανάσυρση εξαίρεσης (keyword raise) Μία μονάδα προγράμματος σε Ada μπορεί να έχει ένα

χειριστή εξαιρέσεων που είναι τμήμα του προγράμματος που ορίζει πως επεξεργάζονται οι εξαιρέσεις

Όταν ανασύρεται μία εξαίρεση ο κώδικας μεταφέρεται στον χειριστή εξαιρέσεων αυτόματα

Page 36: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 36

Ενσωματωμένες Εξαιρέσεις στην Ada CONSTRAINT_ERROR

• Διαπιστώνεται όταν αποδίδεται μία τιμή σε μία μεταβλητή έξω από την περιοχή

NUMERIC_ERROR• Διαπιστώνεται όταν ένα λάθος εμφανίζεται σε μία αριθμητική πράξη (π.χ.

διαίρεση με μηδέν)

PROGRAM_ERROR• Όταν παραβιάζεται μία δομή ελέγχου

STORAGE_ERROR• Όταν γίνεται υπερφόρτωση δυναμικής αποθήκευσης

TASKING_ERROR• Διαπιστώνεται όταν μία επικοινωνία μεταξύ διεργασιών αποτυγχάνει.

Page 37: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 37

Χειρισμός Εξαιρέσεων στην C++ Το Keyword throw σημαίνει ανάσυρση μίας

εξαίρεσης. Ο χειριστής υποδεικνύεται με το keyword catch

Οι εξαιρέσεις ορίζονται ως κλάσεις και μπορούν να κληρονομήσουν ιδιότητες από άλλες κλάσεις εξαιρέσεων

Συνήθως, οι εξαιρέσεις χειρίζονται πλήρως στο μπλοκ που αναδεικνύονται και δεν αφήνεται διάδοση τους

Όλες οι εξαιρέσεις ορίζονται από τον χρήστη και δεν είναι ενσωματωμένες στο σύστημα

Page 38: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 38

Έλεγχος Θερμοκρασίας Ελέγχει ένα καταψύκτη και κρατάει την

θερμοκρασία του σε καθορισμένη περιοχή Ανοίγει και κλείνει την ψυκτική αντλία Ενεργοποιεί τον συναγερμό όταν η θερμοκρασία

ξεπερνά ένα μέγιστο Χρησιμοποιεί εξωτερικές οντότητες: αντλία,

θερμοκρασία, αισθητήρα, συναγερμό Η εξωτερική διαμεριζόμενη κατάσταση κρατιέται

σε ένα πακέτο που ονομάζεται Globals (στην Ada)

Page 39: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 39

Ελεγκτής Καταψύκτη (Ada)

See portait slide

Page 40: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 40

Ελεγκτής Θερμοκρασίας (C++)

See portrait slide

Page 41: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 41

Αμυντικός Προγραμματισμός

Προσέγγιση στην ανάπτυξη προγράμματος όπου υποθέτουμε ότι υπάρχουν λάθη τα οποία δεν έχουν βρεθεί στο πρόγραμμα

Το πρόγραμμα περιλαμβάνει κώδικα για την εύρεση και ανάκτηση από τέτοια λάθη

Δεν απαιτεί ελεγκτή με ανοχές σε λάθη

Page 42: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 42

Προστασία από Αστοχία Συστήματα τύπων επιτρέπουν εύρεση πολλών

πιθανών καταστροφικών αστοχιών στην διάρκεια της μεταγλώττισης

Ο έλεγχος περιοχής και εξαιρέσεων επιτρέπει την εύρεση μίας σημαντικής ομάδας αστοχιών να βρίσκονται κατά την διάρκεια του τρεξίματος

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

Page 43: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 43

Έλεγχος Περιοχής σε Ada Οι τύποι δηλώνονται ως μία επιτρεοπόμενη περιοχή, π.χ.

1..100 Ο Έλεγχος περιοχής στην Ada αυτόματα αναδεικνύει μία

εξαίρεση CONSTRAINT_ERROR εάν υπάρχει κάτι εκτός περιοχής

Ο έλεγχος περιοχής εφαρμόζεται σε μία απλή μεταβλητή. Έλεγχοι οι οποίοι εφαρμόζονται μεταξύ περιοχών (π.χ. εάν A=0 τότε B=1) δεν μπορούν να εφαρμοσθούν

Τα λάθη εκτός περιοχής απαιτούν επιπλέον ελέγχους για να ευρεθεί η αιτία των λαθών

Page 44: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 44

Λογικά κατηγορήματα σε μεταβλητές κατάστασης του συστήματος.

Συμπεριλαμβάνονται απευθείας σε μία γλώσσα αλλά προκαλούν προβλήματα μεταγλώττισης ένα χρησιμοποιούνται ποσοτικοποιητές

Συνήθως υλοποιούνται ως ελεγκτές προγραμμάτων Είναι απλοποιημένες αν όλες οι λειτουργίες κατάστασης

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

Διεκδικήσεις Κατάστασης

Page 45: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 45

Τύπος Ζυγού Αριθμού

See portrait slide

Page 46: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 46

Έλεγχος Διεκδίκησης

See portrait slide

Page 47: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 47

Εκτίμηση Καταστροφής

Analyse system state to judge the extent of corruption caused by a system failure

Must assess what parts of the state space have been affected by the failure

Generally based on ‘validity functions’ which can be applied to the state elements to assess if their value is within an allowed range

Page 48: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 48

Έλεγχοι αθροισμάτων χρησιμοποιούνται για την εκτίμηση ζημίας στην μεταφορά δεδομένων

Επιπλέον δείκτες χρησιμοποιούνται για έλεγχο δομών δεδομένων

Έλεγχος για διεργασίες που δεν τερματίζουν χρησιμοποιείται επίσης. Εάν δεν υπάρχει απόκριση σε συγκεκριμένο χρόνο τότε υποθέτουμε ότι υπάρχει κάποιο πρόβλημα

Τεχνικές Εκτίμησης Ζημιών

Page 49: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 49

Τύπος στην Ada με Εκτίμηση Ζημίας

See portrait slide

Page 50: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 50

Κλάση στην C++ με Εκτίμηση Ζημίας

template <class elem> class Robust_array {public:

Robust_array (int size = 20) ;~Robust_array () ;void Assign ( int Index, elem Val) ;elem Eval (int Index) ;

// Damage assessment functions// Assess_damage takes a pointer to a function as a parameter// It sets the corresponding element of Checks if a problem is// detected by the function Testvoid Assess_damage ( void (*Test ) (boolean*)) ;boolean Eval_state (int Index) ;boolean Is_damaged () ;

private:elem* Vals ;boolean* Checks ;

} ;

Page 51: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 51

Ανάκτηση προς τα Εμπρός

• Εφαρμόζουμε επιδιορθώσεις σε κατάσταση προβλήματος για το σύστημα

Ανάκτηση προς τα Πίσω

• Επαναποθήκευση της κατάστασης του συστήματος σε μία ασφαλή γνωστή κατάσταση

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

Η ανάκτηση λαθών προς τα πίσω είναι απλούστερη. Οι λεπτομέρειες της ασφαλούς κατάστασης διατηρούνται και ανταλλάσουν την προβληματική κατάσταση του συστήματος

Ανάκτηση Λαθών

Page 52: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 52

Αλλοίωση της Κωδικοποίησης Δεδομένων• Τεχνικές κωδικοποίησης λαθών που προσθέτουν πλεόνασμα σε

κωδικοποιημένα δεδομένα χρησιμοποιούνται για την επιδιόρθωση κωδικοποιημένων δεδομένων κατά την διάρκεια της μεταφοράς

Πλεονάζοντες Δείκτες• Όταν πλεονάζοντες δείκτες συμπεριλαμβάνονται σε δομές

δεδομένων, μία αλλοιωμένη λίστα ή αποθηκευμένο αρχείο μπορούν να επανακτηθούν αν ικανοποιητικός αριθμός δεικτών μένουν αναλλοίωτοι

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

Ανάκτηση προς τα Εμπρός

Page 53: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 53

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

Περιοδικά σημεία ελέγχου επιτρέπουν στο σύστημα να επιστρέφει στην σωστή κατάσταση

Ανάκτηση προς τα Πίσω

Page 54: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 54

Ασφαλής Διαδικασία Ταξινόμησης

Η διαδικασία ταξινόμησης ελέγχει την ίδια εκτέλεση και εκτιμά αν η ταξινόμηση έχει γίνει σωστά

Διατηρεί αντίγραφο της εισόδου, έτσι ώστε αν ένα λάθος εμφανίζεται, η είσοδος δεν καταστρέφεται

Βασίζεται στην αναγνώριση και χειρισμό εξαιρέσεων Είναι δυνατό αν είναι γνωστή μία αξιόπιστη

ταξινόμηση. Όμως σε πολλές περιπτώσεις είναι δύσκολο να γράψουμε τεστ αξιοπιστίας

Page 55: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 55

Ασφαλής Διαδικασία Ταξινόμησης (Ada)

See portrait slide

Page 56: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 56

Ασφαλής Διαδικασία Ταξινόμησης (C++)

See portrait slide

Page 57: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 57

Η αξιοπιστία σε ένα σύστημα επιτυγχάνεται με αποφυγή λαθών και ανθεκτικότητα σε λάθη

Μερικές δομές προγραμματισμού όπως gotos, αναδρομές και δείκτες είναι κληρονομικά επηρεπείς σε λάθη

Οι τύποι δεδομένων επιτρέπουν πολλά λάθη να βρίσκονται κατά την διάρκεια του χρόνου μεταγλώττισης.

Λογισμικό ανθεκτικό σε λάθη μπορεί να συνεχίσει την εκτέλεσή τους με την παρουσία λαθών λογισμικού

Σημαντικά Σημεία

Page 58: Προγραμματισμός Αξιοπιστίας

Τεχνολογία Λογισμικού Slide 58

Σημαντικά Σημεία Η ανθεκτικότητα σε λάθη απαιτεί εύρεση αστοχίας,

εκτίμηση ζημίας, ανάκτηση και επιδιόρθωση Ο προγραμματισμός N-εκδόσεων και τα blocks

ανάκτησης είναι προσεγγίσεις στην αντοχή σε λάθη Μηχανισμοί χειρισμού εξαιρέσεων χρησιμοποιούνται

για ανάκτηση από αστοχία Ο αμυντικός προγραμματισμός παρέχει ανθεκτικότητα

σε λάθη χωρίς την χρήση ελεγκτή αντοχής σε λάθη