Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Principi di Progettazione del Software a.a. 2018-2019 Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
Obiettivi della lezione ■ Discutere le caratteristiche di diversi processo di sviluppo del software ■ Approfondire i processi di sviluppo agili ■ Introdurre i concetti fondamentali di DevOps Processi di sviluppo 2 Luca Mainetti
Ciclo di vita del software ■ Il ciclo di vita è il processo produttivo con cui si giunge allo sviluppo di artefatti software ■ Sono stati proposti vari modelli di ciclo di vita – Modello a cascata – Modelli evolutivi • Modello trasformazionale • Modello a spirale • Modello incrementale • Modello “Agile” ■ Così come esistono strumenti a supporto dello sviluppo del prodotto, così esistono strumenti (concettuali e tecnici) a supporto della gestione del processo ■ Un esempio di tali strumenti è il RUP (Rational Unified Process, http:// www-306.ibm.com/software/awdtools/rup/) che ben si accoppia con UML Processi di sviluppo 3 Luca Mainetti
Ciclo di vita a cascata ■ Sequenza di Studio di fattibilità fasi percorsa in un solo Analisi e specifica dei verso requisiti ■ Le fasi producono dei Progettazione semilavorati, alcuni dei quali non sono Programmazione e programmi test di unità ■ Il modello a Integrazione e test di cascata sistema definisce sia le fasi sia la struttura e i Manutenzione tempi dei semilavorati Processi di sviluppo 4 Luca Mainetti
Modelli evolutivi ■ Con questi modelli si cerca di anticipare l’evoluzione del sistema; si parte quindi dall’ipotesi delle necessità della manutenzione ■ Si arriva al prodotto finale per incrementi successivi ■ L’aspetto critico è la valutazione dell’entità dell’incremento ■ Un tipico modello evolutivo è quello basato sulla tecnica di prototipazione – Un prototipo è un modello del sistema finale ad un certo stadio di sviluppo – Viene discusso con lo stakeholder – Prototipo usa e getta: viene utilizzato esclusivamente per ottenere dei feedback (tipico esempio: il mockup) – Prototipo evolutivo: trasformazione del prototipo precedente (che deve avere quindi requisiti di modificabilità) – Ovviamente anche i singoli prototipi devono essere pianificati Processi di sviluppo 5 Luca Mainetti
Modello a spirale ■ Parte dall’idea della valutazione dei rischi nella scelta del modello di sviluppo ■ E’ in realtà un meta-modello ■ Può descri- vere un modello incrementale oppure un Il raggio della spirale indica il costo accumulato nello modello a svolgimento del progetto cascata Processi di sviluppo 6 Luca Mainetti
Modello iterativo ■ Si suppone che i requisiti e il design dell’architettura siano sufficientemente stabili ■ Si parte dall’idea di definire con anticipo le “build” del sistema da rilasciare e si dà supporto a – Integrazione continua e validazione del sistema – Dimostrazione frequente delle evoluzioni al committente – Pianificazione attenta nelle varie build delle funzionalità che inevitabilmente vengono modificate/riscritte IEEE Computer, Vol. 38, N. 9, Settembre 2005 Processi di sviluppo 7 Luca Mainetti
Modello iterativo (cont.) ■ Durante la fase di implementazione delle build, il design complessivo viene partizionato ■ Ogni build aggiunge nuove funzionalità al sistema ■ Gli sviluppi delle build si sovrappongono nel tempo: ad esempio, uno sviluppatore può iniziare il progetto dettagliato della build successiva mentre valida la build corrente ■ Tipicamente si produce una nuova versione dimostrabile del sistema ogni settimana IEEE Computer, Vol. 38, N. 9, Settembre 2005 Processi di sviluppo 8 Luca Mainetti
Modelli “Agili” ■ I punti cardine di tali metodologie (XP – Extreme Programming, SCRUM, DSDM, FDD) sono – Coinvolgimento continuo di un committente – Sviluppo di casi di test prima dello sviluppo della versione successiva del sistema – Dimostrazione di ogni nuova versione del sistema al committente e raccolta di nuovi requisiti IEEE Computer, Vol. 38, N. 9, Settembre 2005 – Collaborazione “spontanea” nel team di sviluppo Processi di sviluppo 9 Luca Mainetti
An Introduction to Scrum (by Mike Cohn) Presented by Prof. Luca Mainetti Processi di sviluppo Luca Mainetti
Scrum in 100 words • Scrum is an agile process that allows us to focus on delivering the highest business value in the shortest time. • It allows us to rapidly and repeatedly inspect actual working software (every two weeks to one month). • The business sets the priorities. Teams self-organize to determine the best way to deliver the highest priority features. • Every two weeks to a month anyone can see real working software and decide to release it as is or continue to enhance it for another sprint. Processi di sviluppo Luca Mainetti
Scrum origins ■ Jeff Sutherland – Initial scrums at Easel Corp in 1993 – IDX and 500+ people doing Scrum ■ Ken Schwaber – ADM – Scrum presented at OOPSLA 96 with Sutherland – Author of three books on Scrum ■ Mike Beedle – Scrum patterns in PLOPD4 ■ Ken Schwaber and Mike Cohn – Co-founded Scrum Alliance in 2002, initially within the Agile Alliance Processi di sviluppo Luca Mainetti
Scrum has been used by ■ Microsoft ■ Nielsen Media ■ Yahoo ■ First American Real Estate ■ Google ■ BMC Software ■ Electronic Arts ■ Ipswitch ■ High Moon Studios ■ John Deere ■ Lockheed Martin ■ Lexis Nexis ■ Philips ■ Sabre ■ Siemens ■ Salesforce.com ■ Nokia ■ Time Warner ■ Capital One ■ Turner Broadcasting ■ BBC ■ Oce ■ Intuit Processi di sviluppo Luca Mainetti
Scrum has been used for ■ Commercial software ■ Video game development ■ In-house development ■ FDA-approved, life-critical ■ Contract development systems ■ Fixed-price projects ■ Satellite-control software ■ Financial applications ■ Websites ■ ISO 9001-certified ■ Handheld software applications ■ Mobile phones ■ Embedded systems ■ Network switching applications ■ 24x7 systems with 99.999% ■ ISV applications uptime requirements ■ Some of the largest applications ■ the Joint Strike Fighter in use Processi di sviluppo Luca Mainetti
Characteristics ■ Self-organizing teams ■ Product progresses in a series of month-long “sprints” ■ Requirements are captured as items in a list of “product backlog” ■ No specific engineering practices prescribed ■ Uses generative rules to create an agile environment for delivering projects ■ One of the “agile processes” Processi di sviluppo Luca Mainetti
Scrum in a picture Image available at www.mountaingoatsoftware.com/scrum Processi di sviluppo Luca Mainetti
Sprints ■ Scrum projects make progress in a series of “sprints” – Analogous to Extreme Programming iterations ■ Typical duration is 2–4 weeks or a calendar month at most ■ A constant duration leads to a better rhythm ■ Product is designed, coded, and tested during the sprint Processi di sviluppo Luca Mainetti
Sequential vs. overlapping development Requirements Design Code Test Rather than doing all of one thing at a time... ...Scrum teams do a little of everything all the time Source: “The New New Product Development Game” by Takeuchi and Nonaka. Harvard Business Review, January 1986. Processi di sviluppo Luca Mainetti
No changes during a sprint Change ■ Plan sprint durations around how long you can commit to keeping change out of the sprint Processi di sviluppo Luca Mainetti
Scrum framework Roles •Product owner •ScrumMaster •Team Ceremonies •Sprint planning •Sprint review •Sprint retrospective •Daily scrum meeting Artifacts •Product backlog •Sprint backlog •Burndown charts Processi di sviluppo Luca Mainetti
Scrum framework Roles •Product owner •ScrumMaster •Team Ceremonies •Sprint planning •Sprint review •Sprint retrospective •Daily scrum meeting Artifacts •Product backlog •Sprint backlog •Burndown charts Processi di sviluppo Luca Mainetti
Product owner ■ Define the features of the product ■ Decide on release date and content ■ Be responsible for the profitability of the product (ROI) ■ Prioritize features according to market value ■ Adjust features and priority every iteration, as needed ■ Accept or reject work results Processi di sviluppo Luca Mainetti
The ScrumMaster ■ Represents management to the project ■ Responsible for enacting Scrum values and practices ■ Removes impediments ■ Ensure that the team is fully functional and productive ■ Enable close cooperation across all roles and functions ■ Shield the team from external interferences Processi di sviluppo Luca Mainetti
The team ■ Typically 5-9 people ■ Cross-functional: – Programmers, testers, user experience designers, etc. ■ Members should be full-time – May be exceptions (e.g., database administrator) ■ Teams are self-organizing – Ideally, no titles but rarely a possibility ■ Membership should change only between sprints Processi di sviluppo Luca Mainetti
Scrum framework Roles •Product owner •ScrumMaster •Team Ceremonies •Sprint planning •Sprint review •Sprint retrospective •Daily scrum meeting Artifacts •Product backlog •Sprint backlog •Burndown charts Processi di sviluppo Luca Mainetti
Team Sprint planning meeting capacity Sprint prioritization Product • Analyze and evaluate product Sprint backlog goal backlog • Select sprint goal Business Sprint planning conditions • Decide how to achieve sprint Current goal (design) product • Create sprint backlog (tasks) Sprint backlog from product backlog items (user stories / features) Techno- • Estimate sprint backlog in logy hours Processi di sviluppo Luca Mainetti
Sprint planning ■ Team selects items from the product backlog they can commit to completing ■ Sprint backlog is created – Tasks are identified and each is estimated (1-16 hours) – Collaboratively, not done alone by the ScrumMaster ■ High-level design is considered As a vacation planner, I want to see photos of the hotels. Code the middle tier (8 hours) Code the user interface (4) Write test fixtures (4) Code the foo class (6) Update performance tests (4) Processi di sviluppo Luca Mainetti
The daily scrum ■ Parameters – Daily – 15-minutes – Stand-up ■ Not for problem solving – Whole world is invited – Only team members, ScrumMaster, product owner, can talk ■ Helps avoid other unnecessary meetings Processi di sviluppo Luca Mainetti
Everyone answers 3 questions 1 What did you do yesterday? 2 What will you do today? 3 Is anything in your way? ■ These are not status for the ScrumMaster – They are commitments in front of peers Processi di sviluppo Luca Mainetti
The sprint review ■ Team presents what it accomplished during the sprint ■ Typically takes the form of a demo of new features or underlying architecture ■ Informal – 2-hour prep time rule – No slides ■ Whole team participates ■ Invite the world Processi di sviluppo Luca Mainetti
Sprint retrospective ■ Periodically take a look at what is and is not working ■ Typically 15–30 minutes ■ Done after every sprint ■ Whole team participates – ScrumMaster – Product owner – Team – Possibly customers and others Processi di sviluppo Luca Mainetti
Start / Stop / Continue ■ Whole team gathers and discusses what they’d like to: Start doing Stop doing This is just one of many ways to Continue doing do a sprint retrospective. Processi di sviluppo Luca Mainetti
Scrum framework Roles •Product owner •ScrumMaster •Team Ceremonies •Sprint planning •Sprint review •Sprint retrospective •Daily scrum meeting Artifacts •Product backlog •Sprint backlog •Burndown charts Processi di sviluppo Luca Mainetti
Product backlog ■ The requirements ■ A list of all desired work on the project ■ Ideally expressed such that each item has value to the users or customers of the product ■ Prioritized by the product owner ■ Reprioritized at the start of This is the each sprint product backlog Processi di sviluppo Luca Mainetti
A sample product backlog Backlog item Estimate Allow a guest to make a reservation 3 As a guest, I want to cancel a reservation. 5 As a guest, I want to change the dates of a 3 reservation. As a hotel employee, I can run RevPAR reports 8 (revenue-per-available-room) Improve exception handling 8 ... 30 ... 50 Processi di sviluppo Luca Mainetti
The sprint goal ■ A short statement of what the work will be focused on during the sprint Life Sciences Support features necessary for Database Application population genetics studies. Make the application run on SQL Server in addition to Oracle. Financial services Support more technical indicators than company ABC with real-time, streaming data. Processi di sviluppo Luca Mainetti
Managing the sprint backlog ■ Individuals sign up for work of their own choosing – Work is never assigned ■ Estimated work remaining is updated daily ■ Any team member can add, delete or change the sprint backlog ■ Work for the sprint emerges ■ If work is unclear, define a sprint backlog item with a larger amount of time and break it down later ■ Update work remaining as more becomes known Processi di sviluppo Luca Mainetti
A sprint backlog Tasks Mon Tue Wed Thu Fri Code the user interface 8 4 8 Code the middle tier 16 12 10 4 Test the middle tier 8 16 16 11 8 Write online help 12 Write the foo class 8 8 8 8 8 Add error logging 8 4 Processi di sviluppo Luca Mainetti
A sprint burndown chart Hours Processi di sviluppo Luca Mainetti
Tasks Mon Tue Wed Thu Fri Code the user interface 8 4 8 Code the middle tier 16 12 10 7 Test the middle tier 8 16 16 11 8 Write online help 12 50 40 30 20 Hours 10 0 Mon Tue Wed Thu Fri Processi di sviluppo Luca Mainetti
DevOps Processi di sviluppo 41 Luca Mainetti
Il problema che anche con i metodi agili permane (anzi diventa più evidente) ■ Gli addetti allo sviluppo (“Dev”) sono concentrati sui rilasci e sul continuo test e cambiamento del software ■ Gli addetti ai sistemi (“Ops”) sono concentrati sulla stabilità dei servizi ■ Evidentemente gli obiettivi sono conflittuali ■ Il conflitto è ancora più forte se i rilasci di nuovo software sono frequenti ■ Va inoltre osservato che quasi sempre i team degli sviluppatori e quello dei sistemisti sono separati, anche da un punto di vista logistico Processi di sviluppo 42 Luca Mainetti
DevOps in un’immagine Processi di sviluppo 43 Luca Mainetti
Motivazioni ed effetti del problema ■ Disconnessione tra i gruppi (per alcuni versi anche necessaria, poiché sono richieste specializzazioni verticali molto differenti) ■ Spesso gli sviluppatori (Dev) rilasciano software inconsistente ■ Come reazione, i sistemisti (Ops) sono diffidenti, quindi fanno resistenza ai continui cambiamenti ■ Il processo di sviluppo (Dev) è agile ■ Il processo di gestione dei servizi (Ops) è statico ■ Questi conflitti portano a inefficienze che hanno effetti sulle prestazioni e sul business Processi di sviluppo 44 Luca Mainetti
DevOps ■ DevOps nasce proprio per dare una risposta al problema evidenziato ■ In altre parole, DevOps è un approccio pensato per colmare il gap esistente tra lo sviluppo agile del software e le “operations” ■ L’idea di base, molto banale, è di favorire la collaborazione tra sviluppatori e sistemisti ■ La sola collaborazione non è sufficiente se non è supportata da precise pratiche e strumenti automatici ■ In entrambi i casi, DevOps detta precise prescrizioni Processi di sviluppo 45 Luca Mainetti
Il cambiamento ■ Il cambiamento è richiesto dal business ■ E’ fonte di possibili guadagni ■ E’ necessario per riuscire ad adattare correttamente il prodotto software alle necessità del mercato ■ Il cambiamento non va combattuto ■ Il cambiamento va favorito ■ Tuttavia il cambiamento va gestito ■ Esiste una differenza sostanziale tra cambiamento “motivato” e cambiamento “immotivato” Processi di sviluppo 46 Luca Mainetti
Collaborazione tra Dev e Ops ■ I sistemisti troppo spesso risultano esclusi dalle fasi iniziali e centrali del processo di sviluppo del software ■ Di contro, gli sviluppatori troppo spesso sono all’oscuro degli strumenti e delle operazioni di configurazione e manutenzione dei servizi che i sistemisti eseguono ■ Coinvolgere tutti fin da subito (nei daily meeting, negli sprint planning meeting, nelle retrospective) ■ Comunicare a tutti le decisioni (la comunicazione non costa nulla, correggere problemi per mancanza di comunicazione invece costa tempo e denaro) Processi di sviluppo 47 Luca Mainetti
Uso di strumenti automatici ■ Ripetere la stessa operazione per 5 minuti al giorni significa occupare 2,6 giorni all’anno ■ Cosa deve essere necessariamente automatizzato? – Build – Deployment – Testing – Monitoring (con uso di metriche) – Configurazione dei servizi – Messa in produzione dei servizi ■ Anche l’infrastruttura è codice software Processi di sviluppo 48 Luca Mainetti
Esempio: metriche Processi di sviluppo 49 Luca Mainetti
Esempio: configurazione Processi di sviluppo 50 Luca Mainetti
Esempio: configurazione Processi di sviluppo 51 Luca Mainetti
Il ciclo di vita DevOps: prima dello sviluppo ■ Coinvolgere Ops nell’analisi dei requisiti funzionali ■ Coinvolgere Ops nell’analisi dei requisiti non funzionali – Sicurezza – Disponibilità – Facilità di aggiornamento – Manutenibilità – Configurabilità – Monitoraggio – Logging – Metriche Processi di sviluppo 52 Luca Mainetti
Il ciclo di vita DevOps: durante lo sviluppo ■ Favorire la comunicazione tra Dev e Ops ■ Usare sistemi per il controllo del codice sorgente (CVS) ■ Automatizzare le build ■ Automatizzare i test ■ Automatizzare i rilasci (sui sistemi di sviluppo, di test e di produzione) ■ Raccogliere le misure ottenute dalle metriche sulle applicazioni e sui sistemi (per fare calcoli di regressione) Processi di sviluppo 53 Luca Mainetti
Il ciclo di vita DevOps: dopo lo sviluppo ■ Coinvolgere Ops nei meeting di retrospective ■ Continuare ad eseguire i test ■ Continuare a raccogliere le misure sulle applicazioni e sui sistemi ■ Riferimenti – http://www.devopsdays.org Processi di sviluppo 54 Luca Mainetti
Puoi anche leggere