Εισαγωγή στην τεχνολογία λογισμικού
Στόχοι Έννοια της τεχνολογίας λογισμικού (ΤΛ) και ερμηνεία της σημασίας της Απαντήσεις σε θεμελιώδεις ερωτήσεις για την ΤΛ Ανάδειξη ηθικών και επαγγελματικών ζητημάτων Σημασίας για τους μηχανικούς λογισμικού
Το λογισμικό 1950, αρχή Έδωσε δυνατότητες σε υπάρχουσες τεχνολογίες (πχ. Τηλεπικοινωνίες) Δημιούργησε νέες επιστήμες (π.χ. γενετική βιολογία) Βελτίωση ποιότητα ζωής Υγεία, τηλεϋπηρεσίες, έρευνα, κ.λπ. 3
Που βρίσκεται το λογισμικό; Άϋλο («εκτελείται», αποθηκεύεται) Δεν είναι αντικείμενο των 5 αισθήσεών μας Δεν φθείρεται με τον χρόνο Δεν υπακούει στους νόμους παραγωγής-ανάπτυξης των υλικών αγαθών Διαφοροποιείται από τον τρόπο αξιοποίησης των υλικών αγαθών 4
Ορισμός λογισμικού Σύνολο προγραμμάτων που περιλαμβάνουν Δομές δεδομένων (διαχείριση πληροφορίας) Εντολές (παρέχουν λειτουργίες) Τεκμηρίωση Φυλλάδια απαιτήσεων Μοντέλα σχεδίασης Εγχειρίδια χρήσης 5
Λογισμικό και οικονομία Οι οικονομίες ΟΛΩΝ των αναπτυγμένων χωρών εξαρτώνται από το λογισμικό Ολοένα και περισσότερα συστήματα ελέγχονται από λογισμικό Οι δαπάνες σε λογισμικό αντιπροσωπεύουν σημαντικό μέρος του ΑΕΠ σε όλες τις αναπτυγμένες χώρες
Τεχνολογία λογισμικού Η τεχνολογία λογισμικού καταπιάνεται με θεωρίες, μεθόδους και εργαλεία ανάπτυξης επαγγελματικού λογισμικού
Η τεχνολογία λογισμικού «Είναι κλάδος της πληροφορικής που ασχολείται με την μελέτη και την εφαρμογή των συστηματικών, μεθοδικών και ποσοτικοποιημένων προσεγγίσεων για την ανάπτυξη, λειτουργία και συντήρηση του λογισμικού» (ΙΕΕΕ 90) Δεν έχει αποκτήσει ακόμη τα χαρακτηριστικά της επιστήμης, που θα της επιτρέπουν να αποδεικνύει την ύπαρξη βέλτιστης, ορθής, πλήρους και αξιόπιστης λύσης 8
Κόστος λογισμικού Το κόστος του λογισμικού συχνά είναι η μερίδα του λέοντος από το συνολικό κόστος ενός υπολογιστικού συστήματος. Το κόστος του λογισμικού ενός PC είναι συχνά μεγαλύτερο από το κόστος του υλικού. Το κόστος συντήρησης του λογισμικού υπερβαίνει αυτό της ανάπτυξής του. Για συστήματα με μεγάλη διάρκεια ζωής, το κόστος συντήρησης μπορεί να είναι πολλαπλάσιο του κόστους ανάπτυξης. Η τεχνολογία λογισμικού ασχολείται με την αποτελεσματική, από την άποψη του κόστους, ανάπτυξη λογισμικού.
Για ποιόν και γιατί σχεδιάζουμε; Για ποιόν; Για ένα συγκεκριμένο πελάτη Κατά παραγγελία Συγκεκριμένες προδιαγραφές Μια γενική αγορά γενικής χρήσης Για συγκεκριμένη ομάδα τύπο πελατών Γιατί; Για πιο σκοπό; Για νέα πρόγραμμα σκοπό Για διαχείριση ενσωμάτωση παλαιότερων προγραμμάτων σε γενικότερα συστήματα Για επαναχρησιμοποίηση υπαρχόντων προγραμμάτων
Απαντήσεις σε συχνές ερωτήσεις
Συχνές ερωτήσεις για την τεχνολογία λογισμικού Τι είναι λογισμικό; Τι είναι τεχνολογία λογισμικού; Ποια είναι η διαφορά μεταξύ τεχνολογίας λογισμικού και επιστήμης των υπολογιστών; Ποια είναι η διαφορά μεταξύ τεχνολογίας λογισμικού και τεχνολογίας συστημάτων; Τι είναι διαδικασία παραγωγής λογισμικού; Τι είναι μοντέλο διαδικασίας παραγωγής λογισμικού;
Συχνές ερωτήσεις για την τεχνολογία λογισμικού Ποιο είναι το κόστος της τεχνολογίας λογισμικού; Τι είναι μέθοδοι της τεχνολογίας λογισμικού; Τι είναι η τεχνολογία λογισμικού με τη βοήθεια υπολογιστή (Computer-Aided Software Engineering, CASE); Ποια είναι τα γνωρίσματα του καλού λογισμικού; Ποιες είναι οι σημαντικότερες προκλήσεις που αντιμετωπίζει η τεχνολογία λογισμικού;
Τι είναι τεχνολογία λογισμικού; Τεχνικός κλάδος που ασχολείται με όλες τις πτυχές της παραγωγής λογισμικού Συστηματική και οργανωμένη προσέγγιση Κατάλληλα εργαλεία και τεχνικές ανάλογα με το πρόβλημα τους περιορισμούς ανάπτυξης τους διαθέσιμους πόρους
Ποια είναι η διαφορά μεταξύ τεχνολογίας λογισμικού και επιστήμης των υπολογιστών; Η επιστήμη των υπολογιστών ενδιαφέρεται για τη θεωρία και τις μεθόδους Η τεχνολογία λογισμικού ενδιαφέρεται για τα πρακτικά προβλήματα της παραγωγής χρήσιμου λογισμικού
Ο ρόλος του Τεχνολόγου Λογισμικού 16
Ποια είναι η διαφορά μεταξύ τεχνολογίας λογισμικού και τεχνολογίας συστημάτων; Η τεχνολογία συστημάτων ασχολείται με όλες τις πτυχές της ανάπτυξης συστημάτων υπολογιστών Ανάπτυξη υλικού, λογισμικού, διαδικασιών λειτουργίας Προδιαγραφές συστήματος, αρχιτεκτονική, ολοκλήρωση - εγκατάσταση Η ΤΛ είναι το μέρος της διαδικασίας αυτής Αφορά το τμήμα του λογισμικού Διαδικασίες Λογισμικό Σύστημα
Τι είναι διαδικασία παραγωγής λογισμικού; Ένα σύνολο δραστηριοτήτων με στόχο την ανάπτυξη ή εξέλιξη ενός προϊόντος λογισμικού Οι θεμελιώδεις δραστηριότητες, κοινές σε όλες τις διαδικασίες παραγωγής λογισμικού, είναι: Εξαγωγή προδιαγραφών Η ανάπτυξη - παραγωγή Η επικύρωση Η εξέλιξη
Τι είναι μοντέλο διαδικασίας παραγωγής λογισμικού; Μια απλοποιημένη αναπαράσταση διαδικασίας παραγωγής λογισμικού, θεωρούμενη από κάποια συγκεκριμένη άποψη. Παραδείγματα τύπων μοντέλων διαδικασιών παραγωγής: Μοντέλο ροής εργασιών flow diagram Μοντέλο ροής δεδομένων data diagram Μοντέλο ρόλων/ενεργειών activity diagram
Μοντέλα ανάπτυξης Γενικά μοντέλα (υποδείγματα) διαδικασιών ανάπτυξης λογισμικού Μοντέλο καταρράκτη - cataract Επαναληπτική ανάπτυξη - iteration Τεχνολογία λογισμικού βάσει συστατικών στοιχείων - component
Ποιο είναι το κόστος της τεχνολογίας λογισμικού; Ανάπτυξη 60% Έλεγχος 40% Ποικίλλει ανάλογα με Τον τύπο συστήματος Τις απαιτήσεις (π.χ. απόδοση και αξιοπιστία) Η κατανομή κόστους εξαρτάται από το μοντέλο ανάπτυξης
Κατανομή κόστους δραστηριοτήτων
Γιατί είναι σημαντική η σχεδίαση λογισμικού; Γιατί είναι σημαντικό το μάθημα
Τεχνολογία λογισμικού (1/2) Προϊόν συστήματος λογισμικού Λογισμικό Προγράμματα υπολογιστή Προϊόν λογισμικού Λογισμικό που μπορεί να πουληθεί σε κάποιο πελάτη ( γενικής χρήσης, κατά παραγγελία). Περιλαμβάνεται και η σχετική τεκμηρίωση όπως απαιτήσεις, σχέδιο, εγχειρίδιο Σύστημα Λογισμικού Επιτρέπει τη συνεργασία και την ενσωμάτωση με άλλα συστήματα λογισμικού Τεχνολογία Λογισμικού είναι ο τεχνικός κλάδος που ασχολείται με όλες τις πτυχές ανάπτυξης λογισμικού από τα πρώτα στάδια της εξαγωγής προδιαγραφών μέχρι τη συντήρηση του συστήματος (Somerville) 24
Τεχνολογία Λογισμικού Επιλύει προβλήματα με τη βοήθεια του λογισμικού Ανάλυση προβλήματος Σύνθεση της λύσης Με τη χρήση: Μεθόδων ή τεχνικών: διαδικασία παραγωγής Εργαλείων: βοήθημα ή αυτοματοποιημένο σύστημα Διαδικασιών: συνδυασμό εργαλείων και μεθόδων Υποδειγμάτων: συγκεκριμένη προσέγγιση ή μεθοδολογία Η Τεχνολογία Λογισμικού έχει ως στόχο την σχεδίαση και υλοποίηση λογισμικού υψηλής ποιότητας. 25
Λογισμικό, σύστημα λογισμικού, προϊόν λογισμικού (1/2) Πληροφοριακά Συστήματα Από το βιβλίο «The Mythical Mam Month», Frederick Brooks 26
Παράγοντες που ενισχύουν την σημασία της Τεχνολογίας Λογισμικού Οι εξελίξεις στο υλικό Οι αυξανόμενες απαιτήσεις για λογισμικό Οι αλλαγές στον λόγο κόστους υλικού προς κόστος λογισμικού (μειώνεται) Η αυξανόμενη σημασία της συντήρησης λογισμικού Οι εξελίξεις στις τεχνικές λογισμικού 27
Σχετικά με τις αποκλήσεις Τέλη 1960 «κρίση λογισμικού» Μεγάλο ποσοστό των έργων παρουσίαζαν: Αποκλίσεις από Λειτουργικότητα που παρήγγειλαν οι πελάτες Χρονοδιάγραμμα ανάπτυξης Οικονομικό προγραμματισμό Προβλεπόμενο κόστος περιβάλλοντος λειτουργίας Αδυναμία εξέλιξης του λογισμικού ώστε να προσαρμοστεί στις ανάγκες των πελατών 28
Σχετικά με τα λάθη 54% λαθών ανακαλύπτονται μετά την κωδικοποίηση και τον έλεγχο 45% εντοπίζονται στις απαιτήσεις και τη σχεδίαση Τα περισσότερα λάθη κατά τη φάση της ανάλυσης απαιτήσεων (77%) δεν οφείλονται στους αναλυτές αλλά προκύπτουν λόγω λανθασμένων δεδομένων, ασυνέπειες, παραλήψεις και ασάφειες. 29
Σχετικά με τα λάθη Η διόρθωση λαθών στις απαιτήσεις μπορεί να κοστίσει και 100 φορές παραπάνω από τα λάθη υλοποίησης Τα λάθη στην καταγραφή απαιτήσεων μπορούν να εντοπιστούν Οι τεχνικές επιθεώρησης είναι αποτελεσματικές Μπορούν να εφαρμοστούν στο σχέδιο και στον κώδικα
I. Sommerville 2006 Τμήμα Μηχανικών Βασικές Η/Υ αρχές Τηλεπικοινωνιών Τεχνολογίας & Λογισμικού, Δικτύων, Πανεπιστήμιο 8η αγγ. έκδοση Θεσσαλίας Κεφ. 1 31
Αληθινές ιστορίες Σφάλματα: Ενοχλητικά Κόστος σε χρόνο και χρήμα Ζωτικής σημασίας 1992, σύστημα ασθενοφόρων Λονδίνου 1993, διαχείριση αποσκευών αεροδρ. Ντένβερ, 175,6 εκατ. $ 1996, πύραυλος Ariane-5, 350 εκατ. $ 2004, κέντρο ελέγχου εναέριας κυκλοφορίας του Λος Αντζελες Ερευνα 1993-2000 κατέγραψε ότι το 2000: 23% των έργων ματαιώθηκαν 28% ολοκληρώθηκαν σύμφωνα με τον χρονικό και οικονομικό προγραμματισμό 49% ολοκληρώθηκαν με αποκλίσεις 33
Συχνότερες αιτίες αποτυχίας Μη ρεαλιστικοί στόχοι/ στόχοι που δεν είναι καλά καθορισμένοι Λάθος ορισμός απαιτήσεων Ανικανότητα χειρισμού πολυπλοκότητας έργων Κακές εκτιμήσεις για τους απαιτούμενους πόρους Κακή αναφορά της κατάστασης του έργου Κακή διαχείριση του έργου Κακή διαχείριση κινδύνων Ελλιπής επικοινωνία πελάτη, προγραμματιστή, χρήστη Κακές προγραμματιστικές τεχνικές Χρήση ανώριμης τεχνολογίας 34
Παράγοντες επιτυχίας Επιχειρησιακή υποστήριξη Στάση διοίκησης Καθορισμός στόχων και εμβέλειας Ικανός διοικητής έργου Εμπλοκή χρηστών Συμμετοχή σε όλη την πορεία του έργου Σαφείς επιχειρησιακοί στόχοι Εστιασμένο πεδίο εφαρμογής του προϊόντος Οριοθέτηση της λειτουργικότητας Χρονοδιάγραμμα και προϋπολογισμένου κόστους Πρότυπες υποδομές «Κώδικας υποδομής» Χρήση διαδεδομένων ώριμων και δοκιμασμένων υποδομών, τεχνολογιών και εργαλείων 35
Μύθοι σχετικά με το λογισμικό (1/3) Μύθοι του management Υπάρχουν στην εταιρία πρότυπα και διαδικασίες για την ανάπτυξη λογισμικού. Άρα παρέχονται στους developers όλα όσα χρειάζονται να ξέρουν Η εταιρία διαθέτει «state of the art» συστήματα ανάπτυξης λογισμικού και hardware Αν ένα έργο ξεφύγει από το χρονοπρογραμματισμό το επαναφέρουμε προσθέτοντας ανθρώπινους πόρους I. Sommerville 2006 Τμήμα Μηχανικών Βασικές Η/Υ αρχές Τηλεπικοινωνιών Τεχνολογίας & Λογισμικού, Δικτύων, Πανεπιστήμιο 8η αγγ. έκδοση Θεσσαλίας Κεφ. 1 36
Μύθοι σχετικά με το λογισμικό (2/3) Μύθοι του πελάτη Μια γενική διατύπωση των στόχων είναι επαρκής για την αρχή συγγραφής των προγραμμάτων. Οι λεπτομέρειες μπορούν να καθοριστούν αργότερα Οι διαρκώς μεταλλασσόμενες απαιτήσεις ενός έργου μπορούν να αντιμετωπισθούν εύκολα λόγω της ευελιξίας που διαθέτει το λογισμικό 37
Κόστος αλλαγών 38
Μύθοι σχετικά με το λογισμικό (3/3) Μύθοι του προγραμματιστή Το έργο του προγραμματιστή τελειώνει τη στιγμή που θα εκτελεστεί το πρόγραμμα Δεν είναι δυνατό να εκτιμηθεί η ποιότητα έως ότου εκτελεστεί το πρόγραμμα Το μόνο παραδοτέο έως ότου εκτελεστεί το πρόγραμμα είναι ο κώδικας που τρέχει 39
Τι είναι μέθοδοι της τεχνολογίας λογισμικού; Είναι δομημένες προσεγγίσεις για την ανάπτυξη λογισμικού Μοντέλα συστημάτων, σημειογραφίες, κανόνες, σχεδιαστικές συμβουλές και καθοδήγηση για τη διαδικασία Περιγραφές μοντέλων συστήματος Περιγραφές των μοντέλων αναπαράστασης που πρέπει να αναπτυχθούν Κανόνες Περιορισμοί που ισχύουν πάντοτε για τα μοντέλα συστήματος Συστάσεις Συμβουλές για την καλή πρακτική σχεδιασμού στη συγκεκριμένη μέθοδο Καθοδήγηση για τη διαδικασία Ποιες δραστηριότητες μπορεί κανείς να ακολουθήσει.
Τι είναι η τεχνολογία λογισμικού με τη βοήθεια υπολογιστή (Computer-Aided Software Engineering, CASE); Είναι συστήματα λογισμικού που υποστηρίζουν την παραγωγή Εργαλεία CASE ανώτερης τάξης Εργαλεία υποστήριξης των δραστηριοτήτων του ορισμού απαιτήσεων και του σχεδιασμού που προηγούνται στη διαδικασία Εργαλεία CASE κατώτερης τάξης Εργαλεία για την υποστήριξη μεταγενέστερων διαδικασιών όπως η ανάπτυξη του κώδικα, η αποσφαλμάτωση και οι δοκιμές.
Ποια είναι τα γνωρίσματα του καλού λογισμικού; Συντηρησιμότητα Το λογισμικό πρέπει να μπορεί να εξελίσσεται για να ανταποκρίνεται στις μεταβαλλόμενες ανάγκες των πελατών Φερεγγυότητα Το λογισμικό πρέπει να είναι αξιόπιστο Αποδοτικότητα Το λογισμικό δεν πρέπει να σπαταλά πόρους του συστήματος Αποδοχή Κατανοητό, εύχρηστο και συμβατό με άλλα συστήματα
Ποιες είναι οι σημαντικότερες προκλήσεις που αντιμετωπίζει η τεχνολογία λογισμικού; Ετερογένεια Λογισμικό που μπορεί να ανταπεξέλθει σε ετερογενείς πλατφόρμες και περιβάλλοντα εκτέλεσης Χρόνος παράδοσης Ανάπτυξη τεχνικών που οδηγούν σε συντόμευση του χρόνου παράδοσης του λογισμικού Εμπιστοσύνη Ανάπτυξη τεχνικών που καταδεικνύουν ότι οι χρήστες μπορούν να εμπιστεύονται το λογισμικό