03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Σχετικά έγγραφα
05 Ανάλυση Απαιτήσεων

07 Σχεδιασμός λογισμικού

Τεχνολογία Λογισμικού

05 Ανάλυση απαιτήσεων

06 Αντικειμενοστρεφής ανάλυση και σχεδιασμός

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

09 Η γλώσσα UML II. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

10α Έλεγχος και επαλήθευση λογισμικού

Τεχνολογία Λογισμικού

Τεχνολογία Λογισμικού

02α Διαχείριση Έργων Λογισμικού

09 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Τμήμα Πληροφορικής & Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Εαρινό εξάμηνο

Εισαγωγή στη Σχεδίαση Λογισμικού

ΜΕΘΟΔΟΛΟΓΙΕΣ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Αρχιτεκτονική Λογισμικού

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Εισαγωγή. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Πληροφορική 2. Τεχνολογία Λογισμικού

Μάθημα «Υπηρεσίες Ηλεκτρονικής Υγείας»

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Τεχνολογία Λογισμικού

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

περιεχόμενα παρουσίασης Actors Σενάρια Περιεχόμενο περιπτώσεων χρήσης Πρότυπα περιπτώσεων χρήσης Διαγράμματα περιπτώσεων χρήσης

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής

Use Cases: μια σύντομη εισαγωγή. Heavily based on UML & the UP by Arlow and Neustadt, Addison Wesley, 2002

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

Απαιτήσεις Λογισμικού

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού

Οι περιπτώσεις χρήσης

Αντικειμενοστρεφής Προγραμματισμός

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -

12 Έλεχος και επαλήθευση λογισμικού

8 Τεχνικός Εφαρμογών Πληροφορικής με Πολυμέσα

02 Αντικειμενοστρεφής Προγραμματισμός

Μοντελοποίηση Πεδίου

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Εισαγωγή στη Δασική Πληροφορική

Ειδικά θέματα τεχνολογίας λογισμικού

Τεχνολογία Λογισμικού

11β Δομικά πρότυπα σχεδίασης

3 Αλληλεπίδραση Αντικειμένων

Τεχνολογία Λογισμικού. Ενότητα 1: Εισαγωγή στην UML Καθηγητής Εφαρμογών Ηλίας Γουνόπουλος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Διαχείριση Ετερογενών Δικτύων

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

Προδιαγραφές Απαιτήσεων Επικύρωση Απαιτήσεων

Σχεδιασµός βασισµένος σε συνιστώσες

Πανεπιστήμιο Πειραιώς Τμήμα Πληροφορικής Πρόγραμμα Μεταπτυχιακών Σπουδών «Πληροφορική»

Bizagi Modeler: Συνοπτικός Οδηγός

Test Data Management in Practice

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΔΙΟΙΚΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ. Τεχνολογίες και Εφαρμογές Διαδικτύου. Σχεδίαση Συστήματος

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

Πληροφοριακά Συστήματα, Οργανισμοί και Επιχειρησιακές Διαδικασίες

ΚΑΤΑΛΟΓΟΣ ΕΚΠΑΙΔΕΥΣΗΣ

Κεφάλαιο 7: Τεχνολογία Λογισμικού

Ανάλυση Περιπτώσεων Χρήσης

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Εισαγωγή στην ανάλυση

Ανάλυση Πληροφοριακών Συστημάτων. «Βασικές Έννοιες Αντικειμενοστρεφούς Προγραμματισμού Διαγράμματα κλάσεων» Βασίλειος Καρακόιδας

EE512: Error Control Coding

Εισαγωγή στην. Γιάννης Σμαραγδάκης

Σχεδίαση Κλάσεων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΜΣ «ΠΡΟΗΓΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΠΛΗΡΟΦΟΡΙΚΗΣ» ΚΑΤΕΥΘΥΝΣΗ «ΕΥΦΥΕΙΣ ΤΕΧΝΟΛΟΓΙΕΣ ΕΠΙΚΟΙΝΩΝΙΑΣ ΑΝΘΡΩΠΟΥ - ΥΠΟΛΟΓΙΣΤΗ»

