Τεχνολογία Λογισμικού (ΥΣ09)

Κώστας Σαΐδης

Περιγραφή

Το μάθημα αποτελεί μια εισαγωγή στην τεχνολογία λογισμικού, καλύπτοντας τα εξής ζητήματα:

  • Κύκλος Ζωής του Λογισμικού
  • Διοίκηση και Διαχείριση Έργου Λογισμικού
  • Τεχνικές και Εργαλεία Διοίκησης, Παρακολούθησης και Ελέγχου της Ανάπτυξης Λογισμικού
  • Μεθοδολογίες και Μοντέλα ανάπτυξης λογισμικού
  • Ανάλυση απαιτήσεων
  • Σχεδιασμός Λογισμικού
  • Γλώσσα μοντελοποίησης UML
  • Πρότυπα Σχεδίασης (Design Patterns)
  • Αρχιτεκτονική Λογισμικού
  • Διαχείριση συστατικών του λογισμικού
  • Σχεδιασμός διεπαφής χρήστη

Στην εργασία του μαθήματος δίνεται ιδιαίτερη έμφαση στην ευέλικτη μεθοδολογία (agile methodology) και ειδικά στην τεχνική Scrum, ενώ χρησιμοποιούνται οι σύγχρονες διαδικτυακές εφαρμογές ως παράδειγμα περίπτωσης για να αναδειχθούν τα ζητήματα σχεδιασμού, διαχείρισης, ελέγχου και διοίκησης λογισμικού που ανακύπτουν στην πράξη κατά την ανάπτυξη σύνθετων εφαρμογών.

CC - Αναφορά - Μη Εμπορική Χρήση - Όχι Παράγωγα Έργα
Περιεχόμενο μαθήματος

Κύκλος Ζωής του Λογισμικού

  • Καταγραφή και ανάλυση απαιτήσεων.
  • Σχεδιασμός.
  • Υλοποίηση.
  • Επαλήθευση και επικύρωση.
  • Εγκατάσταση, έλεγχος, παραμετροποίηση και ολοκλήρωση λογισμικού στο παραγωγικό του περιβάλλον.
  • Συντήρηση και επέκταση.

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

  • Μοντέλο Καταρράκτη (waterfall)
  • Ακολουθιακή διαδικασία (sequential)
  • Επαναληπτική διαδικασία (iterative)
  • Αυξητική διαδικασία (incremental)
  • Ευέλικτη διαδικασία (agile)
  • Ταχεία Πρωτοτυποίηση (Rapid prototyping)
  • Ενοποιημένη διαδικασία (Unified Process)
  • «Ακραίος Προγραμματισμός» (Extreme Programming).
  • Ανάπτυξη βασισμένη σε ελέγχους (Test-driven Development)
  • Συνεχής παράδοση (Continuous Delivery)
  • Ανάπτυξη / Λειτουργία («DevOps»)

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

  • Ανάλυση και μοντελοποίηση απαιτήσεων
  • Σύνταξη προδιαγραφών και παραδοτέων

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

  • Βασικές αρχές
  • Αντικειμονοστρεφής σχεδιασμός συστημάτων
  • Έμφαση στα συστατικά λογισμικού

Γλώσσα μοντελοποίησης UML

  • Διαγράμματα κλάσεων (Class diagrams)
  • Διαγράμματα ακολουθιών (Sequence diagrams)
  • Διαγράμματα δραστηριοτήτων (Activity diagrams)
  • Διαγράμματα σεναρίων χρήσης (Use-case diagrams)
  • κτλ.

Πρότυπα Σχεδίασης (Design Patterns)

  • Κατασκευαστικά πρότυπα (Creational patterns)
  • Δομικά πρότυπα (Structural patterns)
  • Πρότυπα συμπεριφοράς (Behavioral patterns)

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

  • Αρχιτεκτονικός σχεδιασμός σύνθετων κατανεμημένων συστημάτων
    • Βασικές έννοιες
    • Αρχιτεκτονικά πρότυπα (Architectural patterns)
  • Έμφαση σε εφαρμογές διαδικτύου
    • Αρχιτεκτονική REST (Representation State Transfer)
    • Ανάπτυξη RESTful Application Programming Interfaces (APIs)
    • Θέματα ασφάλειας
    • Θέματα απόδοσης

Σχεδιασμός διεπαφής χρήστη

  • Εμπειρία χρήσης: Ευχρηστία, διαδραστικότητα και αποκρισιμότητα
  • Σύγχρονες μεθοδολογίες ανάπτυξης διεπαφής χρήστη
  • Πρότυπα σχεδίασης Model-View-Controller, Model-View-ViewModel και Observable
  • Έμφαση σε τεχνολογίες εφαρμογών διαδικτύου (HTML5, CSS3, Javascript)
  • Εφαρμογές μιας σελίδας (Single-page applications)
  • Ασύγχρονες τεχνικές (AJAX, Promises)

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

  • Διοίκηση έργου (γενικά)
  • Εισαγωγή και βασικές έννοιες
  • Εκτίμηση κόστους έργου
  • Διοίκηση ομάδας ανάπτυξης λογισμικού
  • Συνήθεις ρόλοι σε μια ομάδα ανάπτυξης λογισμικού
  • Αλληλεπιδράσεις μεταξύ ρόλων
  • Καλές διεθνείς πρακτικές

