03 Τεχνική διαχείριση έργων λογισμικού

Σχετικά έγγραφα
Τεχνολογία Λογισμικού

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

07 Διαχείριση έργων λογισμικού ΙΙ

09 Διοίκηση έργων λογισμικού

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

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

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

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

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

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

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

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών ΗΥ463 Συστήματα Ανάκτησης Πληροφοριών Χειμερινό Εξάμηνο

05β Η ιδεατή μηχανή της Java

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Δημιουργία μιας εφαρμογής Java με το NetBeans

03 Η ιδεατή μηχανή της Java

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ

SocialSkip Service v2.0

ΔΗΜΙΟΥΡΓΙΑ & ΧΡΗΣΗ ΒΙΒΛΙΟΘΗΚΩΝ

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

Εργαστήριο 2. Εισαγωγή στο Git Versioning System

Η ιδεατή μηχανή της Java

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

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Subversion. Τριγάζη Ελισάβετ. Επιβλέπων: Μηνάς Δασυγένης

Company LOGO. Nazaret Kazarian. 1

ΚΕΦΑΛΑΙΟ 1. Εισαγωγή στην Python. 1.1 Εισαγωγή

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Ανοικτά Δεδομένα. Η εμπειρία του OpenDataCloud

11/28/2016 Απόδοση Συστημάτων, Remote Jmeter και Dacappo

ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming)

Το ελεύθερο λογισμικό στη ζωή μας

VERSION 1.0 ΝΟΕΜΒΡΙΟΣ, 2016 ΤΕΧΝΟΛΟΓΙΕΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΝΕΦΟΥΣ ΤΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΟΜΟΙΩΣΗΣ CLOUDSIM ΕΠΙΜΕΛΕΙΑ: ΒΑΣΙΛΕΙΟΣ ΤΣΑΚΑΝΙΚΑΣ

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Git - Version Control System

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

SocialSkip Service v1.0

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

Πρακτικές Agile Development στην Ανάπτυξη του le .me

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Εξοικείωση με τα Εργαλεία για το μάθημα Τεχνολογίες Εφαρμογών Διαδικτύου. Χειμερινό

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Σεμινάριο Git & GitLab. Γιώργος Τσιάτσιος Δημήτρης Κάσσος

Θέματα Ατομικής Διπλωματικής Εργασίας Ακαδημαϊκό Έτος 2017/2018. Γεωργία Καπιτσάκη (Επίκουρη Καθηγήτρια)

Διαχείριση Έργου Λογισμικού. Πασχαλίδης Παύλος ΤΕΙ ΘΕΣΣΑΛΙΑΣ

ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΟΙΚΗΣΗΣ MANAGEMENT INFORMATION SYSTEMS (M.I.S.)

Έλεγχος Προγραμμάτων και Συστήματος

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

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

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

Ενότητα 2. Πηγές Λογισμικού. Πληροφοριακά Συστήματα Διοίκησης ΙI Νίκος Καρακαπιλίδης 2-1

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

LGAF Project LGAF Team Roles ΠΡΟΣΚΛΗΣΗ ΕΚΔΗΛΩΣΗΣ ΕΝΔΙΑΦΕΡΟΝΤΟΣ ΓΙΑ ΣΥΝΕΡΓΑΤΕΣ

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

Διάλεξη 17: Έλεγχος Λογισμικού

Bundles & Modules MINIMUM ΧΡΗΣΤΕΣ:5

ΑΠΟΘΕΤΗΡΙΟ ΕΦΑΡΜΟΓΩΝ ΥΠΠΕΘ ΚΑΙ ΕΠΟΠΤΕΥΟΜΕΝΩΝ ΦΟΡΕΩΝ (git.minedu.gov.gr)

ΕΡΓΑΣΙΑ: Ετήσιας Συντήρησης και Υποστήριξης Λειτουργίας Δημοτικής Διαδικτυακής Πύλης

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

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

Βιοϊατρική τεχνολογία

Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Α2Α

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων Σωτήρης Γυφτόπουλος

Σεμινάριο Git & GitLab. Τάκης Παναγόπουλος Νικόλας Μπομπέτσης

Οδηγίες Εγκατάστασης και χρήσης προγραμμάτων για την γλώσσα C

Αναπτύσσοντας developer tools στην Αpple. Αργύριος Κυρτζίδης Προπτυχιακός φοιτητής ΗΜΜΥ

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Εφαρµογές WebGIS Open Source

Τεχνολογία Λογισμικού & Πνευματική Ιδιοκτησία. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εισαγωγή στη γλώσσα προγραμματισμού C++

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

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

Εισαγωγή στα SCM εργαλεία και στο Subversion

Αβραμίδης Ελευθέριος Επιβλέπων καθηγητής Κωνσταντίνος Διαμαντάρας. ΤΕΙ Θεσσαλονίκης 17/2/2009

Σχεδιασμός Βάσεων Δεδομένων

Διάλεξη 1. Εισαγωγή Επισκόπηση άσκησης

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Μεταφραστής Braille WinBraille v.4.1.5

