Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact =...

Preview:

Citation preview

Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Η/Υ

Εθνικό Μετσόβιο Πολυτεχνείο

Τεχνολογία Λογισμικού7ο Εξάμηνο 2019 ‐ 20

Ν.Παπασπύρου, Καθ. ΣΗΜΜΥ, nickie@softlab.ntua.grΒ.Βεσκούκης, Αν.Καθ. ΣΑΤΜ, v.vescoukis@cs.ntua.gr

Κ.Σαΐδης, ΠΔ 407, saiko@softlab.ntua.gr

Διαχείριση έργων λογισμικού ﴾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

Recommended