Λογισµικό (Software SW) Γλώσσες

ΣΧΕΔΙΑΣΗ & ΑΝΑΠΤΥΞΗ ΛΟΓΙΣΜΙΚΟΥ

Μοντελοποίηση δεδομένων με UML Χρήση σε πολυμεσικές εφαρμογές

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Βάσεις Δεδομένων Εισαγωγή

Υποδείγματα Ανάπτυξης

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Ελληνικό Ανοικτό Πανεπιστήµιο. Η Υλοποίηση στην Ενοποιηµένη ιαδικασία. ρ. Πάνος Φιτσιλής

Υπηρεσίες Ιστού (Web Services) ΜΙΧΑΛΗΣ ΜΑΛΙΑΠΠΗΣ

Διαχείριση Πληροφοριακών Συστημάτων

Διδάσκων: Παναγιώτης Ανδρέου

Προδιαγραφές Απαιτήσεων Γιάννης Σμαραγδάκης

Αρχές Προγραμματισμού Υπολογιστών

Έγγραφο Περιγραφής Απαιτήσεων Λογισμικού

Σχεδιασμός Οικολογικού Διαμεσολαβητή για την εποπτεία και διαχείριση δικτύου διανομής ηλεκτρικής ενέργειας

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)

UML. Γενικά χαρακτηριστικά Στοιχεία µοντέλων Συσχετίσεις. Παραδείγματα

Εγχειρίδιο χρήσης Intalio Designer Εγχειρίδιο χρήσης Intalio Designer

Αρχιτεκτονικές Συστημάτων

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 18: Διαδικασία Σχεδίασης Ψηφιακών Συστηµάτων - Επανάληψη

Ελληνικό Ανοικτό Πανεπιστήµιο. Η Ανάλυση και ο Σχεδιασµός στην Ενοποιηµένη ιαδικασία. ρ. Πάνος Φιτσιλής

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

Περιεχόμενο του μαθήματος

Σχεδίαση Περιβάλλοντος εργασίας ενός Οργανισμού και Σχεδίαση Χάρτη διαδικασιών ενός Οργανισμού και

UNIVERSITY OF CALIFORNIA. EECS 150 Fall ) You are implementing an 4:1 Multiplexer that has the following specifications:

Instruction Execution Times

Πολιτικές Ασφάλειας Πληροφοριακών Συστημάτων. Σωκράτης Κ. Κάτσικας Τμήμα Μηχ/κών Πληροφοριακών & Επικοινωνιακών Συστημάτων Πανεπιστήμιο Αιγαίου

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Rational Unified Process. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Τεχνολογία Ψυχαγωγικού Λογισμικού και Εικονικοί Κόσμοι Ενότητα 8η - Εικονικοί Κόσμοι και Πολιτιστικό Περιεχόμενο