Εθνικό Πληροφοριακό Σύστηµα Έρευνας και Τεχνολογίας: Η Εξέλιξη των Yποδοµών Ανοικτής Πρόσβασης- ράσεις και Προκλήσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

./mydiz {-c -a -x -m -d -p -j} <archive-file> <list-of-files/dirs>

Εισαγωγή στην Τεχνολογία Λογισμικού

Βασικά Στοιχεία της Java

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec06 (Εργαστήριο) 26/03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 2

Transcript:

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

Περιεχόμενα Ο ρόλος του επικεφαλής μηχανικού Τεχνική διαχείριση έργων λογισμικού Εργαλεία και διαδικασίες Συστατικά λογισμικού Software artifacts Διαχείριση εκδόσεων λογισμικού 2

Πώς ο επικεφαλής μηχανικός Ο οποίος συμμετέχει σε μια ομάδα ανάπτυξης Διαχειρίζεται τεχνικά τη διαδικασία ανάπτυξης Διασφαλίζοντας την ποιότητα του τελικού αποτελέσματος 3

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

Περιεχόμενα Αυτοματισμός "χτισίματος" κώδικα Διαχείριση συστατικών και των εκδόσεών τους Συναφή με το λεγόμενο "software configuration management" 5

Τεχνική διαχείριση έργου λογισμικού γενικά Διαχείριση εκδόσεων κώδικα version control Αυτόματο "χτίσιμο" λογισμικού build automation Στατική ανάλυση κώδικα και αυτόματος εντοπισμός σφαλμάτων bug detection Eκτέλεση σεναρίων ελέγχου tests Συνεχής ολοκλήρωση continuous integration Διαχείριση συστατικών λογισμικού και των εκδόσεών τους 6

Πριν ξεκινήσει το όποιο έργο Σύναψη κοινής "τεχνικής κουλτούρας" Κοινές συμβάσεις conventions Για τον κώδικα, τη μορφοποίηση, την οματοδοσία, την τοποθεσία, κλπ. Κοινά εργαλεία tools & διαδικασίες procedures Κοινά αποδεκτός και σαφώς ορισμένος ο επιμερισμός ευθύνης ownership 7

Παράδειγμα Συμβάσεις για τη δομή του κώδικα Τρόπος συγγραφής κώδικα Ονόματα κλάσεων, μεθόδων, μεταβλητών Στοίχιση κώδικα Παράδειγμα: Java coding conventions NameOfClass nameofmethod, nameofvariable και nameoffield NAME_OF_CONSTANT 8

Παράδειγμα Συμβάσεις για τη δομή των αρχείων Διάρθρωση και τοποθέτηση των αρχείων Source files, resources, configuration files, libraries, κτλ. Στο JVM τα Maven directory structure conventions αποτελούν το de facto standard src/main/java src/main/resources src/test/java src/test/resources build/classes 9

Java Packages package x.y.z; class Foo {... } Πηγαίος κώδικας src/main/java/x/y/z/foo.java Class files build/classes/x/y/z/foo.class 10

