Τεχνολογία Λογισμικού - ntuaΣτη java κοινότητα software artifact =...
TRANSCRIPT
Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Η/Υ
Εθνικό Μετσόβιο Πολυτεχνείο
Τεχνολογία Λογισμικού7ο Εξάμηνο 2019 ‐ 20
Ν.Παπασπύρου, Καθ. ΣΗΜΜΥ, [email protected]Β.Βεσκούκης, Αν.Καθ. ΣΑΤΜ, [email protected]
Κ.Σαΐδης, ΠΔ 407, [email protected]
Διαχείριση έργων λογισμικού ﴾2﴿
2
Software build automation
Ζητούμενα
Αυτοματοποίηση της διαδικασίας "χτισίματος" τουλογισμικούΠώς από το source code base παράγεται το software artifact﴾.jar, .exe, .rpm, .deb, κλπ﴿
3
Ο βασικός "τεχνικός" στόχος κάθε έργουλογισμικού είναι η παραγωγή ενός ήπερισσότερων software artifacts
4
Software build automationΑυτόματη διαχείριση εξαρτήσεων ﴾dependencies﴿Μεταγλώττιση κώδικα ﴾compilation﴿Εκτέλεση σεναρίων ελέγχου ﴾testing﴿
Συνεχής ολοκλήρωση του λογισμικού ﴾Continuous integration﴿Παραγωγή των software artifacts ﴾assemble﴿Απόθεση/δημοσίευσή τους σε κάποια αποθήκη ﴾softwarerelease / publication﴿
5
Εργαλεία build automation
6
makeΗ αρχή όλωνStuard Feldman, Bell Labs, 19762003 ACM Software System Award
Βασικές έννοιεςTargets, prerequisites, commands, macrosTopological sorting
7
Topological sortingΓραμμική διάταξη των κόμβων ενός κατευθυνόμενου γράφου,στην οποία το u προηγείται του v αν υπάρχει κατευθυνόμενηακμή u−> v.
Ο γράφος δεν πρέπει να έχει κύκλους ﴾ακυκλικός﴿ ‐ DirectedAcyclic Graph ﴾DAG﴿.
Εκτέλεση των build targets.
8
Εργαλεία στο Java οικοσύστημαApache AntApache IvyApache MavenGradle ﴾έμφαση στο μάθημα﴿
9
Gradlehttps://www.slideshare.net/KostasSaidis/an‐introduction‐to‐gradle‐for‐java‐developers
Θα σας δοθεί έτοιμο για χρήση Gradle project ως παράδειγμα
10
Διαχείριση συστατικών λογισμικού
11
Software artifactsΑυτοτελή αρχεία έτοιμα προς εκτέλεση ήΜερικώς αυτοτελή αρχεία προς ενσωμάτωση σε άλλεςεφαρμογές ﴾βιβλιοθήκες﴿
Δομή/περιεχόμενα ανάλογα με τη γλώσσαπρογραμματισμού, το λειτουργικό σύστημα, την εφαρμογή,κτλ.
12
Στη Java κοινότηταSoftware artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿Jar αρχείο = Zip αρχείοΠεριέχει .class αρχεία ﴾JVM κλάσεις﴿ και ‐ενδεχομένως‐metadata ﴾manifests﴿, resources ﴾images﴿, αρχεία ρυθμίσεωνκ.ο.κ.
APK αρχείο = Zip αρχείοΠεριέχει .dex αρχεία και metadata ﴾manifests﴿, resources﴾images﴿ κ.λπ.
13
Στην πράξηΚάθε ξεχωριστή προγραμματιστική/τεχνολογική κοινότητασυνήθως:
έχει ξεχωριστούς μορφότυπους artifactsέχει ξεχωριστά εργαλεία διαχείρισής τουςέχει ‐όπως λέγεται‐ ξεχωριστό technology stack
14
Ας το δούμε αντίστροφα
Τι είναι ένα software artifact;
Μπορεί να είναι οτιδήποτε:Application, Library, Component, Server, Client
Μπορεί να χρησιμοποιείται για ένα μόνο σκοπό ﴾π.χ.standalone app﴿ ή να είναι επαναχρησιμοποιήσιμο γιαπολλούς σκοπούς ﴾π.χ. library﴿Ας πούμε ότι, γενικά, είναι ένα συστατικό λογισμικού
15
Συστατικά λογισμικούΕπαναχρησιμοποιήσιμα τμήματα λογισμικού ﴾που διατίθενταιως ξεχωριστά software artifacts﴿Αποθήκες συστατικών λογισμικού ﴾software artifactrepositories﴿
Διαχείριση εκδόσεων συστατικών ﴾software releases, artifactversioning﴿
16
Εξαρτήσεις λογισμικού ﴾softwaredependencies﴿
Compile‐time dependencies ﴾"static" linking﴿: οι εξαρτήσειςτου λογισμικού από συστατικά που πρέπει να είναι διαθέσιμακατά τη μεταγλώττιση
Runtime dependencies ﴾"dynamic" linking﴿: οι εξαρτήσεις τουλογισμικού από συστατικά που πρέπει να είναι διαθέσιμακατά το χρόνο εκτέλεσης
17
Μεταβατικές εξαρτήσεις ﴾transitivedependencies﴿Οι εξαρτήσεις των εξαρτήσεων ﴾τα συστατικά δεν είναι πάντααυτοτελή, μπορεί να εξαρτώνται από άλλα συστατικά / artifactsγια τη λειτουργία τους﴿
Project −> Lib1 , Lib2 Lib1 −> Lib11 Lib2 −> Lib21 , Lib22 Lib21 −> Lib211
18
Αποθήκες συστατικών λογισμικού﴾software artifact repositories﴿
Tήρηση των software artifacts ﴾files﴿Σε πολλές εκδόσεις
Τήρηση μεταδεδομένων για τις αλληλο‐εξαρτήσεις τουςΔημόσιες ή ιδιωτικές αποθήκες
19
Παραδείγματα δημόσιων αποθηκών﴾Java﴿https://search.maven.org/https://bintray.com/bintray/jcenterhttps://plugins.gradle.org/
20
Ιδιωτικές αποθήκεςΓια μεγάλες ομάδεςΓια σύνθετο λογισμικό
Φιλοξενία της αποθήκης στο εσωτερικό δίκτυο τουοργανισμού
21
Δημοσίευση συστατικούΑνέβασμα του συστατικού σε κάποια αποθήκη ﴾artifactpublication﴿Αυτοματοποιημένη διαδικασία μέσω του build εργαλείου
Παράδειγμα gradle publish η mvn release
22
Για παράδειγμαΕκτέλεση όλων των προαπαιτούμενων για την παραγωγήτου jar αρχείου ﴾download dependencies, compile code, runtests, assemble files﴿Παραγωγή του jar αρχείου με κάποια σύμβαση για το όνομακαι την έκδοσή του ﴾π.χ. project‐name‐1.2.jar﴿Ανέβασμα του αρχείου στην αποθήκη
σε κάποια συγκεκριμένη ‐κατά σύμβαση‐ θέση ﴾π.χ. /gr/ntua/softeng17b/foo/1.2/project‐name‐1.2.jar ﴿μαζί με πληροφορίες/μεταδεδομένα για τις εξαρτήσειςτου ﴾π.χ. maven pom, ivy file﴿
23
Διαχείριση εκδόσεων λογισμικούVersioningReleasing
24
Τυποποίηση εκδόσεων λογισμικούΔεν υπάρχει ομοιομορφία και συνέπεια στην ανάθεσηεκδόσεωνΔιαφορετικά σχήματαΜε βάση την ημερομηνία, με βάση κάποια σύμβαση, με βάσηεμπορικούς λόγους, κλπ.
25
Παράδειγμα
[major].[minor].[revision].[build]
major: Σημαντική αλλαγή στο λογισμικό ﴾major release﴿minor: Προσθήκη ή βελτίωση στο λογισμικό ﴾minor release﴿revision: Patch, διόρθωση bug, επίλυση προβλήματοςασφαλείας, κτλ. ﴾maintenance release﴿build: Αυτόματη αρίθμηση του build ﴾π.χ. αύξων αριθμός,commit id, κτλ.﴿ ﴾internal release﴿
26
Semantic Versioning
[major].[minor].[patch]
major: Breaking changeminor: Add new backwards compatible functionalitypatch: Apply backwards compatible bug fixesΒασική έννοια: Public API
http://semver.org/
27
Επίτευξη του releaseΕπιμέρους στάδια και ενδιάμεσες εκδόσεις
Pre‐release ﴾internal release﴿
Early Access ﴾EA﴿AlphaBetaRelease candidate
Release ﴾General Availability, GA﴿
Θα επανέλθουμε στη διάλεξη για testing.
28
Σε κάθε βήμα του release ﴾Pre, ΕΑ, GA﴿Publish the artifact
Tag the commit with the published version numberUpdate the version fileCommit the changePush it
Αυτοματοποίηση μέσω του build εργαλείου
29