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

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

ΚΕΦΑΛΑΙΟ 6 ΠΑΡΑΓΩΓΗ ΠΗΓΑΙΟΥ ΚΩΔΙΚΑ. Έννοιες-κλειδιά

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

ΑΕΠΠ Ερωτήσεις θεωρίας

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

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

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

Κεφάλαιο 2: Μεταφραστές

Α. Ερωτήσεις Ανάπτυξης

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

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

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

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

Πληροφορική 2. Τεχνολογία Λογισμικού

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

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

Επιµέλεια Θοδωρής Πιερράτος

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

6. Εισαγωγή στον προγραµµατισµό

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

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

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

Διδακτική της Πληροφορικής ΙΙ

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

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

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

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

Ενότητα 13. Εισαγωγή στην Πληροφορική. Κεφάλαιο 13Α. Αρχεία. Χειµερινό Εξάµηνο ρ. Παναγιώτης Χατζηδούκας (Π..407/80) προγραµµατισµός

Κεφάλαιο 10 ο Υποπρογράµµατα

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

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

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Γλώσσες Προγραμματισμού Μεταγλωττιστές

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

Σκοπός του μαθήματος

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

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

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

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1

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

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

Μαλούτα Θεανώ Σελίδα 1

Διδακτική Πληροφορικής

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

Συγγραφή Προγραμμάτων

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων

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

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

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

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. 4o Εργαστήριο Σ.Α.Ε

ΠΕΡΙΕΧΟΜΕΝΑ Υλικό και Λογισμικό Αρχιτεκτονική Υπολογιστών Δομή, Οργάνωση και Λειτουργία Υπολογιστών 6

ΠΕΡΙΕΧΟΜΕΝΑ. Εντολές επιλογής Εντολές επανάληψης

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY

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

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

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

Βασίλειος Κοντογιάννης ΠΕ19

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

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

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

Εισαγωγή στον προγραμματισμό

Σύνοψη Θεωρίας ΟΡΙΣΜΟΣ ΚΑΙ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΑΛΓΟΡΙΘΜΩΝ

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Μαθησιακές δυσκολίες ΙΙ. Παλαιγεωργίου Γιώργος Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών Τηλεπικοινωνιών και Δικτύων, Πανεπιστήμιο Θεσσαλίας

Προγραµµατισµός Η/Υ. Μέρος2

Ανάλυση Απαιτήσεων Απαιτήσεις Λογισµικού

ΑΞΙΟΠΙΣΤΙΑ ΥΛΙΚΟΥ ΚΑΙ ΛΟΓΙΣΜΙΚΟΥ

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

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

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

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

6. Διαχείριση Έργου. Έκδοση των φοιτητών

Εισαγωγή στην Τεχνολογία Λογισµικού

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

Ανάπτυξη και Σχεδίαση Λογισμικού

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

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

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

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

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

Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς Β α σ ι κ έ ς έ ν ν ο ι ε ς Ι σ τ ο ρ ι κ ή α ν α δ ρ ο μ ή Η έννοια του προγράμματος Ιστορική αναδρομή

ΑΕΠΠ ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 6.3 Φυσικές και Τεχνιτές Γλώσσες 6.4 Τεχνικές Σχεδίασης Προγραμμάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διδακτικά προβλήματα σχετικά με την έννοια της επανάληψης

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

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού 18/12/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Παραγωγή Πηγαίου Κώδικα

Στόχος Μετάβαση από τη φάση της σχεδίασης στη φάση της κωδικοποίησης Παρουσίαση εργασιών και προβληµάτων που προκύπτουν κατά τη φάση συγγραφής του πηγαίου κώδικα λογισµικού Αφαιρετικό γενικό επίπεδο ΟΧΙ αναφορά σε συγκεκριµένη γλώσσα προγραµµατισµού

Εισαγωγή Κωδικοποίηση: εργασία ανάπτυξης λογισμικού σχεδίασης Χρησιμοποίηση προϊόντων σχεδίασης Μετατροπή ψευδοκώδικα σε πηγαίο κώδικα ΟΜΩΣ συχνά προκύπτουν αλλαγές στον κώδικα επειδή δεν έχουν προβλεφθεί κατά τη σχεδίαση Στη σχεδίαση δεν λαµβάνουμε πάντα υπόψη τα χαρακτηριστικά της γλώσσας προγραµµατισµού που θα χρησιμοποιήσουμε Το τελικό αποτέλεσμα εξαρτάται από την κωδικοποίηση! Πολύ σημαντικός κρίκος στην αλυσίδα ανάπτυξης

