Download - Ευέλικτη ανάπτυξη λογισμικού

Transcript
Page 1: Ευέλικτη ανάπτυξη λογισμικού

Agile Software Development

Τάσος Κούτλας / 17 Δεκ 2014

Page 2: Ευέλικτη ανάπτυξη λογισμικού

Περιεχόµενα

1.  Agile

2.  Scrum

3.  Δυσκολίες στην πράξη

4.  Αγορά εργασίας

Page 3: Ευέλικτη ανάπτυξη λογισμικού
Page 4: Ευέλικτη ανάπτυξη λογισμικού

Οι 3 πυλώνες

1.  Διαφάνεια (transparency)

2.  Αναθεώρηση (inspection)

3.  Τροποποίηση (adaptation)

Page 5: Ευέλικτη ανάπτυξη λογισμικού

Waterfall

1.  Κάθε βήµα ολοκληρώνεται πριν από το επόµενο αρχίσει 2.  Αρκετή ανάλυση και σχεδιασµός “µπροστά” (requirements)

3.  Επικοινωνία συνήθως µέσα από τα έγγραφα

Page 6: Ευέλικτη ανάπτυξη λογισμικού
Page 7: Ευέλικτη ανάπτυξη λογισμικού

Agile manifesto

We are uncovering better ways of developing

software by doing it and helping others do it.

Through this work we have come to value:

Page 8: Ευέλικτη ανάπτυξη λογισμικού

Agile manifesto

1.  Individuals and interactions over processes and tools

2.  Working software over comprehensive documentation

3.  Customer collaboration over contract negotiation

4.  Responding to change over following a plan

Page 9: Ευέλικτη ανάπτυξη λογισμικού

Agile manifesto

That is, while there is value in the items on

the right, we value the items on the left more.

Page 10: Ευέλικτη ανάπτυξη λογισμικού

Agile principles

1.  Η µεγαλύτερη προτεραιότητα είναι η ικανοποίηση του πελάτη µέσω της παράδοσης νωρίς και συνεχώς λογισµικού που προσθέτει αξία

2.  Παράδοση λογισµικού που λειτουργεί συχνά σε µικρά χρονικά διαστείµατα

3.  Προγραµµατιστές και business δουλεύουν µαζί καθηµερινά

Page 11: Ευέλικτη ανάπτυξη λογισμικού

Agile principles

1.  Δηµιουργία έργων γύρω από τους ανθρώπους µε όρεξη. Εµπιστοσύνη να τελειώσουν την δουλειά δίνοντας τους το περιβάλλον και την υποστήριξη που χρειάζονται 2.  Αποτελεσµατικότερος τρόπος για την διάχυση πληροφοριών και την κατάσταση του έργου είναι οι κατ' ιδίαν συναντήσεις

Page 12: Ευέλικτη ανάπτυξη λογισμικού

Agile principles

1.  Λογισµικό που λειτουργεί είναι η κυρίαρχη µορφή µέτρησης της προόδου

2.  Η ευέλικτη µεθοδολογία προωθεί την βιώσιµη ανάπτυξη. Συνεχής ρυθµός για όλη τη διάρκεια του έργου

3.  Συνεχής προσοχή σε τεχνική αρτιότητα και καλό σχεδιασµό επιβραβεύουν την ευελιξία

4.  Απλότητα, η τέχνη της µεγιστοποίησης της δουλειάς που δεν χρειάζεται να υλοποιηθεί

Page 13: Ευέλικτη ανάπτυξη λογισμικού

Agile principles

1.  Η καλύτερη αρχιτεκτονική, απαιτήσεις και σχεδιασµός ανακύπτουν από αυτο-οργανωνόµενες οµάδες

2.  Σε συχνά διαστήµατα η οµάδα αναλογίζεται πως µπορεί να γίνει πιο αποτελεσµατική και αναπροσαρµόζει την συµπεριφορά της ανάλογα

Page 14: Ευέλικτη ανάπτυξη λογισμικού

Project contraints

χρόνος κόστος

ποιότητα

λειτουργίες χρόνος κόστος

λειτουργίες

ποιότητα

Παραδοσιακά Ευέλικτα

Page 15: Ευέλικτη ανάπτυξη λογισμικού

Scrum

1.  A wrapper for existing engineering practises

2.  A way to maximise productivity

3.  A way to improve communications and maximise co-operation

4. Δηµιουργήθηκε το 1998, 2001 το πρώτο βιβλίο

5. Βασισµένο στο βιβλίο: The new new product development game, Takeuchi & Nonaka, 1986.

