La qualità di un sistema sw è largamente determinata dalla qualità del processo usato per la sua produzione e manutenzione.
Importante poter accertare la qualità di un processo => necessità di appropriati modelli di qualità di processo.
Modelli di questo tipo sono detti modelli di accertamento e miglioramento: consentono di valutare la CAPACITA’ e la MATURITA’ di un processo di produzione e manutenzione del software e sono capaci di guidare il loro miglioramento.
CMM sta letteralmente per ‘Modello di Maturità delle Capacità Software’.
Il CMM è utilizzato per valutare e migliorare la capability di un processo nell’eseguire tale disciplina.
CAPABILITY
Adeguatezza di un processo rispetto alle attività produttive dell’azienda.
MATURITY
Grado di consolidamento di un processo all’interno dell’Azienda.
É un modo per valutare fino a che punto I processi seguiti da una organizzazione seguono le migliori regole pratiche del settore (le best practice).
Fornendo un metodo per la valutazione, è possibile anche identificare le aree di debolezza del processo che dovranno essere migliorate.
Ci sono stati negli anni varie proposte di modelli per la valutazione ed il miglioramento dei processi, ma il CMM proposto dal SEI resta uno dei modelli fondamentali.
Nel 1984, negli USA il Department of Defense (DoD) stanco dei frequenti insuccessi nello sviluppo software, fece richiesta alla Carnegie Mellon University di allestire un sistema per valutare le capacità dei fornitori di portare a termine con successo il completamento dei progetti.
Sotto la direzione di W. Humphrey, il SEI (Software Engineering Institute) iniziò così a sviluppare un modello di miglioramento dei processi che nell’agosto del 1991 portò al rilascio dell’ormai noto Capability Maturity Model (CMM) for Software [Paulk M.C, Curtis, et.al. Capability Maturity Model version 1.1, IEEE Software 10 (4), pp. 18-27].
Inizialmente si svilupparono diverse tipologie di CMM, applicabili a diverse discipline ingegneristiche.
Verso la fine degli anni ‘90, sempre sponsorizzato dal DoD, il SEI mise a punto il progetto CMMI (Capability Maturity Model Integration) che andasse ad integrare gli aspetti diversi dei vari CMM in un unico modello.
L’obiettivo primario del progetto era quello di fornire supporto nell’ottimizzazione dei processi utilizzati per sviluppare sistemi e prodotti, riducendo la ridondanza, la complessità e i costi risultanti dall’uso di più capability maturity models.
L’output scaturito del CMMI consta di una suite di prodotti di supporto al coordinamento di attività interdisciplinari richieste per metter su con successo un progetto.
È un meta-modello di processo che individua un insieme di funzionalità di ingegneria che dovrebbero essere presenti man mano che le organizzazioni raggiungono diversi livelli di capacità e maturità del processo.
Per ottenere tali capacità, una organizzazione dovrebbe sviluppare un modello di processo conforme alle indicazioni del CMMI.
Process Areas
Sono state identificate 24 differenti aree di processo, organizzate in 4 gruppi e rilevanti al fine dell’individuazione della capacità del processo e della possibilità di migliorarlo.
Goals
I Goals rappresentano gli obiettivi organizzativi che si vorrebbero ottenere, intesi come stato desiderato da raggiungere per una organizzazione.
Ogni process area ha i suoi obiettivi associati.
Practices
Le Practices (o norme) descrivono metodi e tecniche per raggiungere un goal. Si distinguono in norme generiche e specifiche.
Una organizzazione che intenda adottare il CMMI viene valutata formalmente in ciascuna area del processo sulla base di 6 livelli di capacità, verificando che raggiunga gli obiettivi associati a ciascuna area.
Esistono due modalità di applicazione del modello CMMI
Nel primo caso si cerca di dare una valutazione generale della maturità di tutto il processo di sviluppo, secondo una scala composta di 5 livelli.
Per poter soddisfare un certo livello, l’organizzazione deve garantire il soddisfacimento di determinati obiettivi.
Nel secondo caso si cerca di dare una valutazione (su 5 livelli) ad ogni aspetto del processo. La valutazione globale del processo è una combinazione delle valutazioni degli elementi.
Viene dato un giudizio globale sulla maturità dell’intero processo di sviluppo software, secondo una scala a 5 valori (talvolta 6)
É paragonabile al CMM software. Ogni livello di maturità ha le proprie Aree di processo e Goals.
Per raggiungere un dato livello di maturità occorre, in tutte le aree di processo richieste per quel livello, aver raggiunto almeno un certo livello di capacità.
Ad esempio, le aree di processo associate al livello gestito (livello 2) sono 7:
Un vantaggio è che il CMMI a stadi è perfettamente compatibile col CMM Software.
Esso inoltre definisce una chiara via di miglioramento per le organizzazioni, spostandosi da un livello all’altro.
Uno svantaggio è che in una organizzazione può essere più opportuno introdurre obiettivi e norme dei livelli più alti, prima di quelli dei livelli più bassi: in tal caso, l’organizzazione riceverà una valutazione complessiva di più basso livello (nonostante le norme introdotte).
Diversamente dal modello a stadi, non classifica una organizzazione secondo livelli discreti.
La valutazione della maturità non avviene prendendo in considerazione l’intero processo nel suo complesso, ma cercando di dare un giudizio di maturità ad ogni sottoprocesso che è possibile individuare nell’ambito del processo complessivo.
Si ottiene un valore di maturità per ogni area prevista dal CMMI.
Uno dei vantaggi del CMMI continuo è che le organizzazioni possono scegliere i processi da migliorare secondo le proprie necessità ed i requisiti.
Ad esempio, una organizzazione può aver bisogno di migliorare i processi a diretto contatto con i clienti, mentre un’altra può aver bisogno di migliorare quelli di gestione della configurazione e della validazione.
L’organizzazione può anche sviluppare profili target ed effettivi, dove il profilo target riflette il livello di maturità che si vuole raggiungere per una data area di processo.
2. Ciclo di Vita e Processi Software
3. Processi per lo sviluppo rapido del software
4. Sviluppo Agile del Software
5. Test Driven Development (TDD)
7. Component Based Software Engineering (CBSE): Generalità
8. Component Based Software Engineering (CBSE): Il processo di svi...
9. Ingegneria del Software orientato ai Servizi
10. Ingegnerizzazione dei Servizi
11. I Processi di Manutenzione del Software
12. Reengineering, Refactoring e Reverse Engineering del Software
13. Verifica e Convalida del Software. Richiami e concetti di base ...
14. Tecniche di Testing Dinamico
15. Testing di Sistemi Object Oriented
16. Automazione del testing e Analisi Mutazionale
17. Tecniche di Analisi Statica del codice e il Debugging
18. Stima dei costi nei progetti Software
19. Il Modello COCOMO per la stima dei costi Software – La gestio...
20. Gestione e Miglioramento dei Processi di Produzione del Softwar...
21. La Valutazione della Qualità dei Processi Software – Il Capa...