ΗΜΥ 317 Τεχνολογία Υπολογισμού Εαρινό Εξάμηνο 2008 ΙΑΛΕΞΗ 01: ΕΙΣΑΓΩΓΗ ΧΑΡΗΣ ΘΕΟΧΑΡΙ ΗΣ Λέκτορας ΗΜΜΥ (ttheocharides@ucy.ac.cy) [Προσαρμογή από Ian Sommerville, Software Engineering, 8 th Edition]
ΙΟΙΚΗΤΙΚΑ ιδάσκων: ρ. Χάρης Θεοχαρίδης Γραφείο: Green Park, #112 Τηλέφωνο: 22892259 Εmail: ttheocharides@ucy.ac.cy Ώρες Γραφείου: ευτέρα 13:00-14:30 και Παρασκευή 16:00μμ-17:30μμ ή με ραντεβού. Ιστοσελίδα Μαθήματος: http://www.eng.ucy.ac.cy/theocharides/courses/ece317/ ΗΜΥ317 01 Εισαγωγή.2 Θεοχαρίδης, ΗΜΥ, 2008
ΙΟΙΚΗΤΙΚΑ ιαλέξεις: ευτέρα και Πέμπτη, 10:30 12:00 Πανεπιστημιούπολη, ΧΩ 01, Αίθουσα 003 Φροντιστήριο: Τετάρτη, 14:00 15:00 μ.μ., ΧΩ 01, Αιθ. 003 Βοηθός Μαθήματος: Ανδρέας Σάββα Γραφείο: 307 Πολυκατοικία ΑΜΑRAL Ώρες Γραφείου: ΤΒΑ Εmail: andsavv_1981@yahoo.com ΗΜΥ317 01 Εισαγωγή.3 Θεοχαρίδης, ΗΜΥ, 2008
Υλικό (Προαπαιτήσεις) και Βιβλιογραφία Προαπαιτούμενα: ΕΠΛ 034 και ΕΠΛ 035 ΚΑΙ αποδεδειγμένη γνώση σε όλα από τα ακόλουθα: Προγραμματισμός Υπολογιστών Αριθμητικά Συστήματα υαδική Άλγεβρα και Βασική Λογική Υπολογιστών ομές εδομένων και Αλγόριθμοι Βασική Γνώση Αντικειμενοστρεφή Προγραμματισμού Συνιστάται οι φοιτητές να έχουν παρακολουθήσει επιτυχώς τα ΗΜΥ 324 και ΗΜΥ 325. Βασικό Σύγγραμμα Μαθήματος (υποχρεωτικό) Software Engineering, Ian Sommerville (8th Edition), International Computer Science Series, ISBN: 0321313798 Σημειώσεις και φυλλάδια από το Φροντιστήριο και τις διαλέξεις. Επιπλέον Προτεινόμενη Μελέτη Object Oriented Programming in C++, Nicolai Josuttis, Wiley, 2002. ISBN: 0470843993. D. A. Patterson and J. L. Hennessy, Computer Organization and Design: The Hardware/Software Interface, Morgan Kaufman, 3rd Ed., 2005. ΗΜΥ317 01 Εισαγωγή.4 Θεοχαρίδης, ΗΜΥ, 2008
ΒΑΘΜΟΛΟΓΙΑ Μελέτη Εξαμήνου 40% Ενδιάμεση Εξέταση 25% Τελική Εξέταση (εφ όλης της ύλης) 35% Απαραίτητες προϋποθέσεις επιτυχίας στο μάθημα είναι: η εξασφάλιση συνολικού βαθμού πέραν του 50% ηεξασφάλισηπέραντου50% του μέσου βαθμού στις δυο εξετάσεις (τελική και ενδιάμεση). ΗΜΥ317 01 Εισαγωγή.5 Θεοχαρίδης, ΗΜΥ, 2008
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ Περιεχόμενα Αρχές Ανάπτυξης Λογισμικού ιαχείριση Ομαδικών Μελετών και ημιουργίας Λογισμικού Αντικειμενοστρεφής Προγραμματισμός Προδιαγραφές Λογισμικού Πιστοποίηση και Έλεγχος Λογισμικού Υλοποίηση και Κωδικοποίηση CASE Tools - Computer-Aided Software Engineering Άλλες Μορφές Προγραμματισμού - Λογικός Προγραμματισμός ΗΜΥ317 01 Εισαγωγή.6 Θεοχαρίδης, ΗΜΥ, 2008
ΣΤΟΧΟΙ ΜΑΘΗΜΑΤΟΣ Στόχοι Το μάθημα αυτό εισάγει τους φοιτητές στις βασικές ιδέες και σε μοντέρνα εργαλεία και τεχνικές της τεχνολογίας λογισμικού. Θα δοθεί έμφαση στην ανάπτυξη αξιόπιστων και συντηρήσιμων λογισμικών ακολουθώντας την διαδικασία δημιουργίας απαιτήσεων, προδιαγραφών, σχεδιασμού (αντικειμενοστρεφή), υλοποίησης, ενσωμάτωσης και ελέγχου. Θα συζητήσουμε θέματα που αφορούν στην διαχείριση ενός λογισμικού έργου, στον κύκλο ζωής της τεκμηρίωσης του, στην συντήρηση του, και τέλος θέματα που αφορούν σε ανθρώπινους παράγοντες και σε θέματα ηθικής. Θα μελετήσουμε τις αρχές προγραμματισμού (programming principles) και θα τις χρησιμοποιήσουμε για να παρουσιάσουμε τις απαιτήσεις του χρήστη σε ένα λογισμικό έργο, το οποίο θα είναι μια ομαδική εργασία η οποία θα ολοκληρωθεί σταδιακά καθόλη τη διάρκεια του μαθήματος. Θα απεικονίσουμε το σχεδιασμό του έργου και για να μπορέσουμε να τον βελτιώσουμε πιο εύκολα, και θα δούμε το έργο με πολλαπλούς αλληλένδετους τρόπους. Θα δώσουμε έμφαση στο σχεδιασμό ο οποίος βασίζεται σε προοδευτική και επαναλαμβανόμενη ανάπτυξη. Στο μάθημα αυτό οι φοιτητές θα εργαστούν ομαδικά για να αναπτύξουν ένα λογισμικό, ακολουθώντας αναλυτικά τα workflows στο κύκλο ζωής του αντικειμενοστρεφούς παραδείγματος. ΗΜΥ317 01 Εισαγωγή.7 Θεοχαρίδης, ΗΜΥ, 2008
ΙΑΓΡΑΜΜΑ ΜΑΘΗΜΑΤΟΣ Η τάξη έχει μεγάλες απαιτήσεις (όπως όλες οι τάξεις των ΜΥ) Ομαδική Μελέτη Εξαμήνου με Εβδομαδιαίες Παραδοτέες Εργασίες Προγραμματισμός σε ΟΟ Γλώσσα (Object-Oriented Language) Τι θα μάθουμε: ιαχείριση ημιουργίας Λογισμικού Αναγκαίες ιεργασίες για ομαδική ανάπτυξη ημιουργία Προδιαγραφών και Αναμενόμενων Παραδοτέων ημιουργία Αρχείου ιαχείρισης και Επαναχρήσης Υλικού ιαχείριση Κώδικα Προδιαγραφές και Αναφορές Παραδοτέων Τι ΕΝ θα μάθουμε: Προγραμματισμό!!! Αριθμητική, Λογική ΗΜΥ317 01 Εισαγωγή.8 Θεοχαρίδης, ΗΜΥ, 2008
Στόχοι εν συντόμω Να εισαχθεί η Τεχνολογία Υπολογιστών (Λογισμικού) και να κατανοηθεί η σημασία της Να απαντηθούν ερωτήσεις που αφορούν την μηχανική λογισμικού Να εισαχθούν ηθικές και επαγγελματικές διαδικασίες και να επεξηγηθεί γιατί αποτελούν ζεστό θέμα στους μηχανικούς υπολογιστών ΗΜΥ317 01 Εισαγωγή.9 Θεοχαρίδης, ΗΜΥ, 2008
Software engineering ΟΛΕΣ οι ανεπτυγμένες οικονομίες στηρίζονται στην τεχνολογία (Λογισμικό!) Τα υλικά σχεδιάζονται για να τρέχουν λογισμικό! Όλο και περισσότερα συστήματα ελέγχονται από λογισμικό Η τεχνολογία λογισμικού ασχολείται με την θεωρία, μεθοδολογία και εργαλεία ανάπτυξης επαγγελματικού λογισμικού Η παραγωγή σε λογισμικό είναι ένα σημαντικό μερίδιο του ακαθάριστου εθνικού προϊόντος ενός κράτους! ΗΜΥ317 01 Εισαγωγή.10 Θεοχαρίδης, ΗΜΥ, 2008
Κόστος Λογισμικού Το κόστος ενός λογισμικού συνήθως είναι ο μεγαλύτερος παράγοντας στο κόστος ενός συστήματος (περισσότερο πολλές φορές από υλικό!) Η συντήρηση του λογισμικού πολλές φορές στοιχίζει περισσότερο από την ανάπτυξη του, ειδικά για συστήματα με μεγάλη διάρκεια ζωής! Η μηχανική λογισμικού ασχολείται με την αποτελεσματική ανάπτυξη λογισμικού με γνώμονα αυτό το κόστος ΗΜΥ317 01 Εισαγωγή.11 Θεοχαρίδης, ΗΜΥ, 2008
FAQs για το Software Engineering Τι είναι λογισμικό; Τι είναι μηχανική λογισμικού; Ποια η διαφορά μεταξύ μηχανικής λογισμικού και πληροφορικής; Ποια η διαφορά μεταξύ μηχανικής λογισμικού και μηχανικής συστημάτων; Τι είναι η εργασία με λογισμικό (software process); Τι είναι το μοντέλο εργασίας λογισμικού (software process model); ΗΜΥ317 01 Εισαγωγή.12 Θεοχαρίδης, ΗΜΥ, 2008
FAQs για το Software Engineering Ποιο είναι το κόστος της μηχανικής λογισμικού; Ποιες είναι οι μέθοδοι μηχανικής λογισμικού; Τι είναι οι μέθοδοι μηχανικής λογισμικού; Τι είναι τα CASE (Computer-Aided Software Engineering); Ποιες είναι οι παράμετροι καλού λογισμικού; Ποιες είναι οι σημαντικές προκλήσεις που αντιμετωπίζει ημηχανικήλογισμικού; ΗΜΥ317 01 Εισαγωγή.13 Θεοχαρίδης, ΗΜΥ, 2008
What is software? Προγράμματα υπολογιστών και τα παρελκόμενα ντοκουμέντα, όπως τα τεχνικά εγχειρίδια, οι απαιτήσεις και οι προδιαγραφές, τα μοντέλα σχεδίασης, κλπ. Το λογισμικό μπορεί να κατευθύνεται σε γενική αγορά, αλλά και σε ένα συγκεκριμένο πρόσωπο. Το λογισμικό μπορεί Να είναι γενικής χρήσεως για χρήση σε ένα φάσμα υπολογιστών/πελατών, π.χ. Word, Excel. Να είναι συγκεκριμένο (custom made, bespoke (i.e. arranged)) να έχει αναπτυχθεί για ένα συγκεκριμένο πελάτη, με βάση τις προδιαγραφές που θέτει πάντοτε ο πελάτης. Καινούριο λογισμικό μπορεί να δημιουργηθεί μέσα από νέα προγράμματα, αλλά και μέσα από την τροποποίηση υφιστάμενων προγραμμάτων (developing new programs, configuring generic software systems or reusing existing software). ΗΜΥ317 01 Εισαγωγή.14 Θεοχαρίδης, ΗΜΥ, 2008
Τι είναι το Software Engineering? Κλάδος της μηχανικής που ασχολείται με ΟΛΕΣ τις φάσεις ανάπτυξης και παραγωγής λογισμικού (Software engineering is an engineering discipline that is concerned with all aspects of software production). Οι μηχανικοί που ασχολούνται με το θέμα, πρέπει να αναπτύξουν συστηματική οργανωμένη αντίληψη για την δουλειά τους, και να χρησιμοποιούν εργαλεία και τεχνικές που αφορούν την λύση του εκάστοτε συγκεκριμένου προβλήματος, τιςδιαθέσιμεςπηγές, αλλά και τους περιορισμούς που αντιμετωπίζονται (Software engineers should adopt a systematic and organised approach to their work and use appropriate tools and techniques depending on the problem to be solved, the development constraints and the resources available). ΗΜΥ317 01 Εισαγωγή.15 Θεοχαρίδης, ΗΜΥ, 2008
ιαφορά από την Επιστήμη της Πληροφορικής (Computer Science) Η επιστήμη της πληροφορικής ασχολείται με τις βασικές πτυχές και την θεωρία. Η μηχανική λογισμικού ασχολείται με τις εφαρμογές ανάπτυξης, συντήρησης και παράδοσης χρήσιμου λογισμικού. Computer science is concerned with theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software. Οι θεωρίες της πληροφορικής δεν είναι πλήρες για να καλύπτουν τις βασικές πτυχές της μηχανικής λογισμικού (π.χ. όχι σαν την φυσική και την ηλεκτρική μηχανική) Computer science theories are still insufficient to act as a complete underpinning for software engineering (unlike e.g. physics and electrical engineering). ΗΜΥ317 01 Εισαγωγή.16 Θεοχαρίδης, ΗΜΥ, 2008
What is the difference between software engineering and system engineering? System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software engineering is part of this process concerned with developing the software infrastructure, control, applications and databases in the system. System engineers are involved in system specification, architectural design, integration and deployment. ΗΜΥ317 01 Εισαγωγή.17 Θεοχαρίδης, ΗΜΥ, 2008
Τι είναι το software process (εργασία λογισμικού)? Μια δέσμη δραστηριοτήτων που στοχεύουν στην ανάπτυξη και ανέλιξη λογισμικού Generic activities in all software processes are: Specification - what the system should do and its development constraints Development - production of the software system Validation - checking that the software is what the customer wants Evolution - changing the software in response to changing demands. ΗΜΥ317 01 Εισαγωγή.18 Θεοχαρίδης, ΗΜΥ, 2008
Τι είναι ένα software process model? A simplified representation of a software process, presented from a specific perspective. Examples of process perspectives are Workflow perspective - sequence of activities; Data-flow perspective - information flow; Role/action perspective - who does what. Generic process models Waterfall; Iterative development; Component-based software engineering. ΗΜΥ317 01 Εισαγωγή.19 Θεοχαρίδης, ΗΜΥ, 2008
Το κόστος της μηχανικής λογισμικού Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs. Costs vary depending on the type of system being developed and the requirements of system attributes such as performance and system reliability. Distribution of costs depends on the development model that is used. ΗΜΥ317 01 Εισαγωγή.20 Θεοχαρίδης, ΗΜΥ, 2008
Activity cost distribution ΗΜΥ317 01 Εισαγωγή.21 Θεοχαρίδης, ΗΜΥ, 2008
Product development costs ΗΜΥ317 01 Εισαγωγή.22 Θεοχαρίδης, ΗΜΥ, 2008
Ποιες είναι οι μέθοδοι Μηχανικής Λογισμικού; ομημένες ενέργειες για ανάπτυξη λογισμικού, που περιλαμβάνουν μοντέλα συστήματος, αναφορές και σημειώσεις, κανονισμοί, δομημένη σχεδίαση και συμβουλές/καθοδήγηση. Περιγραφές Μοντέλων Descriptions of graphical models which should be produced; Κανόνες και Περιορισμοί Constraints applied to system models; Εισηγήσεις Advice on good design practice; Καθοδήγηση Εργασιών What activities to follow. ΗΜΥ317 01 Εισαγωγή.23 Θεοχαρίδης, ΗΜΥ, 2008
What is CASE (Computer-Aided Software Engineering) Λογισμικά συστήματα που έχουν σκοπό την αυτοματοποίηση της διαδικασίας ανάπτυξης Λογισμικού Συχνά χρησιμοποιούνται για υποστήριξη διάφορων μεθόδων. Upper-CASE Εργαλεία που υποστηρίζουν την πρώιμη διαδικασία των απαιτήσεων και της σχεδίασης Tools to support the early process activities of requirements and design; Lower-CASE Εργαλεία που υποστηρίζουν μετέπειτα δραστηριότητες όπως ο προγραμματισμός (κωδικοποίηση), αφαίρεση λαθών και έλεγχος λειτουργίας Tools to support later activities such as programming, debugging and testing. ΗΜΥ317 01 Εισαγωγή.24 Θεοχαρίδης, ΗΜΥ, 2008
Ποιες είναι οι προδιαγραφές ενός καλού Λογισμικού; Το Λογισμικό πρέπει να παραδίδει την απαιτούμενη λειτουργικότητα και η απόδοση προς τον χρήστη πρέπει να είναι εφικτή, αξιόπιστη και αποδεκτή. Αποτελεσματικός ιαχειρισμός / Maintainability Software must evolve to meet changing needs; Αξιοπιστία / Dependability Software must be trustworthy; Αποτελεσματικότητα / Efficiency Software should not make wasteful use of system resources; Αποδοχή / Acceptability Software must accepted by the users for which it was designed. This means it must be understandable, usable and compatible with other systems. ΗΜΥ317 01 Εισαγωγή.25 Θεοχαρίδης, ΗΜΥ, 2008
Ποια είναι τα σημαντικότερα Μηχανική Λογισμικού; Πολυμορφία, παράδοση και εμπιστοσύνη Heterogeneity, delivery and trust. Πολυμορφία - Heterogeneity εμπόδια που αντιμετωπίζει η Ολοκλήρωση ετερογενών πλατφορμών ανάπτυξης και εκτέλεσης λογισμικού, καθώς και ποικιλία τεχνικών υλοποίησης! Developing techniques for building software that can cope with heterogeneous platforms and execution environments; Παράδοση - Delivery Ανάπτυξη τεχνικών ταχείας παράδοσης λογισμικού στον πελάτη Developing techniques that lead to faster delivery of software; Εμπιστοσύνη - Trust Ανάπτυξη τεχνικών που ανακτούν την εμπιστοσύνη του χρήστη προς το λογισμικό. Developing techniques that demonstrate that software can be trusted by its users. ΗΜΥ317 01 Εισαγωγή.26 Θεοχαρίδης, ΗΜΥ, 2008
Επαγγελματική και Ηθική Ευθύνη Η Μηχανική Λογισμικού περιλαμβάνει περισσότερες ευθύνες από την απλή εφαρμογή των τεχνικών ικανοτήτων Οι Μηχανικοί Λογισμικού πρέπει να συμπεριφέρνονται με ειλικρινείς και ηθικούς τρόπους ώστε να γίνουν σεβαστοί επαγγελματίες Η ηθική συμπεριφορά όμως δεν είναι απλά η τήρηση των νόμων ΗΜΥ317 01 Εισαγωγή.27 Θεοχαρίδης, ΗΜΥ, 2008
Θέματα Επαγγελματικής Ηθικής Αποκλειστικότητα Οιμηχανικοίπρέπεινασέβονταιτοαπόρρητοτόσοτου εργοδότη όσο και του πελάτη, έστω και αν δεν υπάρχει γραπτή συμφωνία. Confidentiality - Engineers should normally respect the confidentiality of their employers or clients irrespective of whether or not a formal confidentiality agreement has been signed. Καταλληλότητα/Αρμοδιότητα/Ειδικότητα Οι μηχανικοί δεν πρέπει να ξεφεύγουν από τις αρμοδιότητες/ειδικότητες/καταλληλότητες τους. Πρέπει πάντοτε να δέχονται εργασία που είναι σε θέση να υλοποιήσουν. Competence - Engineers should not misrepresent their level of competence. They should not knowingly accept work which is outwith their competence. ΗΜΥ317 01 Εισαγωγή.28 Θεοχαρίδης, ΗΜΥ, 2008
Θέματα Επαγγελματικής Ηθικής Κανόνες Πνευματικής Ιδιοκτησίας Προστασία Εργοδότη ΚΑΙ Πελάτη! Intellectual property rights - Engineers should be aware of local laws governing the use of intellectual property such as patents, copyright, etc. They should be careful to ensure that the intellectual property of employers and clients is protected. Σεβασμός στους Υπολογιστές των άλλων! Όχι επειδή ξέρουμε την διαδικασία να προκαλέσουμε κακόβουλη χρήση ενός ξένου υπολογιστή, με ότι συνεπάγεται. Computer misuse - Software engineers should not use their technical skills to misuse other people s computers. Computer misuse ranges from relatively trivial (game playing on an employer s machine, say) to extremely serious (dissemination of viruses). ΗΜΥ317 01 Εισαγωγή.29 Θεοχαρίδης, ΗΜΥ, 2008
Περίληψη Η Μηχανική Υπολογιστών είναι ένας κλάδος της Μηχανικής που ασχολείται με όλες της φάσης παραγωγής Λογισμικού. Τα πακέτα λογισμικού περιλαμβάνουν τόσο τα προγράμματα, όσο και τα εγχειρίδια χρήσης και τεχνικές περιγραφές της παραγωγής Λογισμικού. Η βασικές ικανότητες του Λογισμικού είναι η διαθεσιμότητα (δυνατότητα συντήρησης), η αξιοπιστία, η αποτελεσματικότητα αλλά και η χρησιμότητα. Η διαδικασία ανάπτυξης περιλαμβάνει ενέργειες όπως η ανάπτυξη προδιαγραφών, υλοποίηση, πιστοποίηση λειτουργίας αλλά και η φυσική ανέλιξη ενός λογισμικού πακέτου. Η μέθοδοι ανάπτυξης είναι οργανωμένοι τρόποι παραγωγής λογισμικού. Περιλαμβάνουν στοιχειοθετημένες εισηγήσεις για τον τρόπο (διαδικασία) που θα ακολουθηθεί, την σήμανση που θα χρησιμοποιηθεί, τους κανονισμούς περιγραφής και υλοποίησης καθώς και τους κανόνες/προδιαγραφές σχεδιασμού. ΗΜΥ317 01 Εισαγωγή.30 Θεοχαρίδης, ΗΜΥ, 2008
Key points CASE tools are software systems which are designed to support routine activities in the software process such as editing design diagrams, checking diagram consistency and keeping track of program tests which have been run. Software engineers have responsibilities to the engineering profession and society. They should not simply be concerned with technical issues. Professional societies publish codes of conduct which set out the standards of behaviour expected of their members. ΗΜΥ317 01 Εισαγωγή.31 Θεοχαρίδης, ΗΜΥ, 2008
ΕΠΟΜΕΝΗ ΙΑΛΕΞΗ ΚΑΙ ΠΛΗΡΟΦΟΡΙΕΣ ΕΠΟΜΕΝΗ ΙΑΛΕΞΗ Fundamentals of Object Oriented Programming Part II - Andreas Τετάρτη, 14:00 pm Φροντιστήριο και παράδοση πρώτων αναφορών. ΗΜΥ317 01 Εισαγωγή.32 Θεοχαρίδης, ΗΜΥ, 2008