Tεχνολογία Λογισµικού II
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος B' Tεχνολογία Λογισµικού II BAΣIΛEIOΣ BEΣKOYKHΣ ιδάκτωρ Hλεκτρολόγος Mηχανικός και Mηχανικός Yπολογιστών ΠATPA 2001
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος B' Tεχνολογία Λογισµικού II Συγγραφή BAΣIΛEIOΣ BEΣKOYKHΣ ιδάκτωρ Hλεκτρολόγος Mηχανικός και Mηχανικός Yπολογιστών Κριτική Ανάγνωση AXIΛΛEAΣ KAMEAΣ ρ Mηχανικός H/Y και Πληροφορικής Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου ΣΩKPATHΣ KATΣIKAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Aιγαίου Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση ΓEPAΣIMOΣ MΩPAΊTHΣ Γλωσσική Επιµέλεια BAΣIΛIKH HMHTPOΠOYΛOY Τεχνική Επιµέλεια ΕΣΠΙ ΕΚ ΟΤΙΚΗ Ε.Π.Ε. Καλλιτεχνική Επιµέλεια Σελιδοποίηση TYPORAMA Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων ΟΜΑ Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 2001 ISBN: 960 538 292 X Kωδικός Έκδοσης: ΠΛH 24/2 Copyright 2000 για την Ελλάδα και όλο τον κόσµο ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Οδός Παπαφλέσσα & Υψηλάντη, 26222 Πάτρα Τηλ: (0610) 314094, 314206 Φαξ: (0610) 317244 Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη.
ÂÚÈ fiìâó Πρόλογος... 9 K º π 1 TÔ ÔÁÈÛÌÈÎfi Û ÌÂÚ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις... 13 1.1 H πορεία της δοµηµένης ανάλυσης και σχεδίασης... 15 Σύνοψη ενότητας... 17 1.2 Xαρακτηριστικά του σύγχρονου λογισµικού... 17 Σύνοψη ενότητας... 19 1.3 Eξελίξεις και τάσεις στην ανάπτυξη του λογισµικού... 20 1.4 Πηγές πληροφοριών και εργαλεία Case για τον αναγνώστη του βιβλίου... 22 1.4.1 Σελίδες στο Internet... 22 1.4.2 Ένα χρήσιµο εργαλείο... 23 Σύνοψη κεφαλαίου... 24 K º π 2 EÈÛ ÁˆÁ ÛÙËÓ AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ T ÓÔÏÔÁ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις... 25 2.1 Aδυναµίες της δοµηµένης ανάλυσης και σχεδίασης... 27 2.2 Bασικές έννοιες της αντικειµενοστρεφούς τεχνολογίας... 29 2.2.1 Oρισµοί... 30 2.2.2 Σχέσεις µεταξύ κλάσεων... 35 Σύνοψη ενότητας... 42 2.3 Ένας άλλος τρόπος παράστασης του κόσµου... 42 Σύνοψη ενότητας... 46 2.4 Συµβολισµοί και πρότυπα... 46 Σύνοψη κεφαλαίου... 50 K º π 3 EÈÛ ÁˆÁ ÛÙËÓ AÓÙÈÎÂÌÂÓÔÛÙÚÂÊ AÓ Ï ÛË Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά
6 TEXNO O IA O I MIKOY II Eισαγωγικές παρατηρήσεις... 51 3.1 Ένα γενικό πλαίσιο για αντικειµενοστρεφή ανάπτυξη λογισµικού... 53 Σύνοψη ενότητας... 56 3.2 H έννοια της Περίπτωσης Xρήσης... 57 3.2.1 Eισαγωγή... 57 3.2.2 Tι είναι «Περίπτωση Xρήσης»;... 58 3.2.3 Πώς προδιαγράφεται µια περίπτωση χρήσης;... 64 3.2.4 Ένα σηµείο αναφοράς... 69 Σύνοψη ενότητας... 71 3.3 Προσδιορισµός των λειτουργικών απαιτήσεων ως περιπτώσεων χρήσης... 72 Σύνοψη ενότητας... 74 3.4 Aπό τις περιπτώσεις χρήσης στο µοντέλο ανάλυσης... 82 3.4.1 Tο µοντέλο ανάλυσης... 82 3.4.2 Kλάσεις στο µοντέλο ανάλυσης... 84 3.4.3 Πακέτα ανάλυσης... 86 Σύνοψη ενότητας... 87 3.5 Bήµατα στην ανάλυση... 87 3.5.1 Aρχιτεκτονική ανάλυση... 89 3.5.2 Aνάλυση περιπτώσεων χρήσης... 94 3.5.3 Aνάλυση κλάσεων... 102 3.5.4 Aνάλυση πακέτων... 104 Σύνοψη ενότητας... 106 Σύνοψη κεφαλαίου... 106 K º π 4 EÚÁ ÏÂ Case Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις... 109 4.1 Xαρακτηριστικά και πλαίσιο λειτουργίας... 111 Σύνοψη ενότητας... 115 4.2 Tαξινόµηση των εργαλείων Case... 116 4.2.1 Tαξινόµηση σύµφωνα µε τη λειτουργία... 116 4.2.2 Tαξινόµηση σύµφωνα µε την εµβέλεια... 122 4.3 Kριτήρια αξιολόγησης και επιλογής εργαλείων Case... 124 Σύνοψη κεφαλαίου... 127
EPIEXOMENA 7 K º π 5 ÈÔ ÎËÛË ËÌ ÙÈÛÌÒÓ ÔÁÈÛÌÈÎÔ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις... 129 5.1 Bασικές έννοιες... 131 5.1.1 H έννοια του σχηµατισµού λογισµικού... 131 5.1.2 H έννοια της βασικής γραµµής... 133 Σύνοψη ενότητας... 134 5.2 ιοίκηση σχηµατισµών Λογισµικού... 134 5.3 Eργασίες διοίκησης σχηµατισµών Λογισµικού... 137 5.3.1 Kαθορισµός σχηµατισµών... 137 5.3.2 Έλεγχος µεταβολών σχηµατισµών... 143 5.3.3 Έλεγχος Ποιότητας σχηµατισµών... 146 5.3.4 Έκθεση κατάστασης σχηµατισµών... 147 Σύνοψη ενοτήτων 5.2 και 5.3... 148 5.4 Eργαλεία διοίκησης σχηµατισµών Λογισµικού... 148 Σύνοψη κεφαλαίου... 150 K º π 6 È ÛÊ ÏÈÛË ÔÈfiÙËÙ ÔÁÈÛÌÈÎÔ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις... 151 6.1 Ποιότητα Λογισµικού... 153 Σύνοψη ενότητας... 157 6.2 Eπιθεωρήσεις ποιότητας Λογισµικού... 157 6.3 Πρότυπα Λογισµικού... 161 6.3.1 Πρότυπα και διασφάλιση ποιότητας Λογισµικού... 161 6.3.2 Πρότυπα τεκµηρίωσης Λογισµικού... 163 Σύνοψη κεφαλαίου... 167 Aπαντήσεις Aσκήσεων Aυτοαξιολόγησης... 168 Aπαντήσεις ραστηριοτήτων... 174 Γλωσσάρι... 192 Συµπληρωµατική Bιβλιογραφία... 196 Bιβλιογραφία προαιρετική... 199
Φίλε αναγνώστη, Το βιβλίο που κρατάς είναι το δεύτερο από τα εκπαιδευτικά εγχειρίδια του Ελληνικού Ανοιχτού Πανεπιστηµίου µε αντικείµενο την «Τεχνολογία Λογισµικού», την περιοχή εκείνη της επιστήµης της Μηχανικής η οποία ασχολείται µε την επιστηµονική θεµελίωση του τρόπου κατασκευής του Λογισµικού. Αποτελεί πλέον κοινή θέση ότι το Λογισµικό είναι ένα από τα περισσότερο κρίσιµα τεχνικά κατασκευάσµατα του ανθρώπου. Παρά το γεγονός ότι είναι διάχυτη η προσδοκία όλων το λογισµικό να υποστηρίζει την εκτέλεση µεγάλων και σύνθετων εργασιών σε ολοένα και περισσότερους τοµείς της ανθρώπινης ζωής, είναι επίσης διάχυτη στους κατασκευαστές λογισµικού η θέση ότι η ανάπτυξη του λογισµικού είναι και η ίδια µια ιδιαίτερα σύνθετη και απαιτητική, σε όλα τα επίπεδα, εργασία. Η Τεχνολογία Λογισµικού έκανε τα πρώτα της βήµατα µέσα σ' ένα περιβάλλον στο οποίο ο ρυθµός των αλλαγών που συντελούνται στην τεχνολογία των υπολογιστών, αλλά και σε όλους τους τοµείς των δραστηριοτήτων µας όπου αυτοί χρησιµοποιούνται, δεν ήταν συνειδητός, σίγουρα όχι στο βαθµό που είναι σήµερα, όπου όλοι µιλούν για εντυπωσιακά ραγδαίες εξελίξεις στην τεχνολογία, τη νέα οικονοµία, τις επικοινωνίες και αλλού. Οι πρωτοπόροι στην έρευνα και στην πρακτική της ανάπτυξης λογισµικού αναζητούσαν τον καλύτερο τρόπο να κατασκευάζεται και να συντηρείται λογισµικό, χωρίς τη συνείδηση ότι η έννοια «καλύτερο» είναι σχετική για τα ανθρώπινα πράγµατα και, ασφαλώς, χωρίς να µπορούν να φανταστούν ούτε πόσο γρήγορα θα «εξαπλώνονταν» οι απαιτήσεις των χρηστών των υπολογιστικών συστηµάτων, ούτε ποια µορφή θα έχουν οι υπολογιστές στο µέλλον. Σήµερα, γνωρίζουµε ότι οι υπολογιστές και το λογισµικό βρίσκονται πρακτικά παντού και µας υποστηρίζουν σε πολλές από τις δραστηριότητές µας, ακόµη και χωρίς να το αντιλαµβανόµαστε άµεσα. Η αίσθηση και η µορφή του λογισµικού έχει εξελιχθεί. Η αλληλεπίδραση των χρηστών µε το λογισµικό σήµερα, δε γίνεται µε λίγες και µεγάλες εφαρµογές, όπως στο παρελθόν, αλλά µε πολλές και µικρές. Μάλιστα, οι εφαρµογές λογισµικού που χρησιµοποιούµε συχνά βρίσκονται κατανεµηµένες σε κάποιο δίκτυο, στο οποίο πρόκειται να συνυπάρξουν στο κοντινό µέλλον όλα τα πληροφοριακά και επικοινωνιακά συστήµατα.
10 TEXNO O IA O I MIKOY II Είναι, ως εκ τούτου, φανερό, ότι ο τρόπος και η φιλοσοφία της ανάπτυξης λογισµικού πρέπει να εξελίσσονται συνεχώς, ώστε να ικανοποιούνται οι νέες απαιτήσεις. Οι γλώσσες δοµηµένου προγραµµατισµού, οι οποίες ήταν επί µακρόν το κύριο εργαλείο για την ανάπτυξη του λογισµικού, διέθεταν δοµικές µονάδες µε τις οποίες έπρεπε να χτιστούν οι οσοδήποτε σύνθετες εφαρµογές και καθοδηγούσαν τη σκέψη µας κατά την δόµηση των εφαρµογών αυτών. Μιλώντας µεταφορικά, ήταν τα οικοδοµικά υλικά που καθόριζαν τον τρόπο σκέψης του χτίστη και όχι η σύλληψη του για το οικοδόµηµα. Ωστόσο, η πολυπλοκότητα και η ανάγκη επεξεργασίας µεγάλου όγκου δεδοµένων έφεραν στην επιφάνεια σηµαντικές αδυναµίες της δοµηµένης φιλοσοφίας µε αποτέλεσµα την εξέλιξη του τρόπου σκέψης όσων ασχολούνται µε κατασκευή λογισµικού, η οποία, ασφαλώς, υποστηρίχτηκε και από την εξέλιξη του υλικού των υπολογιστών. Η νέα θεώρηση που έγινε δηµοφιλής, επικράτησε να ονοµάζεται αντικειµενοστρεφής φιλοσοφία ή παράδειγµα (object oriented philosophy, paradigm) και αντιµετωπίζει µε έναν εντελώς διαφορετικό από τη δοµηµένη προσέγγιση, τρόπο, τη σύλληψη, την ανάλυση και τη σχεδίαση του λογισµικού. Με την αντικειµενοστρεφή φιλοσοφία ασχολούµαστε στα τρία πρώτα κεφάλαια του βιβλίου αυτού, επιχειρώντας να εισάγουµε τον αναγνώστη στις πλέον σύγχρονες (για την στιγµή που γράφονται οι γραµµές αυτές) προσεγγίσεις στην ανάπτυξη του λογισµικού. Στο κεφάλαιο 1 γίνεται µια σύνδεση µε τον πρώτο τόµο, η µελέτη του οποίου αποτελεί ουσιαστικά προαπαιτούµενο για την απρόσκοπτη παρακολούθηση της ύλης τουλάχιστον των τριών πρώτων κεφαλαίων του ανά χείρας βιβλίου. Αναφέρονται τα σύγχρονα χαρακτηριστικά του λογισµικού και οι εξελίξεις που χαρακτηρίζουν το χώρο του λογισµικού γενικότερα, έτσι ώστε να εισαχθεί µε τρόπο φυσικό η νέα θεώρηση της αντικειµενοστρεφούς φιλοσοφίας. Στο κεφάλαιο 2 δίνονται οι βασικές έννοιες της αντικειµενοστρεφούς φιλοσοφίας µε έµφαση στην αποκάλυψη των στοιχείων ενός διαφορετικού από τη δοµηµένη προσέγγιση τρόπου σκέψης. Επίσης, εισάγεται η UML, ένα πρότυπο για την παράσταση συστατικών στοιχείων λογισµικού, η έλλειψη του οποίου ταλαιπώρησε επί µακρόν την κοινότητα των κατασκευαστών λογισµικού και τους αποξένωνε µεταξύ τους. Ο αναγνώστης µε βασική εµπειρία στην ανάπτυξη λογισµικού, θα συµφωνήσει µε τη θέση ότι, παρά την απλότητα και το «αυτονόητο» της ανάγκης για χρήση κοινών συµβολισµών από όλους τους κατασκευαστές λογισµικού, κάτι τέτοιο δεν επετεύχθη για µεγάλο χρονικό διάστηµα, οπότε αποτελεί ουσιώδες βήµα προόδου από µόνο του, η εισαγωγή της UML.
XXX 11 Στο κεφάλαιο 3 ο αναγνώστης εισάγεται στην Ενοποιηµένη Προσέγγιση ανάπτυξης λογισµικού και ειδικότερα στην αντικειµενοστρεφή ανάλυση σύµφωνα µε αυτή. Επιλέξαµε να αναφερθούµε στην προσέγγιση αυτή λόγω του ότι αποτελεί το αποτέλεσµα της «συγχώνευσης» τριών από τις επικρατέστερες προσεγγίσεις και συγκεκρι- µένα των Jacobson, Booch και Rumbaugh και συγκεντρώνει τα καλύτερα από τα στοιχεία των τριών ανεξάρτητων προσεγγίσεων. Υπάρχουν, ασφαλώς, και άλλες προσεγγίσεις αντικειµενοστρεφούς ανάπτυξης λογισµικού τις οποίες ο αναγνώστης προτρέπεται να αναζητήσει στην προτεινόµενη βιβλιογραφία. Ωστόσο, και µε δεδοµένο τον εισαγωγικό χαρακτήρα και την έκταση της δικής µας παρουσίασης, µπορούµε µε ασφάλεια να ισχυριστούµε ότι η Ενοποιηµένη Προσέγγιση είναι κατάλληλη για το σκοπό µας, επιτρέποντάς µας να εντοπίσουµε ορισµένα σηµαντικά χαρακτηριστικά της αντικειµενοστρεφούς φιλοσοφίας και να αναδείξουµε τη χρήση της UML. Στα τρία κεφάλαια που ακολουθούν, ο αναγνώστης εισάγεται σε τρία σηµαντικά θέµατα που ολοκληρώνουν την πρώτη επαφή µε την Τεχνολογία Λογισµικού η οποία επιχειρείται στους δύο τόµους του βιβλίου αυτού. Στο κεφάλαιο 4 υπάρχει µια εισαγωγή στα εργαλεία CASE, ένα σύνολο από εφαρµογές λογισµικού οι οποίες στοχεύουν στην υποστήριξη ή και την αυτοµατοποίηση της ίδιας της κατασκευής του λογισµικού. Τα εργαλεία CASE, αν και υποσχέθηκαν πολλά, στην αρχή τουλάχιστον δεν είχαν τα αναµενόµενα αποτελέσµατα, θέση η οποία φαίνεται να φθίνει καθώς η κοινότητα του λογισµικού ωριµάζει. Έχοντας κατά νου το πλαίσιο αυτό, επιχειρού- µε µια εισαγωγή και µια ταξινόµηση των εργαλείων CASE, καθώς και µια σύντοµη αναφορά σε κριτήρια επιλογής τους. Στο κεφάλαιο 5 εισάγεται το πρόβληµα της ιοίκησης Σχηµατισµών Λογισµικού (configuration management). Πρόκειται για µια εργασία η οποία πρέπει να εκτελείται σε κάθε οργανισµό κατασκευής λογισµικού, ανεξάρτητα από τη µεθοδολογία, τη φιλοσοφία και τα εργαλεία ανάπτυξης που κατά τα άλλα ο οργανισµός χρησιµοποιεί και παράλληλα µε τη ροή των εργασιών ανάπτυξης λογισµικού. Μπορούµε να πούµε πως η ιοίκηση Σχηµατισµών είναι συχνά δύσκολα αντιληπτή από τους κατασκευαστές, τόσο σε επίπεδο αναγκαιότητας, όσο και σε επίπεδο εκτέλεσης. Αποτελεί, λοιπόν, ελάχιστη υποχρέωση ενός πανεπιστηµιακού βιβλίου να εισάγει το θέµα και να παρουσιάσει τις πλευρές του και την κρισιµότητά του, ακόµη και αν οι ίδιοι οι κατασκευαστές λογισµικού δεν ασχολούνται όσο θα έπρεπε µε το αντικείµενο. Τέλος, στο κεφάλαιο 6 γίνεται µια εισαγωγή στο θέµα της διασφάλισης ποιότητας λογισµικού, αντικείµενο µε το οποίο καταπιάνεται σε βάθος ένας τίτλος µιας άλλης θεµατικής ενότητας του προγράµµατος σπουδών πληροφορικής του ΕΑΠ. Πολλοί υποστηρίζουν ότι οι λέξεις «ποιότητα» και «λογισµικό» έχουν ακόµη αρκετό δρόµο
να διανύσουν µέχρις ότου βρεθούν και σηµασιολογικά κοντά. Αυτό δεν αποτρέπει, ίσα ίσα επιβάλλει έστω και την εισαγωγική αναφορά στο θέµα της ποιότητας λογισµικού, την οποία επιχειρούµε στο κεφάλαιο αυτό. Σε πολλά από τα αναφερόµενα στο ανά χείρας βιβλίο, ενδέχεται, φίλε αναγνώστη, είτε να έχεις ο ίδιος είτε να συναντήσεις διαφορετική άποψη στην προτεινόµενη, ή και σε άλλη βιβλιογραφία. Αυτό είναι όχι µόνο «ενδεικτικό της ρευστότητας των πραγµάτων», αλλά και καλό γιατί θα σε αναγκάσει να προβληµατιστείς. Θα επαναλάβουµε τη διατύπωση της εισαγωγής του πρώτου τόµου ότι «το ζητούµενο δεν είναι να αποµνηµονεύσεις ούτε να αποδεχτείς γνώση 'άνευ όρων'. Είναι να µάθεις πώς να µαθαίνεις, να κρίνεις και να αξιολογείς». Αυτό που θα πρέπει να κρατήσεις, δεν είναι κάποιες γνώσεις που σε λίγο ενδεχοµένως να είναι ξεπερασµένες, αλλά ακριβώς η ικανότητα να αµφισβητείς, να κρίνεις και να συνθέτεις ώστε να ξεπερνάς τη γνώση του σήµερα και να µπορείς να προάγεις, µε δικές σου δυνάµεις, την επιστήµη. Σε αυτό ελπίζουµε να συµβάλλουµε µε τις µικρές µας δυνάµεις, µαχόµενοι µε την ανάγκη αναφοράς πολλών και σύνθετων εννοιών σε εύλογο χώρο. Κλείνω το σύντοµο αυτό σηµείωµα µε τις φαινοµενικά τυπικές, αλλά ειλικρινείς ευχαριστίες σε όλους τους συντελεστές του ΕΑΠ για την πολύ καλή συνεργασία µας τα τρία τελευταία χρόνια, προς τους φίλους και συναδέλφους Γιάννη Ψαροµήλιγκο, Νίκο Παπασπύρου και Νίκο Λεβογιάννη, καθώς και προς όλους εκείνους που µε υπέφεραν κατά τη συγγραφή του ανά χείρας. Επιθυµώ να αφιερώσω και αυτό το βιβλίο στους µαχόµενους πληροφορικάριους, σε όλους εκείνους που παράγουν και δεν «διαχειρίζονται». Βασίλειος Χ. Βεσκούκης Αθήνα, εκέµβριος 2000
TÔ ÔÁÈÛÌÈÎfi Û ÌÂÚ ÎÔapplefi Σκοπός του κεφαλαίου είναι η σύνδεση µε το πρώτο µέρος του βιβλίου, το οποίο αποτέλεσε το εκπαιδευτικό υλικό της Θεµατικής Υπο Ενότητας «Τεχνολογία Λογισµικού I» και η οριοθέτηση του θεµατικού αντικειµένου του παρόντος βιβλίου µε αναφορά στα σύγχρονα χαρακτηριστικά και τις τρέχουσες τάσεις στην ανάπτυξη του λογισµικού. 1 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Μετά τη µελέτη του κεφαλαίου αυτού ο αναγνώστης θα είναι σε θέση να: Αναφέρει έξι σύγχρονα χαρακτηριστικά του λογισµικού και του τρόπου ανάπτυξής του, Αναφέρει τέσσερις τρέχουσες τάσεις στην ανάπτυξη του λογισµικού, καθώς και τέσσερις εξελίξεις που έπαιξαν σηµαντικό ρόλο στη διαµόρφωση αυτών των τάσεων, Εγκαθιστά στον υπολογιστή του τη δοκιµαστική έκδοση του εργαλείου CASE «Rational Rose» από το Internet ή από άλλη πηγή. ŒÓÓÔÈ ÎÏÂÈ È Λογισµικό Πολυπλοκότητα Εξελίξεις Rational Rose ÈÛ ÁˆÁÈÎ apple Ú ÙËÚ ÛÂÈ Τα πρώτα βήµατα της Τεχνολογίας Λογισµικού έγιναν µέσα σ' ένα περιβάλλον, όπου ο ρυθµός των αλλαγών που συντελούνται στην τεχνολογία των υπολογιστών, αλλά και σε όλους τους τοµείς των ανθρώπινων δραστηριοτήτων όπου αυτοί χρησιµοποιούνται, δεν ήταν συνειδητός, σίγουρα όχι στο βαθµό που είναι σήµερα. Οι πρωτοπόροι στην έρευνα και στην πρακτική της ανάπτυξης λογισµικού αναζητούσαν τον καλύτερο τρόπο να κατασκευάζεται και να συντηρείται λογισµικό, χωρίς να γνωρίζουν ότι η έννοια «καλύτερο» ήταν µόνο σχετική, χωρίς να µπορούν να φανταστούν πόσο γρήγορα θα µεταβαλλόταν η άποψη, οι απαιτήσεις και τελικά η συνείδηση των χρηστών των υπο-
14 KEºA AIO 1: T π ªπ ª ƒ λογιστικών συστηµάτων, αλλά και χωρίς να µπορούν να συλλάβουν ποια µορφή θα έχουν οι υπολογιστές στο µέλλον. Σήµερα, γνωρίζουµε ότι οι υπολογιστές και κατά συνέπεια το λογισµικό βρίσκονται πρακτικά παντού και µας υποστηρίζουν σε πολλές από τις δραστηριότητές µας. Η αίσθηση και η µορφή του λογισµικού έχει εξελιχθεί. Η αλληλεπίδραση µε λογισµικό, την οποία βιώνουµε σήµερα, δε γίνεται µε λίγες και µεγάλες εφαρµογές, αλλά µε πολλές και µικρές, οι οποίες βρίσκονται κατανεµηµένες οπουδήποτε σε κάποιο δίκτυο, όπου πρόκειται να συγκλίνουν στο κοντινό µέλλον όλα τα πληροφοριακά και επικοινωνιακά συστήµατα. Ως εκ τούτου, ο τρόπος και η φιλοσοφία της ανάπτυξης λογισµικού ήταν αναγκαίο να εξελιχθούν, ώστε να ικανοποιούνται οι σύγχρονες απαιτήσεις. Ποιες είναι οι καθοριστικές εξελίξεις, τα νέα χαρακτηριστικά και οι τάσεις στην ανάπτυξη του λογισµικού; Με τα ερωτήµατα αυτά θα ασχοληθούµε στο παρόν κεφάλαιο.
1.1 ƒ π ª ª À π Ã π 15 1.1 appleôúâ ÙË ÔÌËÌ ÓË Ó Ï ÛË Î È Û Â ÛË Στον πρώτο τόµο του βιβλίου αυτού ασχοληθήκαµε µε την οικογένεια προσεγγίσεων ανάπτυξης λογισµικού, η οποία χαρακτηρίζεται ως «δοµηµένη ανάλυση και σχεδίαση». Οι προσεγγίσεις αυτές εµφανίστηκαν µέσα στη δεκαετία του 1970 και ήταν κρατούσες µέχρι και το τέλος της δεκαετίας του 1980, όπου άρχισαν να κερδίζουν έδαφος διαφορετικές αντιλήψεις σχετικά µε την ανάπτυξη λογισµικού. Στη δοµηµένη ανάλυση και σχεδίαση, κάθε εφαρµογή λογισµικού θεωρείται ως µια ενιαία και σχετικά αυτοτελής, µεγάλη και σύνθετη λειτουργική µονάδα λογισµικού, η οποία είναι εξ ολοκλήρου υπεύθυνη για την επικοινωνία µε το περιβάλλον της και για την πραγµατοποίηση των υπολογιστικών «καθηκόντων» της. Αυτά τα υπολογιστικά «καθήκοντα» αναλύονται ως µια ιεραρχία απλούστερων µονάδων λογισµικού, οι οποίες επιδρούν σε δεδοµένα. Τα δεδοµένα είναι εντελώς ανεξάρτητα από τις µονάδες λογισµικού που επιδρούν σ' αυτά, στις οποίες και εστιάζεται η προσοχή όλων των προσεγγίσεων ανάπτυξης λογισµικού της δοµηµένης ανάλυσης και σχεδίασης. Στη δοµηµένη ανάλυση, οι απαιτήσεις από το λογισµικό περιγράφονται µε τη βοήθεια δοµηµένου κειµένου, καθώς και µε ένα διάγραµµα (µοντέλο παράστασης λογισµικού), το οποίο ονοµάζεται διάγραµµα ροής δεδοµένων. Το διάγραµµα αυτό είναι κεντρικό στοιχείο όλων των προσεγγίσεων της οικογένειας της δοµηµένης ανάλυσης και σχεδίασης και χρησιµεύει ως βάση για την αποκάλυψη της ιεραρχίας µονάδων λογισµικού που αναφέραµε. Από το διάγραµµα ροής δεδοµένων, ακολουθώντας κάποια βήµατα, φτάνουµε στο διάγραµµα δοµής προγράµµατος. Το επίπεδο λεπτοµέρειας του διαγράµµατος δοµής προγράµµατος, είναι αντίστοιχο µε εκείνο του διαγράµµατος ροής δεδοµένων από το οποίο προήλθε. Στο διάγραµµα αυτό, περιγράφεται η ιεραρχία των µονάδων που αποτελούν την εφαρµογή λογισµικού, δηλαδή το ποιες είναι οι µονάδες αυτές, καθώς και η επικοινωνία µεταξύ τους, δηλαδή οι κλήσεις που κάνει κάθε µονάδα σε άλλες και οι παράµετροι που ανταλλάσσονται κατά τις κλήσεις αυτές. Προκειµένου να µπορεί να κατασκευαστεί ο πηγαίος κώδικας, πρέπει να γίνει µια κατά το δυνατόν λεπτοµερής περιγραφή κάθε µονάδας λογισµικού που περιέχεται στο διάγραµµα δοµής προγράµµατος. Η περιγραφή αυτή γίνεται µε τη βοήθεια κάποιας υποθετικής και άτυπης «γλώσσας προγραµµατισµού», η οποία δε διαθέτει αυστηρότητα στη σύνταξη και τη γραµµατική και αναφέρεται ως ψευδοκώδικας. Τα ενδιάµεσα αυτά προϊόντα έχουν ιδιαίτερη σηµασία στη δοµηµένη ανάλυση και σχεδίαση, αποτελώντας τη ραχοκοκα- ΠPO IAΓPAΦH TΩN AΠAITHΣEΩN IAΓPAMMA POHΣ E OMENΩN IAΓPAMMA OMHΣ ΠPOΓPAMMATOΣ ΨEY OKΩ IKAΣ Ì 1.1 Προϊόντα της δοµηµένης ανάλυσης και σχεδίασης
16 KEºA AIO 1: T π ªπ ª ƒ λιά της σχεδίασης του λογισµικού, όπως φαίνεται στο Σχήµα 1.1. Όλες οι έννοιες που συγκροτούν το οικοδόµηµα που µόλις περιγράψαµε, σχετίζονται µε τα χαρακτηριστικά των γλωσσών προγραµµατισµού που χρησι- µοποιούνται στην υλοποίηση της εφαρµογής λογισµικού. Οι µονάδες λογισµικού σε τελική ανάλυση δεν είναι παρά οι διαδικασίες (procedures), οι συναρτήσεις (functions), είτε οι υπορρουτίνες (subroutines) γλωσσών προγραµµατισµού όπως η Pascal, η C, η FORTRAN, η BASIC και η COBOL. Με τη σειρά τους, και σε πολύ µεγαλύτερο βαθµό, οι γλώσσες προγραµµατισµού σχετίζονται µε τα χαρακτηριστικά του υλικού (hardware) των υπολογιστών της εποχής στην οποία αναφερόµαστε: ακολουθιακή εκτέλεση εντολών, απλές δυνατότητες επικοινωνίας µε το περιβάλλον µόνο µε τη µορφή κειµένου, καθώς και περιορισµένες (σε σχέση µε όσα ακολούθησαν) επιδόσεις και αποθηκευτικές ικανότητες. Χαρακτηριστικά όπως η πολυεπεξεργασία, η παράλληλη εκτέλεση εντολών, η επικοινωνία µε το χρήστη µε τη βοήθεια περιβάλλοντος γραφικών, η δυνατότητα σύνθεσης και αναπαραγωγής ήχου και εικόνας, κ.ά., έγιναν πραγµατικότητα µέσα στη δεκαετία του 1990 και κυρίως τα λίγα τελευταία χρόνια. Σταδιακά ενσωµατώθηκαν στις γλώσσες προγραµµατισµού και άσκησαν µε τον τρόπο τους πίεση για εξέλιξη του τρόπου κατασκευής του λογισµικού, ο οποίος δεν ήταν ούτως ή άλλως χωρίς προβλήµατα. Οι εξελίξεις αυτές έφεραν σε νέο έδαφος την Τεχνολογία Λογισµικού. Η δοµηµένη ανάλυση και σχεδίαση αποτέλεσε το βάθρο για την εξέλιξη της φιλοσοφίας ανάπτυξης λογισµικού. Σήµερα, η κρατούσα αντίληψη στην ανάπτυξη λογισµικού αναφέρεται ως αντικειµενοστρεφής τεχνολογία ή παράδειγµα (object oriented technology, paradigm). Η φιλοσοφία αυτή είναι αρκετά γενική, ώστε η δοµηµένη ανάλυση και σχεδίαση να µπορεί να θεωρηθεί υποσύνολό της. Επίσης, µπορεί να υιοθετηθεί από πολλές σύγχρονες µεθοδολογίες και εργαλεία, τα οποία υλοποιούν ευέλικτα και προσαρµόσιµα µοντέλα κύκλου ζωής λογισµικού. Όποιο δρόµο και αν ακολουθήσουµε, το τελικό ζητούµενο είναι να προσδιορίσουµε ποιες είναι εκείνες οι µονάδες λογισµικού που θα «κάνουν τη δουλειά», όπως και αν αυτές ονοµάζονται. Ο καθορισµός των προδιαγραφών των απαιτήσεων από το λογισµικό, αλλά και οι εργασίες του ελέγχου και της επαλήθευσης του λογισµικού, θα εξακολουθήσουν να έχουν την ίδια βαρύνουσα σηµασία.
1.2 à ƒ ƒπ π À À Ã À π ªπ À 17 fiïèô ÌÂÏ ÙË Ως σύνδεση µε τα προηγούµενα, προτρέπεστε να µελετήσετε τις ενότητες του βιβλίου «Τεχνολογία Λογισµικού I» στις οποίες ορίζονται: (α) το διάγραµµα ροής δεδοµένων, (β) το έγγραφο προδιαγραφών των απαιτήσεων από το λογισµικό, (γ) το διάγραµµα δοµής προγράµµατος, (δ) το έγγραφο περιγραφής του σχεδίου του λογισµικού, (ε) ο ψευδοκώδικας, (στ) τα βήµατα µετάβασης από το διάγραµµα ροής δεδοµένων στο διάγραµµα δοµής προγράµµατος. ÓÔ Ë ÂÓfiÙËÙ Η δοµηµένη ανάλυση και σχεδίαση χρησιµοποιεί για την περιγραφή του λογισµικού ένα σύνολο από ενδιάµεσα προϊόντα που χαρακτηρίζουν την φιλοσοφία της, δηλαδή την αποκάλυψη µιας ιεραρχίας ενεργών συστατικών λογισµικού, καθώς και ανεξάρτητων δεδοµένων. Η εξέλιξη των χαρακτηριστικών και των δυνατοτήτων του υλικού επιτρέπουν την αναθεώρηση της αντι- µετώπισης αυτής µε την εισαγωγή της αντικειµενοστρεφούς τεχνολογίας. 1.2 Ã Ú ÎÙËÚÈÛÙÈÎ ÙÔ Û Á ÚÔÓÔ ÏÔÁÈÛÌÈÎÔ Πώς είναι το λογισµικό σήµερα; Ποια είναι τα χαρακτηριστικά του; Σε τι θυµίζει τις εφαρµογές που έτρεχαν σε µια «ψυχρή» µονόχρωµη οθόνη ενός τερµατικού; Ποια είναι τα χαρακτηριστικά των χρηστών του; Αυτά είναι µερικά λογικά ερωτήµατα, τα οποία αιτιολογούν την παράθεση ορισµένων σύγχρονων χαρακτηριστικών του λογισµικού, προκειµένου να συνθέσουµε µια γενική εικόνα, η οποία θα µας είναι χρήσιµη στην αιτιολόγηση ή έστω την αντίληψη των σύγχρονων εξελίξεων της επιστήµης της Τεχνολογίας Λογισµικού (Σχήµα 1.2).
18 KEºA AIO 1: T π ªπ ª ƒ Bρίσκεται παντού Eίναι απλό στη χρήση Λειτουργεί σε δίκτυο Ì 1.2 Κοµµάτια που συνθέτουν το παζλ του λογισµικού σήµερα. Eίναι ανεξάρτητο από το υλικό Eίναι πολύπλοκο Γίνεται απαραίτητο Πρώτον, σήµερα το λογισµικό βρίσκεται παντού. Αποτελεί µέρος όλων των σύγχρονων ηλεκτρονικών ψηφιακών διατάξεων, ανεξάρτητα από το αν είναι ορατό στον χρήστη αυτών. Μπορεί κανείς να φέρει αναρίθµητα παραδείγµατα, από τα ολοένα και µικρότερα ψηφιακά εργαλεία, µέχρι το σύστηµα ελέγχου της λειτουργίας του κινητήρα του αυτοκινήτου, αλλά και του πλυντηρίου µας. εύτερον, το λογισµικό γίνεται ολοένα και περισσότερο απλό στη χρήση και προσιτό σε οποιονδήποτε. Με τη βοήθεια του λογισµικού οι χρήστες χειρίζονται τις ψηφιακές συσκευές µέσω παραστάσεων που πλησιάζουν αυτές του πραγµατικού κόσµου, έχοντας στη διάθεσή τους από παράθυρα, εικόνα και ήχο, έως και «εξωτικές» µέχρι πρότινος ικανότητες, όπως αναγνώριση φωνής και εικονική πραγµατικότητα. Τρίτον, σήµερα το λογισµικό στεγάζεται σε δίκτυο, είτε στο αυτοτελές εταιρικό δίκτυο, είτε στο καθολικά πλέον διαδεδοµένο Internet. Σε ειδικές µόνο περιπτώσεις, λογισµικό λειτουργεί αυτοτελώς σε κάποιον µη δικτυωµένο υπολογιστή. Λειτουργώντας σε δικτυακό περιβάλλον, κάθε εφαρµογή λογισµικού επιτελεί τις λειτουργίες για τις οποίες προορίζεται συνεργαζόµενη και µε άλλες εφαρµογές που βρίσκονται κάπου οπουδήποτε στο ίκτυο. Τέταρτον, το λογισµικό τείνει να γίνεται ολοένα και περισσότερο ανεξάρτητο από τη µηχανή στην οποία τρέχει και µάλιστα σε επίπεδο εκτελέσιµου κώδικα. Ο κατασκευαστής λογισµικού µπορεί να επικεντρώσει την προσοχή του στην λειτουργικότητα και την ορθότητα των εφαρµογών που κατα-
À æ 19 σκευάζει και όχι στις τεχνικές λεπτοµέρειες της µηχανής, όπου αυτές θα τρέχουν. Το χαρακτηριστικό αυτό (µεταφερσιµότητα) αποτέλεσε επιδίωξη και σε παλαιότερες εποχές της επιστήµης των υπολογιστών και µερικώς επετεύχθη, σε επίπεδο όµως πηγαίου και όχι εκτελέσιµου κώδικα. Πέµπτον και λογικά επαγόµενο από τα παραπάνω, το λογισµικό γίνεται ολοένα και περισσότερο πολύπλοκο στη δοµή και στη συγγραφή του. Είναι πλέον δεδοµένη η αύξηση των πεδίων χρήσης του λογισµικού και σε εφαρ- µογές εκτός εργαστηρίου και επιχειρήσεων. Το λογισµικό έρχεται περισσότερο κοντά στο µη καταρτισµένο χρήστη, γεγονός που δηµιουργεί την ανάγκη για ενσωµάτωση εννοιών, συµβόλων και αναπαραστάσεων που είναι περισσότερο κοντά στην πραγµατικότητα που αντιπροσωπεύει το περιβάλλον εφαρµογής του λογισµικού. υνατότητες όπως η αναπαράσταση εικονικής πραγµατικότητας, η λειτουργία σε ανοµοιογενές δικτυακό περιβάλλον, η συνεργασία µε άλλες εφαρµογές στο δίκτυο και η ανεξαρτησία από το υλικό, δεν είναι απλή υπόθεση να πραγµατοποιούνται. Τέλος, είναι φανερό ότι το λογισµικό γίνεται ολοένα και περισσότερο απαραίτητο και υπεισέρχεται σε κρίσιµους τοµείς της ζωής µας. Κρίσιµους, όχι µόνο στην επαγγελµατική σφαίρα, αλλά και στην επικοινωνία, την εκπαίδευση και τελικά την ίδια τη λειτουργία του κοινωνικού οικοδοµήµατος. Χωρίς λογισµικό δεν είναι δυνατό να λειτουργήσουν τα αεροδρόµια, οι σύγχρονες ιατρικές συσκευές, οι τράπεζες, οι τηλεπικοινωνίες, και πολλές άλλες απαραίτητες στο σύγχρονο άνθρωπο υπηρεσίες. Από την άλλη, οφείλουµε να σηµειώσουµε ότι, αν ο ιδιωτικός χαρακτήρας των δεδοµένων που αφορούν πολλές πλευρές της ζωής µας σήµερα απειλείται, αυτό γίνεται µε το λογισµικό ως απαραίτητο εργαλείο στα χέρια όσων την απειλούν. Είναι χρήσιµο, λοιπόν, οι ασχολούµενοι µε την ανάπτυξη λογισµικού να συνειδητοποιούµε και τις µη καθαρά τεχνικές πλευρές του αντικειµένου της επιστήµης µας. ÓÔ Ë ÂÓfiÙËÙ Το λογισµικό µεταβάλλεται µε ραγδαίους ρυθµούς. Τρέχει, πλέον, πάνω σε δίκτυο και γίνεται ολοένα και περισσότερο φιλικό αλλά και απαραίτητο σε πολλές πλευρές της ζωής µας, µε όλα τα καλά και τα κακά που αυτό συνεπάγεται. Όλα αυτά επιφέρουν, ασφαλώς, αύξηση της πολυπλοκότητας του λογισµικού, το οποίο πλέον λειτουργεί σε ανοµοιογενή και κατανεµηµένα περιβάλλοντα. Η Tεχνολογία Λογισµικού βρίσκεται προ µιας νέας πραγµατικότητας και καλείται να προσαρµόσει τις προσεγγίσεις της στις νέες αυτές συνθήκες.
20 KEºA AIO 1: T π ªπ ª ƒ 1.3 ÍÂÏ ÍÂÈ Î È Ù ÛÂÈ ÛÙËÓ Ó appleù ÍË ÙÔ ÏÔÁÈÛÌÈÎÔ Η κατασκευή λογισµικού µε τα χαρακτηριστικά που αναφέρονται στην ενότητα 1.2 και, ασφαλώς, µε τις απαιτήσεις να κάνει τη δουλειά για την οποία προορίζεται και να την κάνει σωστά, να κατασκευάζεται εντός χρονοδιαγράµµατος και προϋπολογισµού, να µην περιέχει σφάλµατα, να συντηρείται εύκολα, αλλά και να είναι επίκαιρο και ανταγωνιστικό ως προϊόν, είναι η πρόκληση µε την οποία βρίσκονται αντιµέτωποι οι κατασκευαστές λογισµικού σήµερα. Είναι αναµενόµενο, πολλά από τα χαρακτηριστικά της διαδικασίας ανάπτυξης λογισµικού να πρέπει να εξελίσσονται συνεχώς ώστε να επιτυγχάνεται το επιθυµητό αποτέλεσµα. Η Τεχνολογία Λογισµικού οφείλει να παρέχει την απαιτούµενη υποστήριξη και τεκµηρίωση, ώστε η κατασκευή του λογισµικού να είναι µια ιδιαίτερα ευέλικτη και προσαρµόσιµη διαδικασία. Ορισµένες από τις εξελίξεις που έπαιξαν σηµαντικό ρόλο στη θεµελίωση της ανάγκης νέων προσεγγίσεων στην ανάπτυξη του λογισµικού, είναι οι ακόλουθες: Η προσήλωση των κατασκευαστών σε αυστηρές διαδικασίες και πρότυπα που είτε ήταν αποτέλεσµα προσπάθειας σύγκλισης υπαρχουσών πρακτικών, είτε είχαν µικρή σχέση µε τους κατασκευαστές λογισµικού, αποδείχθηκε αναποτελεσµατική. Στην πράξη, οι παραδοσιακές προσεγγίσεις ξεπεράστηκαν ως απλά ανεπαρκείς, µιας και η ανάπτυξη του λογισµικού σπάνια γινόταν «κατά γράµµα». Από την άλλη πλευρά, η ανεπάρκεια που µόλις αναφέρθηκε, συχνά γεννούσε το αντίθετο φαινόµενο, δηλαδή την πλήρη «αναρχία» στην ανάπτυξη λογισµικού. Και πάλι όµως, η άναρχη ανάπτυξη οδηγούσε (και οδηγεί) µε προδιαγεγραµµένη ακρίβεια σε αποτυχηµένα έργα ανάπτυξης λογισµικού. Ο ρυθµός µε τον οποίο αναπτύχθηκε η τεχνολογία του υλικού των υπολογιστών ξεπέρασε κάθε πρόβλεψη, δίνοντας στους χρήστες εργαλεία και δυνατότητες αξιοποίησης σε νέες περιοχές εφαρµογών. Η ανάδειξη του Internet, το οποίο αρχικά δηµιουργήθηκε για στρατιωτικούς σκοπούς στις ΗΠΑ, στο νέο µέσο επικοινωνίας του 21ου αιώνα, δηµιούργησε µια νέα πλατφόρµα πάνω στην οποία τρέχει το λογισµικό. Τα σηµαντικότερα χαρακτηριστικά αυτής είναι η ανοµοιογένεια, η µεγάλη γεωγραφική κατανοµή, η µη ασφαλής επικοινωνία, αλλά και η εκρηκτικά αυξανόµενη ζήτηση για υπηρεσίες και εφαρµογές λογισµικού που τρέχουν πάνω σ' αυτή τη νέα πλατφόρµα.
1.3 π π π π À À π ªπ À 21 Η σύγκλιση, µετά από αρκετό καιρό, των επικρατέστερων από τις νέες αντικειµενοστρεφείς προσεγγίσεις ανάπτυξης λογισµικού και η επαφή τους µε τη βιοµηχανική πρακτική, µε την οποία θα ασχοληθούµε εκτενέστερα στο κεφάλαιο 3. Μπορούµε, λοιπόν, να αναγνωρίσουµε ότι σ' αυτό το πλαίσιο εντάσσονται οι παρακάτω τάσεις στην ανάπτυξη του λογισµικού, οι οποίες έχουν πλέον διαφανεί µε αρκετή σαφήνεια: Τα µοντέλα κύκλου ζωής που ακολουθούνται έχουν γίνει ευέλικτα και παραµετρικά, δηλαδή προσαρµόζονται στα χαρακτηριστικά κάθε συγκεκριµένου περιβάλλοντος ανάπτυξης λογισµικού, αλλά και του θεµατικού πεδίου της υπό ανάπτυξη εφαρµογής (application domain). Η τεκµηρίωση του λογισµικού, δηλαδή το σύνολο των προϊόντων που περιγράφουν το λογισµικό και παράγονται σ' όλες τις φάσεις του κύκλου ζωής αυτού, δεν ακολουθεί αυστηρά πρότυπα δοµής, όπως στο παρελθόν, αλλά προσαρµόζεται στις εκάστοτε συνθήκες ανάπτυξης, τα εργαλεία που χρησιµοποιούνται και την υπάρχουσα εµπειρία. Τα περιβάλλοντα ανάπτυξης (γλώσσες προγραµµατισµού, βιβλιοθήκες συστατικών λογισµικού, εργαλεία συγγραφής κώδικα, εργαλεία ελέγχου προγράµµατος, βιβλιοθήκες αναφοράς) έχουν γίνει ιδιαίτερα σύνθετα και ολοκληρωµένα, υποστηρίζοντας τον προγραµµατιστή σε περισσότερες εργασίες απ' ό,τι στο παρελθόν. Ο ρόλος των εργαλείων CASE έχει εξελιχθεί. Τα εργαλεία CASE πλέον δε φιλοδοξούν να αυτοµατοποιήσουν πλήρως την παραγωγή λογισµικού. Αρκετά από αυτά συνεργάζονται στενά µε τα περιβάλλοντα ανάπτυξης λογισµικού, µε σκοπό να εκτελέσουν σωστά επιρρεπείς σε σφάλµατα εργασίες, να υποστηρίξουν την τεκµηρίωση του λογισµικού από τα πρώτα στάδια ανάπτυξης (προδιαγραφή) και την διατήρησή της σε επίκαιρη κατάσταση, να αυτοµατοποιήσουν ένα µέρος της παραγωγής πηγαίου κώδικα και γενικότερα, να υποστηρίξουν τους κατασκευαστές λογισµικού. Μια αναλυτική αναφορά στο θέµα των εργαλείων CASE θα γίνει στο κεφάλαιο 4 του παρόντος βιβλίου. Όσα µόλις αναφέρθηκαν δεν αποτελούν, ασφαλώς, κοσµογονία, αλλά φυσική εξέλιξη ενός νέου κλάδου της µηχανικής, της Τεχνολογίας Λογισµικού, η οποία εντάσσεται στην οικογένεια τεχνικών επιστηµών µε τη µεγαλύτερη και πιο ραγδαία ανάπτυξη που γνώρισε µέχρι σήµερα η ιστορία, στις επι-