Page 16: Ευέλικτη ανάπτυξη λογισμικού

Η ελαφρύτερη µεθοδολογία

1.  XP

-  5 values / 14 principles / 12 primary practises / 11 corollary practises

2.  Lean

-  7 principles / 22 thinking tools

3.  Scrum

-  5 values / 3 roles / 5 activities / 3 essential artifacts

4.  Agile Unified Process

-  6 principles / 7 disciplines / 4 lifecycle phases / 14 roles / 8 minimum deliverables / 4 guidance pieces

5.  DSDM

-  8 principles / 5 lifecycle phases / 12 roles / 17 work products / 5 key techniques

Page 17: Ευέλικτη ανάπτυξη λογισμικού

Scrum

Η τέχνη του εφικτού, µείωση του θορύβου

1.  Δεν παρέχεται συγκεκριµένο how-to

2.  Αυτό θα έδινε έµφαση στην πρόγνωση συνθηκών και όχι στην εµπειρική διαµόρφωση

3.  Δίνει το πλαίσιο για να αποφασίζεται τι να κάνουµε

4.  Αναθεώρηση και τροποποίηση

5.  Προβλήµατα και αδυναµίες γίνονται εµφανή

Page 18: Ευέλικτη ανάπτυξη λογισμικού

Συστατικά του Scrum

1.  Activities

- Sprint planning meeting

- Daily scrum meeting (daily standup) / Sprint review (sprint demo) / Sprint retrospective

- Product backlog refinement 2.  Essential artefacts

- Product backlog / sprint backlog / product increment 3.  Scrum roles

- Product owner / scrum master / developer team

Page 19: Ευέλικτη ανάπτυξη λογισμικού
Page 20: Ευέλικτη ανάπτυξη λογισμικού

Product backlog

1.  Δηµιουργείται από τον PO αφού συζητήσει µε τους υπόλοιπους stakeholders

2.  Ανήκει στον PO και ταξινοµείται από αυτόν

3.  Μία σειρά από ιστορίες για να υλοποιήσει η οµάδα

4.  Εξελίσσεται συνεχώς µέσω της διαδικασίας Product backlog refinement

Page 21: Ευέλικτη ανάπτυξη λογισμικού

Sprint planning

1.  Δοµηµένη συνάντηση (workshop) για να τον προγραµµατισµό ενός Sprint

2.  Στοχεύει να αναγνωρίσει ποια είναι οι σηµαντικές ιστορίες του product backlog

3.  Ο PO εξηγεί τις ιστορίες

4.  Αποφασίζεται ο στόχος του Sprint

5.  H οµάδα υλοποίησης υπολογίζει και δεσµεύεται στο τι µπορεί να επιτευχθεί στο Sprint

6.  Το αποτέλεσµα είναι το Sprint backlog

Page 22: Ευέλικτη ανάπτυξη λογισμικού

Sprint backlog

1.  Εξελίσσεται κατά τη διάρκεια του Sprint (the level of understanding)

2.  Ανήκει στην οµάδα υλοποίησης, µόνο αυτή µπορεί να το αλλάξει 3.  Αποτελεί ενδελεχές σχέδιο και εργαλείο παρακολούθησης της προόδου

4.  Είναι δηµόσια διαθέσιµο σε όλους

Page 23: Ευέλικτη ανάπτυξη λογισμικού

Sprint

1.  Το ένα πίσω από το άλλο – χωρίς κενά τα Sprints

- Τα πάντα γίνονται σε ένα sprint 2.  Πάντα η ίδια διάρκεια

- Θέτει το ρυθµό

3.  Πάντα καταλήγει σε ένα potential shippable product

- Έτοιµο να βγει στον αέρα

4.  Συνήθως είναι 2 µε 4 εβδοµάδες

Page 24: Ευέλικτη ανάπτυξη λογισμικού

Stories

1.  Βασικό µέγεθος (ποιος, τι και γιατί)

2.  Περιγράφει την αξία (τι κερδίζει) από την οπτική γωνία του πελάτη

3.  Το σηµείο που αρχίσει η συνεργασία

4.  Κριτήρια αποδοχής

5.  Κάρτες

- Είθισται να γράφονται σε χαρτί - Βοηθούν να λακωνικές και περιεκτικές

- Βοηθούν στον υπολογισµό, σχεδιασµό και παρακολούθηση του sprint

6.  Δηµιουργούνται από τον PO

Page 25: Ευέλικτη ανάπτυξη λογισμικού

Stories vs use cases

