Επαναχρησιμοποίηση Λογισμικού Κατασκευή λογισμικού από επαναχρησιμοποιήσιμα στοιχεία.
Στόχοι Συζήτηση των πλεονεκτημάτων και μειονεκτημάτων της επαναχρησιμοποίησης λογισμικού Περιγραφή της ανάπτυξης με και για επαναχρησιμοποίηση Συζήτηση χαρακτηριστικών των βασικών επαναχρησιμοποιήσιμων στοιχείων Περιγραφή μεθόδων για ανάπτυξη εφαρμογών που μπορούν να μετακινηθούν
Θέματα Ανάπτυξη λογισμικού με επαναχρησιμοποίηση Ανάπτυξη λογισμικού για επαναχρησιμοποίηση Επαναχρησιμοποίηση βασισμένη σε γεννήτρια Μεταφερσιμότητα εφαρμογής
Τύποι Επαναχρησιμοποιήσιμων Στοιχείων Επαναχρησιμοποίηση Συστήματος Εφαρμογής Συνολικά ένα σύστημα εφαρμογής μπορεί να χρησιμοποιηθεί σε διαφορετική μηχανή. Αυτό ονομάζεται portability μηχανής Επαναχρησιμοποίηση υπο - συστήματος Κύρια υποσυστήματα όπως το σύστημα αναγνώρισης προτύπων μπορούν να επαναχρησιμοποιηθούν Επαναχρησιμοποίηση τμημάτων ή αντικειμένων Το επαναχρησιμοποιήσιμο στοιχείο είναι συλλογή συναρτήσεων ή procedures Επαναχρησιμοποίηση συνάρτησης Το επαναχρησιμοποιήσιμο στοιχείο είναι απλά ένα στοιχείο
Πρακτική Επαναχρησιμοποίησης Επαναχρησιμοποίηση Συστήματος Εφαρμογής Ευρέως διαδεδομένο. Είναι κοινή πρακτική για εταιρείες ανάπτυξης συστημάτων (π.χ. Microsoft) να έχουν διαθέσιμα τα προϊόντα τους σε διαφορετικές πλατφόρμες Επαναχρησιμοποίηση Υποσυστήματος και τμήματος Οι μηχανικοί λογισμικού κάνουν χρήση προηγούμενης δουλείας. Μικρή συστηματική επανάχρηση αλλά αυξανόμενη διάδοση της επαναχρησιμοποίησης Επαναχρησιμοποίηση Συνάρτησης Συχνό σε μερικά πεδία εφαρμογών (π.χ. μηχανική) όπως έχουν αναπτυχθεί ειδικές βιβλιοθήκες.
Τέσσερα Θέματα Επαναχρησιμοποίησης Ανάπτυξη Λογισμικού με Επαναχρησιμοποίηση Ανάπτυξη λογισμικού με δοσμένη βάση επαναχρησιμοποιήσιμων στοιχείων Ανάπτυξη Λογισμικού για Επαναχρησιμοποίηση Πως σχεδιάζουμε βασικά στοιχεία λογισμικού για επαναχρησιμοποίηση Επαναχρησιμοποίηση βασισμένη σε γεννήτρια Επαναχρησιμοποίηση ειδική σε πεδίο μέσω παραγωγής εφαρμογής Επαναχρησιμοποίηση Συστήματος Εφαρμογής Πως γράφουμε συστήματα εφαρμογών τα οποία μπορούν να μεταφερθούν από την μία πλατφόρμα στην άλλη
Ανάπτυξη Λογισμικού με Επαναχρησιμοποίηση Προσπάθειες για μεγιστοποίηση της χρήσης υπαρχόντων στοιχείων Τα στοιχεία αυτά πρέπει να προσαρμόζονται σε μία νέα εφαρμογή Λιγότερα στοιχεία πρέπει να προδιαγράφονται, σχεδιάζονται και προγραμματίζονται Τα συνολικά κόστη ανάπτυξης με αυτόν τον τρόπο μειώνονται
Άλλα Πλεονεκτήματα Η αξιοπιστία του συστήματος αυξάνεται Το συνολικό ρίσκο μειώνεται Μπορεί να γίνει αποτελεσματική χρήση από ειδικούς Τα οργανωτικά πρότυπα μπορούν να ενσωματωθούν σε επαναχρησιμοποιήσιμα στοιχεία Ο χρόνος ανάπτυξης λογισμικού ελαττώνεται
Ανάπτυξη με Επαναχρησιμοποίηση Διαδικασίας
Απαιτήσεις για Επαναχρησιμοποίηση Πρέπει να είναι δυνατόν να βρούμε επαναχρησιμοποιήσιμα στοιχεία σε μία βάση δεδομένων στοιχείων Τα άτομα τα οποία θα επαναχρησιμοποιήσουν στοιχεία πρέπει να μπορούν να κατανοήσουν τα στοιχεία και να πιστεύουν ότι ικανοποιούν τις ανάγκες τους Τα στοιχεία πρέπει να έχουν τεκμηρίωση που να φαίνεται πως μπορούν να επαναχρησιμοποιηθούν και το πιθανό κόστος επαναχρησιμοποίησης
Ανάπτυξη Καθοδηγούμενη από την Επαναχρησιμοποίηση Αντί να θεωρούμε την επαναχρησιμοποίηση μετά την προδιαγραφή του λογισμικού, η προδιαγραφή πρέπει να παίρνει υπόψη της την ύπαρξη επαναχρησιμοποιήσιμων στοιχείων Η προσέγγιση αυτή είναι ευρέως διαδεδομένη στον σχεδιασμό ηλεκτρονικών, ηλεκτρικών και μηχανολογικών συστημάτων Εάν γίνεται αποδεκτή για λογισμικό θα πρέπει να αυξήσουμε σημαντικά την αναλογία των στοιχείων που επαναχρησιμοποιούνται
Ανάπτυξη Καθοδηγούμενη από Επαναχρησιμοποίηση
Προβλήματα Επαναχρησιμοποίησης Δύσκολη η ποσοτικοποίηση κόστους και ωφελειών από την ανάπτυξη με επαναχρησιμοποίηση Τα CASE εργαλεία δεν υποστηρίζουν ανάπτυξη με επαναχρησιμοποίηση. Δεν μπορούν να ολοκληρωθούν με συστήματα βιβλιοθήκης στοιχείων Μερικοί μηχανικοί λογισμικού προτιμούν να ξαναγράφουν από το να επαναχρησιμοποιούν στοιχεία Οι υπάρχουσες τεχνικές για κατηγοριοποίηση, καταλογοποίηση και ανάκτηση στοιχείων δεν είναι ώριμες. Το κόστος για την εύρεση καταλλήλων στοιχείων είναι πολύ υψηλό.
Ανάπτυξη Λογισμικού για Επαναχρησιμοποίηση Τα στοιχεία λογισμικού δεν είναι αυτόματα επαναχρησιμοποιήσιμα. Πρέπει να τροποιηθούν για να γίνουν επαναχρησιμοποιήσιμα από εφαρμογές Η ανάπτυξη λογισμικού για επαναχρησιμοποίηση είναι μία διαδικασία ανάπτυξης που παίρνει υπάρχοντα στοιχεία και βοηθά στην γενίκευση και τεκμηρίωσή τους για να χρησιμοποιηθούν σε περιοχή εφαρμογών 7
Ανάπτυξη για Επαναχρησιμοποίηση Το κόστος ανάπτυξης για επαναχρησιμοποιήσιμα στοιχεία είναι υψηλότερο από το κόστος ισοδύναμης ανάπτυξης. Αυτό το επιπλέον κόστος είναι κόστος οργάνωσης παρά κόστος έργου Τα βασικά στοιχεία απαιτούν περισσότερο χώρο και έχουν μεγαλύτερους χρόνους εκτέλεσης από τα ειδικά ισοδύναμά τους
Επαύξηση Δυνατότητας Επαναχρησιμοποίησης Γενίκευση Ονόματος Τα ονόματα σε ένα στοιχείο πρέπει να τροποποιηθούν ώστε να μην είναι απευθείας ανάκλαση μίας οντότητας ειδικής εφαρμογής Γενίκευση Λειτουργίας Προστίθενται λειτουργίες για παροχή επιπλέον λειτουργικότητας και ειδικές λειτουργίες αφαιρούνται Γενίκευση Εξαίρεσης Αφαιρούνται εξαιρέσεις ειδικές για την εφαρμογή και προστίθεται διαχείριση εξαιρέσεων για να αυξηθεί η ευρωστία του στοιχείου Αναγνώριση Στοιχείου Το στοιχείο αναγνωρίζεται ως επαναχρησιμοποιήσιμο
Διαδικασία Επαύξησης της Δυνατότητας Επαναχρησιμοποίησης
Επαναχρησιμοποίηση Ειδική για το Πεδίο Τα στοιχεία μπορούν ευκολότερα να επαναχρησιμοποιηθούν για το πεδίο εφαρμογής για το οποίο αρχικά είχαν αναπτυχθεί καθόσον αντικατοπτρίζουν ιδέες και σχέσεις του πεδίου Η ανάλυση πεδίου σχετίζεται με την μελέτη του πεδίου για την εξεύρεση των βασικών χαρακτηριστικών Με αυτή την γνώση τα στοιχεία μπορούν να γενικευτούν για επαναχρησιμοποίηση στο πεδίο αυτό
Επαναχρησιμοποίηση στο Ειδικό Πεδίο Τα επαναχρησιμοποιήσιμα στοιχεία ενσωματώνουν έννοιες αφαίρεσης του πεδίου Για να είναι επαναχρησιμοποιήσιμη, μία αφαίρεση θα πρέπει να είναι πλήρης Η αφαίρεση θα πρέπει να παραμετροποιηθεί (τουλάχιστον σε κάποιο εύρος) για να επιτρέπεται εισαγωγή σε διαφορετικά συστήματα με ειδικές απαιτήσεις 9
Το Πεδίο Αφαίρεσης Δομών Δεδομένων Καλά κατανοητό πεδίο εφαρμογής Σημαντικό ως βάση για πολλούς τύπους συστημάτων λογισμικού Οι απαιτήσεις για επαναχρησιμοποιήσιμες δομές δεδομένων αφαίρεσης έχουν δημοσιευθεί από διαφορετικούς συγγραφείς (π.χ. Booch) Έχει δημιουργηθεί σχήμα ταξινόμησης για τέτοια στοιχεία
Γενίκευση ADS (Abstract Data Structures) Σημαίνει προσθήκη λειτουργιών σε κάποιο στοιχείο για κάλυψη του πεδίου Οι λειτουργίες που απαιτούνται περιλαμβάνουν Λειτουργίες πρόσβασης Λειτουργίες δημιουργού Λειτουργίες I/O Λειτουργίες σύγκρισης Λειτουργίες επανάληψης, εάν το στοιχείο είναι συλλογή στοιχείων
Μοντέλο Επαναχρησιμοποιήσιμων ADS
Οδηγίες Επαναχρησιμοποίησης Υλοποίηση δομών δεδομένων ως βασικών πακέτων Παροχή λειτουργιών για την δημιουργία και αντιστοίχιση στιγμών Παροχή μηχανισμού για να δείξουμε αν μία λειτουργία είναι επιτυχής ή όχι Ελαχιστοποίηση της πληροφορίας που ορίζεται στην εξειδίκευση του στοιχείου
Οδηγίες Επαναχρησιμοποίησης Υλοποίηση λειτουργιών ως συναρτήσεων που όταν αποτυγχάνουν επιστρέφουν δείκτη λάθους ως παράμετρο εξόδου Παρέχουν ένα τελεστή ισότητας για σύγκριση δομών Παρέχουν έναν επαναλήπτη ο οποίος επιτρέπει σε ένα στοιχείο συλλογής να είναι επισκέψιμο αποτελεσματικά χωρίς να ενημερώνεται το στοιχείο
Παράδειγμα Επαναχρησιμοποιήσιμου Στοιχείου Διασυνδεδεμένη λίστα στοιχείων όπου κάθε στοιχείο διατηρεί δείκτη στο επόμενο στοιχείο στην λίστα Συνήθως υλοποιείται σε συστήματα εφαρμογών αλλά τα στοιχεία τα οποία είναι εξειδικευμένα σε εφαρμογές σπάνια είναι βασικά και αντανακλούν τις ειδικές ανάγκες της εφαρμογής Οι λειτουργίες της διασυνδεδεμένης λίστας είναι συνήθως ανεξάρτητες από τον τύπο του στοιχείου στην λίστα
Βασικό Πακέτο Διασυνδεδεμένης λίστας See portrait slide
Λειτουργίες Πρόσβασης -- true if the list has no elements function Is_empty (L: LIST) return BOOLEAN ; -- returns the number of elements in the list function Size_of (L: LIST ) return NATURAL ; -- true if a list element is the same as E function Contains (E: ELEMENT; L: LIST ) return BOOLEAN ; -- returns the first list element procedure Head (L: LIST; E: in out ELEMENT ; Error_level: out STATUS ) ; -- removes the first list element and returns the remaining list procedure Tail (L: LIST; Outlist: in out LIST ;
Λειτουργίες Δημιουργού See portrait slides
Λειτουργίες I/O -- print onto standard output procedure Print_list (L: LIST; Error_level: out STATUS ) ; procedure Write_list (F: TEXT_IO.FILE_TYPE ; L: LIST; Error_level: out STATUS ) ; procedure Read_list (F: TEXT_IO.FILE_TYPE ; Outlist: out LIST ; Error_level: out STATUS ) ;
Λειτουργίες Επανάληψης procedure Iterator_initialise (L: LIST; Iter: in out ITERATOR; Error_status: in out STATUS) ; procedure Go_next (L: LIST; Iter: in out ITERATOR; procedure Eval (L: List; Iter: in out ITERATOR; Val: out ELEMENT; Error_status: in out STATUS) ; function At_end (L: LIST; Iter: ITERATOR) return BOOLEAN ;
Στοιχείο Διασυνδεδεμένης Λίστας στην C++ See portrait slides
Επαναχρησιμοποίηση που Εξαρτάται από την Γλώσσα Οι οδηγίες επαναχρησιμοποίησης για αφαιρέσεις πεδίου είναι ανεξάρτητες από την γλώσσα υλοποίησης Όμως μερικές οδηγίες επαναχρησιμοποίησης είναι εξαρτώμενες από την γλώσσα Στην Ada, μην περνάτε μεγέθη διανυσμάτων ως παράμετρο σε επαναχρησιμοποιήσιμα στοιχεία τα οποία επενεργούν σε διανύσματα. Χρήση του ενσωματωμένου χαρακτηριστικού για εύρεση του μεγέθους διανύσματος ΣτήνC++, πάντα να περνάμε το μέγεθος διανύσματος ως παράμετρο σε επαναχρησιμοποιήσιμα στοιχεία που επενεργούν σε διανύσματα
Προσαρμογή Στοιχείων Επιπλέον λειτουργικότητα μπορεί να χρειάζεται να προστεθεί σε στοιχείο. Όταν αυτό γίνει το νέο στοιχείο μπορεί να είναι διαθέσιμο για επαναχρησιμοποίηση Μη απαιτούμενη λειτουργία πρέπει να απομακρυνθεί από ένα στοιχείο για βελτίωση της λειτουργίας και μείωση των απαιτήσεων σε χώρο Η υλοποίηση κάποιων λειτουργιών στοιχείων πρέπει να τροποποιηθούν. Αυτό σημαίνει ότι οι αρχικές αποφάσεις γενίκευσης μπορεί να είναι λάθος
Επαναχρησιμοποίηση και Κληρονομικότητα Τα αντικείμενα είναι επαναχρησιμοποιήσιμα διότι περιλαμβάνουν κατάσταση και σχετικές λειτουργίες. Επίσης μπορεί να είναι αυτοδύναμα χωρίς εξωτερικές εξαρτήσεις Κληρονομικότητα σημαίνει ότι μία κλάση κληρονομεί χαρακτηριστικά και λειτουργίες από μία υπερ - κλάση. Στην ουσία αυτά επαναχρησιμοποιούνται Πολλαπλή κληρονομικότητα επιτρέπει πολλά αντικείμενα να λειτουργούν ως κλάση βάσης ώστε χαρακτηριστικά και λειτουργίες να επαναχρησιμοποιούνται από πολλές πηγές
Πλέγμα Κλάσεων
Προβλήματα Κληρονομικότητας Όπως αναπτύσσονται οι κλάσεις στοιχείων, το πλέγμα κληρονομικότητας γίνεται πολύπλοκο με ύπαρξη αντιγράφων στο πλέγμα. Απαιτείται οργάνωση Για την κατανόηση ενός στοιχείου, πολλές κλάσεις στην ιεραρχία θα πρέπει να εξεταστούν και κατανοηθούν Σε πολλές περιπτώσεις πιθανό να είναι αδύνατο να αποφευχθεί κληρονομικότητα μη απαραίτητης λειτουργικότητας
Επαναχρησιμοποίηση Βασισμένη σε Γεννήτρια Γεννήτριες προγραμμάτων συμπεριλαμβάνουν την επαναχρησιμοποίηση προτύπων και αλγορίθμων Είναι ενσωματωμένοι στην γεννήτρια και παραμετροποιούνται με εντολές χρήστη. Το πρόγραμμα παράγεται τότε αυτόματα Οι μεταγλωττιστές είναι παραγωγοί προγραμμάτων όπου τα επαναχρησιμοποιήσιμα πρότυπα είναι τμήματα κώδικα που αντιστοιχούν σε εντολές γλώσσας υψηλού επιπέδου 4
Επαναχρησιμοποίηση μέσω Παραγωγής Προγράμματος 5
Τύποι Γεννητριών Προγραμμάτων Παραγωγοί εφαρμογών για επεξεργασία επιχειρησιακών δεδομένων Λεκτικοί αναλυτές για την επεξεργασία γλώσσας Γεννήτριες κώδικα σε εργαλεία CASE Η επαναχρησιμοποίηση που βασίζεται σε γεννήτριες είναι πολύ αποτελεσματική ως προς το κόστος αλλά η εφαρμογή της είναι περιορισμένη σε μικρό αριθμό πεδίων εφαρμογής
Μεταφερσιμότητα Συστήματος Εφαρμογής Η μεταφερσιμότητα είναι ειδική περίπτωση επαναχρησιμοποίησης όπου ολόκληρη η εφαρμογή επαναχρησιμοποιείται σε διαφορετική πλατφόρμα Η μεταφερσιμότητα ενός προγράμματος είναι το μέτρο του όγκου εργασίας που απαιτείται για να δουλέψει το έργο στο νέο περιβάλλον
Θέματα Μεταφερσιμότητας Συστήματος Μεταφορά Η φυσική μετακίνηση του κώδικα και των σχετικών δεδομένων από το ένα περιβάλλον στο άλλο Αυτό επιτρέπεται να γίνει με ανταλλαγή δεδομένων μέσω δικτύου που κάνει τα πράγματα πολύ ευκολότερα Προσαρμογή Οι αλλαγές που απαιτούνται για να κάνουν το πρόγραμμα να δουλεύει σε διαφορετικό περιβάλλον
Διεπαφές Προγράμματος Εφαρμογής
Εξαρτήσεις Μεταφερσιμότητας Εξαρτήσεις από την αρχιτεκτονική μηχανής Εξαρτήσεις από την αναπαράσταση πληροφορίας και την οργάνωσή της Εξαρτήσεις λειτουργικού συστήματος Εξαρτήσεις από χαρακτηριστικά λειτουργικού συστήματος Run-time προβλήματα συστήματος Εξαρτήσεις από ένα ειδικό run-time σύστημα υποστήριξης Προβλήματα βιβλιοθήκης Εξαρτήσεις από ένα ειδικό σύνολο βιβλιοθηκών
Ανάπτυξη για Μεταφερσιμότητα Απομόνωση τμημάτων του συστήματος που είναι εξαρτώμενα από εξωτερικές δειεπαφές του συστήματος. Οι διεπαφές υλοποιούνται ως αντικείμενα ή σύνολα αφαιρετικών δομών δεδομένων Ορισμός διεπαφής μεταφερσιμότητας για απόκρυψη αρχιτεκτονικής μηχανής και χαρακτηριστικών λειτουργικού συστήματος Για μεταφερσιμότητα προγράμματος μόνο ο κώδικας της διεπαφής μεταφοράς απαιτείται να ξαναγραφεί
Διεπαφή για Μεταφερσιμότητα
Εξαρτήσεις από την Αρχιτεκτονική Μηχανής Το πρόγραμμα βασίζεται στο σχήμα αναπαράστασης δεδομένων που υποστηρίζεται από μία ειδική αρχιτεκτονική μηχανής Συνήθη προβλήματα είναι: Η ακρίβεια πραγματικών αριθμών Η αρίθμηση των Bits στην αναπαράσταση των αριθμών Μπορεί να αντιμετωπισθεί με την χρήση αφαιρετικών τύπων δεδομένων. Υποστηρίζονται διαφορετικές αναπαραστάσεις
Μεταφέρσιμο Στοιχείο Μετρητή Replace with portrait slide
Εξαρτήσεις από το Λειτουργικό Σύστημα Το πρόγραμμα βασίζεται στην χρήση εικι9κών κλήσεων στο λειτουργικό σύστημα όπως εργαλεία για την υποστήριξη διαχείρισης διαδικασίας Το πρόγραμμα εξαρτάται από το ειδικό σύστημα οργάνωσης αρχείων που υποστηρίζεται από το λειτουργικό σύστημα
Διαχείριση Μεταφερσιμότητας Διαδικασίας Replace with portrait slide
Υλοποίηση Διεπαφής Μεταφερσιμότητας
Πρότυπα Τα πρότυπα είναι μορφές συμφωνίας που ελαχιστοποιούν το ποσό της μεταβλητότητας στα συστήματα λογισμικού Με βάση την ανάπτυξη προτύπων από το 1980 η μεταφερσιμότητα υλοποιείται πολύ ευκολότερα τώρα Κατά κανόνα, όσο τα πρότυπα αναπτύσσονται τα ετερογενή συστήματα αναπτύσσονται όπου μέρη ενός προγράμματος τρέχουν σε διαφορετικές μηχανές
Υπάρχοντα Πρότυπα Πρότυπα γλωσσών προγραμματισμού Ada, Pascal, C, C++, FORTRAN. Πρότυπα λειτουργικών συστημάτων UNIX, MS-DOS (de-facto standard), MS Windows Πρότυπα δικτύων TCP/IP protocols, X400, X500, Sun NFS, OSI layered model. HTML, WWW Πρότυπα συστήματος Window X-windows. Motif toolkit
Σημαντικά Σημεία Η επαναχρησιμοποίηση λογισμικού σημαίνει χρήση στοιχείων που έχουν αναπτυχθεί σε μία εφαρμογή σε μία διαφορετική εφαρμογή Η συστηματική επαναχρησιμοποίηση ελαχιστοποιεί ρίσκο διαχείρισης και βελτιώνει την αξιοπιστία λογισμικού Η ανάπτυξη με επαναχρησιμοποίηση βασίζεται σε βιβλιοθήκη από επαναχρησιμοποιήσιμα στοιχεία Τα στοιχεία πρέπει να γενικευτούν για επαναχρησιμοποίηση
Σημαντικά Σημεία Οι τύποι δεδομένων αφαίρεσης και τα αντικείμενα είναι ενθυλακώσεις επαναχρησιμοποιήσιμων στοιχείων Η επαναχρησιμοποίηση που βασίζεται στην γεννήτρια εξαρτάται από την χρήση προτύπων πεδίου Η μεταφερσιμότητα εφαρμογής είναι μορφή επαναχρησιμοποίησης όπου όλη η εφαρμογή επαναχρησιμοποιείται σε διαφορετική πλατφόρμα Η μεταφερσιμότητα επιτυγχάνεται με ανάπτυξη σύμφωνα με πρότυπα και απομόνωση εξαρτήσεις πλατφόρμας