1. Sviluppo Software Agile
1.1. I Fondamenti Sviluppo Software Agile
1.1.1. Sviluppo Software Agile e Agile Manifesto
1.1.1.1. 4 valori core
1.1.1.2. 12 principi
1.1.2. Approccio Whole-Team
1.1.2.1. Team composti da ‘generalizing specialist’
1.1.2.2. Coinvolgimento di tutte le conoscenze e competenze
1.1.2.3. Lavoro di squadra: analisti, sviluppatori, tester rappresentanti del cliente e altri stakeholders
1.1.2.4. Team piccoli (3-9 persone), co-locati
1.1.2.5. Meeting giornalieri in piedi (daily stand-up meeting)
1.1.2.6. Dinamiche di team atte a rafforzare l’efficienza e l’efficacia
1.1.2.7. Migliore comunicazione e interazione
1.1.2.8. Responsabilità della qualità del prodotto condivisa
1.1.3. Feedback Anticipati e Frequenti
1.1.3.1. No incompresioni sui requisiti e change o fix meno costose
1.1.3.2. Le funzionalità riflettono maggiormente le necessità del cliente e sono disponibili anticipatamente
1.1.3.3. Problemi di qualità vengono scoperti prima (soprattutto attraverso la CI)
1.1.3.4. Il team Agile è in grado di calcolare la propria produttività e ciò che può erogare con maggiore precisione
1.1.3.5. Il ritmo di sviluppo del progetto viene migliorato iterazione dopo iterazione
1.2. Gli aspetti degli Approcci Agile
1.2.1. Approcci allo Sviluppo Software Agile
1.2.1.1. XP
1.2.1.1.1. 5 valori
1.2.1.1.2. 14 principi
1.2.1.1.3. 13 pratiche (+11 corollarie)
1.2.1.2. Scrum
1.2.1.2.1. Eventi/Cerimonie: Sprint, Sprint Planning Meeting, Daily Scrum, Sprint Review, Sprint Retrospective Artifact: Product Backlog, Release Backlog, Sprint Backlog, Incremento di Prodotto Ruoli: Scrum Master, Product Owner, Scrum Team Altro: US, DoD, Acceptance Test, Timeboxing, Inspect&Adapt, trasparenza
1.2.1.3. Kanban
1.2.1.3.1. Kanban board Limite al WIP (Working In Progress) Lead Time No iterazione No ruoli, artifatti, cerimonie No timeboxing Backlog con priorità
1.2.2. Creazione Collaborativa delle User Story
1.2.2.1. Scrittura collaborativa, tutti i punti di vista sono considerati Formula: ‘as <role> I want to <action> so that <benefit>’ Le 3 C delle US: Card, Conversazione, Conferma Le proprietà I.N.V.E.S.T: Indipendente Negoziabile Valutabile Stimabile (Estimable) Piccola (Small) Testabile
1.2.3. Retrospettive
1.2.3.1. Discussione focalizzata sui processi non sulle persone La DoD viene rivista durante queste riunioni Una lista di AI è creata Vengono rivisti i punti della retrospettiva precedente La discussione è di interesse per tutti
1.2.4. Integrazione Continua
1.2.4.1. Pratica degli sviluppatori Piccole modifiche integrate frequentemente (da 10 min a 24h) Analisi statica del codice Compilazione: compilazione e linking del codice, generando i file eseguibili Unit test Installazione della build nell’ambiente di test Testing di integrazione: esecuzione dei test di integrazione e reporting dei risultati Reportistica (dashboard)
1.2.5. Pianificazione della Release e dell’Iterazione
1.2.5.1. RELEASE • Definizione di user story testabili, con i relativi criteri di accettazione • Partecipazione all’analisi del rischio • Stima dell’effort per il testing associato alle user story • Definizione dei livelli di test necessari • Pianificazione del testing per la release ITERAZIONE • Partecipazione all’analisi del rischio delle user story • Valutazione della testabilità delle user story • Creazione dei test di accettazione per le user story • Suddivisione delle user story in task (in particolare task di test) • Stima dell’effort del testing per tutti i task di test • Identificazione degli aspetti funzionali e non-funzionali da testare • Supporto e partecipazione al test automation nei vari livelli di test
2. Principi, Regole e Processi Fondamentali del Testing Agile
2.1. Le Differenze tra il Testing negli Approcci Tradizionali e Agile
2.1.1. Attività di Testing e di Sviluppo
2.1.1.1. • Attività altamente parallele • Competenze T-shaped • Pratica di hardening per ridurre il technical debt • Pratica "fix bug first” • Pairing • Test automation • Documentazione leggera (lightweight)
2.1.2. Livelli di Test
2.1.2.1. • Parallelismo • Unit test • Test di integrazione • Testing di accettazione della funzionalità (V&V) • Test di sistema • Test di accettazione di vario tipo • Livello ad hoc per la regressione
2.1.3. Testing e Gestione della Configurazione
2.1.4. Scelte Organizzative per il Testing Indipendente
2.1.4.1. tester nel team
2.1.4.2. tester in team separato che fa test verso fine iterazione
2.1.4.3. tester in team separato assegnato a team agile all'inizio del progetto
2.1.4.4. PIT
2.1.5. Prodotti di Lavoro del Progetto
2.1.5.1. • Prodotti di lavoro business-oriented (Epic, US, Criteri accettazione) • Prodotti di lavoro dello sviluppo • Prodotti di lavoro del test
2.2. Stato del Testing nei Progetti Agile
2.2.1. Comunicare Stato del Test, Avanzamento e Qualità del prodotto
2.2.1.1. Task board Agile Stand-up meeting Burndown chart Burn-up chart Survey, metriche
2.2.2. Gestire il Rischio di Regressione attraverso l’Evoluzione di Casi di Test Manuali e Automatizzati
2.2.2.1. Crescita quadrata del rischio di regressione Automazione Build verification test
2.3. Ruolo e Skill di un Tester in un Team Agile
2.3.1. Skill di un Tester Agile
2.3.1.1. Competenze interpersonali
2.3.1.2. Competenze tecniche: Test automation TDD, ADD, BDD Testing white-box, black-box e basato sull’esperienza Competenze di un tester (Foundation Level)
2.3.2. Il Ruolo di un Tester in un Team Agile
2.3.2.1. Coach e esperto del test nel team cross-funzionale Mitigare il rischio di poca indipendenza
3. Metodi, Tecniche e Strumenti di Testing Agile
3.1. Metodi di Testing Agile
3.1.1. Test-Driven Development, Acceptance Test-Driven Development e Behavior-Driven Development
3.1.2. La Piramide del Test
3.1.3. Quadranti del Testing, Livelli di Test e Tipi di Test
3.1.4. Il Ruolo di un Tester
3.1.4.1. Teamwork
3.1.4.2. Sprint 0
3.1.4.3. Integrazione (System Anatomy Map)
3.1.4.4. Pianificare il test
3.2. Valutare i Rischi di Qualità e Stimare lo Sforzo del Test
3.2.1. Valutare i Rischi di Qualità nei Progetti Agile
3.2.2. Stimare lo Sforzo di Testing sulla Base di Contenuto e Rischio
3.3. Tecniche nei Progetti Agile
3.3.1. Criteri di Accettazione, Copertura adeguata e Altre Informazioni per il Testing
3.3.1.1. DoD
3.3.2. Applicare Acceptance Test-Driven Development
3.3.3. Progettazione del Test Black Box Funzionale e Non-Funzionale
3.3.4. Testing Esplorativo e Testing Agile
3.4. Strumenti nei Progetti Agile
3.4.1. Gestione e il Tracciamento dei Task
3.4.2. Comunicazione e Condivisione delle Informazioni
3.4.3. Build e di Distribuzione del Software
3.4.4. Gestione della Configurazione
3.4.5. Progettazione, l’Implementazione e l’Esecuzione dei Test
3.4.6. Cloud Computing e di Virtualizzazione