ΕΛΛΗΝΙΚΟ ΑΝΟΙΧΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Πρόγραµµα σπουδών "ΠΛΗΡΟΦΟΡΙΚΗ" - Θ.Ε. ΠΛΗ11 Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 Βασίλειος Βεσκούκης ιδάκτωρ Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών v.vescoukis@cs.ntua.gr
Παραγωγή πηγαίου κώδικα Ηφάση της ανάπτυξης λογισµικού, όπου κατασκευάζεται ο πηγαίος κώδικας (source code) των προγραµµάτων. Η Τεχνολογία Λογισµικού δεν εστιάζει την προσοχή της µόνο στη φάση αυτή, αλλά συνολικά στον κύκλο ζωής του λογισµικού. Ο πηγαίος κώδικας πρέπει να παράγεται, αλλά και να συντηρείται, «εύκολα»: Χωρίς διφορούµενα, χωρίς σφάλµατα, να είναι αναγνώσιµος, κ.α. Το λογισµικό που προκύπτει πρέπει να είναι αυτό το οποίο ζητούσε ο πελάτης και, µέχρι το σηµείο αυτό σχεδίαζε ο κατασκευαστής.
Λογισµικό χωρίς σφάλµατα Το λογισµικό που κάνει σωστά, ακριβώς αυτό για το οποίο προορίζεται. ύο διαστάσεις: «Σωστά», δηλαδή δεν παράγει σφάλµατα κατά την εκτέλεση (runtime) «Ακριβώς», δηλαδή ικανοποιεί τις απαιτήσεις Τίποτε από τα δύο αυτά, δεν είναι αυτονόητο, όσο «καλή» και να είναι η οµάδα που κατασκευάζει το λογισµικό. η ανάπτυξη του λογισµικού οµοιάζει µε σκόπευση κινουµένου στόχου, από κινούµενο έδαφος και µε όπλο που συνεχώς αλλάζει τη συµπεριφορά του
Εργαλεία συγγραφής πηγαίου κώδικα Σηµαντικές εξελίξεις τα τελευταία χρόνια συστήµατα υποστήριξης λογισµικού ολοκληρωµένα περιβάλλοντα προγραµµατισµού Από την γραµµή εντολών Στα ολοκληρωµένα περιβάλλοντα µε προχωρηµένες δυνατότητες συντάκτες προγραµµάτων εντοπιστές σφαλµάτων υλοποιήσεις γλωσσών προγραµµατισµού µεταφραστές διερµηνείς γεννήτορες προγραµµάτων συµβολο- µεταφραστές γλώσσες τέταρτης γενιάς......
Περί πηγαίου κώδικα Ποιος είναι ο «καλύτερος» πηγαίος κώδικας: Ο πιο «γρήγορος»; Ο πιο «έξυπνος»; Ο πιο «µικρός»; Μερικά επιθυµητά χαρακτηριστικά: Επάρκεια (efficiency) Επιδόσεις σε συγκεκριµένες συνθήκες υνατότητα κατανόησης από τρίτους υνατότητα µεταφοράς υνατότητα επαναχρησιµοποίησης
Συνήθη χαρακτηριστικά πηγαίου κώδικα Κάνει «περίπου» αυτό που θέλουµε. εν διαβάζεται από άλλους προγραµµατιστές, ούτε καν από τον συγγραφέα του µετά από λίγο καιρό. εν «τρέχει» στην επόµενη έκδοση της υλοποίησης της γλώσσας προγραµµατισµού στην οποία γράφηκε. εν µπορούµε να τεκµηριώσουµε την δυνατότητα επαναχρησιµοποίησής του. if (x > 50000) const double NOT_TAXABLE = 50000; y = (x - 50000)* 0.2; const double TAX_RATE = 0.2; Else y = 0; if (income > NOT_TAXABLE) tax = (income - NOT_TAXABLE) * TAX_RATE; else tax = 0;
Εξέλιξη γλωσσών προγραµµατισµού COBOL Fortran BASIC Algol 60 Lisp PL/1 Algol 68 BCPL Standard ML Scheme Prolog Pascal C Simula 67 Haskell Ada C++ Smalltalk 80 Modula 2 Modula 3 Java Eiffel
οµηµένος προγραµµατισµός Οτρόπος συγγραφής πηγαίου κώδικα, σύµφωνα µε τον οποίο η συντακτική δοµή του προγράµµατος βοηθάει στην κατανόηση της ροής ελέγχου αυτού. Σε αντιπαραβολή µε το φαινόµενο spaghetti programming που εκδηλώθηκε ευρέως µε χρήση της εντολής GOTO, σε γλώσσες όπως η Assembly και η BASIC. Τρεις δοµές: Ακολουθία (s 1 ; s 2 ) Επιλογή (if c then s 1 else s 2 ) Επανάληψη (while c do s)
οµηµένος προγραµµατισµός S 1 ; S 2 if C then S 1 else S 2 while C do S S 1 true C false C false S 2 S 1 S 2 true S
Προβλήµατα Εντολή GOTO, exceptions, interrupts Τρόπος υποστήριξης κινητής υποδιαστολής Μετατροπές τύπων υναµική διαχείριση µνήµης Αναδροµή Παράλληλη εκτέλεση Προστασία χώρου εκτέλεσης Χαρακτηριστικά του λειτουργικού συστήµατος
Σύγχρονες γλώσσες προγραµµατισµού Ισχυρό σύστηµα τύπων Μοναδική αποτίµηση εκφράσεων χωρίς σφάλµατα κατά την εκτέλεση Κελυφοποίηση, απόκρυψη πληροφοριών Υποστηριζόµενες τεχνοτροπίες προγραµµατισµού Προστακτικός Αντικειµενοστρεφής Συναρτησιακός Λογικός
Τεχνικές αποφυγής σφαλµάτων Χρήση σχεδίων και προδιαγραφή απαιτήσεων λογισµικού Επιλογή της κατάλληλης γλώσσας προγραµµατισµού Χρήση τεχνικών διασφάλισης ποιότητας Αξίωµα Οποια τεχνική και να ακολουθήσουµε, το παραγόµενο λογισµικό θα έχει σφάλµατα
Πρόβλεψη και αντιµετώπιση σφαλµάτων Ανοχή σε σφάλµατα (fault tolerance) Η µεγιστοποίηση της πιθανότητας έλέγχου ροής του λογισµικού, µετά την παρουσίαση κάποιου σφάλµατος κατά την εκτέλεση Επιτακτική απαίτηση σε συστήµατα κρίσιµης αποστολής (mission critical systems) Κριτήριο επιλογής περιβάλλοντος προγραµµατισµού Τεχνικές υναµικός εντοπισµός σφαλµάτων και περιορισµός επιπτώσεων Ανάνηψη από σφάλµατα ( on error, transactions, architecture) Παρακολούθηση (logging) και πρόληψη σφαλµάτων µε τροποποιήσεις στον κώδικα που προκαλεί συχνά σφάλµατα
Πρόβλεψη και αντιµετώπιση σφαλµάτων Προγραµµατισµός πολλών εκδόσεων σύστηµα λογισµικού Έκδοση 1 Έκδοση 2 Σύγκριση αποτελεσµάτων Έκδοση 3 Αµυντικός προγραµµατισµός Ελεγχος όλων των δεδοµένων εισόδου για εγκυρότητα Συντηρητική αντιµετώπιση συχνών πηγών σφαλµάτων (π.χ. µετατροπές τύπων, διαχείριση µνήµης)
Επαναχρησιµοποίηση λογισµικού Επί µακρόν ευχή στην κοινότητα κατασκευαστών Επαναχρησιµοποίηση πηγαίου κώδικα: προϋπόθεση η «παραµετρικοποίηση» του κώδικα Μονάδες υπολογισµών (business logic) Μονάδες διαχείρισης µνήµης ύσκολη η επαναχρησιµοποίηση µονάδων διαχείρισης αρχείων ή επικοινωνίας µε το χρήστη, παρά µόνο σε «πακέτα» Η επαναχρησιµοποίηση µαθηµατικών συναρτήσεων επιστηµονικών υπολογισµών σε FORTRAN παραµένει το καλύτερο παράδειγµα επαναχρησιµοποίησης κώδικα. Η επαναχρησιµοποίηση πρέπει να αποτελεί απαίτηση από τις φάσεις της ανάλυσης και της σχεδίασης.