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

92
03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017‐18 Δρ. Κώστας Σαΐδης ﴾[email protected]﴿

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

Page 1: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

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

Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών YπολογιστώνΕθνικό Μετσόβιο Πολυτεχνείο

Χειμερινό εξάμηνο 2017‐18

Δρ. Κώστας Σαΐδης ﴾[email protected]﴿

Page 2: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Περιεχόμενα1. Οι απαιτήσεις λογισμικού και τα είδη τους

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

3. Μοντελοποίηση απαιτήσεων / προδιαγραφών & σχεδιασμού4. Σχεδιαστικές αρχές λογισμικού5. Η έννοια του τεχνικού χρέους ﴾technical/design/code debt﴿

2

Page 3: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

3

Page 4: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Απαιτήσεις λογισμικούΣυνήθως είναι ανεξάρτητες από την τεχνολογία υλοποίησης.

Απαίτηση: Τι θέλουμε να κάνει το λογισμικόΙκανοποίηση απαίτησης: Πώς το λογισμικό καλύπτει τηναπαίτηση ﴾σχεδιαστική απόφαση και υλοποίηση﴿.

Εκτός, βέβαια, αν η υποστήριξη κάποιας τεχνολογίας είναι ρητήαπαίτηση

4

Page 5: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

5

Page 6: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

6

Page 7: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Διαπίστευση χρηστών ﴾userauthentication﴿

Σημεία εισόδου στο σύστημα ﴾entry‐points﴿ ‐ μηχανισμοίδιαπίστευσης χρηστώνΕπιβεβαίωση ότι ο χρήστης είναι:

"υπαρκτός" ﴾π.χ. ο λογαριασμός του είναι εγγεγραμμένοςστον "πίνακα" των χρηστών της ΒΔ﴿"έγκυρος" ﴾π.χ. γνωρίζει το προσωπικό του "μυστικό"που έχει συνδεθεί με το λογαριασμό του﴿"ενεργός" ﴾π.χ. δεν έχει απενεργοποιηθεί από τοδιαχειριστή﴿

7

Page 8: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Δικαιοδοσία χρηστών ﴾userauthorization﴿

Διαχείριση δικαιωμάτων: ποιος χρήστης επιτρέπεται ναεκτελέσει ποια ενέργεια.

Στατική ή δυναμική ανάθεση/ανάκληση δικαιωμάτων;ΡόλοιAccess Control Lists ﴾ACLs﴿Guards

8

Page 9: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Επιχειρησιακή λογική ﴾business logic﴿Οι επιχειρησιακές διαδικασίες ﴾business processes﴿Οι επιχειρησιακοί κανόνες ﴾business rules﴿

Μερική ή πλήρης "ηλεκτρονικοποίηση" των λειτουργιών τουοργανισμού

9

Page 10: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

10

Page 11: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Διαχειριστικές λειτουργίες﴾administrative functions﴿

Ποιες είναι οι διαχειριστικές λειτουργίες;Πώς εκτελούνται;

Θα παραμετροποιούνται από το χρήστη και πόσο;

11

Page 12: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Λειτουργίες αναφορών ﴾reportingrequirements﴿

Τι αναφορές απαιτούνται ;Πόσο παραμετροποιήσιμες πρέπει να είναι;

Ποιος έχει δικαίωμα να τις προσπελαύνει;

12

Page 13: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μη λειτουργικές απαιτήσειςΑπαιτήσεις για ποιοτικά χαρακτηριστικά του λογισμικού

Διαθεσιμότητα ‐ Ανάνηψη από καταστροφέςΑσφάλεια ‐ ΑκεραιότηταΕυελιξία ‐ Επεκτασιμότητα

Απόδοση ‐ ΑπροκρισιμότηταΥποστήριξη διεθνών προτύπων

Καθορίζουν σε μεγάλο βαθμό την επιτυχία του έργου

13

Page 14: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

14

Page 15: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

15

Page 16: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

Ας δούμε μερικά παραδείγματα

16

Page 17: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

17

Page 18: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μαζική εισαγωγή / εξαγωγή δεδομένων﴾Data import / export﴿

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

18

Page 19: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Υποστήριξη διεθνούς προτύπουΑνάλογα με την περίπτωση, μπορεί να επηρεάζει:

