Ispezione del software
# Ispezione del software

In ingegneria del software, per ispezione si intende la revisione formale da parte di colleghi di pari livello di un prodotto del ciclo di vita del software con lo scopo di trovarne i difetti.

La prima formalizzazione delle ispezioni è dovuta a Michael Fagan che le ha impiegate a lungo all'interno dell'IBM.

## Descrizione

Possono essere soggetti a ispezione tutti i prodotti del ciclo di vita del software, cioè:

* La specifica dei requisiti
* La documentazione di progetto
* Il codice sorgente
* Il piano di collaudo
* I sorgenti dei programmi di collaudo automatizzato
* Il manuale utente

Normalmente l'ispezione consiste in queste fasi:

* Quando uno sviluppatore ha completato un prodotto, lo consegna al capo progetto.
* Planning - Il capo progetto sceglie uno o due altri sviluppatori dello stesso livello dell'autore, e li incarica di ispezionare tale prodotto.
* Preparation - Gli ispettori leggono il prodotto, e annotano i difetti riscontrati.
* Meeting - Gli ispettori e l'autore si riuniscono alla presenza di un moderatore, e discutono i difetti riscontrati, fino a ottenere una versione condivisa.
* Rework - In base ai difetti trovati, l'autore rimette mano al prodotto e si itera il procedimento.
* Se il prodotto da ispezionare è una nuova versione di un prodotto già ispezionato, il documento revisionato dagli ispettori evidenzia le parti nuove o modificate, e contiene anche la versione precedente di tali parti.

Gli ispettori normalmente non sono professionisti dell'ispezione, bensì ciclicamente ogni sviluppatore può essere autore o ispettore. Il moderatore normalmente è uno sviluppatore senior o il capo progetto, ma non un dirigente amministrativo. I dirigenti non intervengono nelle ispezioni, ma ne vengono informati con un rapporto conclusivo.

A seconda della dimensione dell'organizzazione, le ispezioni possono essere più o meno formali. Nelle ispezioni più formali si compilano dei moduli prestampati.

I vantaggi delle ispezioni sono i seguenti:

* I difetti vengono trovati precocemente, e questo comporta un risparmio di tempo per le fasi successive dello sviluppo. Questo è il vantaggio principale.
* I prodotti vengono uniformati stilisticamente, diventando un prodotto collettivo invece che individuale.
* Gli ispettori imparano il software che ispezionano, e quindi successivamente saranno in grado di modificarlo.

Gli svantaggi delle ispezioni sono i seguenti:

* Se c'è un solo sviluppatore non è possibile eseguire un'ispezione.
* Il tempo dedicato alle ispezioni è costoso.
* Mentre un prodotto è sotto ispezione, è pressoché impossibile apportarvi delle modifiche.
