09 Διοίκηση έργων λογισμικού Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr
Περιεχόμενα Διοίκηση ομάδας ανάπτυξης λογισμικού Τεχνικές και εργαλεία ελέγχου ανάπτυξης λογισμικού Διαχείριση συστατικών του λογισμικού 2
Διοίκηση ομάδας ανάπτυξης λογισμικού Συνήθεις ρόλοι Αλληλεπιδράσεις μεταξύ τους Καλές διεθνείς πρακτικές 3
Τεχνικές και εργαλεία Διαχείριση εκδόσεων version control Έμφαση στο git Αυτόματο "χτίσιμο" λογισμικού build automation Έμφαση στο gradle Στατική ανάλυση κώδικα και αυτόματος εντοπισμός σφαλμάτων JDepend, FindBugs, PMD, Jacoco, CodeNarc, κ.ά Αυτόματη εκτέλεση σεναρίων ελέγχου tests Smoke unit regression functional database integration user acceptance testing test coverage Συνεχής ολοκλήρωση, εγκατάσταση και παράδοση continuous integration, deployment & delivery Jenkins, GitLab, κ.ά 4
Διαχείριση συστατικών λογισμικού Συστατικά λογισμικού components, libraries Εξαρτήσεις dependencies Αποθήκες συστατικών λογισμικού software artifact repositories Διαχείριση εκδόσεων συστατικών software releases 5
Παράδειγμα 1η εργασία 6
Βασικά Ζητήματα Ρόλοι προσώπων στο έργο Συμβάσεις συγγραφής κώδικα coding conventions Αυτόματο "χτίσιμο" κώδικα Διαχείριση συστατικών 7
Ρόλοι σε μια ομάδα ανάπτυξης λογισμικού Ανάλογα με την εφαρμογή/λογισμικό Ας χρησιμοποιούμε μια εφαρμογή διαδικτύου ως παράδειγμα 8
Ενδεικτικοί Ρόλοι α Project/Product manager Architect Team lead Senior developer Junior developer Quality assurance engineer tester User interface designer User experience engineer 9
Ενδεικτικοί Ρόλοι β Back end developer Front end developer Full stack developer Database developer Data scientist Information system analyst Customer support DevOps engineer 10
Συνήθως Σε μικρές ομάδες, ένα πρόσωπο έχει πολλούς ρόλους Σε μεγάλες ομάδες, ένα πρόσωπο έχει ένα ρόλο 11
Για τις ανάγκες της 2ης εργασίας Ποιοι είναι οι ρόλοι που έχετε σκεφτεί; 12
Διοίκηση της ομάδας Project/Product manager: Οριοθέτηση στόχων ομάδας και χαρακτηριστικών λογισμικού Διαχείριση χρόνου και προσπάθειας των μελών σε μακροσκοπικό επίπεδο 13
Διοίκηση της ομάδας Architect Λήψη των σημαντικών σχεδιαστικών αποφάσεων major design decisions Θέσπιση των διεπαφών interfaces, των συστατικών components και των εξαρτήσεων dependencies Επιλογή εργαλείων tooling 14
Διοίκηση της ομάδας Team Lead Ανάθεση των επιμέρους εργασιών στα μέλη της ομάδας Διαχείριση χρόνου και προσπάθειας των μελών σε καθημερινό επίπεδο 15
Σύναψη κοινής "κουλτούρας" Βασικά σημεία Κοινές συμβάσεις conventions Κοινά εργαλεία tools Κοινές διαδικασίες procedures Κοινά αποδεκτός και εκ των προτέρων επιμερισμός αρμοδιοτήτων ownership 16
Συμβάσεις για τη δομή του κώδικα Τρόπος συγγραφής κώδικα Ονόματα κλάσεων, μεθόδων, μεταβλητών Στοίχιση κώδικα Παράδειγμα: Java coding conventions NameOfClass nameofmethod nameofvariable NAME_OF_CONSTANT 17
Συμβάσεις για τη δομή των αρχείων Διάρθρωση και τοποθέτηση των αρχείων Source files, resources, configuration files, dependencies, κτλ. Παράδειγμα: Maven directory structure conventions src/main/java src/main/resources src/test/java src/test/resources build/classes 18
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 19
Java Packages β package x.y.z; class FooΤest {... } Πηγαίος κώδικας src/main/test/x/y/z/footest.java Class files build/classes/x/y/z/footest.class 20
Εργαλεία www.ayorkshirehome.com 21
Εργαλεία Version control IDE Building Testing Bug detection Continuous integration, deployment and delivery Containers Monitoring Alerting 22
Διαδικασίες Πολιτική versioning branches, tags, merges, releases Code review Build Test Deploy to CI Deploy to staging Deploy to production 23
Επιμερισμός αρμοδιοτήτων Ποιος είναι αρμόδιος για ποιο κομμάτι κώδικα / λειτουργικότητας / χαρακτηριστικών; Αποφυγή "ορφανού" κώδικα Αποφυγή "αποκλεισμένου" κώδικα Τουλάχιστον δύο πρόσωπα με την ίδια αρμοδιότητα σε κάποιο κομμάτι 24
Διαχείριση εκδόσεων version control Ζητούμενα Καταγραφή των αλλαγών ιστορικό Συνεργατική ανάπτυξη Ποιος έκανε ποια αλλαγή και πότε Ανάκτηση συγκεκριμένης παρελθούσας κατάστασης 25
git https://speakerdeck.com/schacon/introduction to git 26
Build tool Στο Java οικοσύστημα Apache Ant Apache Maven Apache Ivy Gradle 27
make η αρχή όλων Stuard Feldman, Bell Labs, 1976 2003 ACM Software System Award Targets, prerequisites, commands, macros Topological sorting 28
Topological sorting Γραμμική διάταξη των κόμβων ενός κατευθυνόμενου γράφου, στην οποία το u προηγείται του v αν υπάρχει κατευθυνόμενη ακμή u > v. Ο γράφος δεν πρέπει να έχει κύκλους ακυκλικός Directed Acyclic Graph DAG 29
Ant α <project name="myproject" default="dist" basedir="."> <! set global properties for this build > <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="init"> <! Create the build directory structure used by compile > <mkdir dir="${build}"/> </target> <target name="compile" depends="init"> <! Compile the java code from ${src} into ${build} > <javac srcdir="${src}" destdir="${build}"/> </target> 30
Ant β <target name="dist" depends="compile"> <! Create the distribution directory > <mkdir dir="${dist}/lib"/> <! Put everything in ${build} into the MyProject.jar file > <jar jarfile="${dist}/lib/myproject.jar" basedir="${build}"/> </target> <target name="clean"> <! Delete the ${build} and ${dist} directory trees > <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project> 31
Ant γ > ls project src build.xml > ant [target] 32
Ant δ Πρώτη έκδοση το 2000 XML Portable make κυρίως για Java "Χειροκίνητη" ρύθμιση όλων των παραμέτρων 33
Maven α Πρώτη έκδοση το 2004 XML Συμβάσεις conventions Εξαρτήσεις dependencies Maven Central maven artifact repository 34
Maven β <project> <modelversion>4.0.0</modelversion> <groupid>com.mycompany.app</groupid> <artifactid>my app</artifactid> <version>1.0</version> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> 35
Maven γ Convention over configuration Project Object Model POM Plugins provide goals Build lifecycles provide phases Dependencies Maven co ordinates 36
Maven δ > ls project src pom.xml > mvn [plugin]:[command] > mvn [phase] Default lifecycle phases validate, generate sources, process sources, generate resources, process resources, compile, process test sources, process testresources, test compile, test, package, install, deploy 37
Ivy Πρώτη έκδοση 2007 Transitive dependency manager όχι των ΒΔ 38
Transitive dependencies Οι εξαρτήσεις των εξαρτήσεων P roject > Lib1, Lib2 Lib1 > Lib11 Lib2 > Lib22, Lib23 Lib22 > Lib3 39
Gradle https://www.slideshare.net/kostassaidis/an introduction to gradlefor java developers 40