Ένα συγκεκριμένο συστατικόΈνα υποσύνολο των συστατικών

Το σχεδιασμό συνολικά

19

Page 20: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Διαλειτουργικότητα ﴾interoperability﴿Το υπό ανάπτυξη σύστημα θα διαλειτουργεί με τρίτασυστήματα;Τι είδους δεδομένα θα ανταλλάσονται;

Με ποιους μηχανισμούς, μορφότυπους και πρωτόκολλα;

20

Page 21: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

Το υπό ανάπτυξη σύστημα μπορεί να διέπεται απόσυγκεκριμένο νομικό ή κανονιστικό πλαίσιο ﴾για παράδειγμα,πληροφοριακά συστήματα δημοσίου τομέα﴿.

21

Page 22: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Ορισμός των απαιτήσεωνΣαφήνεια ﴾η απαίτηση είναι σαφώς διατυπωμένη﴿Συνέπεια ﴾η μία απαίτηση δεν αντιβαίνει με την άλλη﴿

Πληρότητα ﴾η απαίτηση καλύπτει όλες τις περιπτώσεις﴿Επαληθευσιμότητα ﴾η απαίτηση μπορεί να ελεγχθεί σε σχέσημε την υλοποίηση﴿

22

Page 23: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

ΕπίσηςΣε μεγάλα έργα

Καταγωγή/γενεαλογία απαίτησηςΠοιος τη ζήτησεΠοιον επιχειρησιακό στόχο εξυπηρετεί

Για παράδειγμα, θα πρέπει να γνωρίζει η ομάδα του έργου αν "τοζητάει ο διευθυντής"

23

Page 24: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Έγγραφο ανάλυσης απαιτήσεωνΠεριγραφή σε φυσική γλώσσα:

Σκοπός του συστήματοςΚατηγορίες χρηστών ﴾users & stakeholders﴿Εμβέλεια του συστήματος

ΠεριορισμοίΠαραδοχέςΑπαιτήσεις ﴾λειτουργικές ή μη﴿

24

Page 25: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

25

Page 26: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Ζητούμενα από το κείμενο τωντεχνικών προδιαγραφών

Να προσδιορίσουν τον τρόπο με τον οποίο το λογισμικό θαικανοποιήσει τις απαιτήσεις

26

Page 27: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

ΣυγκεκριμέναΑρχιτεκτονικός σχεδιασμός και συστατικά του λογισμικού

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

27

Page 28: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

28

Page 29: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

29

Page 30: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

ΔηλαδήΟι τεχνικές προδιαγραφές μοντελοποιούν τις απαιτήσειςεντός ενός οριοθετημένου σχεδιαστικού / αρχιτεκτονικούπλαισίουΔεν είναι πάντα εφικτό ο σχεδιασμός / αρχιτεκτονική ναέχουν ολοκληρωθεί μέχρι τελευταίας λεπτομέρειας

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

30

Page 31: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Θυμηθείτε

31

Page 32: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Κοινός τόποςΗ ανάλυση των απαιτήσεων πρέπει να καταλήξει σε ένακοινά αποδεκτό ζητούμενο

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

32

Page 33: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Θυμηθείτε από την εισαγωγήΣτα μεγάλα έργα λογισμικού εμπλέκονται πολλοί συμμετέχοντες:

Χρήστες

ΠελάτεςΔιοίκηση ﴾ακόμα και Μέτοχοι ή Επενδυτές﴿ΑναλυτέςΠρογραμματιστές

ΔοκιμαστέςΣχεδιαστές διεπαφώνΥπεύθυνοι έργουκτλ.

33

Page 34: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Ο ρόλος του Software Architect

Διαχείριση της πολυπλοκότητας

50% αρχιτεκτονική ﴾ουσιώδης πολυπλοκότητα﴿50% επικοινωνία ﴾τεχνητή πολυπλοκότητα﴿

με τους stakeholdersμε την επιχειρησιακή ομάδα έργου ﴾Project Manager,Business Analyst, κ.ά﴿με την ομάδα ανάπτυξης ﴾engineers﴿

34

Page 35: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

Ο Architect θα πρέπει να κάνει το διερμηνέα και να "μιλάει"τη γλώσσα και των τριών

35