Από τη σχεδίαση στην κωδικοποίηση Κωδικοποίηση: τελευταίο τμήμα ανάπτυξης λογισμικού Θέλουμε λογισμικό χωρίς σφάλματα! Τι σημαίνει όμως??? Το λογισµικό που πληροί τις προδιαγραφές βάσει των οποίων κατασκευάστηκε, χωρίς να παράγει σφάλµατα κατά την εκτέλεσή του (runtime), δηλαδή το λογισµικό που κάνει ακριβώς αυτό για το οποίο προορίζεται και το κάνει σωστά.

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

Θυμηθείτε... Το λογισμικό είναι ιδεατή οντότητα - πολύπλοκο τεχνικό κατασκεύασμα Μη απτή φύση λογισμικού μόνο τα αποτελέσματα χρήσης του μπορούν να είναι αντιληπτά-ορατά Δεν περιγράφεται εύκολα και μοναδικά «Σκόπευση κινούμενου στόχου από κινούμενο έδαφος και με όπλο που συνεχώς αλλάζει τη συμπεριφορά του» Μεταβαλλόμενες απαιτήσεις χρηστών (ακόμη και μέσα στην ίδια την εφαρμόγή) Εξελισσόμενο περιβάλλον ανάπτυξης λογισμικού και υλικού Μεταβαλλόμενες μεθοδολογίες, εργαλεία, περιβάλλοντα ανάπτυξης και λειτουργίας λογισμικού

