Analisi (ingegneria del software)
# Analisi (ingegneria del software)

In ingegneria del software, l'analisi è una delle fasi del ciclo di vita del software; essa ha lo scopo generale di chiarire, dettagliare e documentare le funzioni, i servizi e le prestazioni che devono essere offerti da un sistema software o programma, al fine di risolvere un dato problema nel contesto in cui esso dovrà operare. Le informazioni raccolte nella fase di analisi rappresentano il punto di partenza per la progettazione di un prodotto software e per l'intero processo della sua realizzazione, validazione e manutenzione.

## Descrizione

Se l'analisi sia una fase che viene conclusa una volta per tutte all'inizio del processo di realizzazione di un prodotto software, oppure un'attività che viene svolta iterativamente nel processo stesso, dipende dal particolare modello di ciclo di vita del software adottato nel progetto.

I modi e gli strumenti (sia concettuali che tecnici) con cui viene svolta l'analisi dipendono dalla metodologia scelta. Nel caso della analisi object-oriented, per esempio, gli strumenti possono includere notazioni come UML, che consente la descrizione del dominio applicativo, nonché di come il sistema deve interagire con tale dominio, in termini di classi, relazioni fra classi, e altri concetti tipici dello sviluppo orientato agli oggetti; e gli strumenti possono includere ambienti CASE (Computer Aided Software Engineering) specifici come Rational Rose.

L'attività di analisi è comunque complessa, e se ne possono distinguere diversi aspetti o sottoattività; a seconda della metodologia scelta e del modello di ciclo di vita del software usato come riferimento, tali sottoattività possono avere un'enfasi relativa differente (o addirittura non essere contemplate).

Esempi di sottoattività che si possono considerare parte dell'analisi in senso generale includono:

* la definizione del problema, che consiste nel comprendere a fondo il problema che il sistema da sviluppare è chiamato a risolvere;
* l'analisi di fattibilità ha lo scopo di stabilire se gli obiettivi che ci si pongono nello sviluppo del sistema siano ragionevoli e raggiungibili;
* l'analisi dei costi e benefici, che valuta preliminarmente la convenienza economica dello sviluppo del sistema software in esame, tenendo conto dei suoi costi previsti e dei benefici che può fornire ai suoi utenti;
* l'analisi del dominio, che consiste nel comprendere a fondo il contesto o dominio applicativo in cui il sistema dovrà agire;
* l'analisi dei requisiti, che consiste nello specificare dettagliatamente i servizi, le funzioni ed eventualmente le prestazioni richieste per il sistema; questa fase porta come minimo alla stesura della specifica dei requisiti, che può anche avere valenza contrattuale fra il committente del sistema e l'organizzazione che lo deve realizzare.