Τεχνικές και Εργαλεία Διοίκησης, Παρακολούθησης και Ελέγχου της Ανάπτυξης Λογισμικού

  • Έλεγχος εκδόσεων (Version Control)
    • Έμφαση στο σύστημα Git (το πλέον διαδεδομένο Version Control System)
  • * Αυτοματισμός διαδικασίας «χτισίματος» λογισμικού (Build automation)
    • Έμφαση στο σύστημα Gradle (χρησιμοποιείται στην ανάπτυξη Android εφαρμογών)
  • Σενάρια ελέγχου
    • Unit testing, Regression testing, Functional testing, Integration testing, test coverage
  • Συνεχής ολοκλήρωση (Continuous integration)
  • Αξιοπιστία λογισμικού
  • Η έννοια του «τεχνικού/σχεδιαστικού χρέους» (technical debt).

Διαχείριση συστατικών του λογισμικού

  • Συστατικά λογισμικού και αλληλεξαρτήσεις τους (software components and dependencies)
  • Αποθήκες συστατικών λογισμικού (Software artifact repositories)
  • Διαχείριση εκδόσεων λογισμικού (software releases)
  • Μέθοδοι αρίθμησης εκδόσεων (versioning schemes)

 

Βιβλιογραφία
  • Alan J. Perlis, “Epigrams on Programming”, ACM SIGPLAN Notices, Vol. 17, Issue 9, Sep. 1982, p. 7-13. Σύνδεσμος
  • N. Wirth, “A Plea for Lean Software”, IEEE Computer, Vol 28, Issue 2, Feb. 1995, p. 64-68.
  • Robert L. Glass, “Facts and Fallacies of Software Engineering”, Addison Wesley, 2002, 0-321-11742-5.
  • Fred P. Brooks, “No Silver Bullet — Essence and Accident in Software Engineering”, Proceedings of the IFIP Tenth World Computing Conference, April 1987, p. 1069-1076. Σύνδεσμος
  • Fred P. Brooks, “The Mythical Man Month”, Addison-Wesley, 1975, 0-201-00650-2.
  • Donald E. Knuth, “Computer Programming as an Art”, Communications of the ACM, Vol. 7, Issue 12, Dec. 1974, p. 667-673. Σύνδεσμος
  • E.W. Dijkstra, “EWD316: A Short Introduction to the Art of Programming”, August 1971. Σύνδεσμος
  • Paul Graham, “Hackers and Painters”, O’Reilly Media, 2004, 0-596-00662-4. Το ομώνυμο essay
  • Winston. W. Royce, “Managing the development of large software systems: concepts and techniques”, Proceedings of the 9th International Conference of Software Engineering, 1987, p. 328 - 338. Η πρώτη έκδοση του άρθρου (1970)
  • Jochem Schulenklopper, “Why They Just Don’t Get It: Communicating about Architecture with Business Stakeholders”. IEEE Software. 33 (3): 13–19, 2016.
  • David L. Parnas, “On the criteria to be used in decomposing systems into modules”, Communications of the ACM. 15 (12): 1053 - 1058, 1972.
  • Bill Curtis, Herb Krasner, and Neil Iscoe. “A Field Study of the Software Design Process for Large Systems.”, Communications of the ACM, vol. 31, pp. 1268-1287, Nov. 1988
  • Peri Tarr, Harold Ossher, William Harrison, Stanley M. Sutton Jr., “N degrees of separation: multi-dimensional separation of concerns”, ICSE ’99 Proceedings of the 21st international conference on Software engineering, 107-119
  • Andrew Hunt, David Thomas, “The Pragmatic Programmer: From Journeyman to Master”, The Pragmatic Bookshelf, 1999, 978-0-2016-1622-4.
  • Antero Taivalsaari, “On the notion of inheritance”, ACM Computing Surveys, Vol. 28, No 3, September 1996.
  • Luca Cardelli, Peter Wegner, “On Understanding Types, Data Abstraction, and Polymorphism”, ACM Computing Surveys, Vol 17 n. 4, pp 471-522, December 1985.
  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, “Design Patterns: Elements of Reusable Object-Oriented Software”, Addison Wesley, 1994, 0-201-63361-2.
  • Richard N. Taylor, Nenad Medvidovic, Eric Dashofy, “Software Architecture: Foundations, Theory, and Practice”, 2009, Wiley and Sons, ISBN: 0470167742
  • Daniel Abadi, “Consistency Tradeoffs in Modern Distributed Database System Design”, IEEE Computer, Volume 45, Issue 2, Feb. 2012
  • Martin Fowler, “Microservices: a definition of this new architectural term”. Σύνδεσμος
  • Martin Fowler “Refactoring: Improving the design of existing code”, Addison Wesley, 1999.

Ενότητες

Εισαγωγή στο αντικείμενο του μαθήματος

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

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

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

Καταγραφή, ανάλυση, μοντελοποίηση και οπτικοποίηση απαιτήσεων

 

Το αντικειμενοστρεφές μοντέλο (Επανάληψη αντικειμενοστρεφούς προγραμματισμού)

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

Η έννοια του τεχνικού χρέους

Η γλώσσα UML

Πρότυπα Σχεδίασης

Αρχιτεκτονικές οπτικές λογισμικού

Ποιοτικά χαρακτηριστικά κατανεμημένων αρχιτεκτονικών

Αρχιτεκτονικά πρότυπα λογισμικού

Το φροντιστηριακό υλικό του μαθήματος (συγκεντρωτικά).

Πρόσθετες πληροφορίες για την ομαδική εργασία

Ημερολόγιο