ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Χειμερινό Εξάμηνο 2006-2007 (Ε') - Κωδ. Μαθήματος: 321-4002 http://www.icsd.aegean.gr/kotis/softTech06/ Διδάσκων: Κων/νος Κώτης (BSc, PhD)
Παραγωγή Πηγαίου Κώδικα Coding Ακολουθεί την Σχεδίαση Προγραμματιστές + Αποτελέσματα Σχεδίασης Μετατροπή του ψευδοκώδικα σε Πηγαίο κώδικα Προσθήκη κώδικα που δεν έχει προβλεφθεί στην Σχεδίαση Χρήση προγραμματιστικών τεχνικών που δεν έχουν αναφερθεί κατά τον Σχεδιασμό
Παραγωγή Πηγαίου Κώδικα Ο Σχεδιασμός δεν λαμβάνει πάντα υπόψη τα χαρακτηριστικά της γλώσσας προγρ. ανάγκη για ιδιαίτερη ερμηνεία του ψευδοκώδικα Η ικανοποίηση των απαιτήσεων από το Λογισμικό βρίσκεται στα χέρια των Προγραμματιστών
Παραγωγή Πηγαίου Κώδικα Σκοπός της ενότητας: Να μην αντικαταστήσει τις ενότητες «Τεχνικές Προγραμματισμού» ή «Γλώσσες Προγρ.» Να δείξει την μετάβαση από τη Σχεδίαση στην Κωδικοποίηση Κάποια βασικά επιθυμητά χαρακτηριστικά του πηγαίου Κώδικα Να αναφερθεί γενικά στις Γλώσσες Προγρ. …σε τεχνικές συγγραφής πηγαίου κώδικα …στην επαναχρησιμοποίηση μονάδων προγράμματος
Από τη Σχεδίαση στη Κωδικοποίηση Η μετάβαση πρέπει να γίνεται με τρόπο που να …μην παράγονται σφάλματα στο παραγόμενο λογισμικό. Τι σημαίνει …Λογισμικό χωρίς σφάλματα? Αυτό …που κάνει ακριβώς αυτό για το οποίο προορίζεται, και το κάνει σωστά πληροί προδιαγραφές + ακολουθεί το Σχεδιασμό του Ακόμα και αν ο Σχεδιασμός του είναι λάθος ?!$
Από τη Σχεδίαση στη Κωδικοποίηση Ακόμα και αν ο Σχεδιασμός του είναι λάθος ?!$ Μέχρι να φτάσουμε στη Κωδικοποίηση, πιθανόν να έχουν μεταβληθεί κάποιες προδιαγραφές, και να μην ισχύουν Τι κάνουμε? Εφαρμόζουμε τις αλλαγές στον Κώδικα? ?
Εργαλεία Κωδικοποίησης
Εργαλεία Κωδικοποίησης Συντάκτες (Editors) Συγγραφή κώδικα σε πρωτογενές επίπεδο Ελέγχει τη σύνταξη του κώδικα (με βάση μία ή περισσότερες γλώσσες προγρ. Χρωματική σύνταξη (highlighting) Αυτόματη στοίχιση, αρίθμηση γραμμών κλπ.
Εργαλεία Κωδικοποίησης Μεταφραστικά περιβάλλοντα Μεταγλωττιστές (compilers): Μεταφράζουν όλο τον κώδικα υψηλού επιπέδου γλώσσας σε εκτελέσιμο κώδικα μηχανής Διερμηνείς (Interpreters): Εκτελούν γραμμή προς γραμμή κώδικα υψηλού επιπέδου γλώσσας Συμβολομεταφραστές (Assemblers): Μεταφράζουν τον κώδικα συμβολικής γλώσσας μηχανής (assembly lang.) σε εκτελέσιμο κώδικα μηχανής
Εργαλεία Κωδικοποίησης Εντοπιστές σφαλμάτων (debuggers): Βοηθούν στον εντοπισμό σφαλμάτων κατά την εκτέλεση κώδικα Βήμα-βήμα εκτέλεση και εντοπισμός Εμφάνιση τιμών μεταβλητών Καθορισμός σημείων – συνθηκών διακοπής της εκτέλεσης του κώδικα
Εργαλεία Κωδικοποίησης Γεννήτριες προγρ. (generators): Αυτόματη δημιουργία πηγαίου κώδικα υψηλού επιπέδου γλώσσας Είσοδο: προδιαγραφές γραμμένες σε εξειδικευμένη γλώσσα (υψηλού επιπέδου) Εξειδικεύονται σε συγκεκριμένες κατηγορίες προβλημάτων π.χ. για κατασκευή Interfaces, για προγράμματα προσομοίωσης, κ.α
Εργαλεία Κωδικοποίησης Συστήματα υποστήριξης λογισμικού (soft. Support systems) Ολοκληρ. Περιβαλ. Προγραμ. (integrated progr. Envir.) Ολοκληρωμένα εργαλεία για full support του προγραμματιστή Συνδυασμός εργαλείων Μία κοινή γλώσσα προγρ.
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Επάρκεια (efficiency) Ο Κώδικας χαρακτηρίζεται επαρκής όταν: Το σύστημα λειτουργεί σωστά, χωρίς σφάλματα Ικανοποιεί όλες τις απαιτήσεις Διαχειρίζεται τους πόρους του συστήματος με ορθό τρόπο Είναι διαθέσιμο όποτε απαιτείται Η Επάρκεια εξασφαλίζεται κυρίως κατά την φάση Ελέγχου του λογισμικού
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Επίδοση (performance) Ταχύτητα εκτέλεσης λειτουργιών του λογισμικού Οι απαιτήσεις του λογισμικού σε πόρους (μνήμη, δίσκος) Η Βελτίωση της Επίδοσης επιτυγχάνεται με: Επιλογή της κατάλληλης γλώσσας Επιλογή κατάλληλων προγραμματιστικών τεχνικών
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Αναγνωσιμότητα (readability) Δυνατότητα ανάγνωσης και κατανόησης Κώδικα άλλου προγραμματιστή ή πολλές φορές και του ίδιου Συμβουλές: Απλότητα: απλές προγραμ. Λύσεις που να ικανοποιούν μόνο τις απαιτήσεις…όχι τον προγραμματιστή Πλεονασμός: επιπλέον σημεία στίξης Επιλογή ονομάτων: κατάλληλα ονόματα μεταβλητών, σταθερών, κλπ. Χρήση Σχολίων Στοίχιση
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Αναγνωσιμότητα (readability) Π.χ.
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Τεκμηρίωση (documentation) Συνοδευτικά έγγραφα Συνήθως σε φυσική γλώσσα Επεξηγεί τα πολύπλοκα σημεία του Κώδικα Συμπληρωματικό των Σχολίων
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Μεταφερσιμότητα (portability) Δυνατότητα εκτέλεσης του κώδικα σε διαφορετικά περιβάλλοντα (λειτουργικά συστ., υπολογιστές) χωρίς αλλαγές Δυνατότητα μεταφοράς του κώδικα μεταξύ διαφορετικών υλοποιήσεων της γλώσσας προγραμματισμού Οδηγίες: Να μην χρησιμοποιούνται συστατικά που υποστηρίζονται από συγκεκριμένες υλοποιήσεις (π.χ Java 1.3, …Java 2) Να μην γίνονται αυθαίρετες παραδοχές για την συμπεριφορά των υλοποιήσεων
Χαρακτηριστικά του Κώδικα Επιθυμητά για την εξασφάλιση ποιότητας Επαναχρησιμοποίηση (reusability) Κατάλληλη δόμηση του κώδικα σε επαναχρησιμοποιήσιμα τμήματα Οδηγίες: Παραμετροποίηση Μικρά τμήματα κώδικα, εστιασμένα σε υπο-προβλήματα Κοινά αποδεκτές τεχνικές προγραμ. Καλή τεκμηρίωση, Σχολιασμός Σωστή, απλή και σχετική ονοματολογία παραμέτρων, μεταβλητών, κλπ.
Γλώσσες Προγραμματισμού Χαρακτηρίζονται με βάση: Πολυπλοκότητα Θεματική Περιοχή που απευθύνονται Φιλοσοφία προγραμματισμού που υποστηρίζουν Βασική διάκριση: Χαμηλού – Υψηλού επιπέδου
Γλώσσες Προγραμματισμού Χαμηλού επιπέδου: «κοντά» στην μονάδα επεξεργασίας Μοιάζει με την γλώσσα μηχανής Διαφέρει από τον τρόπο σκέψης των ανθρώπων Δεν μπορεί να εξασφαλίσει την απαιτούμενη ποιότητα του λογισμικού Τα τεχνικά προβλήματα είναι τελείως ξένα με το πεδίο της εφαρμογής Χρησιμοποιείται μόνο για ορισμένα κομμάτια του λογισμικού με ειδικές απαιτήσεις (π.χ. επικοινωνία με συσκευές, λειτουργικά συστήματα, real-time systems)
Γλώσσες Προγραμματισμού Υψηλού επιπέδου: Αφαιρετικοί συμβολισμοί Κοντά στον άνθρωπο (αντίληψη και γλώσσα) Προσεγγίζουν τη φιλοσοφία ανάλυσης και σχεδιασμού, άρα εξασφαλίζουν την ποιότητα του παραγόμενου λογισμικού Pascal, C, C++, COBOL, Basic, Java
Γλώσσες Προγραμματισμού
Δομημένος Προγραμματισμός Δομές Ελέγχου των γλωσσών Προγρ. Εγκατάλειψη της Goto Χρήση των If και While Είναι Τεχνοτροπία προγραμματισμού παρέχει δομή στο πρόγραμμα Βοηθά στην κατανόηση της ροής ελέγχου …στην καλύτερη κατανόηση του προγράμματος
Δομημένος Προγραμματισμός Κάθε αλγόριθμος είναι δυνατόν να κωδικοποιηθεί με τρία μόνο στοιχεία ελέγχου Ακολουθία (s1; s2) Επιλογή (if c then s1 else s2) Επανάληψη (while c do s) Χαρακτηρίζονται από την ύπαρξη ενός σημείου εξόδου και ενός εξόδου επιτρέπει το συνδυασμό τους σε μεγαλύτερες δομικές μονάδες
Δομημένος Προγραμματισμός
Δομημένος Προγραμματισμός «Προγραμματιστική Πειθαρχία» Υποχρέωση του προγραμματιστή να σκέφτεται περισσότερο Συντείνει στην μείωση της πιθανότητας σφαλμάτων Συναρτήσεις και Διαδικασίες= δομικές μονάδες Top-down development Δομημένη ανάλυση και σχεδίαση
Χαρακτηριστικά Σύγχρονων Γλωσσών Συστήματα Τύπων Καθορίζει τους τύπους δεδομένων μιας γλώσσας Τις πράξεις που επιτρέπονται με τα δεδομένα αυτών των τύπων Πλούσια συστήματα, βοηθούν σημαντικά τον προγραμματιστή στη συγγραφή καλά δομημένου κώδικα Οι κανόνες ενός συστήματος τύπων χρησιμοποιούνται για τον έλεγχο της σωστής εφαρμογής των τελεστών – της σύνταξης των εκφράσεων της γλώσσας
Κελυφοποίηση & Απόκρυψη Πληροφοριών Απόκρυψη Πληροφορ. (info. Hiding): Εμφάνιση λεπτομερειών υλοποίησης μιας δομικής μονάδας στο εσωτερικό της Κελυφοποίηση (encapsulation): Δεδομένα στενά συνυφασμένα με τις λειτουργίες που ενεργούν πάνω σε αυτά Τοποθετούνται στο ίδιο κέλυφος, δηλ. σε μια κοινή και σχετικά αυτοτελή δομική μονάδα
Είδη Προγραμματισμού Προστακτικός (imperative) Cobol, C, Pascal, Basic, Fortran Υψηλού Επιπέδου Προγραμ. ύφος συμβαδίζει με της γλώσσας μηχ. Υποστηρίζουν: Μεταβλητές διαφόρων τύπων (δομημένων και μη) Αναθέσεις τιμών σε μεταβλητές Εντολές που αλλάζουν τη ροή ελέγχου
Είδη Προγραμματισμού Αντικειμενοστραφής (object-oriented) C++, Java Υψηλού Επιπέδου Έμφαση στις έννοιες «αντικείμενο», «κλάση», «κληρονομικότητα», «κελυφοποίηση» Βασίζονται στο προστακτικό ύφος προγραμ. Αντικείμενα αντί Μεταβλητές και Κλάσεις αντί Τύπους δεδομένων
Είδη Προγραμματισμού Συναρτησιακός (functional) Lisp, Scheme, Haskell Υψηλού Επιπέδου Πλησιέστερα στον άνθρωπο Έμφαση στις έννοιες «Συνάρτηση» και «Αναδρομή» Η έννοια της «μεταβλητής» χρησιμοποιείται σχεδόν καθόλου Απλούστερος αλλά όχι τόσο δημοφιλής
Τεχνικές συγγραφής Κώδικα Αποφυγή σφαλμάτων Σωστή, ολοκληρωμένη, και με σαφήνια Προδιαγραφή Απαιτήσεων Πειθαρχημένη εφαρμογή των φάσεων-ενεργειών ανάπτυξης λογισμικού Αξιοποίηση των χαρακτηριστικών της γλώσσας προγ. Π.χ. αποφυγή χρήσης μιας γλώσσας που δεν είναι ισχυρή στους μαθηματικούς υπολογισμούς για την ανάπτυξη μαθηματικής εφαρμογής Επιδίωξη του «καλού προγραμματιστή» Αυξημένη ευαισθησία για ποιότητα !!!
Τεχνικές συγγραφής Κώδικα Ανοχή σε σφάλματα (fault tolerance): Πρόβλεψη πιθανόν σφαλμάτων στη λειτουργία της εφαρμογής (ειδικά για εφαρμογές υψηλού ρίσκου – κινδύνου π.χ. αυτόματος πιλότος αεροσκάφους) Ανοχή στα πιθανά σφάλματα Συνέχιση λειτουργίας παρόλο που εντοπίστηκε σφάλμα, με τις μικρότερες δυνατές απώλειες Απαιτείται συγγραφή επιπλέον κώδικα που θα αναλάβει να: Εντοπίσει δυναμικά το σφάλμα κατά την λειτουργία Ανανήψει από το σφάλμα Αποφύγει την επανάληψή του μέχρι να διορθωθεί
Τεχνικές συγγραφής Κώδικα Ανοχή σε σφάλματα (fault tolerance): Εντοπίσει δυναμικά το σφάλμα κατά την λειτουργία Διαγνωστικά υπο-προγράμματα Εκτελούνται παράλληλα με τις εφαρμογές Ανανήψει από το σφάλμα Επιδιόρθωση βλάβης Αποκατάσταση φυσικής λειτουργίας Τακτική οπισθοχώρησης σε προηγούμενες σωστές καταστάσεις ή σε νέες εναλλακτικές Αποφύγει την επανάληψή του (πρόληψη) Γνωστοποίηση της βλάβης στον Κατασκευαστή Επιδιόρθωση και συντήρηση από τον Κατασκευαστή
Τεχνικές συγγραφής Κώδικα Υλοποίηση ανεκτικών συστημάτων Προγραμματισμός πολλών εκδόσεων Κατασκευάζονται πλήρως λειτουργικές εκδόσεις ενός λογισμικού Δοκιμάζονται με τα ίδια δεδομένα και συγκρίνονται τα αποτελέσματα Απομονώνονται οι ελαττωματικές εκδόσεις με τη μέθοδο της πλειοψηφίας Αμυντικός Προγραμματισμός Ενσωματώνεται κώδικας ελέγχου για τη συνέπεια των δεδομένων και την καλή λειτουργία Εφαρμόζονται τεχνικές ανάνηψης και μελλοντικής πρόληψης με τον εντοπισμό σφάλματος από τον κώδικα ελέγχου
Επαναχρησιμοποίηση μονάδων Επαναχρησιμοποίηση (Reuse): Διαδικασία υλοποίησης νέου λογισμικού με τη χρήση συστατικών ήδη κατασκευασμένου Επαναχρησιμοποιούνται: Κώδικας Ανάλυση και Σχεδιασμός Τεκμηρίωση, δεδομένα Σχέδια ελέγχου Στόχος : η μείωση του κόστους της παραγωγής λογισμικών Βελτίωση της ποιότητας και της αξιοπιστίας
Επαναχρησιμοποίηση μονάδων Επαναχρησιμοποίηση (Reuse): Βασικές προϋποθέσεις Ο κώδικας να έχει γραφτεί με την πρόβλεψη να επαναχρησιμοποιηθεί Γενικότητα κώδικα μέσω παραμετροποίησης Μεταφερσιμότητα κώδικα
Ερωτήσεις – Απορίες - Συζήτηση
Ασκήσεις – Πιθανά Θέματα Εξέτασης