Ingegneria del Software: fasi di progettazione
Università martedì 27 novembre 2007 alle 11:47L’Ingegneria del Software è una branca dell’ingegneria che ha come oggetto di studio lo sviluppo delle migliori metodologie da utilizzare come metodo di sviluppo di sistemi software di ogni genere, a partire da un semplice sito web fino ad arrivare agli applicativi più complessi (ma nello stesso tempo di facile e comune utilizzo) come Text Editor o Sistemi Operativi.
L’ingegneria del software, a differenza di tutte le altre differenti branche dell’ingegneria, soffre di un grosso male, ma gode nello stesso tempo di alcuni benefici. Se il cliente potrà, in ogni momento dello sviluppo, modificare le proprie richieste (spesso stravolgendole), è anche vero che l’ingegneria del software è l’unica che permette di “uscire” con un prodotto non completo o non completamente funzionale: nessuno di voi comprerà mai un auto di cui non si assicura il funzionamento, come non si assicura il funzionamento completo di un prodotto software che, anche ora, state utilizzando sul vostro PC.
Anche se veramente poco utilizzate nella normale programmazione all’interno di team o poco numerosi o inesperti, le fasi studiate dall’ingegneria del software potrebbero migliorare notevolmente lo sviluppo di ogni applicativo o sistema web based. Si parla più comunemente di ciclo di vita del software.
Analisi dei requisiti
Di fronte alla richiesta di un cliente, è sempre opportuno verificare nei dettagli cosa l’utente vuole dall’applicativo, quali risultati vorrebbe ottenere dall’utilizzo dello stesso e quali caratteristiche e qualità si aspetta di trovare una volta che l’applicativo sarà completato. Per poter generare una lista di requisiti completa, è importante consultare anche gli stakeholders, gli utenti finali del sistema.
Al termine dell’analisi dei requisiti, i consigli dati dall’ingegneria del software sono quelli di produrre in output un documento di specifiche, un manuale utente di base (si, un manuale utente ancor prima di aver creato l’applicativo) e un piano di test di sistema sulle specifiche raccolte. Raccogliendo tutte le informazioni in documenti, eviterete di perdere dettagli importanti durante lo svolgimento delle fasi successive.
Progettazione (design)
Se la fase di Analisi dei requisiti potrebbe rispondere alla domanda “cosa deve/devo fare?“, la fase di design dell’applicativo si può specchiare nel quesito “come posso fare?“, come l’applicativo o progetto dovrà soddisfare tutti i requisiti raccolti.
Durante la fase di progettazione si delineano solamente gli aspetti di alto livello, generali e piuttosto astratti della programmazione: la fase si sviluppo (coding – trasformazione in codice) sarà successiva e inizierà al completamento della fase di progettazione.
Coding (sviluppo)
La fase di coding è, come accennato in precedenza, quella in cui si cominciano a scrivere le righe di codice che daranno vita all’applicativo. La fase di codifica del progetto si può spesso visualizzare, soprattutto quando il progetto ha una certa complessità e il team di sviluppo si divide i compiti, come unione di due sottofasi:
- fase di creazione di moduli base
- fase di integrazione dei moduli creati
La fase di creazione di moduli distinti permette di avere una migliore verificabilità delle singole porzioni di codice ottenendo così un applicativo più corretto e funzionale.
Nella fase di integrazione, invece, i blocchi (detti stub) che sono stati creati utilizzando richieste o generando output fittizi, devono essere uniti l’un l’altro per dar vita al progetto completo.
Test (o collaudo)
È in questa fase che vengono eseguiti i test di conformità del progetto e la verifica del rispetto delle specifiche iniziali. Il documento prodotto già durante la raccolta dei requisiti si rivela così molto utile per permettere allo sviluppatore di controllare nei dettagli che sia correttamente possibile fare quanto richiesto inizialmente dal cliente.
Anche la fase di test si può scomporre in due diverse sottofasi:
- test di sistema (o test funzionali)
- test di accettazione
I test di sistema sono i test generali, ovvero tutti quei test che possono confermare la correttezza del sistema software creato.
I test di accettazione, invece, sono tutti quei test che vengono fatti per verificare che tutto sia conforme alle specifiche fornite dal cliente.
Ma spesso il cliente non è un singolo individuo, ma il progetto è fonte di un’idea della software-house stessa. In questo la fase di accettazione vedrà due distinte sottofasi di test: Alfa Test e Beta Test.
Gli Alfa Test vengono effettuati solitamente all’interno dell’azienda produttrice e vengono fatti utilizzare da persone che rispecchiano l’utente finale del sistema; la versione beta di un’applicativo, viene invece rilasciata ad un gruppo più esteso di utenti, solitamente in versione gratuita, ma con l’obbligo di riportare alla casa produttrice l’elenco degli errori trovati durante il normale utilizzo.
Manutenzione
L’ultima fase di cui l’ingegneria del software si occupa è la fase di manutenzione. Questo momento del ciclo di vita di un prodotto è solitamente il momento più lungo. Durante questa fase vengono rilasciati tutti gli aggiornamenti per migliorare la stabilità del sistema, correggendone errori o adattandolo per permettere il supporto di nuove piattaforme operative, così come possono essere aggiunte funzionalità non previste nella prima versione di uscita.
La lunga durata di questa fase incide sui costi totali del progetto per quasi il 60%: ogni modifica, aggiunta o miglioramento prevede che venga rieseguita l’intera fase di testing.
27 novembre 2007 alle 12:32
Il modello tradizionale del ciclo di vita del software che hai perfettamente esposto è ormai superato. Oggi si usano modelli più efficienti quali l’Agile Programming e l’Extreme Programming.
27 novembre 2007 alle 12:59
Grazie Malex! Sto trascrivendo gli appunti per la preparazione all’esame…e il prossimo post che avrei scritto era proprio sui modelli di programmazione.
Tra l’altro adoro l’eXtreme Programming!!!