Metodologie di Sviluppo
Report 5000 ufficiale: SDLC, modelli plan-driven (Waterfall, V-Model, Spiral, RUP), agile per web, sistemi conoscitivi (CRISP-DM, MLOps, SECI), testing, Git e branching + 25 numeri + 15 trabocchetti.
1 SDLC e cicli di vita
Software Development Life Cycle (SDLC)
Insieme di fasi che descrivono lo sviluppo di un sistema software dall'ideazione al ritiro:
- Analisi requisiti (functional, non-functional)
- Progettazione (architettura, design dettagliato)
- Implementazione (coding)
- Testing (unit, integration, system, acceptance)
- Deployment (rilascio in produzione)
- Manutenzione (correttiva, evolutiva, adattativa, perfettiva)
- Dismissione
Tipologie sistemi (per ambito)
- Gestionali: ERP, CRM, contabilità, HR, gestione documentale (workflow strutturato, transazionali)
- Web: applicazioni internet/intranet, e-commerce, portali (architetture distribuite, multi-utente)
- Conoscitivi: sistemi esperti, AI/ML, decision support, knowledge management (basati su conoscenza/dati)
2 Metodologie gestionali (modelli plan-driven)
Waterfall (cascata, Royce 1970)
Modello sequenziale rigido: ogni fase produce documenti che alimentano la successiva. Niente ritorni indietro (in pratica revisioni iterative ammesse).
Vantaggi: pianificazione chiara, deliverable misurabili, documentazione completa.
Svantaggi: rigido, costo elevato del cambiamento, requisiti devono essere stabili.
Quando: progetti con requisiti molto stabili (sistemi mission-critical, normativi, contratti rigidi).
V-Model (1991)
Estensione del Waterfall: a ogni fase di sviluppo (sinistra) corrisponde una fase di test (destra) — V-shape:
- Requisiti ↔ Acceptance Test
- Analisi ↔ System Test
- Design alto livello ↔ Integration Test
- Design dettagliato ↔ Unit Test
- Codice (vertice)
Forte focus su qualità e tracciabilità requisiti-test.
Spiral Model (Boehm 1986)
Modello iterativo + risk-driven: ogni iterazione (giro di spirale) ha 4 quadranti:
- Definire obiettivi e vincoli
- Analisi rischi + prototipazione
- Sviluppo + test
- Pianificazione iterazione successiva
Adatto a sistemi grandi, complessi, ad alto rischio.
RUP (Rational Unified Process — IBM 1998)
Iterativo, incrementale, basato su use case e UML. 4 fasi (Inception, Elaboration, Construction, Transition) e 9 discipline (Business Modeling, Requirements, Analysis & Design, Implementation, Test, Deployment, Configuration & Change Mgmt, Project Mgmt, Environment).
Modello Incrementale
Sviluppo per incrementi successivi, ogni incremento aggiunge funzionalità al sistema. Combina elementi waterfall (per ogni incremento) e iterativo (tra incrementi).
3 Metodologie web (modelli agili e iterativi)
Approcci agili — overview
Manifesto Agile (2001) → 4 valori, 12 principi. Frameworks: Scrum, XP, Kanban, Lean, Crystal, DSDM, FDD (Feature Driven Development).
Specificità applicazioni web
- Cicli rilascio brevi (deploy continuo, settimanale o più frequente)
- Forte feedback utenti (analytics, A/B testing)
- Architettura distribuita (frontend / backend / DB / CDN / cache)
- DevOps integrato (CI/CD)
- Compatibilità multi-device (responsive, mobile-first, PWA)
Web Information Systems Development (WISD)
Approccio dedicato sviluppo applicazioni web. Fasi: site analysis, content modeling, UI design, navigation design, hypertext design, implementation, testing.
UWE / OOHDM / WebML
Metodologie specifiche modellazione applicazioni web (anni 2000-2010): UWE (UML-based Web Engineering), OOHDM (Object-Oriented Hypermedia Design Method), WebML (Web Modeling Language). Oggi superate da framework component-based moderni.
Stack tecnologici web moderni
- MEAN/MERN/MEVN: MongoDB + Express + (Angular/React/Vue) + Node.js
- LAMP/LEMP: Linux + Apache/Nginx + MySQL + PHP
- JAMstack: JavaScript + API + Markup (statico+API)
- Serverless: AWS Lambda, Cloudflare Workers, Vercel
Microservizi nel web
Architettura per applicazioni cloud-scale: servizi piccoli, autonomi, comunicano via REST/gRPC. Vedi report Architetture Software per dettagli.
4 Metodologie conoscitive (knowledge-based / AI)
Sistemi esperti — architettura classica
- Knowledge Base (regole + fatti)
- Inference Engine (motore inferenziale forward/backward chaining)
- User Interface
- Knowledge Acquisition Module (per esperti dominio)
- Explanation Module
Esempi storici: MYCIN (medico, anni '70), DENDRAL (chimico), XCON (DEC, configurazione VAX).
KADS / CommonKADS (anni '90)
Metodologia europea sviluppo sistemi knowledge-based. 6 modelli: organizzazione, task, agente, comunicazione, conoscenza, design.
CRISP-DM (Cross Industry Standard Process for Data Mining, 1996)
Metodologia standard per progetti data mining / data science. 6 fasi cicliche:
- Business Understanding
- Data Understanding
- Data Preparation (~80% del lavoro)
- Modeling
- Evaluation
- Deployment
Machine Learning Lifecycle
- Problem definition
- Data collection
- Data preprocessing (cleaning, feature engineering)
- Model selection
- Training
- Validation (cross-validation)
- Testing
- Deployment
- Monitoring (model drift, retraining)
MLOps
Estensione DevOps al Machine Learning: versioning di codice + dati + modelli, pipeline automatiche di training/deploy, monitoring performance modello in produzione, gestione drift.
Approcci moderni AI
- Supervised learning (classificazione, regressione)
- Unsupervised learning (clustering, dimensionality reduction)
- Reinforcement learning
- Deep learning (reti neurali profonde)
- LLM (Large Language Models — GPT, Claude, Gemini, LLaMA)
- RAG (Retrieval-Augmented Generation): combina LLM + knowledge base
Knowledge Management — modello SECI (Nonaka & Takeuchi, 1995)
4 modi di conversione conoscenza tacita ↔ esplicita:
- Socialization (tacita → tacita)
- Externalization (tacita → esplicita)
- Combination (esplicita → esplicita)
- Internalization (esplicita → tacita)
5 Testing del software
Livelli di test
| Livello | Cosa testa | Chi |
|---|---|---|
| Unit | Singola funzione/classe | Sviluppatori |
| Integration | Interazione tra moduli | Sviluppatori |
| System | Sistema completo | QA |
| Acceptance (UAT) | Conformità a requisiti utente | Cliente/PO |
Tipi di test
- Funzionali: verificano "cosa" fa il sistema
- Non funzionali: performance, sicurezza, usabilità, scalabilità, accessibilità
- Regression: verificano che modifiche non rompano funzionalità esistenti
- Smoke: test rapidi su funzionalità chiave dopo build
- Sanity: verifica funzionalità specifica dopo bug fix
Tecniche black-box vs white-box
- Black-box: test basati su specifiche (no conoscenza interna): equivalence partitioning, boundary value analysis, decision table
- White-box: test basati su codice: statement coverage, branch coverage, path coverage
TDD vs BDD
- TDD (Test-Driven Development): test → codice → refactor
- BDD (Behavior-Driven Development): scenari Given-When-Then in linguaggio naturale (Cucumber, Gherkin)
Piramide del test (Cohn)
| Livello | Quantità |
|---|---|
| E2E (top) | Pochi |
| Integration | Moderato |
| Unit (base) | Molti, veloci |
6 Version control e collaborazione
Git — concetti base
Sistema distribuito di version control (Linus Torvalds 2005, per kernel Linux). Ogni clone è repository completo con storia.
Comandi essenziali
git init— inizializza repositorygit clone— copia repository remotogit add— stage modifichegit commit— crea snapshotgit push/git pull— sincronizza con remotogit branch— gestione branchgit merge/git rebase— integra modifichegit log— storia commit
Branching strategies
- GitFlow: branch main, develop, feature, release, hotfix
- GitHub Flow: main + feature branches + PR
- Trunk-Based Development: tutti su trunk principale, feature flag per gradual rollout
Pull Request / Merge Request
Strumento collaborativo: proposta di merge con review codice, discussione, CI automatica, approvazioni richieste.
7 25 numeri chiave
| # | Dato | Valore |
|---|---|---|
| 1 | Anno Waterfall (Royce) | 1970 |
| 2 | Anno Spiral Model (Boehm) | 1986 |
| 3 | Anno Manifesto Agile | 2001 |
| 4 | Fasi RUP | 4 (Inception/Elaboration/Construction/Transition) |
| 5 | Discipline RUP | 9 |
| 6 | Fasi CRISP-DM | 6 |
| 7 | Fase CRISP-DM più lunga | Data Preparation (~80%) |
| 8 | Modi conversione SECI | 4 |
| 9 | Anno Git (Torvalds) | 2005 |
| 10 | Livelli test classici | 4 (Unit/Integration/System/Acceptance) |
| 11 | Anno V-Model | 1991 |
| 12 | Sistema esperto storico medico | MYCIN (anni '70) |
| 13 | Sistema esperto chimico | DENDRAL |
| 14 | Sistema esperto configurazione | XCON (DEC) |
| 15 | Stack JS frontend+backend | MEAN/MERN/MEVN |
| 16 | Stack Linux+Apache+MySQL+PHP | LAMP |
| 17 | Anno SECI (Nonaka) | 1995 |
| 18 | Anno KADS/CommonKADS | Anni '90 |
| 19 | Pattern Cucumber/Gherkin | Given-When-Then |
| 20 | Versione Scrum Guide | 2020 |
| 21 | Branching gestione mainframe | GitFlow |
| 22 | Trunk-based con feature flag | Continuous Integration friendly |
| 23 | Black-box: equivalence partitioning | Tecnica test |
| 24 | White-box coverage minimo | Statement coverage |
| 25 | Modello UML standard | OMG, ISO/IEC 19505 |
8 15 trabocchetti d'esame
| # | Trabocchetto | Risposta corretta |
|---|---|---|
| 1 | "Waterfall = nessun ritorno indietro" | PARZIALE — formalmente sequenziale, in pratica revisioni iterative ammesse |
| 2 | "V-Model è agile" | FALSO — V-Model è plan-driven, evoluzione di Waterfall |
| 3 | "RUP è un framework agile" | FALSO — RUP è iterativo/incrementale ma più pesante di Scrum |
| 4 | "CRISP-DM ha 8 fasi" | FALSO — 6 fasi (BU, DU, DP, M, E, D) |
| 5 | "Data preparation = 20% lavoro DS" | FALSO — circa 80% del tempo data scientist |
| 6 | "Sistemi esperti = AI generativa" | FALSO — sistemi esperti sono rule-based; AI generativa è deep learning |
| 7 | "TDD = test dopo il codice" | FALSO — TDD = test prima del codice (Red-Green-Refactor) |
| 8 | "Smoke test = test approfondito" | FALSO — smoke = test rapidi su funzionalità chiave |
| 9 | "Git è centralizzato come SVN" | FALSO — Git è distribuito (ogni clone è repository completo) |
| 10 | "Sistemi gestionali = solo agili" | FALSO — spesso plan-driven (requisiti stabili, normative) |
| 11 | "SECI = 5 modi conversione" | FALSO — 4 modi (Socialization, Externalization, Combination, Internalization) |
| 12 | "MLOps = solo deployment ML" | FALSO — copre tutto il ciclo (training, deploy, monitoring, drift) |
| 13 | "Black-box test usa codice" | FALSO — black-box ignora interno, usa specifiche; white-box usa codice |
| 14 | "Spiral Model non considera rischi" | FALSO — Spiral è risk-driven (analisi rischi a ogni iterazione) |
| 15 | "JAMstack = applicazioni dinamiche server-side" | FALSO — JAMstack = statico + API (markup pre-renderizzato) |