1&2_INTRO_PRO_SOFT Flashcards
(21 cards)
Cos’è processo software e quali sono le fasi
Con processo software si intende il modo con cui produciamo il software
* Comincia quando iniziamo ad esplorare il problema
* Finisce quando il prodotto viene ritirato dal mercato
* Strutturato in fasi:
* Analisi dei requisiti
* Specifica
* Progettazione
* Implementazione
* Integrazione
* Mantenimento
* Ritiro
* Riguarda tutti gli strumenti, le tecniche e i professionisti coinvolti nella varie fasi
Definizione -> Approccio sistematico per sviluppo, operatività, manutenzione e ritiro software / Sequenza di attività necessarie a sviluppare un sistema software
Cosa sono robustezza e Faul tolerance?
Robustezza → capacità di far funzionare sistema software correttamente anche con comportamenti errati dell’utente. Un software robusto è capace di gestire errori, input errati senza interrompere il suo funzionamento.
Fault tolerance → capacità di riprendere funzionamento correttamente dopo un crash.
In cosa si differenzia il software da altri prodotti ingegnerizzabili?
Un sistema software è diverso da altri prodotti ingegnerizzabili
* Non è necessariamente vincolato da materiali
* Non è governato da leggi fisiche o da processi manufatturieri
* Non ha costi marginali (costo di un’unità aggiuntiva prodotta)
* Non si «consuma»
* Spesso si «assembla»
Cosa significa modellare un processo software?
Il modello di un processo software fornisce una rappresentazione astratta del processo stesso
* Suddivisione in attività (cosa fare, quando, chi, e cosa si ottiene)
* Organizzazione delle attività (ordinamento, criteri per terminare un’attività e passare alla successiva)
Quali sono le fasi comuni a tutti i modelli di processi software?
- specifica, aka. definizione di cosa deve essere fatto
- progettazione e implementazione
- validazione, aka. verifica che il sistema faccia quanto richiesto
- evoluzione, aka. modifica/aggiornamento del sistema
Quali sono i grandi macro gruppo di modelli di ciclo di vita del software?
Modelli prescrittivi, Unified Process, Modelli Agili
Elenca modelli prescrittivi
- Cascata
- Modello a V
- Rapid Prototyping
- Modello incrementale
- Modello a spirale
Modelli agili
- Extreme Programming
- Scrum
- Continuous Delivery
Parla della fase di specifica
Stabilisce quali servizi sono richiesti e i vincoli sul funzionamento del sistema.
Processo di ingegneria dei requisiti:
* Estrazione e analisi dei requisiti
* Specifica dei requisiti
* Convalida dei requisiti
Parla della fase di progettazione
Definizione di una struttura software che realizzi la specifica
* Architectural design: identificazione della struttura del sistema (in termini di componenti, relazioni e loro distribuzione)
* Database design: definizione delle strutture dati e della loro rappresentazione in database
* Interface design: Definizione delle interfacce tra i componenti del sistema
* Component design: Definizione (di dettaglio) dei componenti del sistema, eventualmente identificando quelli realizzabili mediante riuso di componenti esistenti
Parla della fase di sviluppo
La struttura software progettata nella fase di design è realizzata implementando uno o più programmi e/o configurando sistemi applicativi esistenti
Attenzione:
* Le fasi di progettazione e sviluppo sono spesso eseguite in interleaving nella produzione di sistemi software
* La fase di sviluppo include:
* Programmazione: attività individuale (eventualmente svolta in cooperazione) senza un processo standard
* Debugging: attività volta ad identificare e correggere eventuali errori/bug introdotti durante la programmazione
Fase di validazione
Verifica e validazione (V&V) hanno lo scopo di dimostrare che un sistema è conforme alle sue specifiche e soddisfa i requisiti del cliente
* Spesso fatta mediante test del sistema
* Il test del sistema prevede l’esecuzione del sistema con casi di test derivati dalla specifica
dei dati reali che devono essere elaborati dal sistema
Component testing, system testing, Customer testing
Fase di evoluzione
Cambiamenti ed evoluzioni sono inevitabili nei sistemi moderni:
1. Cambio requisiti -> nuove esigenze di business
2. Nuove tecnologie
Necessità di anticipare i cambiamenti per ridurre i costi del rework
Differenze tra plan-driven e Agile
Plan driven -> sequenziale
Agile -> iterativo
Principi fondamentali met. Agile
- Coinvolgere il cliente (anche nel nostro esame)
- Consegna incrementale: versione incrementali con il cliente che specifica i requisiti da soddisfare in ciascuna versione
- Persone non processi: Abilità del team devono essere riconosciute e sfruttate, lasciando team di sviluppo liberi di sviluppare
- Abbraccia il cambiamento: i requisiti del sistema cambieranno nel tempo e progettare il sistema in modo da favorire tali cambiamenti
- Mantieni semplicità: semplicità nel software e nel processo di sviluppo
Agile e CI/CD
- CI/CD sono pratiche specifiche focalizzate sull’integrazione, il testing e il rilascio continuo del codice, spesso automatizzate.
- DevOps è un insieme di principi culturali e organizzativi che ingloba CI/CD e promuove la collaborazione tra sviluppo e operazioni per accelerare il ciclo di vita del software e migliorare la qualità del prodotto.
Extreme programming
XP è un approccio «estremo» allo sviluppo iterativo e agile del software
* Nuove versioni di un sistema software sviluppate più volte in un giorno
* Versioni incrementali rilasciate al cliente ogni 2 settimane
* Tutti i test sono eseguiti per ogni build e una build è accettata solo se tutti i test sono passati con successo
Scrum definizione e figure coinvolte
Scrum è un metodo agile per lo sviluppo iterativo e incrementale di un sistema software
* Il nome deriva dalla terminologia usato per «mischia» nel gioco del rugby
* L’idea è quella di ottenere un processo in cui un insieme di persone si muove all’unisono per raggiungere un obiettivo che garantisce la soddisfazione di
* ambizioni di squadra e
* ambizioni personali
Figure:
1. Product owner
2. Scrum master
3. Dev Team
Quali sono le fasi Scrum
1) Pre-game phase (pianificazione «di massima»)
* Planning sub-phase: Definizione del sistema che deve essere sviluppato, in termini di
product backlog (contiene tutti i requisiti attualmente conosciuti)
* Architecture sub-phase: Design di alto livello del sistema, inclusa l’architettura, in base
agli elementi contenuti nel product backlog
2) Game phase (sviluppo)
* Il sistema viene sviluppato attraverso una serie di sprint (cicli iterativi nei quali vengono sviluppate o migliorate una serie di funzionalità)
* Uno sprint si svolge in un intervallo di tempo che va da una settimana ad un mese
* Ciascuno sprint include le tradizionali fasi di sviluppo del software
* L’architettura del sistema evolve durante lo sviluppo negli sprint
Parla degli sprint nella met. scrum
Gli sprint hanno durata prefissata (~2-4 settimane)
1. definizione product Backlog
2. Pianificazione dello sprint
3. Inizia sprint
4. Termine sprint e revisione
Tra uno sprint e successivo evento di retrospettiva
Cos’è Kanban
Organizzazione di un progetto // obiettivo: ridurre il tempo richiesto dall’inizio alla fine
* Visualizzazione, tramite board Kanban
* Limitazione del lavoro in corso (WIP – work-in-progress)
* Ottimizzazione dell’efficienza