Λογισμικό χωρίς σφάλματα Άρα ιδιαίτερα δύσκολο:-( Και η Τεχνολογία Λογισµικού??? Είναι χρήσιµο επιστηµονικό εργαλείο για την αντιµετώπιση του προβλήµατος Οι σύγχρονες γλώσσες και τα σύγχρονα περιβάλλοντα προγραµµατισµού διευκολύνουν την ανάπτυξη σύνθετου και καλά δοµηµένου κώδικα Έχουμε βελτίωση των χρησιµοποιούµενων προγραµµατιστικών τεχνικών ΕΠΟΜΕΝΩΣ βελτίωση ποιότητας λογισµικού

Εργαλεία κωδικοποίησης Συντάκτες προγραμμάτων Υλοποιήσεις γλωσσών προγραμματισμού Μεταγλωτιστές Διερμηνείς Συμβολομεταφραστές Εντοπιστές σφαλμάτων Γεννήτριες προγραμμάτων Συστήµατα υποστήριξης λογισµικού και ολοκληρωµένα περιβάλλοντα προγραµµατισµού

Συντάκτες προγραμμάτων Συντάκτες προγραμμάτων (program editors): εξειδικευµένα προγράµµατα επεξεργασίας κειµένου που διευκολύνουν την εργασία συγγραφής κώδικα Παραδείγματα Έλεγχος σύνταξης σε µία ή περισσότερες γλώσσες προγραµµατισµού Χρωµατική σύνταξη (syntax highlighting) - χρωµατισµός δεσµευµένων λέξεων, σχολίων, μεταβλητών κτλ. µε διαφορετικά χρώµατα Αυτόµατη στοίχιση Αρίθµηση γραµµών κ.ά.

Υλοποιήσεις γλωσσών προγραμματισμού Υλοποιήσεις γλωσσών προγραμματισμού (programming language implementations): περιέχουν κάποιο είδος προγράμματος μετάφρασης/εκτέλεσης και άλλα βοηθητικά προγράµµατα Παλιά ήταν ανεξάρτητα προγράµµατα Τώρα έχουμε ένα ενιαίο κέλυφος κάτω από το οποίο λειτουργούν/εκτελούνται διάφορα εργαλεία

Υλοποιήσεις γλωσσών προγραμματισμού Μεταγλωτιστές(compilers): μεταφράζουν πηγαίο κώδικα που είναι γραµµένος σε µια γλώσσα προγραµµατισµού υψηλού επιπέδου σε εκτελέσιµο κώδικα µηχανής Διερµηνείς (interpreters): εκτελούν γραµµή προς γραµµή τον πηγαίο κώδικα που είναι γραµµένος σε µια γλώσσα προγραµµατισµού υψηλού επιπέδου Συµβολοµεταφραστές (assemblers): μεταφράζουν πηγαίο κώδικα που είναι γραµµένος σε µια συµβολική γλώσσα µηχανής (assembly language) σε εκτελέσιµο κώδικα µηχανής.

Εντοπιστές σφαλμάτων Εντοπιστές σφαλμάτων (debuggers): βοηθούν στον εντοπισµό σφαλµάτων κατά την εκτέλεση των προγραµµάτων Υποστηρίζουν λειτουργίες όπως: εκτέλεση βήµα προς βήµα εµφάνιση τιµών µεταβλητών Εµφάνιση στοίβας εκτέλεσης καθορισµός σηµείων και συνθηκών διακοπής στην εκτέλεση του κώδικα

Γεννήτριες προγραμμάτων Γεννήτριες προγραμμάτων (program generators): προγράµµατα που: δέχονται ως είσοδο τις προδιαγραφές του κώδικα γραµµένες σε γλώσσα υψηλού επιπέδου παράγουν πηγαίο κώδικα γραµµένο σε κάποια γλώσσα προγραµµατισµού που πληροί τις προδιαγραφές. Οι γεννήτριες προγραµµάτων εξειδικεύονται σε στενές θεµατικές κατηγορίες προβληµάτων Παραδείγματα: κατασκευή προγραµµάτων που υλοποιούν interface ανθρώπουυπολογιστή κατασκευή λεκτικών και συντακτικών αναλυτών κατασκευή προγραµµάτων προσοµοίωσης

Ολοκληρωµένα περιβάλλοντα προγραµµατισµού Συστήµατα υποστήριξης λογισµικού (software support systems) και ολοκληρωµένα περιβάλλοντα προγραµµατισµού (integrated programming environments): είναι προσπάθειες συγκέντρωσης και ενοποίησης διαφόρων εργαλείων προγραµµατισµού που συνεργάζονται µεταξύ τους Κοινή βάση είναι συνήθως µια γλώσσα προγραµµατισµού

Επιθυμητά χαρακτηριστικά πηγαίου κώδικα Επάρκεια (efficiency) Επίδοση (performance) Αναγνωσιμότητα (readability) Τεκμηρίωση (documentation) Μεταφερσιμότητα (portability) Δυνατότητα επαναχρησιμοποίησης (reusability)

Επάρκεια (efficiency) Επαρκής κώδικας: Όταν το σύστηµα λογισµικού λειτουργεί σωστά και χωρίς σφάλµατα, βάσει των απαιτήσεων που έχουν καθοριστεί Κάνει σωστή χρήση των διατιθέµενων πόρων και Είναι διαθέσιµο όποτε απαιτείται Είναι το βασικότερο επιθυµητό χαρακτηριστικό του πηγαίου κώδικα Η επάρκεια του πηγαίου κώδικα εξασφαλίζεται κυρίως κατά τη φάση ελέγχου του λογισµικού

Επίδοση (performance) Επίδοση, δηλαδή μεγάλη ταχύτητα εκτέλεσης πηγαίου κώδικα: παίζει καθοριστικό ρόλο Η επίδοση λαμβάνει υπόψη τα εξής χαρακτηριστικά: ταχύτητα εκτέλεσης συγκεκριµένων λειτουργιών συστήµατος λογισµικού απαιτήσεις του συστήµατος σε πόρους, όπως µνήµη και χωρητικότητα δίσκου Διαφορετικά κοµµάτια πηγαίου κώδικα που ικανοποιούν τις ίδιες λειτουργικές προδιαγραφές μπορεί να διαφέρουν πολύ στην επίδοση Η επιλογή της κατάλληλης γλώσσας προγραµµατισµού και η χρήση κατάλληλων προγραµµατιστικών τεχνικών μπορούν να οδηγήσουν σε βελτίωση της επίδοσης του συστήµατος

Αναγνωσιμότητα (readability) Πολλές φορές χρειάζεται το διάβασμα και η κατανόηση πηγαίου κώδικα που έχει γράψει άλλος προγραµµατιστής Πολύ δύσκολο!!!! Ακόμη και το να καταλάβουμε δικό μας κώδικα αν δεν είναι αναγνώσιμος!!!! Αναγνωσιµότητα (readability) είναι η ευκολία κατανόησης του πηγαίου κώδικα αποκλειστικά µέσω της ανάγνωσής του ως κειµένου Η αναγνωσιμότητα απαραίτητη όχι μόνο για την κατανόηση αλλά και για τη δυνατότητα ταξινόμησης, χαρακτηρισμού και διαχείρισης του πηγαίου κώδικα από ειδικά εργαλεία (reverse engineering)

Συμβουλές για συγγραφή αναγνώσιμου κώδικα Απλότητα καλό είναι να αποφεύγεται η περιττή πολυπλοκότητα στη συγγραφή του πηγαίου κώδικα, όταν δεν είναι αναγκαίο για την εξασφάλιση των απαιτήσεων επίδοσης. Θέλουμε απλές και κοµψές λύσεις... Καθόλου εύκολο! Ο απλός κώδικας μπορεί να είναι και λιγότερο επιρρεπής σε σφάλµατα Πλεονασµός χάριν σαφήνειας η χρήση κατάλληλων «σηµείων στίξης» οδηγεί σε περισσότερο ευανάγνωστο κώδικα Π.χ. παρενθέσεις, λέξεις-κλειδιά για την οµαδοποίηση εντολών (begin και end, { και } κ.ά.) ακόμη και αν είναι περιττές

Συμβουλές για συγγραφή αναγνώσιμου κώδικα Επιλογή κατάλληλων ονοµάτων πολύ σηµαντικό για τη συγγραφή αναγνώσιµου κώδικα Παράδειγμα if (x > 50000) y = (x 50000)* 0.2; else y = 0; const double not_taxable = 50000; const double tax_rate = 0.2; if (income > not_taxable) tax = (income not_taxable) * tax_rate; else tax = 0;

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

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

Μεταφερσιμότητα (portability) Είναι η ιδιότητα του πηγαίου κώδικα να µπορεί να εκτελεστεί χωρίς αλλαγές σε διαφορετικά περιβάλλοντα (ΛΣ, τύπος υπολογιστή) στα οποία διατίθενται εκδόσεις της γλώσσας προγραµµατισµού που χρησιµοποιείται Πολύ σηµαντικό να µπορεί να µεταφερθεί ο πηγαίος κώδικας ως έχει από µια υλοποίηση της γλώσσας προγραµµατισµού στην οποία είναι γραµµένος σε µια άλλη. Για να γίνει αυτό, πρέπει: να µη χρησιµοποιούνται συστατικά της γλώσσας που υποστηρίζονται µόνο από συγκεκριµένες υλοποιήσεις να µη γίνονται αυθαίρετες παραδοχές για τη συµπεριφορά των υλοποιήσεων, δηλαδή παραδοχές που δεν περιγράφονται ρητά στο πρότυπο (standard) της γλώσσας

Δυνατότητα επαναχρησιμοποίησης (reusability) Ιδιαίτερα σηµαντικό χαρακτηριστικό του πηγαίου κώδικα! Δεδομένου ότι ένα αρκετά µεγάλο τµήµα πηγαίου κώδικα ενός συστήµατος λογισµικού µπορεί να χρησιµοποιηθεί στην κωδικοποίηση άλλων συστηµάτων λογισµικού Σημαντική προϋπόθεση: η κατάλληλη δόµησή του!

Επιθυμητά χαρακτηριστικά πηγαίου κώδικα Ολα τα χαρακτηριστικά είναι σημαντικά!!! ΔΕΝ είναι περιττά! Μην τα υποτιμάτε!!!

Γλώσσες προγραμματισμού Το βασικό εργαλείο του προγραµµατιστή! Είναι ένα σύστηµα συµβολισµών µε το οποίο µπορεί να περιγράφει εργασίες που πρόκειται να εκτελεστούν από έναν υπολογιστή Η ποικιλία των εργασιών που είναι επιθυµητό να εκτελούνται από τους υπολογιστές δικαιολογεί την ύπαρξη πληθώρας γλωσσών προγραµµατισµού που διαφέρουν: στην πολυπλοκότητα στη µορφή στη θεµατική περιοχή όπου απευθύνονται στη φιλοσοφία προγραµµατισµού που υποστηρίζουν

Γλώσσες προγραμματισμού χαμηλού και υψηλού επιπέδου Γλώσσες προγραµµατισµού χαμηλού επιπέδου βρίσκονται κοντά στη µονάδα επεξεργασίας του υπολογιστή και µοιάζουν µε τη γλώσσα µηχανής Επιβάλλουν µικροσκοπικό ύφος προγραµµατισµού Διαφέρει πολύ από τον τρόπο σκέψης των ανθρώπων και από τον τρόπο µε τον οποίο αυτοί περιγράφουν τη λύση προβληµάτων Γλώσσες προγραµµατισµού υψηλού επιπέδου χρησιµοποιούν συµβολισµούς περισσότερο αφαιρετικούς και πλησιέστερους στην ανθρώπινη αντίληψη και γλώσσα

Γλώσσες προγραμματισμού χαμηλού επιπέδου Με τη χρήση γλωσσών χαµηλού επιπέδου είναι πρακτικά αδύνατο να εξασφαλιστεί η απαιτούµενη ποιότητα του λογισµικού Οι γλώσσες προγραμματισμού χαµηλού επιπέδου χρησιµοποιούνται µόνο για την υλοποίηση τµηµάτων ενός συστήµατος λογισµικού που είναι εξαιρετικά απαιτητικό από πλευράς επιδόσεων ή που αφορά συγκεκριµένες συσκευές Παράδειγμα µέρη λειτουργικών συστηµάτων λογισµικό ειδικών απαιτήσεων, όπως αυτό που σχετίζεται µε συστήµατα πραγµατικού χρόνου (real time systems).

Γλώσσες προγραμματισμού υψηλού επιπέδου Προτιμούνται στη φάση της κωδικοποίησης π.χ. Pascal, C, C++, παλιότερα η COBOL και η BASIC και πιο πρόσφατα η Java, οι οποίες προσεγγίζουν τη χρησιµοποιούµενη φιλοσοφία ανάλυσης και σχεδίασης και διαθέτουν χαρακτηριστικά αναγκαία για την εξασφάλιση της ποιότητας του παραγόµενου λογισµικού

Εξέλιξη γλωσσών προγραμματισμού

Δομημένος προγραμματισμός Δοµηµένος προγραµµατισµός (structured programming) είναι η τεχνοτροπία προγραµµατισµού κατά την οποία η συντακτική δοµή του προγράµµατος βοηθά στην κατανόηση της ροής ελέγχου και, κατ επέκταση, στην κατανόηση του τι κάνει το πρόγραµµα αυτό. Οι αρχές του δοµηµένου προγραµµατισµού γεννήθηκαν µέσα από µια επιστηµονική διαµάχη στο τέλος της δεκαετίας του 1960, µε θέµα τις δοµές ελέγχου των γλωσσών προγραµµατισµού Αποτέλεσµα: ο σταδιακός παραγκωνισµός της χρήσης της εντολής goto και η αντικατάστασή της από δοµηµένες εντολές if και while.

Δομημένος προγραμματισμός Κάθε αλγόριθµος είναι δυνατό να κωδικοποιηθεί χρησιµοποιώντας τρία µόνο στοιχεία ελέγχου: ακολουθία (s1; s2) σειριακή εκτέλεση εντολών επιλογή (if c then s1 else s2) επιλεκτική εκτέλεση μιας εντολής, αν ισχύει μια λογική συνθήκη, ή μιας άλλης εντολής αν η λογική συνθήκη δεν ισχύει επανάληψη (while c do s) επαναληπτική εκτέλεση μιας εντολής για όσο διάστημα παραμένει αληθής μία λογική συνθήκη Βάση δοµηµένου προγραµµατισµού Κάθε μονάδα δομημένου προγράμματος έχει ένα και µόνο ένα σηµείο εισόδου και ένα σηµείο εξόδου, που επιτρέπει το συνδυασµό τους χωρίς περιορισµούς σε µεγαλύτερες δοµικές µονάδες Παλιότερα ανεξέλγκτη χρήση GOTO!!!!

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

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

Δομημένος προγραμματισμός Στην πράξη κάποιες φορές παραβίαση αποκλειστικής χρήσης των τριών βασικών στοιχείων Παραδείγµατα: ανάγκη άµεσης εξόδου από ένα βρόχο ή από µια συνάρτηση, άµεση µεταφορά της ροής ελέγχου ως συνέπεια της ανάγκης χειρισµού σφαλµάτων µέσα στον πηγαίο κώδικα Οι σύγχρονες γλώσσες προγραµµατισµού διαθέτουν συνήθως τέτοια γλωσσικά στοιχεία

Δομημένος προγραμματισμός Έχουμε προγραµµατιστική πειθαρχία που υποχρεώνει τον προγραµµατιστή να σκέφτεται περισσότερο πριν αρχίσει να γράφει ένα κοµµάτι κώδικα ΑΡΑ µείωση της πιθανότητας σφαλµάτων! Με τη χρήση κατάλληλων γλωσσών που υποστηρίζουν διαδικασίες και συναρτήσεις ως δοµικές µονάδες προγράµµατος, ο δοµηµένος προγραµµατισµός διευκολύνει την ανάπτυξη από πάνω προς τα κάτω (topdown) και υποστηρίζει τη φιλοσοφία της δοµηµένης ανάλυσης και σχεδίασης συστηµάτων λογισµικού

Αντικειμενοστρεφής προγραμματισμός Στον αντικειµενοστρεφή προγραµµατισµό (objectoriented) ιδιαίτερη έµφαση δίνεται στις έννοιες: «αντικείμενο» «κλάση» «κληρονοµικότητα» «κελυφοποίηση» Οι περισσότερες αντικειµενοστρεφείς γλώσσες βασίζονται στο προστακτικό ύφος προγραµµατισµού. Τα «αντικείµενα» και οι «κλάσεις» αντικαθιστούν τις «µεταβλητές» και τους «τύπους δεδοµένων» Η «κληρονοµικότητα» επιτρέπει τον ορισµό κλάσεων που κληρονοµούν ιδιότητες και συµπεριφορά από άλλες κλάσεις.

Αντικειμενοστρεφής προγραμματισμός Σύγχρονες δηµοφιλείς αντικειµενοστρεφείς γλώσσες προγραµµατισµού: C++ και Java Παρατηρείται επίσης μία τάση εισαγωγής αντικειµενοστρεφών χαρακτηριστικών σε άλλες γλώσσες, όπως Pascal και Basic.

Πιθανές πηγές προβλημάτων Ορισµένα χαρακτηριστικά των γλωσσών καθιστούν τον προγραµµατισµό περισσότερο επιρρεπή σε σφάλµατα. ΑΡΑ οι προγραµµατιστές πρέπει να είναι ιδιαίτερα προσεκτικοί στη χρήση τους να γίνεται µε µέτρο και πειθαρχία! Βασικές αιτίες σφαλμάτων Εντολή goto, εξαιρέσεις, διακοπές Αριθμοί κινητής υποδιαστολής Μετατροπές τύπων Δείκτες και δυναμική παραχώρηση μνήμης Αναδρομικές κλήσεις Παράλληλη επεξεργασία

Βασικές αιτίες σφαλμάτων Εντολή goto, εξαιρέσεις, διακοπές οι εντολές µεταφοράς της ροής ελέγχου που δεν ακολουθούν τη συντακτική δοµή βλάπτουν συνήθως την αναγνωσιµότητα του πηγαίου κώδικα. Η εντολή goto μπορεί να αποφευχθεί, συνήθως µε τη χρήση ειδικών εντολών άµεσης εξόδου από βρόχους και εξαιρέσεων Αριθµοί κινητής υποδιαστολής προβλήµατα παρουσιάζονται λόγω της εγγενούς ανακρίβειας των αριθµών κινητής υποδιαστολής (αντικείµενο µελέτης του κλάδου της αριθµητικής ανάλυσης) Χρειάζεται προσοχή στη σύγκριση ισότητας ή ανισότητας τέτοιων αριθµών, και για την αποφυγή συσσώρευσης αριθµητικών σφαλµάτων

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

Βασικές αιτίες σφαλμάτων Δείκτες και δυναµική παραχώρηση µνήµης οι δείκτες είναι χαρακτηριστικό προγραµµατισµού χαµηλού επιπέδου, διατηρείται όµως σε πολλές σύγχρονες γλώσσες προγραµµατισµού Ο κίνδυνος που εµπεριέχει η χρήση τους προέρχεται από το γεγονός ότι αντικείµενα της µνήµης είναι δυνατό να προσπελάζονται από περισσότερα ονόµατα (aliasing) Η απουσία αρχικοποίησης των δεικτών, καθώς και η µη απελευθέρωση µνήµης που έχει παραχωρηθεί δυναµικά, είναι υπεύθυνες για ένα µεγάλο αριθµό σφαλµάτων, που συνήθως είναι εξαιρετικά δύσκολο να εντοπιστούν

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

Βασικές αιτίες σφαλμάτων Παράλληλη επεξεργασία ο παραλληλισµός είναι επικίνδυνος ως προγραµµατιστική τεχνική! Είναι δύσκολο να προβλεφθεί η αλληλεπίδραση µεταξύ των διαφορετικών διεργασιών που τρέχουν παράλληλα Οι γλώσσες προγραµµατισµού που τον υποστηρίζουν θα πρέπει να παρέχουν τη δυνατότητα συγχρονισµού και αλληλοαποκλεισµού των διεργασιών, ώστε η αλληλεπίδραση να µην είναι επιβλαβής και να µην καταλήγει σε αδιέξοδα

Τεχνικές συγγραφής πηγαίου κώδικα ΔΕΝ υπάρχει η «χρυσή βίβλος» που περιέχει συµβουλές για τη συγγραφή αλάνθαστου πηγαίου κώδικα!!! Κι αυτό επειδή ΔΕΝ ΥΠΑΡΧΕΙ αλάνθαστος πηγαίος κώδικας! Μπορούμε όμως να πάρουμε κάποια µέτρα προκειµένου να γράψουμε όσο το δυνατόν καλύτερο κώδικα ΕΠΟΜΕΝΩΣ χρήσιµη η παράθεση µιας σειράς συµβουλών για τη συγγραφή πηγαίου κώδικα!

Τεχνικές αποφυγής σφαλμάτων Η αποφυγή σφαλµάτων (fault avoidance) αποσκοπεί στη συγγραφή πηγαίου κώδικα µε όσο το δυνατό λιγότερα σφάλµατα. Η πιστή χρήση τεχνικών αποφυγής σφαλµάτων είναι ο ακρογωνιαίος λίθος στην ανάπτυξη αξιόπιστου λογισµικού. Δεδοµένου του πολύ υψηλού κόστους εντοπισµού και διόρθωσης σφαλµάτων στον πηγαίο κώδικα, η διαδικασία ανάπτυξης λογισµικού πρέπει να είναι προσανατολισµένη κυρίως προς την αποφυγή των λαθών κατά τη συγγραφή του κώδικα.

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

Προδιαγραφή απαιτήσεων Η ύπαρξη αυστηρού τρόπου περιγραφής προδιαγραφής απαιτήσεων από το λογισµικό διευκολύνει εξαιρετικά την αποφυγή σφαλµάτων! Αποφεύγονται παρερµηνείες στην επιθυµητή λειτουργία του πηγαίου κώδικα Η πειθαρχηµένη εφαρµογή των προβλεπόµενων µέχρι την κωδικοποίηση ενεργειών ανάπτυξης λογισµικού αποτελεί ισχυρό εργαλείο αποφυγής σφαλµάτων Η σαφήνεια στην περιγραφή όλων των ενδιάµεσων προϊόντων (προδιαγραφές, σχεδίαση) και η αποφυγή «ευκόλως εννοουµένων» συνήθως αποδίδουν το χρόνο και τον κόπο που απαιτούν

Προδιαγραφή απαιτήσεων Έχουν αναπτυχθεί και τυπικές µέθοδοι (formal methods) για να γίνεται έλεγχος, χειρωνακτικά ή και ενίοτε αυτόµατα, αν ο πηγαίος κώδικας που έχει γραφεί πληροί τις απαιτήσεις. Είναι ΟΜΩΣ το κόστος συγγραφής απαιτήσεων είναι συνήθως υψηλότερο, όταν η γλώσσα που χρησιµοποιείται είναι αυστηρότερη ή τυπική.

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

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

Ανοχή σε σφάλματα (fault tolerance) Τα σύγχρονα συστήματα λογισμικού είναι πολύπλοκα! Οπότε τις περισσότερες φορές δεν είναι εφικτή η αποφυγή ή ο εντοπισµός των σφαλµάτων Και αν μπορούν να αποφευχθούν, απαγορευτικό κόστος! ΑΡΑ συστήµατα λογισµικού µε αυξηµένες απαιτήσεις αξιοπιστίας πρέπει να προβλέπουν την πιθανή εµφάνιση σφαλµάτων και να δείχνουν σχετική ανοχή Ειδικές τεχνικές χρησιµοποιούνται για την ανοχή σε σφάλματα Συνήθως απαιτείται η συνέχιση λειτουργίας μετά την εµφάνιση κάποιων σφαλµάτων ή άλλων απροσδόκητων καταστάσεων, µε τις µικρότερες δυνατές απώλειες

Ανοχή σε σφάλματα (fault tolerance) Π.χ. στο λογισµικό που χρησιµοποιείται στον υπολογιστή ενός αεροσκάφους εν πτήσει ή για τον έλεγχο εναέριας κυκλοφορίας, η συνολική αποτυχία ενός συστήµατος λογισµικού θα είχε καταστροφικά αποτελέσµατα και πρέπει να αποφευχθεί πάση θυσία. Για το λόγο αυτό και δεδοµένης της αδυναµίας εξασφάλισης του αλάθητου των συστηµάτων λογισµικού µε τις τεχνικές αποφυγής και εντοπισµού σφαλµάτων, στην ανάπτυξη συστηµάτων λογισµικού υψηλού κινδύνου γίνεται πρόβλεψη για την προφύλαξη από σφάλµατα που ενδέχεται να παρουσιαστούν µετά την έναρξη λειτουργίας τους

Ανοχή σε σφάλματα (fault tolerance) Για την ανάπτυξη συστηµάτων λογισµικού ανεκτικών σε σφάλµατα απαιτείται η προσθήκη επιπλέον κώδικα που αναλαµβάνει τις ακόλουθες λειτουργίες: Δυναµικός εντοπισµός σφαλµάτων Ανάνηψη από σφάλµατα Πρόληψη µελλοντικών σφαλµάτων

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

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

Ανάνηψη από σφάλματα Στην περίπτωση συστηµάτων λογισµικού που διαχειρίζονται βάσεις δεδοµένων χρησιµοποιείται συνήθως η τακτική οπισθοχώρησης και συγκεκριµένα η τεχνική των συναλλαγών (transactions) Αν κάποια συναλλαγή δεν είναι δυνατό να ολοκληρωθεί λόγω της εµφάνισης σφάλµατος, τότε ολόκληρη η συναλλαγή ακυρώνεται, προκειµένου να επανέλθει το σύστηµα σε µια ασφαλή και συνεπή κατάσταση. Η τακτική µετάβασης σε νέα σωστή κατάσταση είναι συνήθως δυσκολότερη στην υλοποίηση.

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

Τεχνικές υλοποίησης συστημάτων ανεκτικών σε σφάλματα Προγραµµατισµός πολλών εκδόσεων Αμυντικός προγραμματισμός

Προγραµµατισµός πολλών εκδόσεων Υλοποίηση του συστήματος λογισµικού σε έναν αριθµό πλήρως λειτουργικών διαφορετικών εκδόσεων, που αναπτύσσονται από διαφορετικές οµάδες Οι εκδόσεις αυτές εκτελούνται παράλληλα µε τα ίδια δεδοµένα εισόδου και τα αποτελέσµατά τους συγκρίνονται µεταξύ τους Στην περίπτωση ασυµφωνίας των αποτελεσµάτων, εφαρµόζεται ο κανόνας της πλειοψηφίας και οι εκδόσεις που οδήγησαν σε διαφορετικά αποτελέσµατα αποµονώνονται ως ελαττωµατικές Η τεχνική αυτή έχει σηµαντικό ΚΟΣΤΟΣ! Δικαιολογείται όμως σε λογισµικό που χρησιµοποιείται σε κρίσιµες εφαρµογές

Προγραµµατισµός πολλών εκδόσεων Τουλάχιστον τρεις εκδόσεις του συστήµατος πρέπει να είναι διαθέσιµες! ΤΕΧΝΙΚΗ ΤΡΙΩΝ ΕΚΔΟΣΕΩΝ Μια παραλλαγή είναι η τεχνική να περιοριστεί µόνο στα επισφαλή τµήµατα του λογισµικού, οπότε µειώνεται και το κόστος

Αμυντικός προγραμματισμός (defensive programming) Οι προγραµµατιστές ενσωµατώνουν στον πηγαίο κώδικα ελέγχους για τη συνέπεια των δεδοµένων και την καλή λειτουργία, υιοθετώντας µια αµυντική στάση και προβλέποντας την περίπτωση ασυνεπειών Αν κάποιος έλεγχος αποτύχει, τότε θεωρείται ότι εντοπίστηκε σφάλµα και εφαρµόζονται κατάλληλες τεχνικές ανάνηψης και µελλοντικής πρόληψης

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

Επαναχρησιμοποίηση μονάδων προγράμματος Επαναχρησιµοποίηση (reuse) είναι η διαδικασία της υλοποίησης νέου λογισµικού χρησιµοποιώντας συστατικά από ήδη κατασκευασµένο λογισµικό Επαναχρησιµοποιήσιµα συστατικά: Πηγαίος κώδικας Εκτελέσιµα προγράµµατα Αποτελέσµατα ανάλυσης και σχεδίασης Τεκµηρίωση Δεδοµένα και σχέδια ελέγχου κτλ. Η επαναχρησιµοποίηση είναι βασική αρχή σε κάθε επιστήµη που σχετίζεται µε την ανάπτυξη και την παραγωγή.

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

Επαναχρησιμοποίηση μονάδων προγράμματος Ο πηγαίος κώδικας πρέπει να: είναι µεταφέρσιµος έχει τη µικρότερη δυνατή αλληλεπίδραση µε τον υπόλοιπο κώδικα και όπου αυτή η αλληλεπίδραση είναι αναπόφευκτη, να είναι καλά τεκµηριωµένη Η επαναχρησιµοποίηση έχει για πολύ καιρό αποτελέσει αντικείµενο συζητήσεων στην κοινότητα των κατασκευαστών και των ερευνητών Δύσκολη μέχρι σήμερα η επαναχρησιµοποίηση σε µεγάλη κλίµακα!

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

Συνοψίζοντας... Η παραγωγή του πηγαίου κώδικα είναι η φάση κατά την οποία το σχέδιο του λογισµικού µετατρέπεται σε πρόγραµµα. Ιδιαίτερα κρίσιµη εργασία το σχέδιο σπάνια περιέχει όλες τις λεπτοµέρειες και δεν λαµβάνει συνήθως υπόψη του τα ιδιαίτερα χαρακτηριστικά της γλώσσας προγραµµατισµού που χρησιµοποιείται Η ΤΛ παρέχει ορισµένες: κατευθυντήριες αρχές ώστε ο πηγαίος κώδικας να έχει τα επιθυµητά χαρακτηριστικά της επάρκειας, των επιδόσεων, της αναγνωσιµότητας, της τεκµηρίωσης και της µεταφερσιµότητας, και κατευθύνσεις που βοηθούν στην αποφυγή σφαλµάτων Η επαναχρησιµοποίηση µονάδων προγράµµατος είναι µια κατεύθυνση στην οποία θα στραφεί η κοινότητα των κατασκευαστών λογισµικού στο µέλλον

Πηγές, Acknowledgement Β. Βεσκούκης «Τεχνολογία Λογισμικού Ι», ΕΑΠ, ΠΑΤΡΑ, 2000