Assalamu `alaikum wr. wb.

C.S. 430 Assignment 6, Sample Solutions

Transcript:

03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr

Περιεχόμενα 1. Οι απαιτήσεις λογισμικού και τα είδη τους 2. Από την ανάλυση απαιτήσεων στη σύνταξη των προδιαγραφών και ο ρόλος του επικεφαλής μηχανικού Software Architect 3. Μοντελοποίηση απαιτήσεων / προδιαγραφών & σχεδιασμού 4. Σχεδιαστικές αρχές λογισμικού 5. Η έννοια του τεχνικού χρέους technical/design/code debt 2

1. Ανάλυση απαιτήσεων 3

Απαιτήσεις λογισμικού Συνήθως είναι ανεξάρτητες από την τεχνολογία υλοποίησης. Απαίτηση: Τι θέλουμε να κάνει το λογισμικό Ικανοποίηση απαίτησης: Πώς το λογισμικό καλύπτει την απαίτηση σχεδιαστική απόφαση και υλοποίηση. Εκτός, βέβαια, αν η υποστήριξη κάποιας τεχνολογίας είναι ρητή απαίτηση 4

Είδη απαιτήσεων Λειτουργικές απαιτήσεις Μη λειτουργικές απαιτήσεις Απαιτήσεις συστήματος Αναδυόμενες απαιτήσεις 5

Λειτουργικές απαιτήσεις Οι απαιτήσεις της λειτουργίας του λογισμικού συνήθως η νέα λειτουργικότητα που πρέπει να αναπτυχθεί στο πλαίσιο του έργου Παραδείγματα: διαπίστευση και δικαιοδοσία χρηστών, επιχειρησιακή λογική, περιπτώσεις και σενάρια χρήσης, διαχειριστικές λειτουργίες 6

Διαπίστευση χρηστών user authentication Σημεία εισόδου στο σύστημα entry points μηχανισμοί διαπίστευσης χρηστών Επιβεβαίωση ότι ο χρήστης είναι: "υπαρκτός" π.χ. ο λογαριασμός του είναι εγγεγραμμένος στον "πίνακα" των χρηστών της ΒΔ "έγκυρος" π.χ. γνωρίζει το προσωπικό του "μυστικό" που έχει συνδεθεί με το λογαριασμό του "ενεργός" π.χ. δεν έχει απενεργοποιηθεί από το διαχειριστή 7

Δικαιοδοσία χρηστών user authorization Διαχείριση δικαιωμάτων: ποιος χρήστης επιτρέπεται να εκτελέσει ποια ενέργεια. Στατική ή δυναμική ανάθεση/ανάκληση δικαιωμάτων; Ρόλοι Access Control Lists ACLs Guards 8

Επιχειρησιακή λογική business logic Οι επιχειρησιακές διαδικασίες business processes Οι επιχειρησιακοί κανόνες business rules Μερική ή πλήρης "ηλεκτρονικοποίηση" των λειτουργιών του οργανισμού 9

Πιο απλά Τα υποστηριζόμενα σενάρια και περιπτώσεις χρήσης use cases του λογισμικού Οι ενέργειες, λειτουργίες και διαδικασίες που εκτελούν οι χρήστες μέσω του συστήματος 10

Διαχειριστικές λειτουργίες administrative functions Ποιες είναι οι διαχειριστικές λειτουργίες; Πώς εκτελούνται; Θα παραμετροποιούνται από το χρήστη και πόσο; 11

Λειτουργίες αναφορών reporting requirements Τι αναφορές απαιτούνται ; Πόσο παραμετροποιήσιμες πρέπει να είναι; Ποιος έχει δικαίωμα να τις προσπελαύνει; 12

Μη λειτουργικές απαιτήσεις Απαιτήσεις για ποιοτικά χαρακτηριστικά του λογισμικού Διαθεσιμότητα Ανάνηψη από καταστροφές Ασφάλεια Ακεραιότητα Ευελιξία Επεκτασιμότητα Απόδοση Απροκρισιμότητα Υποστήριξη διεθνών προτύπων Καθορίζουν σε μεγάλο βαθμό την επιτυχία του έργου 13

Απαιτήσεις συστήματος Απαιτήσεις σχετικές με το "σύστημα" ή το "περιβάλλον" στο οποίο εντάσσεται το υπό ανάπτυξη λογισμικό π.χ. μπορεί να είναι συστατικό ενός μεγαλύτερου όλου Απαιτήσεις υλικού, απαιτήσεις δικτύου, κ.ά 14

Αναδυόμενες απαιτήσεις Ποιοτικά χαρακτηριστικά που προκύπτουν από την ένταξη του λογισιμικού στο "σύστημα" ή "περιβάλλον" και αναφέρονται στη λειτουργία του ως όλον. 15

Στην πράξη Στην πράξη, κάποιες απαιτήσεις μπορεί να βρίσκονται "κάπου ανάμεσα" στα παραπάνω είδη Αλλά αυτό ποικίλει ανάλογα με το υπό ανάπτυξη λογισμικό, το περιβάλλον λειτουργίας του και τους εμπλεκόμενους φορείς χρήστες του Ας δούμε μερικά παραδείγματα 16

Τήρηση ημερολογίων audit tracking Ποιες ενέργεις καταγράφονται σε ημερολόγια; Σε ποιο βαθμό λεπτομέρειας; Για ποιο σκοπό και με ποια τελική χρήση; 17

Μαζική εισαγωγή / εξαγωγή δεδομένων Data import / export Απατείται η μαζική εισαγωγή / εξαγωγή δεδομένων; Θα παραμετροποιείται από το χρήστη και πόσο; Ποιοι μορφότυποι αρχείων / δεδομένων θα πρέπει να υποστηρίζονται; 18

Υποστήριξη διεθνούς προτύπου Ανάλογα με την περίπτωση, μπορεί να επηρεάζει: Ένα συγκεκριμένο συστατικό Ένα υποσύνολο των συστατικών Το σχεδιασμό συνολικά 19

Διαλειτουργικότητα interoperability Το υπό ανάπτυξη σύστημα θα διαλειτουργεί με τρίτα συστήματα; Τι είδους δεδομένα θα ανταλλάσονται; Με ποιους μηχανισμούς, μορφότυπους και πρωτόκολλα; 20

Νομικές ή κανονιστικές απαιτήσεις Το υπό ανάπτυξη σύστημα θα πρέπει να είναι σύννομο προσωπικά δεδομένα, πνευματικά δικαιώματα, κτλ. Το υπό ανάπτυξη σύστημα μπορεί να διέπεται από συγκεκριμένο νομικό ή κανονιστικό πλαίσιο για παράδειγμα, πληροφοριακά συστήματα δημοσίου τομέα. 21

Ορισμός των απαιτήσεων Σαφήνεια η απαίτηση είναι σαφώς διατυπωμένη Συνέπεια η μία απαίτηση δεν αντιβαίνει με την άλλη Πληρότητα η απαίτηση καλύπτει όλες τις περιπτώσεις Επαληθευσιμότητα η απαίτηση μπορεί να ελεγχθεί σε σχέση με την υλοποίηση 22

Επίσης Σε μεγάλα έργα Καταγωγή/γενεαλογία απαίτησης Ποιος τη ζήτησε Ποιον επιχειρησιακό στόχο εξυπηρετεί Για παράδειγμα, θα πρέπει να γνωρίζει η ομάδα του έργου αν "το ζητάει ο διευθυντής" 23

Έγγραφο ανάλυσης απαιτήσεων Περιγραφή σε φυσική γλώσσα: Σκοπός του συστήματος Κατηγορίες χρηστών users & stakeholders Εμβέλεια του συστήματος Περιορισμοί Παραδοχές Απαιτήσεις λειτουργικές ή μη 24

2. Από την ανάλυση απαιτήσεων στη σύνταξη των προδιαγραφών και ο ρόλος του επικεφαλής μηχανικού Software Architect 25

Ζητούμενα από το κείμενο των τεχνικών προδιαγραφών Να προσδιορίσουν τον τρόπο με τον οποίο το λογισμικό θα ικανοποιήσει τις απαιτήσεις 26

Συγκεκριμένα Αρχιτεκτονικός σχεδιασμός και συστατικά του λογισμικού Σαφής περιγραφή της αλληλεπίδρασης του λογισμικού με το παραγωγικό του περιβάλλον production environment Λεπτομερής προδιαγραφή των λειτουργιών και των διαδικασιών που υποστηρίζονται από το λογισμικό Σύνδεση των προδιαγραφών με τις απαιτήσεις πηγή/ προέλευση προδιαγραφής Καθορισμός κριτηρίων αποδοχής / απόρριψης τμημάτων ή όλου του συστήματος 27

Έλεγχοι αποδοχής acceptance tests Έλεγχοι που καθορίζουν την αποδοχή ή την απόρριψη συστατικών ή λειτουργιών ή "οθονών" του λογισμικού Είναι καλή πρακτική να έχουν προβλεφθεί μερικώς ή πλήρως στις προδιαγραφές Ένας από τους κύριους στόχους ένταξης ελέγχων στον κύκλο του λογισμικού είναι η ελαχιστοποίηση των σφαλμάτων που θα προκύψουν κατά τους ελέγχους αποδοχής 28

Σχεδιαστικές αποφάσεις Για να μετατραπούν οι υψηλού επιπέδου απαιτήσεις του λογισμικού Σε χαμηλού επιπέδου τεχνικές προδιαγραφές αυτού Θα πρέπει να παρθούν συγκεκριμένες σχεδιαστικές αποφάσεις 29

Δηλαδή Οι τεχνικές προδιαγραφές μοντελοποιούν τις απαιτήσεις εντός ενός οριοθετημένου σχεδιαστικού / αρχιτεκτονικού πλαισίου Δεν είναι πάντα εφικτό ο σχεδιασμός / αρχιτεκτονική να έχουν ολοκληρωθεί μέχρι τελευταίας λεπτομέρειας Από την άλλη δεν είναι αποδεκτό να προκύψει στην πορεία υλοποίησης μιας προδιαγραφής ένα ζήτημα που θα "ακυρώσει" το σχεδιασμό Το ότι θα τον αλλάξει είναι σχεδόν βέβαιο! 30

Θυμηθείτε 31

Κοινός τόπος Η ανάλυση των απαιτήσεων πρέπει να καταλήξει σε ένα κοινά αποδεκτό ζητούμενο Κάτι που μπορεί να είναι δύσκολο στην πράξη για μη τεχνικούς λόγους επικοινωνίας, οργάνωσης, διαφορετικής κουλτούρας, παγίωσης μη βέλτιστων πρακτικών, κτλ. 32

Θυμηθείτε από την εισαγωγή Στα μεγάλα έργα λογισμικού εμπλέκονται πολλοί συμμετέχοντες: Χρήστες Πελάτες Διοίκηση ακόμα και Μέτοχοι ή Επενδυτές Αναλυτές Προγραμματιστές Δοκιμαστές Σχεδιαστές διεπαφών Υπεύθυνοι έργου κτλ. 33

Ο ρόλος του Software Architect Διαχείριση της πολυπλοκότητας 50% αρχιτεκτονική ουσιώδης πολυπλοκότητα 50% επικοινωνία τεχνητή πολυπλοκότητα με τους stakeholders με την επιχειρησιακή ομάδα έργου Project Manager, Business Analyst, κ.ά με την ομάδα ανάπτυξης engineers 34

Κοινή γλώσσα Κάθε ένας από τους συμμετέχοντες έχει διαφορετικές εμπειρίες, βιώματα, αφετηρίες, στόχους και επιδιώξεις από την υλοποίηση του έργου Η ομάδα ανάπτυξης, η επιχειρησιακή ομάδα και οι stakeholders του έργου μάλλον "θα μιλάνε" σε διαφορετικές γλώσσες Ο Architect θα πρέπει να κάνει το διερμηνέα και να "μιλάει" τη γλώσσα και των τριών 35

Ιεράρχηση απαιτήσεων Δεν είναι όλες οι απαιτήσεις εξίσου σημαντικές Μια μικρή θεωρητικά απαίτηση μπορεί να οδηγήσει το έργο εκτός δρόμου/στόχου Η ομάδα ανάπτυξης ή η επιχειρησιακή ομάδα μπορεί να μη δώσουν προσοχή "αφού το ζητάει ο πελάτης" Ο stakeholder ενδέχεται να μην το καταλάβει Ο Architect πρέπει να το διαγνώσει έγκαιρα και να προτείνει εναλλακτικές 36

Αντίστοιχα Μια "ακριβή" απαίτηση μπορεί να έχει πιο "φθηνή" εναλλακτική Μια "σύνθετη" απαίτηση μπορεί να έχει πιο "απλή" εναλλακτική κ.ο.κ 37

Προσοχή Ο ασφαλέστερος τρόπος να αποτύχει ένα έργο είναι να επιτραπεί στις "λάθος" απαιτήσεις να γίνουν προδιαγραφές! 38

Συμπέρασμα Ο Architect θα πρέπει να έχει απευθείας επαφή με τους stakeholders Αναλύοντας και διαμορφώνοντας μαζί με την επιχειρησιακή ομάδα του έργου τις απαιτήσεις Ενώ παράλληλα σχεδιάζει το σύστημα Για να είναι σε θέση να φιλτράρει τις "λάθος" απαιτήσεις Και να μεταφράσει τις υπόλοιπες σε προδιαγραφές για την ομάδα ανάπτυξης 39

The belief that complex systems require armies of programmers and designers is wrong. A system that is not understood in its entirety, or at least to a significant degree of detail by a single individual, should probably not be built. N. Wirth 40

Superman By J.Schulenklopper, E. Rommes 41

Για να γίνεις Superman Ενδεικτικά Ενσυναίσθηση empathy Για τις έγνοιες concerns όλων των εμπλεκόμενων Τεχνική αρτιότητα Επιλογή τεχνολογίας που να είναι συμβατή με τις ανάγκες του έργου και τις ικανότητες της ομάδας Επικοινωνιακή ικανότητα Συνεχής επικοινωνία με όλους τους εμπλεκόμενους για την εύρεση των βέλτιστων συμβιβασμών trade offs Εμπειρία Για να μπορούν να γίνουν καλά όλα τα παραπάνω 42

3. Οπτικοποίηση και μοντελοποίηση απαιτήσεων / προδιαγραφών & σχεδιασμού 43

Μοντελοποίηση και οπτικοποίηση απαιτήσεων/προδιαγραφών Επικοινωνία των ζητούμενων Διαγράμματα ροής flow charts Διαγράμματα ροής δεδομένων data flow diagrams Πίνακες απόφασης decision tables Δέντρο απόφασης decision trees Mind Maps 44

Μοντελοποίηση σχεδιασμού Επικοινωνία του συστήματος και των συστατικών του Αντικειμενοστραφές μοντέλο Ψευδοκώδικας Διαγράμματα οντοτήτων συσχετίσεων Entity Relationship diagrams Οντολογίες ontologies Πρότυπα σχεδίασης design patterns 45

UML Ενοποιημένη γλώσσα μοντελοποίησης Μοντελοποίηση απαιτήσεων και προδιαγραφών Μοντελοποίηση σχεδιασμού 46

Γιατί αυτός ο διαχωρισμός; It is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. Since, in most cases, design decisions transcend time of execution, modules will not correspond to steps in the processing. David Parnas 47

Η έμφασή μας στο μάθημα Σε επόμενες διαλέξεις Αντικειμενοστραφές μοντέλο UML Design Patterns 48

Διάγραμμα ροής flow chart 49

Διάγραμμα ροής δεδομένων data flow diagram 50

Πίνακας αποφασης decision table Με εφαρμογή στον έλεγχο λογισμικού testing 51

Δέντρο απόφασης decision tree Με εφαρμογές στην επιχειρησιακή έρευνα και στη μηχανική μάθηση 52

Mind Map 53

Ψευδοκώδικας 54

55

Οντολογία ontology 56

4. Σχεδιαστικές αρχές λογισμικού 57

Αφαίρεση Abstraction Θεμελιώδης έννοια "Η εννοιολογική διαδικασία κατά την οποία προκύπτουν γενικοί κανόνες από την εξέταση επιμέρους παραδειγμάτων." Wikipedia Χρησιμοποιείται σε πολλές επιστήμες. Αποτελεί το κύριο εργαλείο σχεδιασμού. 58

Αφαίρεση Αναπαράσταση ενός ουσιώδους χαρακτηριστικού του λογισμικού χωρίς τις δευτερεύουσες λεπτομέρειες. 59

Παράδειγμα interface Item { String getid() void setid(string id) Map<String, Object> tomap() void frommap(map<string, Object> map) } interface Datastore { Item load(string id) void save(item item) } 60

Βελτίωση Refinement Συμπληρωματική διαδικασία της αφαίρεσης Τμηματική προσαρμογή των αφαιρέσεων σε νέες απαιτήσεις, περιορισμούς ή αποφάσεις 61

Παράδειγμα interface Datastore { boolean exists(string id) void load(string id, Function<Item> callback) void save(item item, Function<Item> callback) } 62

Refactoring Η διαδικασία επαναπροσαρμογής του κώδικα ως τμήμα κάποιας βελτιωτικής απόφασης Αυτοματοποιείται από πολλά IDEs Θα τη δούμε λεπτομερώς σε επόμενη διάλεξη 63

Τμηματοποίηση modularity Αναλύουμε ένα πολύπλοκο σύστημα σε επιμέρους απλούστερα τμήματα Σχεδιάζουμε ξεχωριστά το ένα τμήμα από το άλλο Συνθέτουμε ξανά τα τμήματα και τις αλληλεπιδράσεις τους σε ένα ενιαίο σύνολο Με σκοπό τη διευκόλυνση της υλοποίησης, της συντήρησης και της εξέλιξης του λογισμικού 64

The most difficult design task is to find the most appropriate decomposition of the whole into a module hierarchy, minimizing function and code duplications. N. Wirth 65

Απόκρυψη πληροφορίας information hiding Η απόκρυψη των χαρακτηριστικών που μπορεί να αλλάξουν στο λογισμικό σχεδιαστικών αποφάσεων, λεπτομερειών υλοποίησης από τα άλλα τμήματα, ώστε να ελαχιστοποιηθούν οι αλλαγές που απαιτούνται αν/όταν προκύψει η αλλαγή Παροχή σταθερών interfaces αφαιρέσεων για την επικοινωνία μεταξύ των τμημάτων 66

Συναφείς έννοιες / αρχές Ενθυλάκωση encapsulation Διαχωρισμός ενδιαφερόντων separation of concerns 67

Ενθυλάκωση encapsulation Διαχωρισμός της δομής από τη συμπεριφορά ενός συστατικού Διαχωρισμός της αφαίρεσης από την υλοποίησή της Προστασία ενός συστατικού από τη μετάβασή του σε μη έγκυρη κατάσταση Μπορεί να θεωρηθεί ως τεχνική υλοποίησης της αρχής της απόκρυψης πληροφορίας 68

Παράδειγμα class MySQLDatastore implements Datastore { private Connection con //encapsulation public boolean exists() { String query = "select 1 from items where item = $" ResultSet rs = con.execute(query, getid()) return!rs.isempty() }... } 69

Διαχωρισμός ενδιαφερόντων separation of concerns Κάθε τμήμα του λογισμικού επικεντρώνεται στην επίλυση ενός ξεχωριστού ζητήματος concern Αρχιτεκτονικά επίπεδα επίπεδο παρουσίασης, επίπεδο επιχειρησιακής λογικής, επίπεδο πρόσβασης δεδομένων 70

Παράδειγμα Θα επανέλθουμε 71

Επαναχρησιμοποίηση reuse Το λογισμικό δεν πρέπει να ανακαλύπτει κάθε φορά εκ νέου τον τροχό Οι καλές αφαιρέσεις και τα καλώς διαχωρισμένα συστατικά είναι εύκολο να επαναχρησιμοποιηθούν 72

Παράδειγμα var animals = ["dog", "cat", "fish"] var len = function(s) { return s.length; } var sum = function(a, b) { return a+b; } animals.map(len).reduce(sum, 0); //10 73

Μήπως ο ίδιος ο κώδικας είναι το design; TEX would have been a complete failure if I had merely specified it and not participated fully in its initial implementation. The process of implementation constantly led me to unanticipated questions and to new insights about how the original specifications could be improved. Donald Knuth 74

Πρόσθετες σχεδιαστικές αρχές design principles Πώς να δομήσουμε και να υλοποιήσουμε τις αφαιρέσεις abstractions 75

Μην επαναλαμβάνεσαι Don't Repeat Yourself "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system." A. Thomas, D. Hunt 76

Μόνο μια φορά Once and Only Once Αρχή του Extreme Programming XP Each and every declaration of behavior should appear Once and Only Once. 77

DRY vs WET WET: We Enjoy Typing WET: Waste Everybody's Time 78

Εφαρμογή της αρχής DRY στην πράξη Η επανάληψη duplication αυξάνει την τυχαία/τεχνητή πολυπλοκότητα του συστήματος accidental complexity. Οπουδήποτε στον κύκλο ζωής του λογισμικού υπάρχουν "χειροκίνητες" διαδικασίες, θα πρέπει να αυτοματοποιούνται π.χ. μέσω build system, scripting, κ.ά.. Αν προκύπτουν επαναλήψεις στη λογική, κάπου απαιτείται η προσθήκη μιας νέας αφαίρεσης. 79

Σύνολο αρχών S.O.L.I.D. Single responsibility S Open/closed Ο Liskov substitution L Interface segregation Ι Dependency inversion D 80

Μοναδική ευθύνη Κάθε κλάση/συστατικό πρέπει να έχει μία και μοναδική ευθύνη. A class should have only one reason to change. 81

Ανοικτό/κλειστό Κάθε κλάση/συστατικό πρέπει να είναι ανοικτή σε επεκτάσεις π.χ. προσθήκη νέων πεδίων ή μεθόδων. Κάθε κλάση/συστατικό πρέπει να είναι κλειστή και οριοθετημένη έτοιμη προς χρήση από τρίτα συστατικά. 82

Δυνατότητα αντικατάστασης Αν το S είναι υποτύπος του Τ τότε όλα τα αντικείμενα του δεύτερου θα πρέπει να μπορούν να αντικατασταθούν με αντικείμενα του πρώτου χωρίς να αλλοιωθεί κανένα από τα επιθυμητά χαρακτηριστικά του συστήματος. Strong behavioral subtyping. 83

Επιμερισμός διεπαφών Κανένα συστατικό δεν πρέπει να εξαρτάται από μεθόδους που δε χρησιμοποιεί. Χρήση μικρών και διαφορετικών interfaces για τη θέσπιση των διεπαφών μεταξύ συστατικών. 84

Ανιστροφή εξαρτήσεων Τα υψηλού επιπέδου συστατικά δεν πρέπει να εξαρτώνται από τα χαμηλού επιπέδου συστατικά. Και τα δύο θα πρέπει να εξαρτώνται από κοινές αφαιρέσεις. Οι αφαιρέσεις δεν πρέπει να εξαρτώνται από λεπτομέρειες. Οι λεπτομέρειες θα πρέπει να εξαρτώνται από τις αφαιρέσεις. 85

Παράδειγμα class DataAccessLayer { private Function<Item> updateindex =... //private MySQLDatastore store //bad private Datastore store //good DataAccessLayer() { store = new MySQLDatastore() //bad store = Config.get('Datastore') //good } void save(item item) { store.save(item item, updateindex) } } Dependency Inversion Injection 86

5. Η έννοια του τεχνικού χρέους technical/design/code debt 87

Ποιοτικά ζητούμενα σχεδιασμού Performance Scalability Maintainability Extensibility Security Safety Robustness Fault tolerance Usability Reliability 88

Σχεδιασμός = Συμβιβασμός Συνήθως δεν είναι εφικτό να γίνουν όλα καλά με την πρώτη Επιλογή των επιθυμητών trade offs 89

Τεχνικό χρέος Το κόστος της πρόσθετης δουλειάς που θα απαιτηθεί από την επιλογή μιας εύκολης και γρήγορης υλοποίησης αντί για την εφαρμογή της συνολικά καλύτερης λύσης. 90

Τέσσερα είδη By Martin Fowler 91

Το κλασικότερο trade off Efficiency vs Abstraction Programmers have spent far too much time worrying about efficiency in the wrong places at the wrong times; premature optimization is the root of all evil. Donald Knuth 92