Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento

Pagina creata da Christian Di Benedetto
 
CONTINUA A LEGGERE
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
Principi di Progettazione del Software
             a.a. 2018-2019

     Processi di sviluppo del software
            Prof. Luca Mainetti
          Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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
Principi di Progettazione del Software a.a. 2018-2019 - Processi di sviluppo del software Prof. Luca Mainetti Università del Salento
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