1.  Μπορεί να αλληλοκαλύπτονται αλλά είναι διαφορετικές έννοιες

2.  Use case είναι µεγαλύτερες σε εµβέλεια (πολλαπλές ιστορίες)

3.  Οι ιστορίες δεν έχουν τόσες λεπτοµέρειες

4.  Οι ιστορίες χρησιµοποιούνται για κάθε τι πρέπει να γίνει

- Functional requirements (όπως οι use cases)

- Non-functional requirements

- Non-software features (documentation, development environment set-up, κτλ)

5.  Τα use cases µπορούν να περιγράψουν πως οι ιστορίες σχετίζονται µεταξύ τους.

Page 26: Ευέλικτη ανάπτυξη λογισμικού

Multi-level planning

Release plan

Sprint Plan Daily

Plan

3 to 6 months

2 to 4 weeks

Daily

Page 27: Ευέλικτη ανάπτυξη λογισμικού

Planning pyramid

1.  Sprint

- Μικρές ιστορίες

- Πρέπει να χωράει στο sprint (1-5 µέρες προσπάθειας)

- Λεπτοµερής υπολογισµός (estimate) προσπάθειας (effort)

2.  Release

- Μεγαλύτερες ιστορίες

3.  Project

- Ακόµη µεγαλύτερες ιστορίες (epics - έπη)

Page 28: Ευέλικτη ανάπτυξη λογισμικού

Product backlog

1.  Η µοναδική λίστα µε καθορισµένες προταιρεότητες µε αντικείµενα για την οµάδα υλοποίησης

2.  Οι ιστορίες µπορεί να έχουν διαφορετικό µέγεθος και λεπτοµέρειες

3.  Οποιοσδήποτε µπορεί να προσθέσει αντικείµενα

4.  Ο PO είναι υπεύθυνος να προσθέτει και να ταξινοµεί ιστορίες

5.  Περιέχει τα πάντα γύρω από το έργο

6.  Εξελίσσεται συνεχώς

Page 29: Ευέλικτη ανάπτυξη λογισμικού

Product backlog refinement

1.  Συνεχής διαδικασία του κύκλου υλοποίησης

- Κρατάει το product backlog ταξινοµηµένο

- Αφαιρεί ή υποβαθµίζει ιστορίες που δεν είναι πλέον σηµαντικές

- Προσθέτει ή αναβαθµίζει ιστορίες που είναι πλέον σηµαντικές

- Χωρίζει µεγάλες ιστορίες σε µικρότερες

- Ενώνει µικρές ιστορίες σε µεγαλύτερες - Υπολογίζει πόσο προσπάθεια χρειάζεται κάθε ιστορία

Page 30: Ευέλικτη ανάπτυξη λογισμικού

Ρόλοι – Development Team

1.  Αυτο-οργανώνεται, διαλειτουργική, χωρίς προκαθορισµένους ρόλους

2.  7 ± 2 άτοµα (ότι χρειάζεται για να γίνει)

3.  Επικοινωνία δια ζώσης (face to face)

4.  Υπεύθυνη για να οργανώνει και να δεσµεύεται για την υλοποίηση εργασιών

5.  Αρµοδιότητα να κάνει ότι χρειάζεται για να πραγµατοποιηθούν οι δεσµεύσεις

6.  Κάνει το demo στο PO και stakeholders

7.  Κάνει ότι είναι δυνατόν, στο πλαίσιο του έργου, ώστε να πραγµατοποιηθεί ο Sprint Goal

Page 31: Ευέλικτη ανάπτυξη λογισμικού

Ρόλοι - ScrumMaster

1.  Υπεύθυνος για την επιτυχία του Scrum

2.  Γνωστοποιεί τους κανόνες, τις πρακτικές, να προστατεύσει την οµάδα και να αφαιρέσει εµπόδια

3.  Διασφαλίζει ότι η οµάδα είναι λειτουργεί πλήρως και παραγωγικά

4.  Διασφαλίζει την στενή συνεργασία όλων των ρόλων

5.  Διασφαλίζει πως οι σωστοί κανόνες του Scrum ακολουθούνται

- Daily scrum meetings / sprint reviews / planning meetings

Page 32: Ευέλικτη ανάπτυξη λογισμικού

Ρόλοι – Product Owner

1.  Ορίζει τα λειτουργικά χαρακτηριστικά του έργου

2.  Θέτει το χρονοδιάγραµµα της υλοποίησης µέσω της ταξινόµησης του product backlog

