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

29
Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Η/Υ Εθνικό Μετσόβιο Πολυτεχνείο Τεχνολογία Λογισμικού 7ο Εξάμηνο 2019 ‐ 20 Ν.Παπασπύρου, Καθ. ΣΗΜΜΥ, [email protected] Β.Βεσκούκης, Αν.Καθ. ΣΑΤΜ, [email protected] Κ.Σαΐδης, ΠΔ 407, [email protected]

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

Page 1: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

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

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

Ν.Παπασπύρου, Καθ. ΣΗΜΜΥ, [email protected]Β.Βεσκούκης, Αν.Καθ. ΣΑΤΜ, [email protected]

Κ.Σαΐδης, ΠΔ 407, [email protected]

Page 2: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Διαχείριση έργων λογισμικού ﴾2﴿

2

Page 3: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Software build automation

Ζητούμενα

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

3

Page 4: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

4

Page 5: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Software build automationΑυτόματη διαχείριση εξαρτήσεων ﴾dependencies﴿Μεταγλώττιση κώδικα ﴾compilation﴿Εκτέλεση σεναρίων ελέγχου ﴾testing﴿

Συνεχής ολοκλήρωση του λογισμικού ﴾Continuous integration﴿Παραγωγή των software artifacts ﴾assemble﴿Απόθεση/δημοσίευσή τους σε κάποια αποθήκη ﴾softwarerelease / publication﴿

5

Page 6: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Εργαλεία build automation

6

Page 7: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

makeΗ αρχή όλωνStuard Feldman, Bell Labs, 19762003 ACM Software System Award

Βασικές έννοιεςTargets, prerequisites, commands, macrosTopological sorting

7

Page 8: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Topological sortingΓραμμική διάταξη των κόμβων ενός κατευθυνόμενου γράφου,στην οποία το u προηγείται του v αν υπάρχει κατευθυνόμενηακμή u−> v.

Ο γράφος δεν πρέπει να έχει κύκλους ﴾ακυκλικός﴿ ‐ DirectedAcyclic Graph ﴾DAG﴿.

Εκτέλεση των build targets.

8

Page 9: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Εργαλεία στο Java οικοσύστημαApache AntApache IvyApache MavenGradle ﴾έμφαση στο μάθημα﴿

9

Page 10: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Gradlehttps://www.slideshare.net/KostasSaidis/an‐introduction‐to‐gradle‐for‐java‐developers

Θα σας δοθεί έτοιμο για χρήση Gradle project ως παράδειγμα

10

Page 11: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

11

Page 12: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Software artifactsΑυτοτελή αρχεία έτοιμα προς εκτέλεση ήΜερικώς αυτοτελή αρχεία προς ενσωμάτωση σε άλλεςεφαρμογές ﴾βιβλιοθήκες﴿

Δομή/περιεχόμενα ανάλογα με τη γλώσσαπρογραμματισμού, το λειτουργικό σύστημα, την εφαρμογή,κτλ.

12

Page 13: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

APK αρχείο = Zip αρχείοΠεριέχει .dex αρχεία και metadata ﴾manifests﴿, resources﴾images﴿ κ.λπ.

13

Page 14: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Στην πράξηΚάθε ξεχωριστή προγραμματιστική/τεχνολογική κοινότητασυνήθως:

έχει ξεχωριστούς μορφότυπους artifactsέχει ξεχωριστά εργαλεία διαχείρισής τουςέχει ‐όπως λέγεται‐ ξεχωριστό technology stack

14

Page 15: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Ας το δούμε αντίστροφα

Τι είναι ένα software artifact;

Μπορεί να είναι οτιδήποτε:Application, Library, Component, Server, Client

Μπορεί να χρησιμοποιείται για ένα μόνο σκοπό ﴾π.χ.standalone app﴿ ή να είναι επαναχρησιμοποιήσιμο γιαπολλούς σκοπούς ﴾π.χ. library﴿Ας πούμε ότι, γενικά, είναι ένα συστατικό λογισμικού

15

Page 16: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Συστατικά λογισμικούΕπαναχρησιμοποιήσιμα τμήματα λογισμικού ﴾που διατίθενταιως ξεχωριστά software artifacts﴿Αποθήκες συστατικών λογισμικού ﴾software artifactrepositories﴿

Διαχείριση εκδόσεων συστατικών ﴾software releases, artifactversioning﴿

16

Page 17: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Εξαρτήσεις λογισμικού ﴾softwaredependencies﴿

Compile‐time dependencies ﴾"static" linking﴿: οι εξαρτήσειςτου λογισμικού από συστατικά που πρέπει να είναι διαθέσιμακατά τη μεταγλώττιση

Runtime dependencies ﴾"dynamic" linking﴿: οι εξαρτήσεις τουλογισμικού από συστατικά που πρέπει να είναι διαθέσιμακατά το χρόνο εκτέλεσης

17

Page 18: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Μεταβατικές εξαρτήσεις ﴾transitivedependencies﴿Οι εξαρτήσεις των εξαρτήσεων ﴾τα συστατικά δεν είναι πάντααυτοτελή, μπορεί να εξαρτώνται από άλλα συστατικά / artifactsγια τη λειτουργία τους﴿

 Project  −>  Lib1 ,  Lib2  Lib1  −>  Lib11  Lib2  −>  Lib21 ,  Lib22  Lib21  −>  Lib211 

18

Page 19: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Αποθήκες συστατικών λογισμικού﴾software artifact repositories﴿

Tήρηση των software artifacts ﴾files﴿Σε πολλές εκδόσεις

Τήρηση μεταδεδομένων για τις αλληλο‐εξαρτήσεις τουςΔημόσιες ή ιδιωτικές αποθήκες

19

Page 20: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

20

Page 21: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Ιδιωτικές αποθήκεςΓια μεγάλες ομάδεςΓια σύνθετο λογισμικό

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

21

Page 22: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Δημοσίευση συστατικούΑνέβασμα του συστατικού σε κάποια αποθήκη ﴾artifactpublication﴿Αυτοματοποιημένη διαδικασία μέσω του build εργαλείου

Παράδειγμα  gradle publish  η  mvn release 

22

Page 23: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Για παράδειγμαΕκτέλεση όλων των προαπαιτούμενων για την παραγωγήτου 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

Page 24: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

24

Page 25: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

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

25

Page 26: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Παράδειγμα

[major].[minor].[revision].[build]

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

26

Page 27: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Semantic Versioning

[major].[minor].[patch]

major: Breaking changeminor: Add new backwards compatible functionalitypatch: Apply backwards compatible bug fixesΒασική έννοια: Public API

http://semver.org/

27

Page 28: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Επίτευξη του releaseΕπιμέρους στάδια και ενδιάμεσες εκδόσεις

Pre‐release ﴾internal release﴿

Early Access ﴾EA﴿AlphaBetaRelease candidate

Release ﴾General Availability, GA﴿

Θα επανέλθουμε στη διάλεξη για testing.

28

Page 29: Τεχνολογία Λογισμικού - NTUAΣτη Java κοινότητα Software artifact = Jar ﴾συνήθως﴿ ή APK ﴾android﴿ Jar αρχείο = Zip αρχείο

Σε κάθε βήμα του release ﴾Pre, ΕΑ, GA﴿Publish the artifact

Tag the commit with the published version numberUpdate the version fileCommit the changePush it

Αυτοματοποίηση μέσω του build εργαλείου

29