Test Packages package x.y.z; class FooTest { //the tests of class Foo... } Πηγαίος κώδικας src/test/java/x/y/z/foo.java Class files build/classes/x/y/z/foo.class 11

Εργαλεία Version control Integrated Development Environments IDEs Building Testing Bug detection Continuous integration Continuous deployment and delivery DevOps Containers monitoring alerting 12

Καθημερινές διαδικασίες Pull, commit, branch, tag, merge, push Code review merge/pull requests Build Test Deploy to CI Pre release Deploy to staging Release Deploy to production 13

Επιμερισμός ευθύνης ownership Ποιος είναι αρμόδιος για ποιο κομμάτι κώδικα / λειτουργικότητας / χαρακτηριστικών ή για ποιο βήμα; Αποφυγή "ορφανού" κώδικα / βήματος κανείς δεν ξέρει πως δουλεύει το component Χ ή πώς να κάνει το βήμα Χ Αποφυγή "αποκλεισμένου" κώδικα / βήματος μόνο ο Χ ξέρει το Ψ Τουλάχιστον δύο πρόσωπα με την ίδια αρμοδιότητα σε κάποιο κομμάτι 14

Version control Ζητούμενα Διαχείριση του source code base της "βάσης" του κώδικα Καταγραφή των αλλαγών ιστορικό, ποιος έκανε τι, πως, πότε Συνεργατική ανάπτυξη Τήρηση πολλών παράλληλων καταστάσεων του κώδικα ταυτόχρονα Ανάκτηση συγκεκριμένης παρελθούσας κατάστασης 15

Στο μάθημα Εργαλείο git 16

Build automation Ζητούμενα Αυτοματοποίηση της διαδικασίας "χτισίματος" του λογισμικού Πώς από το source base παράγεται το software artifact.jar,.exe,.rpm,.deb, κλπ 17

Ο βασικός "τεχνικός" στόχος κάθε έργου λογισμικού είναι η παραγωγή ενός ή περισσότερων software artifacts 18

Software artifacts Αυτοτελή αρχεία έτοιμα προς εκτέλεση ή Μερικώς αυτοτελή αρχεία προς ενσωμάτωση σε άλλες εφαρμογές βιβλιοθήκες Δομή/περιεχόμενα ανάλογα με τη γλώσσα προγραμματισμού, το λειτουργικό σύστημα, την εφαρμογή, κτλ. 19

Στη Java κοινότητα Software artifact = Jar αρχείο συνήθως Jar αρχείο = Zip αρχείο Περιέχει.class αρχεία JVM κλάσεις και ενδεχομένωςmetadata manifests, resources images, αρχεία ρυθμίσεων κ.ο.κ. 20

Στην πράξη Κάθε ξεχωριστή προγραμματιστική/τεχνολογική κοινότητα συνήθως: έχει ξεχωριστούς μορφότυπους artifacts έχει ξεχωριστά εργαλεία διαχείρισής τους έχει όπως λέγεται ξεχωριστό technology stack 21

Ας το δούμε αντίστροφα Τι είναι ένα software artifact; Μπορεί να είναι οτιδήποτε: Application, Library, Component, Server, Client Μπορεί να χρησιμοποιείται για ένα μόνο σκοπό π.χ. standalone app ή να είναι επαναχρησιμοποιήσιμο για πολλούς σκοπούς π.χ. library Ας πούμε ότι, γενικά, είναι ένα συστατικό λογισμικού 22

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

Συστατικά λογισμικού Επαναχρησιμοποιήσιμα τμήματα λογισμικού που διατίθενται ως ξεχωριστά software artifacts Αποθήκες συστατικών λογισμικού software artifact repositories Διαχείριση εκδόσεων συστατικών software releases, artifact versioning 24

Εξαρτήσεις λογισμικού software dependencies Compile time dependencis "static" linking Runtime dependencies "dynamic" linking 25

Μεταβατικές εξαρτήσεις transitive dependencies Οι εξαρτήσεις των εξαρτήσεων τα συστατικά δεν είναι πάντα αυτοτελή, μπορεί να εξαρτώνται από άλλα συστατικά / artifacts για τη λειτουργία τους Project > Lib1, Lib2 Lib1 > Lib11 Lib2 > Lib21, Lib22 Lib21 > Lib211 26

Αποθήκες συστατικών λογισμικού software artifact repositories Tήρηση των software artifacts files Σε πολλές εκδόσεις Τήρηση μεταδεδομένων για τις αλληλο εξαρτήσεις τους Δημόσιες ή ιδιωτικές αποθήκες 27

Παραδείγματα δημόσιων αποθηκών της Java κοινότητας https://search.maven.org/ https://bintray.com/bintray/jcenter https://plugins.gradle.org/ 28

Ιδιωτικές αποθήκες Για μεγάλες ομάδες Για σύνθετο λογισμικό Φιλοξενία της αποθήκης στο εσωτερικό δίκτυο του οργανισμού 29

Δημοσίευση συστατικού Ανέβασμα του συστατικού σε κάποια αποθήκη artifact publication Αυτοματοποιημένη διαδικασία μέσω του build εργαλείου Παράδειγμα gradle publish η mvn release 30

Για παράδειγμα Εκτέλεση όλων των προαπαιτούμενων για την παραγωγή του jar αρχείου download dependencies, compile code, run tests, assemble files Παραγωγή του jar αρχείου με κάποια σύμβαση για το όνομα και την έκδοσή του π.χ. project name 1.2.jar Ανέβασμα του αρχείου στην αποθήκη σε κάποια συγκεκριμένη κατά σύμβαση θέση π.χ. /gr/ntua/softeng17b/foo/1.2/project name 1.2.jar μαζί με πληροφορίες/μεταδεδομένα για τις εξαρτήσεις του π.χ. maven pom, ivy file 31

Διαχείριση εκδόσεων λογισμικού Versioning Releasing 32

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

Παράδειγμα [major].[minor].[revision].[build] major: Σημαντική αλλαγή στο λογισμικό major release minor: Προσθήκη ή βελτίωση στο λογισμικό minor release revision: Patch, διόρθωση bug, επίλυση προβλήματος ασφαλείας, κτλ. maintenance release build: Αυτόματη αρίθμηση του build π.χ. αύξων αριθμός, commit id, κτλ. internal release 34

Semantic Versioning [major].[minor].[patch] major: Breaking change minor: Add new backwards compatible functionality patch: Apply backwards compatible bug fixes Κύρια έννοια: Public API http://semver.org/ 35

Επίτευξη του release Επιμέρους στάδια και ενδιάμεσες εκδόσεις Pre release internal release Early Access EA Alpha Beta Release candidate Release General Availability, GA Θα επανέλθουμε στη διάλεξη για testing. 36

Σε κάθε βήμα του release Pre, ΕΑ, GA Publish the artifact Tag the commit with the published version number Update the version file Commit the change Push it Αυτοματοποίηση μέσω του build εργαλείου 37