Page 36: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Ιεράρχηση απαιτήσεωνΔεν είναι όλες οι απαιτήσεις εξίσου σημαντικέςΜια μικρή ‐θεωρητικά‐ απαίτηση μπορεί να οδηγήσει τοέργο εκτός δρόμου/στόχου

Η ομάδα ανάπτυξης ή η επιχειρησιακή ομάδα μπορεί ναμη δώσουν προσοχή ﴾"αφού το ζητάει ο πελάτης"﴿Ο stakeholder ενδέχεται να μην το καταλάβει

Ο Architect πρέπει να το διαγνώσει έγκαιρα και να προτείνειεναλλακτικές

36

Page 37: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

37

Page 38: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

38

Page 39: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

ΣυμπέρασμαΟ Architect θα πρέπει να έχει απευθείας επαφή με τουςstakeholders

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

Ενώ παράλληλα σχεδιάζει το σύστημαΓια να είναι σε θέση να φιλτράρει τις "λάθος" απαιτήσεις

Και να μεταφράσει τις υπόλοιπες σε προδιαγραφές γιατην ομάδα ανάπτυξης

39

Page 40: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

The belief that complex systems require armies ofprogrammers and designers is wrong. A system that is notunderstood in its entirety, or at least to a significant degree ofdetail by a single individual, should probably not be built.

N. Wirth

40

Page 41: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Superman

By J.Schulenklopper, E. Rommes 41

Page 42: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Για να γίνεις SupermanΕνδεικτικά

Ενσυναίσθηση ﴾empathy﴿Για τις έγνοιες ﴾concerns﴿ όλων των εμπλεκόμενων

Τεχνική αρτιότηταΕπιλογή τεχνολογίας που να είναι συμβατή με τιςανάγκες του έργου και τις ικανότητες της ομάδας

Επικοινωνιακή ικανότηταΣυνεχής επικοινωνία με όλους τους εμπλεκόμενους γιατην εύρεση των βέλτιστων συμβιβασμών ﴾trade‐offs﴿

ΕμπειρίαΓια να μπορούν να γίνουν καλά όλα τα παραπάνω

42

Page 43: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

43

Page 44: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μοντελοποίηση και οπτικοποίησηαπαιτήσεων/προδιαγραφώνΕπικοινωνία των ζητούμενων

Διαγράμματα ροής ﴾flow charts﴿

Διαγράμματα ροής δεδομένων ﴾data flow diagrams﴿Πίνακες απόφασης ﴾decision tables﴿Δέντρο απόφασης ﴾decision trees﴿Mind Maps

44

Page 45: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μοντελοποίηση σχεδιασμούΕπικοινωνία του συστήματος και των συστατικών του

Αντικειμενοστραφές μοντέλο

ΨευδοκώδικαςΔιαγράμματα οντοτήτων‐συσχετίσεων ﴾Entity‐Relationshipdiagrams﴿Οντολογίες ﴾ontologies﴿Πρότυπα σχεδίασης ﴾design patterns﴿

45

Page 46: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

UMLΕνοποιημένη γλώσσα μοντελοποίησης

Μοντελοποίηση απαιτήσεων και προδιαγραφών

Μοντελοποίηση σχεδιασμού

46

Page 47: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Γιατί αυτός ο διαχωρισμός;It is almost always incorrect to begin the decomposition of asystem into modules on the basis of a flowchart. We proposeinstead that one begins with a list of difficult design decisionsor design decisions which are likely to change. Each module isthen 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

Page 48: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Η έμφασή μας στο μάθημαΣε επόμενες διαλέξεις

Αντικειμενοστραφές μοντέλοUML

Design Patterns

48

Page 49: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

49

Page 50: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Διάγραμμα ροής δεδομένων ﴾data flowdiagram﴿

50

Page 51: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

51

Page 52: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

52

Page 53: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Mind Map

53

Page 54: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

54

Page 55: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

55

Page 56: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Οντολογία ﴾ontology﴿

56

Page 57: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

57

Page 58: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Αφαίρεση ﴾Abstraction﴿Θεμελιώδης έννοια

"Η εννοιολογική διαδικασία κατά την οποία προκύπτουνγενικοί κανόνες από την εξέταση επιμέρους παραδειγμάτων."﴾Wikipedia﴿Χρησιμοποιείται σε πολλές επιστήμες.