3.  Αναδιαµορφώνει τις προτεραιότητες και την λειτουργικότητα σε κάθε Sprint όπως χρειάζεται 4.  Μπορεί να είναι υπεύθυνος για παραπάνω από µία οµάδες

5.  Εξαλείφει τη σύγχυση µε πολλαπλά “αφεντικά”, διαφορετικές γνώµες, κτλ

6.  Δουλεύει µε τους υπόλοιπους για να υπολογίσει πόσο χρειάζονται τα πράγµατα στο product backlog

7.  Αποδέχεται ή απορρίπτει αποτελέσµατα

Page 33: Ευέλικτη ανάπτυξη λογισμικού

Estimating (εκτιµήσεις)

1.  Ideal days

- Δεν είναι χρόνος

- Αφαιρεί τις παρεµβολές της πραγµατικότητας

- 50% µε 80% παραγωγικότητα

- Εύκολο να εξηγηθούν

- Η ιδανική µου µέρα δεν είναι απαραίτητο η ιδανική σου µέρα

2.  Story points

- Βρες της πιο απλή ιστορία και δώσε µέγεθος 2

- Εκτίµησε τις υπόλοιπες ιστορίες µε βάση την ιστορία µε µέγεθος 2 πόντων

- Δεν υπάρχει η έννοια του χρόνου

- Οι οµάδες παραδίδουν ένα συγκεκριµένο αριθµό πόντων σε κάθε Sprint - Πιο εύκολο και γρηγορότερο από τις µέρες

- Μικρότερο ρίσκο να περιοριστούµε από λανθασµένες αρχικές εκτιµήσεις

Page 34: Ευέλικτη ανάπτυξη λογισμικού

Velocity (ταχύτητα)

1.  Πόσους πόντους ή ιδανικές µέρες δουλειάς µπορεί να κάνει η οµάδα σε ένα Sprint

2.  Βρείτε τους υψηλότερους, µέσους και χαµηλότερους πόντους σε µία χρονική περίοδο

3.  Χρησιµοποιούνται για να προγραµµατιστούν τα Sprint και να εποπτευτεί η πρόοδος

4.  Δεν χρησιµοποιούνται για να συγκριθούν οµάδες µεταξύ τους (κάθε οµάδα έχει τον δικό της ρυθµό)

Page 35: Ευέλικτη ανάπτυξη λογισμικού

1.  Εικόνες από πίνακες

Page 36: Ευέλικτη ανάπτυξη λογισμικού

Daily Scrum

1.  Ο παλµός της οµάδας 2.  Τι έκανα από το προηγούµενο

standup µέχρι τώρα 3.  Τι σκοπεύω να κάνω µέχρι το επόµενο

4.  Τι µε εµποδίζει να προχωρήσω 5.  O PO δεν συµµετέχει, ο SM αφαιρεί τα εµπόδια και η DT αυτοεργανώνεται και κάνει τη δουλειά

Page 37: Ευέλικτη ανάπτυξη λογισμικού

Burndown chart

Page 38: Ευέλικτη ανάπτυξη λογισμικού

Sprint review

1.  1 ώρα ανά εβδοµάδα sprint. 2.  Δυνατότητα της οµάδας να δείξει την δουλειά της

3.  Συµµετέχουν PO, SM, DT και stakeholders

4.  Καλή ευκαιρία να ενηµερωθούν όλοι για την πρόοδο

5.  Εδώ είναι που βλέπουν shippable product.

Page 39: Ευέλικτη ανάπτυξη λογισμικού

Sprint retrospective

1.  2 ώρες ανά εβδοµάδα sprint. 2.  Η οµάδα έχει την δυνατότητα να συζητήσει τι πήγε καλά, τι δεν πήγε και να αναθεωρήσει πρακτικές

3.  Πολλές προβληµατικές εφαρµογές του scrum δεν δίνουν όση σηµασία πρέπει

4.  Ο SM διαµορφώνει την αντζέντα και κρατάει τον χρόνο

Page 40: Ευέλικτη ανάπτυξη λογισμικού

Δυσκολίες στην πράξη

1.  Scrum but … 2.  Scrum for development / Waterfall

for management 3.  Inconsistent scrum

implementations

Page 41: Ευέλικτη ανάπτυξη λογισμικού

Αγορά εργασίας

1.  Τι θέλει η αγορά της Ευρώπης 2.  Απόκτηση ικανοτήτων scrum 3.  Δυσκολίες στην ελληνική πραγµατικότητα

4.  Ευκαιρίες

Page 42: Ευέλικτη ανάπτυξη λογισμικού

Agile Software Development

Τάσος Κούτλας / 17 Δεκ 2014