Ingegneria del software: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Dommac (discussione | contributi)
Riga 7:
 
A grandi linee tutte queste metodologie suddividono il [[ciclo di vita]] in 5 macro ''attività'' ben distinte e successive: [[analisi dei requisiti]], [[pregetto]] ([[progettazione|design]], nella dizione anglosassone), [[programmazione]] o [[programmazione|codifica]] ([[programmazione|programming]]), [[integrazione]] e [[test]]. In funzione della complessità del problema e del prodotto finale, queste fasi possono essere ulteriormente suddivise.
 
 
In generale durante l’[[analisi]] si ''formalizza il problema'' in termini di funzionalità e requisiti tecnici. Questa formalizzazione è passata ai responsabili della [[progettazione]] per individuare gli [[algoritmi]] e le [[strutture dati]] utili alla soluzione del problema. Nella successiva fase di [[programmazione]], le soluzioni così individuate sono implementate utilizzando un [[linguaggio di programmazione]]. In funzinoe 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]].
Riga 13 ⟶ 12:
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 nei prossimi paragrafi:
=== Ciclo di vita classico o water-fall (cascata) ===
*ciclo di vita a cascata
*ciclo di vita a spirale
 
=== Ciclo di vita classicoa o water-fall (cascata) ===
A grandi linee, il '''ciclo di vita a cascata''' (''waterfall'' nella dizione anglosassone) a volte noto anche come classico, prevede che le attività vengano svolte in modo ''strettamente sequenziale''.
 
In generale durante l’[[analisi]] si formalizzano tutti i [[requisiti utente]]. Questa formalizzazione é passata alla [[progettazione]] per la sua soluzione che, nella successiva fase di [[programmazione|codifica]], é implementata in un [[linguaggio di programmazione]]. Infine si effettua l’[[integrazione]] ed il [[test]] del [[prodotto software|prodotto]] prima del [[rilascio]].
 
Così semplificato, il ciclo di vita classico può essere rappresentato come:
 
[[Immagine:ciclo_di_vita_a_cascata.jpg]]
 
da cui il richiamo alla cascata che troviamo nel nome.
 
A titolo di esempio, consideriamo il ciclo di vita definito con le [[MIL-STD|MIL-STD-2167]] da parte dell’autorevole [[DoD]] ([[Department of Defense]], il Ministero della Difesa Americano) per il linguaggio [[ADA]] (altro prodotto del DoD).
 
Le [[MIL-STD|MIL-STD-2167]] dividono il ciclo di vita del software nelle seguenti 6 macro attività:
* '''ANALISI''':
**''Analisi dei requisiti'': definisce cosa viene richiesto in termine di funzioni, senza specificare come esse devono essere realizzate
**''Progetto preliminare'': segue i requisiti, sviluppa un approccio al software che comprende anche modelli matematici, diagrammi di flusso funzionali e procedure di collaudo. In questa fase si definiscono la struttura generale e le operazioni del sistema, indicando anche le relazioni tra i principali blocchi funzionali (moduli)
*'''PROGETTAZIONE''':
**''Progetto esecutivo'': effettiva scomposizione gerarchica e dettagliata di tali moduli; questa scomposizione continua fino a che un’ulteriore scomposizione porterebbe al codice del programma
*'''IMPLEMENTAZIONE''':
**''Codifica e verifica'': scrittura e verifica dei programmi partendo dal progetto esecutivo e utilizzando le procedure di verifica
**''Computer Software Code'' (CSC): integrazione e verifica delle unità comprese nei singoli sottosistemi
**''Convalida dell’integrazione'' del CSC
 
Il maggior pregio di questo metodo di lavoro è certamente la semplificazione del controllo dell’andamento del progetto tramite la suddivisione del ciclo di vita in fasi successive ben definite. Le diverse metodologie che adottano questo ciclo di vita si distinguono essenzialmente per la suddivisione e specificazione delle fasi in sottofasi più elementari, nella definizione di standard di documentazione e nella individuazione di momenti di verifica al termine di ciascuna attività ('''milestone''').
Per ottimizzare il ciclo di vita, la scomposizione delle fasi in sottofasi persegue due obiettivi:
* assegnare a ciascuna fase la soluzione di problematiche specifiche
* rendere, per quanto possibile, le fasi indipendenti allo scopo di poterne parallelizzare le attività
 
Benché l’adozione di questi principi appaia estremamente produttiva, la loro applicazione pratica ha come effetto collaterale, soprattutto per i progetti di grandi dimensioni, un pericoloso scollamento fra le diverse attività, sia per le difficoltà di coordinamento che per la difformità delle metodologie e dei formalismi specialistici adottati.
Ad esempio, normalmente l’individuazione delle [[strutture dati]] e delle [[funzionalità]] del [[sistema]] sono affrontate con metodologie diverse e, soprattutto per i progetti di grandi dimensioni, contemporaneamente e separatamente da gruppi di lavoro differenti. Nel primo caso i risultati sono formalizzati con uno [[Schema Entità-Relazione]] (ER o [[Schema Entità-Relazione|Entity-Relationship diagram]] nella dizione anglosassone) nel secondo con un metodo di [[scomposizione funzionale]]. Solo quando queste due attività terminano viene avviata una ulteriore attività di armonizzazione dei rispettivi risultati.
Un ulteriore problema di questa impostazione deriva dalla necessità di terminare completamente tutta la fase di [[analisi]] e [[progettazione]] dell’applicazione per cominciare la [[programmazione]] e quindi verificarne sul campo le conclusioni.
 
 
=== Ciclo di vita object oriented o a spirale ===
 
 
=== Ciclo di vita object oriented o a spirale ===
 
[[Categoria:Informatica]]