Ingegneria del software: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Storia: esteso il paragrafo
Metodi di analisi: Modificato pesantemente il paragrafo che ora assume il nome di "Ciclo di vita di un software", integrate parti importanti del paragrafo esterno omonimo
Riga 34:
Vengono identificati differenti [[ciclo di vita del software |cicli di vita del software]] ovvero diversi processi che possono essere attualizzati da team per giungere ad un risultato comune. Ognuno di questi differenti processi identifica una serie di passi chiave da seguire per realizzare un prodotto sofware secondo uno stile di realizzazione differente per raggiungere differenti obiettivi.
 
== MetodiCiclo di analisivita di un Software ==
 
NumeroseEsistono sono lenumerose metodologie proposte per guidare l’attività dei gruppi di lavoro per lo sviluppo di un [[software|prodotto software]]. Queste sequenziano e dettagliano le attività da eseguire perin modo da portare a termine con successo il [[Ciclo di vita del software|ciclo di vita]] di un [[software|prodotto software]]. L’applicazione''E' possibile automatizzare l’applicazione di queste metodologie è in parte automatizzata dautilizzando una famiglia di strumenti nota come [[CASE Tool]] ('''C'''omputer '''A'''ided '''S'''oftware '''E'''ngineering).''
 
A grandi linee tutte questeQueste metodologie suddividono il [[Ciclo di vita deldi un software|ciclo di vita]] in 57 macro ''attività'' ben distinte e successive: [[analisi dei requisiti]], [[progetto]]identificate ([[progettazione|design]],anche nellacome dizione anglosassone), [[programmazione]] o [[programmazione|codifica]] ([[programmazione|programming]]), [[integrazione]] e [[test]]. In funzionefasi della complessitàrealizzazione deldi problemaun e del prodotto finale, queste fasi possono essere ulteriormente suddivise.software:
 
In generale durante l’[[analisi dei requisiti]] si cerca di capire quali debbano essere le carateristiche del software che si vuole sviluppare, e di ''formalizzarle'' in termini di funzionalità e requisiti tecnici. Questa formalizzazione è passata ai responsabili della [[progettazione]] per individuare gli [[algoritmi]] e le [[struttura dati|strutture dati]] utili alla soluzione del problema. Nella successiva fase di [[programmazione]], le soluzioni così individuate sono implementate utilizzando un [[linguaggio di programmazione]]. In funzione della complessità del prodotto finale, la [[programmazione]] può essere suddivisa tra soggetti o gruppi di lavoro distinti, ciascuno responsabile della realizzazione di una parte o [[modulo]] del [[software|prodotto software]] atteso. In questo caso è necessaria una fase di [[integrazione]] dei [[moduli]] per avere il prodotto finale. Al termine è previsto il [[test]] del prodotto prima del [[rilascio]].
 
*[[Definizione del problema]]: in tale fase un cliente espone il proprio problema, da risolvere in questo caso sviluppando un software. Bisogna capire cosa vuole esattamente il cliente, cercando di esprimersi come lui. E' una fase piuttosto delicata in cui si richiede la comprensione del problema. <br> Bisogna quindi documentarsi sulle problematiche da voler risolvere. Non si procede alla fase successiva se il problema non risulta chiaro, in questo caso tutto quello che richiede il cliente dev'essere conosciuto, dunque non devono esserci ambiguità.<br>Svolgendo questa fase si svilupperà una documentazione che riporterà gli obiettivi da raggiungere e le costrinzioni che vincolano il progetto;
Ogni attività svolta sul prodotto successivamente al rilascio è identificata come [[manutenzione]]. La [[manutenzione]] può essere [[manutenzione correttiva|correttiva]] se è finalizzata alla correzione di malfuzionamenti o [[manutenzione evolutiva|evolutiva]] se mira a realizzare nuove funzioni.
 
 
In funzione delle relazioni organizzative tra le fasi, dal punto di vista metodologico si riconoscono due cicli di vita, illustrati nel paragrafo [[Ciclo di vita del software]]
*[[Analisi dei requisiti]]: E' una fase in qui si elencano i ''servizi'', cioè l'elenco dei compiti che deve svolgere il software, bisogna conoscere con quali strumenti lo si realizzerà, rispettando il budget, le scadenze e le diverse versioni da sviluppare, inoltre si elenca il personale da impiegare prendendo atto di come si procederà nelle successive fasi dello sviluppo del software.<br> In tale fase viene sviluppata una documentazione riferita ai requisiti del software ([[Software Require Specify]]) da cui deriverà il contratto da firmare con il cliente. Bisogna a tal proposito stilare una documentazione chiara in quanto se ci fossero ambiguità il cliente potrebbe chiedere più dello stabilito;
 
 
''Queste due fasi potrebbero comporre un'unica fase, questo dipende dal progetto;''
 
 
*[[Specifiche del progetto]]: tale fase si occupa di alcuni dettagli tecnici specificando il funzionamento del software. E' una fase di preparazione verso la fase successiva e genera una documentazione di specifiche;
 
 
*[[Progettazione]]: In questa fase si definiscono le strutture dati, gli algoritmi, i moduli che compongono il software, sviluppando il progetto con l'uso di strumenti come lo pseudocodice;
 
 
''E' possibile che la fase delle specifiche venga inglobata nell'analisi dei requisiti o nella progettazione, tutto ciò dipende dal progetto''
 
 
*[[Programmazione]] o [[programmazione|codifica]] ([[programmazione|programming]]): Questa è la fase in cui i requisiti vengono implementati. La codifica viene ovviamente documentata;
 
 
*[[Testing]]: In tale fase si svolgono delle determinate verifiche sul software, cercando di testare se tutto quello che si è prodotto funzioni a dovere.<br> Si svolge dunque un piano di collaudo che si concluderà ritornando alla fase di codifica se si dovessero riscontrare problemi. Con lo scopo di rendere questa fase più semplice la si scompone in diversi gruppi di test:
 
**Test unitari;
**Test d'integrazione;
**Test funzionali;
**Test di performance;
**Test di accettazione;
**Test d'istallazione;
 
*[[Mantenimento]]: In questa fase si cerca di mantenere il software "vivo", difatti si procede alla correzione di bug, si potrebbe procedere all'integrazione di nuove funzionalità al software o anche voler ottimizzare le performance del software.<br> La correzione di un bug comporterà il ripercorrere alcuni dei test effettuati nella fase precedente che in questo caso assumono il nome di ''test di regressione'';
 
 
In funzione della complessità del problema e del prodotto finale, queste fasi possono essere ulteriormente suddivise.