Προγραμματισμός Αξιοπιστίας
-
Upload
harriet-raymond -
Category
Documents
-
view
44 -
download
4
description
Transcript of Προγραμματισμός Αξιοπιστίας
Τεχνολογία Λογισμικού Slide 1
Προγραμματισμός Αξιοπιστίας
Τεχνικές προγραμματισμού για την εκπόνηση αξιόπιστων συστημάτων λογισμικού.
Τεχνολογία Λογισμικού Slide 2
Στόχοι
Περιγραφή τεχνικών προγραμματισμού για αξιόπιστη ανάπτυξη του συστήματος
Συζήτηση της αποφυγής λαθών με κατασκευή ελαχιστοποίησης επιρεπούς σε λάθη
Να περιγράψουμε αρχιτεκτονικές που δέχονται κρίση για λάθη
Να δείξουμε πως χειρισμός κατ΄εξαίρεση μπορεί να χρησιμοποιηθεί για την παραγωγή εύρωστων προγραμμάτων
Τεχνολογία Λογισμικού Slide 3
Θέματα
Τεχνικές αποφυγής λαθών Αντοχή σε λάθη και ανθεκτικές σε λάθη
αρχιτεκτονικές Χειρισμός κατ’ εξαίρεση και διαχείριση Αμυντικός προγραμματισμός Παραδείγματα προγραμμάτων παρουσιάζονται σε
Ada και C++
Τεχνολογία Λογισμικού Slide 4
Αξιοπιστία Λογισμικού
Γενικά, όλοι οι πελάτες αναμένουν να έχουν λογισμικό το οποίο είναι αξιόπιστο. Για μη - κρίσιμες εφαρμογές όμως, μπορεί να αποδέχονται κάποιες αστοχίες του συστήματος.
Ορισμένες εφαρμογές όμως έχουν υψηλές απαιτήσεις αξιοπιστίας και πρέπει να χρησιμοποιηθούν ειδικές προγραμματιστικές τεχνικές
Τεχνολογία Λογισμικού Slide 5
Επίτευξη Αξιοπιστίας
Αποφυγή λαθών• Το λογισμικό αναπτύσσεται με τέτοιο τρόπο ώστε να μην
περιέχει λάθη
Εύρεση λαθών• Η διαδικασία ανάπτυξης οργανώνεται με τέτοιο τρόπο ώστε τα
λάθη στο λογισμικό να βρίσκονται εύκολα και να επισκευάζονται πριν φθάσουν στον καταναλωτή
Αντοχή σε λάθη• Το λογισμικό σχεδιάζεται έτσι ώστε λάθη στο τελικό προϊόν να
μην έχουν ως αποτέλεσμα την πλήρη κατάρρευση του συστήματος
Τεχνολογία Λογισμικού Slide 6
Αποφυγή Λαθών Υπάρχουν σύγχρονες μέθοδοι της τεχνολογίας
λογισμικού που επιτρέπουν την παραγωγή λογισμικού χωρίς λάθη.
Λογισμικό χωρίς λάθη σημαίνει συμβατότητα με τις προδιαγραφές. Δεν σημαίνει λογισμικό το οποίο πάντα κάνει το σωστό αφού μπορεί να υπάρχουν λάθη στις προδιαγραφές
Το κόστος για παραγωγή λογισμικού χωρίς λάθη είναι πολύ υψηλό. Είναι αποτελεσματικό ως προς αυτό μόνο σε ορισμένες περιπτώσεις. Πιθανό να είναι φθηνότερη η αποδοχή κάποιων λαθών
Τεχνολογία Λογισμικού Slide 7
Κόστη Απομάκρυνσης ΛαθώνCost
per errordeleted
FewNumber of residual errors
ManyVeryfew
Τεχνολογία Λογισμικού Slide 8
Ανάπτυξη Λογισμικού χωρίς Λάθη Απαιτείται ακριβής (τυπική) εξειδίκευση Η πληροφορία που κρύβεται στον σχεδιασμό
λογισμικού είναι σημαντική Πρέπει να χρησιμοποιηθεί προγραμματιστική γλώσσα
με ακριβείς εκφράσεις και έλεγχο Εκτεταμένη χρήση επαναλήψεων σε όλα τα στάδια της
διαδικασίας Απαιτεί οργανωτική δέσμευση για ποιότητα Εκτεταμένος και προσεκτικός έλεγχος του συστήματος
είναι απαραίτητος
Τεχνολογία Λογισμικού Slide 9
Ada και C++ Η Ada έχει σχεδιασθεί για μεγάλης κλίμακας
προβλήματα τεχνολογίας λογισμικού και είναι ακριβής γλώσσα. Παρόλα αυτά υπάρχουν μόνο λίγοι μεταγλωττιστές για προσωπικούς Η/Υ
Η C++ χρησιμοποιείται ευρύτατα για ανάπτυξη. Συνδυάζει την αποτελεσματικότητα γλώσσας χαμηλού επιπέδου (C) με αντικειμενοστραφή προγραμματισμό. Υπάρχει καλύτερος έλεγχος τύπων από την C αλλά όχι καλύτερος από την Ada
Τεχνολογία Λογισμικού Slide 10
Δομημένος Προγραμματισμός
Πρωτοσυζητήθηκε στο 1970's Προγραμματισμός χωρίς gotos While βρόχοι and if εντολές είναι οι μόνοι τρόποι
ελέγχου ροής. Σχεδιασμός Top-down. Σημαντικός γιατί προώθησε σκέψεις και
συζητήσεις σχετικές με προγραμματισμό.
Τεχνολογία Λογισμικού Slide 11
Δομές Επηρεπείς σε Λάθη Αριθμοί Floating-point
• Έντονα μη ακριβείς. Η έλλειψη ακρίβειας μπορεί να οδηγήσει σε άστοχες συγκρίσεις
Δείκτες• Οι δείκτες που αναφέρονται σε λάθος περιοχές μνήμης οδηγούν σε
καταστροφή δεδομένων. Η χρήση ψευδονύμων είναι δύσκολη στην κατανόηση και αλλαγή προγραμμάτων
Δυναμική κατανομή μνήμης• Η κατανομή μπορεί να δημιουργήσει υπερφόρτωση μνήμης
Παραλλελισμός• Μπορεί να οδηγήσει σε λάθη εξαιτίας μη αναμενομένων
αλληλεπιδράσεων
Τεχνολογία Λογισμικού Slide 12
Δομές Επηρεπείς σε Λάθη
Επανάληψη• Τα λάθη στην επανάληψη προκαλούν υπερφόρτωση μνήμης
Διακοπές• Προκαλούν τον τερματισμό μίας κρίσιμης διαδικασίας και
κάνουν το πρόγραμμα δυσκατανόητο. Είναι συγκρίσιμα με τις εντολές goto.
Δεν συνίσταται ότι αυτές οι δομές πρέπει να αποφεύγονται αλλά πρέπει να χρησιμοποιούνται με μεγάλη προσοχή.
Τεχνολογία Λογισμικού Slide 13
Απόκρυψη Πληροφορίας Η πληροφορία πρέπει να είναι εκτεθιμένη στα μέρη εκείνα
του προγράμματος όπου είναι απαραίτητη. Αυτό σημαίνει ότι απαιατείται η κατασκευή αντικειμένων και αφαιρετικών τύπων δεδομένων που διατηρούν την κατάσταση και τις λειτουργίες αυτής της κατάστασης
Αυτό οδηγεί σε αποφυγή λαθών για τους ακόλουθους τρεις λόγους :• πιθανότητα καταστροφής πληροφορίας από ατύχημα
• η πληροφορία περικλείεται από ‘firewalls’ ώστε τα προβλήματα δεν διαχέονται σε άλλα μέρη του προγράμματος
• όσο η πληροφορία είναι τοπική, ο προγραμματιστής ωθείται να κάνει λάθη και οι ελεγκτές να βρουν τα λάθη
Τεχνολογία Λογισμικού Slide 14
Τύποι Δεδομένων Κάθε στοιχείο προγράμματος πρέπει να επιτρέπει
πρόσβαση στα δεδομένα τα οποία απαιτούνται για την υλοποίηση της λειτουργίας του
Η αναπαράσταση τύπου δεδομένων πρέπει να συμφωνείται από τους χρήστες αυτού του τύπου
Η Ada, Modula-2 και C++ προσφέρουν υποστήριξη για απόκρυψη πληροφορίας
Ο τύπος συστήματος χρησιμοποιείται για την βελτίωση αναγνωσιμότητας του προγράμματος με απευθείας μοντελοποίηση των οντοτήτων του πραγματικού κόσμου
Τεχνολογία Λογισμικού 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 ;
Τεχνολογία Λογισμικού Slide 16
Αντικείμενα και Αφαιρετικοί Τύποι Δεδομένων
Υλοποιούνται στην C++ ως αντικείμενα και στην Ada ως πακέτα
Το όνομα του τύπου δηλώνεται μέσα στο αντικείμενο ή ADT
Οι λειτουργίες τύπων ορίζονται ως procedures ή συναρτήσεις.
Η αναπαράσταση τύπου ορίζεται στο ιδιωτικό μέρος Οι βασικές αφαιρετικές δομές δεδομένων μπορεί να
παραμετροποιηθούν με χρήση του ονόματος του τύπου.
Τεχνολογία Λογισμικού 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;
Τεχνολογία Λογισμικού 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] ;
} ;
Τεχνολογία Λογισμικού Slide 19
Γενικά Η συμπεριφορά των αντικειμένων και ADTs τα
οποία συντίθενται από άλλα αντικείμενα ή ADTs είναι συχνά ανεξάρτητη από τον τύπο των συμπεριλαμβανομένων αντικειμένων
Τα Generics είναι ένας τρόπος για συγγραφή γενικευμένων, παραμετροποιημένων ADTs και αντικειμένων να οποία πρέπει να χρησιμοποιηθούν αργότερα με ειδικούς τύπους
Και η Ada και C++ έχουν δυνατότητες για ορισμούς βασικών τύπων και κλάσεων
Τεχνολογία Λογισμικού 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;
Τεχνολογία Λογισμικού 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 ;
} ;
Τεχνολογία Λογισμικού 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) ;
Τεχνολογία Λογισμικού Slide 23
Αντοχή σε Λάθη
Σε κρίσιμες καταστάσεις τα συστήματα λογισμικού πρέπει να είναι ανθεκτικά σε λάθη
Αντοχή σε λάθη σημαίνει ότι το σύστημα μπορεί να συνεχίσει την λειτουργία του ανεξάρτητα από αστοχία συστήματος
Ακόμα και αν το σύστημα έχει αποδειχθεί να είναι ανθεκτικό σε λάθη, πρέπει να είναι ανθεκτικό ακόμα και όταν η εξειδίκευση και αξιολόγηση είναι λάθος
Τεχνολογία Λογισμικού Slide 24
Δραστηριότητες Αντοχής σε Λάθη
Εύρεση Αστοχίας• Το σύστημα μπορεί να βρεί ότι συνέβη μία αστοχία
Εκτίμηση Καταστροφής• Τα μέρη του συστήματος τα οποία έχουν επηρεαστεί από την αστοχία πρέπει
να αναζητηθούν
Ανάκτηση Λάθους• Το σύστημα πρέπει να επαναφέρει την κατάστασή του σε μία γνωστή
ασφαλή κατάσταση
Επιδιόρθωση Λάθους• Το σύστημα πρέπει να τροποποιηθεί για να αποφευχθεί επανάληψη του
λάθους. Καθώς ορισμένα λάθη είναι προσωρινά, αυτό συχνά δεν είναι απαραίτητο.
Τεχνολογία Λογισμικού Slide 25
Εμφάνιση Λάθους
Πολλές αστοχίες λογισμικού είναι παροδικές και εξαρτώμενες από κάποια δεδομένα. Η λειτουργία μπορεί να συνεχισθεί με επανεκκίνηση του συστήματος.
Εάν αυτό είναι αδύνατο, απαιτείται επαναμορφοποίηση του συστήματος με την αντικατάσταση στοιχείων λογισμικού χωρίς το σύστημα να σταματήσει.
Τεχνολογία Λογισμικού Slide 26
Αντοχή σε Λάθη του Υλικού Εξαρτάται από το triple-modular redundancy (TMR) Υπάρχουν τρία επαναλαμβανόμενα παρόμοια στοιχεία
που παίρνουν την ίδια είσοδο και των οποίων οι έξοδοι συγκρίνονται
Εάν μία έξοδος είναι διαφορετική αγνοείται και υποθέτουμε ότι έχει συμβεί αστοχία στοιχείου
Βασίζεται ότι οι περισσότερες αστοχίες οφείλονται σε αστοχίες στοιχείων και όχι αστοχίες σχεδιασμού και στην χαμηλή πιθανότητα για ταυτόχρονη αστοχία πολλών στοιχείων
Τεχνολογία Λογισμικού Slide 27
Αξιοπιστία Λογισμικού με TMR
A2
A1
A3
Outputcomparator
Τεχνολογία Λογισμικού Slide 28
Αναλογίες στο Λογισμικό
N-μορφή προγραμματισμού• Η ίδια εξειδίκευση υλοποιείται σε ένα αριθμό διαφορετικών
εκδόσεων. Όλες οι εκδόσεις υπολογίζουν ταυτόχρονα και η κύρια έξοδος επιλέγεται. Αυτή είναι η συχνότερα προτιμώμενη μέθοδος. Όμως δεν παρέχει αντοχή σε λάθη αν υπάρχουν λάθη εξειδίκευσης
Βlocks επανάκτησης• Οι εκδόσεις εκτελούνται ακολουθιακά. Η έξοδος η οποία
αντιστοιχεί σε ένα έλεγχο αποδοχής επιλέγεται. Η αδυναμία είναι να βρούμε τον έλεγχο αποδοχής.
Τεχνολογία Λογισμικού Slide 29
N-έκδοσης Προγραμματισμός
Version 2
Version 1
Version 3
Outputcomparator
N-versions
Agreedresult
Τεχνολογία Λογισμικού Slide 30
N-έκδοσης Προγραμματισμός
Οι διαφορετικές εκδόσεις του συστήματος σχεδιάζονται και υλοποιούνται από διαφορετικές ομάδες. Υποθέτουμε ότι η πιθανότητα να γίνουν τα ίδια λάθη είναι μικρή
Όμως η εμπειρία λέει ότι οι ομάδες με κοινό τρόπο δεν κατανοούν σωστά τις εξειδικεύσεις και χρησιμοποιούν τους ίδιους αλγόριθμους στα συστήματά τους
Τεχνολογία Λογισμικού 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
Τεχνολογία Λογισμικού Slide 32
Βlocks Ανάκτησης
Χρήση διαφορετικού αλγόριθμου για κάθε έκδοση για να ελαχιστοποιηθεί η πιθανότητα για κοινά λάθη
Όμως, ο σχεδιασμός του τεστ αποδοχής ε’ιναι δύσκολος και πρέπει να είναι ανεξάρτητος του υπολογισμού που χρησιμοποιείται
Όπως ο N-εκδόσεων προγραμματισμός, είναι δυνατά τα λάθη εξ αιτίας της εξειδίκευσης
Τεχνολογία Λογισμικού Slide 33
Χειρισμός κατ’ Εξαίρεση Ένα πρόγραμμα κατ΄εξαίρεση είναι ένα λάθος ή
κάποιο απρόσμενο γεγονός όπως η πρώτη της τάσης Οι δομές χειρισμού κατ’ εξαίρεση επιτρέπουν τον
χειρισμό των γεγονότων χωρίς συνεχή έλεγχο της κατάστασης για την ανίχνευση εξαιρέσεων
Η χρήση κανονικών εντολών ελέγχου για την ανεύρεση εξαιρέσεων σε μία ακολουθία ένθετων κλήσεων προσθέτει πολλές επιπλέον ρντολές και κόστος στον προγραμματισμό
Τεχνολογία Λογισμικού Slide 34
Εξαιρέσεις σε Ένθετες Κλήσεις Συναρτήσεων
B;
A
C;
B
CCall
sequence
Exceptionoccurrence
Exceptionreturn
Τεχνολογία Λογισμικού Slide 35
Χειρισμός Εξαιρέσεων στην Ada Η Ada έχει ενσωματωμένο μηχανισμό εξαιρέσεων και
έτσι ονόματα μπορούν να συνδεθούν με εξαιρέσεις Η μεταφορά προσοχής σε εξαιρέσεις ονομάζεται
ανάσυρση εξαίρεσης (keyword raise) Μία μονάδα προγράμματος σε Ada μπορεί να έχει ένα
χειριστή εξαιρέσεων που είναι τμήμα του προγράμματος που ορίζει πως επεξεργάζονται οι εξαιρέσεις
Όταν ανασύρεται μία εξαίρεση ο κώδικας μεταφέρεται στον χειριστή εξαιρέσεων αυτόματα
Τεχνολογία Λογισμικού Slide 36
Ενσωματωμένες Εξαιρέσεις στην Ada CONSTRAINT_ERROR
• Διαπιστώνεται όταν αποδίδεται μία τιμή σε μία μεταβλητή έξω από την περιοχή
NUMERIC_ERROR• Διαπιστώνεται όταν ένα λάθος εμφανίζεται σε μία αριθμητική πράξη (π.χ.
διαίρεση με μηδέν)
PROGRAM_ERROR• Όταν παραβιάζεται μία δομή ελέγχου
STORAGE_ERROR• Όταν γίνεται υπερφόρτωση δυναμικής αποθήκευσης
TASKING_ERROR• Διαπιστώνεται όταν μία επικοινωνία μεταξύ διεργασιών αποτυγχάνει.
Τεχνολογία Λογισμικού Slide 37
Χειρισμός Εξαιρέσεων στην C++ Το Keyword throw σημαίνει ανάσυρση μίας
εξαίρεσης. Ο χειριστής υποδεικνύεται με το keyword catch
Οι εξαιρέσεις ορίζονται ως κλάσεις και μπορούν να κληρονομήσουν ιδιότητες από άλλες κλάσεις εξαιρέσεων
Συνήθως, οι εξαιρέσεις χειρίζονται πλήρως στο μπλοκ που αναδεικνύονται και δεν αφήνεται διάδοση τους
Όλες οι εξαιρέσεις ορίζονται από τον χρήστη και δεν είναι ενσωματωμένες στο σύστημα
Τεχνολογία Λογισμικού Slide 38
Έλεγχος Θερμοκρασίας Ελέγχει ένα καταψύκτη και κρατάει την
θερμοκρασία του σε καθορισμένη περιοχή Ανοίγει και κλείνει την ψυκτική αντλία Ενεργοποιεί τον συναγερμό όταν η θερμοκρασία
ξεπερνά ένα μέγιστο Χρησιμοποιεί εξωτερικές οντότητες: αντλία,
θερμοκρασία, αισθητήρα, συναγερμό Η εξωτερική διαμεριζόμενη κατάσταση κρατιέται
σε ένα πακέτο που ονομάζεται Globals (στην Ada)
Τεχνολογία Λογισμικού Slide 39
Ελεγκτής Καταψύκτη (Ada)
See portait slide
Τεχνολογία Λογισμικού Slide 40
Ελεγκτής Θερμοκρασίας (C++)
See portrait slide
Τεχνολογία Λογισμικού Slide 41
Αμυντικός Προγραμματισμός
Προσέγγιση στην ανάπτυξη προγράμματος όπου υποθέτουμε ότι υπάρχουν λάθη τα οποία δεν έχουν βρεθεί στο πρόγραμμα
Το πρόγραμμα περιλαμβάνει κώδικα για την εύρεση και ανάκτηση από τέτοια λάθη
Δεν απαιτεί ελεγκτή με ανοχές σε λάθη
Τεχνολογία Λογισμικού Slide 42
Προστασία από Αστοχία Συστήματα τύπων επιτρέπουν εύρεση πολλών
πιθανών καταστροφικών αστοχιών στην διάρκεια της μεταγλώττισης
Ο έλεγχος περιοχής και εξαιρέσεων επιτρέπει την εύρεση μίας σημαντικής ομάδας αστοχιών να βρίσκονται κατά την διάρκεια του τρεξίματος
Διεκδικήσεις καταστάσεων μπορούν να αναπτυχθούν και να συμπεριληφθούν στο πρόγραμμα για την εύρεση άλλων κλάσεων αποτυχιών του συστήματος
Τεχνολογία Λογισμικού Slide 43
Έλεγχος Περιοχής σε Ada Οι τύποι δηλώνονται ως μία επιτρεοπόμενη περιοχή, π.χ.
1..100 Ο Έλεγχος περιοχής στην Ada αυτόματα αναδεικνύει μία
εξαίρεση CONSTRAINT_ERROR εάν υπάρχει κάτι εκτός περιοχής
Ο έλεγχος περιοχής εφαρμόζεται σε μία απλή μεταβλητή. Έλεγχοι οι οποίοι εφαρμόζονται μεταξύ περιοχών (π.χ. εάν A=0 τότε B=1) δεν μπορούν να εφαρμοσθούν
Τα λάθη εκτός περιοχής απαιτούν επιπλέον ελέγχους για να ευρεθεί η αιτία των λαθών
Τεχνολογία Λογισμικού Slide 44
Λογικά κατηγορήματα σε μεταβλητές κατάστασης του συστήματος.
Συμπεριλαμβάνονται απευθείας σε μία γλώσσα αλλά προκαλούν προβλήματα μεταγλώττισης ένα χρησιμοποιούνται ποσοτικοποιητές
Συνήθως υλοποιούνται ως ελεγκτές προγραμμάτων Είναι απλοποιημένες αν όλες οι λειτουργίες κατάστασης
είναι μέσω αφαιρετικών τύπων δεδομένων. Σε πολλές περιπτώσεις τα κατηγορήματα απαιτείται να σχετίζονται μόνο με ADT.
Διεκδικήσεις Κατάστασης
Τεχνολογία Λογισμικού Slide 45
Τύπος Ζυγού Αριθμού
See portrait slide
Τεχνολογία Λογισμικού Slide 46
Έλεγχος Διεκδίκησης
See portrait slide
Τεχνολογία Λογισμικού 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
Τεχνολογία Λογισμικού Slide 48
Έλεγχοι αθροισμάτων χρησιμοποιούνται για την εκτίμηση ζημίας στην μεταφορά δεδομένων
Επιπλέον δείκτες χρησιμοποιούνται για έλεγχο δομών δεδομένων
Έλεγχος για διεργασίες που δεν τερματίζουν χρησιμοποιείται επίσης. Εάν δεν υπάρχει απόκριση σε συγκεκριμένο χρόνο τότε υποθέτουμε ότι υπάρχει κάποιο πρόβλημα
Τεχνικές Εκτίμησης Ζημιών
Τεχνολογία Λογισμικού Slide 49
Τύπος στην Ada με Εκτίμηση Ζημίας
See portrait slide
Τεχνολογία Λογισμικού 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 ;
} ;
Τεχνολογία Λογισμικού Slide 51
Ανάκτηση προς τα Εμπρός
• Εφαρμόζουμε επιδιορθώσεις σε κατάσταση προβλήματος για το σύστημα
Ανάκτηση προς τα Πίσω
• Επαναποθήκευση της κατάστασης του συστήματος σε μία ασφαλή γνωστή κατάσταση
Η ανάκτηση προς τα εμπρός είναι εξειδικευμένη σε εφαρμογή - απαιτείται γνώση του πεδίου για τον υπολογισμό πιθανών διορθώσεων κατάστασης
Η ανάκτηση λαθών προς τα πίσω είναι απλούστερη. Οι λεπτομέρειες της ασφαλούς κατάστασης διατηρούνται και ανταλλάσουν την προβληματική κατάσταση του συστήματος
Ανάκτηση Λαθών
Τεχνολογία Λογισμικού Slide 52
Αλλοίωση της Κωδικοποίησης Δεδομένων• Τεχνικές κωδικοποίησης λαθών που προσθέτουν πλεόνασμα σε
κωδικοποιημένα δεδομένα χρησιμοποιούνται για την επιδιόρθωση κωδικοποιημένων δεδομένων κατά την διάρκεια της μεταφοράς
Πλεονάζοντες Δείκτες• Όταν πλεονάζοντες δείκτες συμπεριλαμβάνονται σε δομές
δεδομένων, μία αλλοιωμένη λίστα ή αποθηκευμένο αρχείο μπορούν να επανακτηθούν αν ικανοποιητικός αριθμός δεικτών μένουν αναλλοίωτοι
• Συχνά χρησιμοποιούνται για επιδιόρθωση βάσης δεδομένων και συστήματος αρχείων
Ανάκτηση προς τα Εμπρός
Τεχνολογία Λογισμικού Slide 53
Οι συναλλαγές είναι μία συχνά χρησιμοποιούμενη μέθοδος για ανάκτηση προς τα πίσω. Οι αλλαγές δεν εφαρμόζονται αν δεν ολοκληρωθεί ο υπολογισμός. Εάν υπάρχει λάθος, το σύστημα αφήνεται στην κατάσταση προηγούμενη της συναλλαγής
Περιοδικά σημεία ελέγχου επιτρέπουν στο σύστημα να επιστρέφει στην σωστή κατάσταση
Ανάκτηση προς τα Πίσω
Τεχνολογία Λογισμικού Slide 54
Ασφαλής Διαδικασία Ταξινόμησης
Η διαδικασία ταξινόμησης ελέγχει την ίδια εκτέλεση και εκτιμά αν η ταξινόμηση έχει γίνει σωστά
Διατηρεί αντίγραφο της εισόδου, έτσι ώστε αν ένα λάθος εμφανίζεται, η είσοδος δεν καταστρέφεται
Βασίζεται στην αναγνώριση και χειρισμό εξαιρέσεων Είναι δυνατό αν είναι γνωστή μία αξιόπιστη
ταξινόμηση. Όμως σε πολλές περιπτώσεις είναι δύσκολο να γράψουμε τεστ αξιοπιστίας
Τεχνολογία Λογισμικού Slide 55
Ασφαλής Διαδικασία Ταξινόμησης (Ada)
See portrait slide
Τεχνολογία Λογισμικού Slide 56
Ασφαλής Διαδικασία Ταξινόμησης (C++)
See portrait slide
Τεχνολογία Λογισμικού Slide 57
Η αξιοπιστία σε ένα σύστημα επιτυγχάνεται με αποφυγή λαθών και ανθεκτικότητα σε λάθη
Μερικές δομές προγραμματισμού όπως gotos, αναδρομές και δείκτες είναι κληρονομικά επηρεπείς σε λάθη
Οι τύποι δεδομένων επιτρέπουν πολλά λάθη να βρίσκονται κατά την διάρκεια του χρόνου μεταγλώττισης.
Λογισμικό ανθεκτικό σε λάθη μπορεί να συνεχίσει την εκτέλεσή τους με την παρουσία λαθών λογισμικού
Σημαντικά Σημεία
Τεχνολογία Λογισμικού Slide 58
Σημαντικά Σημεία Η ανθεκτικότητα σε λάθη απαιτεί εύρεση αστοχίας,
εκτίμηση ζημίας, ανάκτηση και επιδιόρθωση Ο προγραμματισμός N-εκδόσεων και τα blocks
ανάκτησης είναι προσεγγίσεις στην αντοχή σε λάθη Μηχανισμοί χειρισμού εξαιρέσεων χρησιμοποιούνται
για ανάκτηση από αστοχία Ο αμυντικός προγραμματισμός παρέχει ανθεκτικότητα
σε λάθη χωρίς την χρήση ελεγκτή αντοχής σε λάθη