Αποτελεί το κύριο εργαλείο σχεδιασμού.

58

Page 59: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

59

Page 60: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Παράδειγμα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

Page 61: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Βελτίωση ﴾Refinement﴿Συμπληρωματική διαδικασία της αφαίρεσης

Τμηματική προσαρμογή των αφαιρέσεων σε νέες απαιτήσεις,περιορισμούς ή αποφάσεις

61

Page 62: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

62

Page 63: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

Θα τη δούμε λεπτομερώς σε επόμενη διάλεξη

63

Page 64: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

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

64

Page 65: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

The most difficult design task is to find the most appropriatedecomposition of the whole into a module hierarchy,minimizing function and code duplications.

N. Wirth

65

Page 66: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Απόκρυψη πληροφορίας ﴾informationhiding﴿

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

Παροχή σταθερών interfaces ﴾αφαιρέσεων﴿ για τηνεπικοινωνία μεταξύ των τμημάτων

66

Page 67: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

67

Page 68: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Ενθυλάκωση ﴾encapsulation﴿Διαχωρισμός της δομής από τη συμπεριφορά ενόςσυστατικούΔιαχωρισμός της αφαίρεσης από την υλοποίησή της

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

68

Page 69: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Παράδειγμα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

Page 70: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Διαχωρισμός ενδιαφερόντων﴾separation of concerns﴿

Κάθε τμήμα του λογισμικού επικεντρώνεται στην επίλυσηενός ξεχωριστού ζητήματος ﴾concern﴿

Αρχιτεκτονικά επίπεδα ﴾επίπεδο παρουσίασης, επίπεδοεπιχειρησιακής λογικής, επίπεδο πρόσβασης δεδομένων﴿

70

Page 71: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Παράδειγμα

Θα επανέλθουμε

71

Page 72: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

72

Page 73: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Παράδειγμα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

Page 74: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μήπως ο ίδιος ο κώδικας είναι τοdesign;

TEX would have been a complete failure if I had merelyspecified it and not participated fully in its initialimplementation. The process of implementation constantly ledme to unanticipated questions and to new insights about howthe original specifications could be improved.

Donald Knuth

74

Page 75: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

75

Page 76: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μην επαναλαμβάνεσαι ﴾Don't RepeatYourself﴿

"Every piece of knowledge must have a single, unambiguous,authoritative representation within a system."

A. Thomas, D. Hunt

76

Page 77: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Μόνο μια φορά ﴾Once and Only Once﴿Αρχή του Extreme Programming ﴾XP﴿

Each and every declaration of behavior should appear Onceand Only Once.

77

Page 78: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

DRY vs WETWET: We Enjoy TypingWET: Waste Everybody's Time

78

Page 79: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

79

Page 80: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Σύνολο αρχών S.O.L.I.D.Single responsibility ﴾S﴿

Open/closed ﴾Ο﴿Liskov substitution ﴾L﴿Interface segregation ﴾Ι﴿Dependency inversion ﴾D﴿

80

Page 81: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

A class should have only one reason to change.

81

Page 82: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

82

Page 83: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

Strong behavioral subtyping.

83

Page 84: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

84

Page 85: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

Οι αφαιρέσεις δεν πρέπει να εξαρτώνται από λεπτομέρειες.Οι λεπτομέρειες θα πρέπει να εξαρτώνται από τις αφαιρέσεις.

85

Page 86: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Παράδειγμα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

Page 87: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

87

Page 88: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Ποιοτικά ζητούμενα σχεδιασμούPerformance ‐ Scalability

Maintainability ‐ ExtensibilitySecurity ‐ SafetyRobustness ‐ Fault‐toleranceUsability ‐ Reliability

88

Page 89: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

89

Page 90: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

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

90

Page 91: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Τέσσερα είδη

By Martin Fowler

91

Page 92: 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού · 2020-06-11 · 03 Ανάλυση Απαιτήσεων και Σχεδιασμός Λογισμικού

Το κλασικότερο trade‐offEfficiency vs Abstraction

Programmers have spent far too much time worrying aboutefficiency in the wrong places at the wrong times; prematureoptimization is the root of all evil.

Donald Knuth

92