Processi software
Definizione
In ingegneria, secondo l'ISO, un processo è un insieme di attività correlate e coese che trasformano ingressi in uscite, consumando risorse nel farlo. In particolare, un processo software (d'ora in avanti solo "processo") porta ad un prodotto software.
Anatomia
Ogni processo si divide in più attività. Ogni attività si divide in compiti. Ogni compito si può svolgere usando qualche tecnica, cioè una sorta di ricetta applicata agli strumenti disponibili. Per strumento s'intende un insieme di concetti e di metodi, con delle tecnologie di supporto.
Processi software, aziende e progetti
Distinguiamo le seguenti tre categorie principali di processi:
- standard di processo — riferimento di base generico usato come stile comune per lo svolgimento delle funzioni aziendali, pensato per una collettività di casi afferenti ad un certo dominio applicativo (quindi una sorta di template);
- processo definito — specializzazione dello standard di processo necessaria per adattarlo ad esigenze specifiche di progetto;
- processo di progetto — istanza di un processo definito che utilizza risorse aziendali per raggiungere obbiettivi prefissati (il processo viene calato nella realtà aziendale).
L'organizzazione aziendale si struttura verticalmente in settori (orientati alla specializzazione) e orizzontalmente in processi (che abbracciano più settori specializzati).
Esiste il processo perfetto? Esiste l'insieme ideale di processi? No: nessun progetto è identico a un altro, quindi i processi vanno selezionati e adattati in modo critico, in base al progetto e/o all'organizzazione a cui servono. Selezionare, adattare, applicare e migliorare (evolvere) i processi è compito degli amministratori di progetto.
I processi software, di per sé, non seguono un ordinamento. Le relazioni temporali tra essi sono fornite da un modello di ciclo di vita.
ISO/IEC 12207
Lo standard ISO/IEC 12207 è il più noto standard di processo. Esso divide i processi in tre famiglie.
- Processi primari:
- acquisizione (gestione dei propri sotto-fornitori[1], cioè di chi ci fornisce una componente del nostro prodotto);
- fornitura (gestione dei rapporti con il cliente — controparte dell'acquisizione);
- sviluppo — affrontato con approccio costruttivo, non correttivo; svolto anche tramite appalto esterno; non solo programmazione (che tra l'altro va affiancata dal testing)!
- gestione operativa (installazione ed erogazione dei prodotti);
- manutenzione (correzione, adattamento, evoluzione).
- Processi di supporto (delle specie di "sottoprocedure"):
- documentazione;
- gestione delle versioni e della configurazione;
- accertamento della qualità;
- qualifica: verifica e validazione ("V&V"), due processi distinti ma collegati;
- revisioni congiunte con il cliente;
- verifiche ispettive esterne;
- risoluzione dei problemi.
- Processi organizzativi (l'"ambiente" del sistema):
- gestione dei processi;
- gestione delle infrastrutture;
- miglioramento del processo;
- formazione del personale.
Un ingegnere del software sa fare qualsiasi processo tra i suddetti.
Organizzazione di processo
Per essere disciplinati si ha bisogno di una forma di standardizzazione, per "tenere alta" la qualità di un lavoro ripetitivo che rischia continuamente di degradare. Ecco perché un buon processo si auto-migliora, in modo continuo, secondo lo schema PDCA (ciclo di Deming):
- Plan: individuare obiettivi di miglioramento.
- Do: eseguire ciò che si è pianificato.
- Check: verificare se ha funzionato. Non è tanto un'ispezione quanto, piuttosto, un'analisi[2]; si studiano i risultati della fase precedente (do) e li si cofrontano con gli obiettivi individuati nella prima fase (plan).
- Act: agire per correggersi. Se la fase precedente (check) ha dimostrato che il piano (plan) implementato (do) è migliore rispetto agli standard precedenti, allora questo piano diventa il nuovo standard — la nuova baseline. Altrimenti, il vecchio standard in uso rimarrà la baseline.
Efficienza ed efficacia di un processo
Un buon esempio di valutazione dell'efficienza e dell'efficacia è la misurazione di questi due aspetti a livello di processo. Efficienza di un processo, attività o compito è il rapporto tra le risorse realmente consumate e quelle che si era previsto venissero consumate; efficacia di un processo, attività o compito è il rapporto tra i prodotti realmente ottenuti a partire dal processo e i prodotti che si volevano ottenere.