Panoramica sullo sviluppo

I prodotti software moderni sono in genere costituiti da una serie di componenti che interagiscono tra loro per consentire l'esecuzione delle attività necessarie per implementare l'applicazione. Lo sviluppo concerne la creazione di questi componenti tramite la scrittura di codice sorgente in uno dei linguaggi disponibili. Il codice definisce le azioni fondamentali di base che verranno eseguite dal computer per raggiungere il risultato finale specificato nella progettazione dell'applicazione. Queste azioni posso spaziare dalla semplice aggiunta di numeri all'impostazione di valori degli oggetti all'interno dei componenti, fino all'esecuzione di varie parti di codice in base a un confronto dei valori delle variabili definite nel codice. Potrebbe comportare inoltre calcoli matematici più complessi all'interno del codice e l'applicazione di operazioni logiche per generare i risultati richiesti. Altre attività coinvolte nello sviluppo comprendono il debug del codice per individuare e correggere gli errori, monitoraggio del lavoro mediante metodologie formali, utilizzo di archivi di codice condiviso e partecipazione nelle riunioni relative alla progettazione, alla pianificazione e all'analisi dei suggerimenti e del codice.

In questo documento vengono descritte le attività di sviluppo eseguite nel contesto del ciclo di vita di creazione del software e consentirà di comprendere le responsabilità in termini di sviluppo, gli obiettivi più ampi e i processi eseguiti. Nella Figura 1 è illustrata una panoramica del ciclo di vita tipico per lo sviluppo di software.

Ciclo di vita dello sviluppo software

Figura 1. Il ciclo di vita dello sviluppo software

Il processo di creazione del software comprende una vasta gamma di attività; dalla progettazione iniziale fino alla distribuzione finale e all'accettazione da parte del cliente. Il compito principale durante lo sviluppo consiste nel tradurre il progetto iniziale in codice funzionante mediante strumenti quali Microsoft Visual Studio e linguaggi quali Visual Basic, C# e JavaScript. Tuttavia, solitamente è richiesto un certo impegno nell'intero ciclo di vita di sviluppo del software, specialmente quando si lavora in autonomia o in un gruppo molto piccolo (nel qual caso ci si troverà a svolgere spesso una combinazione di attività, tra cui sviluppo, test e progettazione). Nelle sezioni seguenti vengono descritte le attività principali di sviluppo all'interno del ciclo di vita del software.

Analisi dell'input del cliente e degli obiettivi del progetto

La prima attività nella creazione di un'applicazione software consiste nell'acquisire informazioni e creare il progetto di alto livello in base alle esigenze del cliente. Poiché il progetto di alto livello viene convertito in documentazione più specifica e più tecnica, è necessario un input tecnico per fornire i commenti e i suggerimenti relativi alle capacità dell'hardware e l'implementazione pratica del progetto. Ciò consente di evitare sorprese in futuro e garantisce che il progetto finale del software possa essere implementato in tempi ragionevoli e nelle risorse hardware e infrastrutturali disponibili.

Scrittura del codice per i componenti

Si tratta dell'attività principale dello sviluppo alla base dell'intero processo di creazione del software. La persona che crea il codice utilizzerà una specifica o elenco di requisiti che descrivono le funzionalità di un componente o di una sezione dell'applicazione, i risultati che deve generare e il modo in cui comunicherà con altre parti dell'applicazione. Tale specifica potrebbe presentarsi in diverse forme tra cui modelli scritti in un linguaggio di modellazione standard, descrizioni di funzionalità o semplici diagrammi in una lavagna.

Durante lo sviluppo, le funzioni del linguaggio di programmazione prescelto vengono utilizzate per creare file del codice sorgente contenenti la serie di istruzioni richieste che dovranno essere eseguite dal computer. Sostanzialmente, il codice accetterà una serie di input, li elaborerà e visualizzerà l'output. A tale scopo, è possibile che utilizzi altri componenti e funzioni all'interno del software nonché librerie di codice e funzioni scritte dal team o ottenute da fornitori terzi. Gli strumenti di sviluppo e gli ambienti utilizzati, ad esempio Microsoft Visual Studio (mostrato nella Figura 2), consentono di scrivere il codice in modo più semplice suggerendo i nomi degli oggetti e delle variabili, controllando la sintassi per garantire la corretta compilazione e indicando gli errori.

Ambiente di sviluppo di Visual Studio 2010

Figura 2. Ambiente di sviluppo di Microsoft Visual Studio 2010

Revisione del codice con i membri del team

Per qualsiasi sezione del codice scritta dagli sviluppatori, esiste raramente una sola soluzione corretta. Le competenze di uno sviluppatore consistono nell'utilizzare le funzionalità e le capacità dei linguaggi di codice per creare il codice che effettua l'attività richiesta e potrebbero esistere diversi modi per raggiungere lo scopo. È possibile che sviluppatori diversi utilizzino approcci leggermente diversi e combinazioni differenti di istruzioni di codice.

La revisione del codice da parte di colleghi e responsabili assolve due funzioni fondamentali. In primo luogo, integra i punti di vista e le opinioni di diversi sviluppatori che potrebbero offrire approcci alternativi, individuare errori passati inosservati o suggerire miglioramenti al codice, al fine di ottimizzare l'efficienza e le prestazioni del codice stesso. In secondo lungo, consente di ampliare le conoscenze di tutti i membri del team grazie alla condivisione delle competenze, il che migliora il rendimento dell'interno team nel tempo.

Compilazione e test del codice

A seconda del linguaggio di codice utilizzato, lo sviluppo include la compilazione del codice sorgente per convertire quest'ultimo in un formato eseguibile dal computer. Solitamente, tale compito è demandato agli strumenti e agli ambienti di sviluppo. Un membro del team (solitamente l'autore iniziale e successivamente i tester) esegue quindi il codice per verificarne il corretto funzionamento. Se il team utilizza un approccio di tipo TDD (Test Driven Design), un membro del team avrà creato in precedenza degli unit test che possono essere eseguiti per verificare il corretto funzionamento e la generazione dei risultati richiesti da parte del codice.

La compilazione, l'esecuzione e il test del codice costituiscono un processo ripetitivo che ha luogo durante la creazione del codice. Solitamente viene prima creato il codice di base essenziale per testare il progetto, verificarne la corretta compilazione ed esecuzione e successivamente vengono aggiunte parti e aggiornamenti al codice per ottimizzare le prestazioni e l'efficienza nonché per verificare che vengano prodotti i risultati corretti.

Archiviazione e aggiornamento dell'archivio di codice

Nella maggior parte dei progetti di medie e grandi dimensioni viene utilizzato un sistema di archiviazione del codice e delle informazioni del team, quale TFS (Team Foundation Server) per archiviare il codice, i documenti e le informazioni relative al progetto. Lo sviluppatore archivia il codice creato per integrarlo nel progetto principale per essere compilato nella soluzione completa durante le build regolari. Solitamente le build vengono create quotidianamente e il team di test utilizza la nuova build ogni giorno per verificare che gli errori esistenti segnalati siano stati risolti e per individuare eventuali nuovi errori.

L'archivio solitamente comprenderà elementi di lavoro e report. Lo sviluppatore aggiorna gli elementi di lavoro relativi al codice creato, ne indica gli errori che sono stati risolti e aggiunge altre informazioni relative all'attività che torneranno utili ad altri membri del team, tra cui il team di test e il team di documentazione. Il team potrà eseguire report basati su tali elementi di lavoro per monitorare lo stato di avanzamento del progetto e rilevare eventuali problemi in corso. Nella Figura 3 viene mostrato Microsoft Visual Studio Team Foundation Server.

Creazione di report relativi al codice e agli elementi di lavoro di Team Foundation Server 

Figura 3, Creazione di report relativi al codice e agli elementi di lavoro di Microsoft Team Foundation Server

Implementazione di modifiche, debug e correzione di errori

Se l'esito del test comprende la segnalazione di errori nel codice, lo sviluppatore dovrà ritornare nel codice, trovare la causa degli errori e modificarlo per risolverli. Il debug è l'attività di individuazione dell'origine degli errori, che potrebbero verificarsi in qualsiasi posizione del codice ed essere rilevati solo durante il test. Il debug viene talvolta considerato una sorta di "arte esoterica" poiché richiede esperienza nonché un approccio logico specialmente se l'errore si verifica solo in modo intermittente o se è difficile da riprodurre.

Tuttavia, gli strumenti e gli ambienti di sviluppo moderni, ad esempio Visual Studio, comprendono funzionalità che consentono ai membri del team di visualizzare il codice e di esaminare i valori delle variabili nonché il modo in cui queste ultime cambiano. Ciò rende l'individuazione degli errori un processo molto più semplice e logico. Altri strumenti e funzionalità che forniscono un elenco di procedure del codice in esecuzione e il modo in cui il vengono gestite dal processore del computer, consentono al team di individuare gli errori. Inoltre, il team può utilizzare della strumentazione (ad esempio codice per scrivere gli eventi in file di registro) che consentirà di monitorare il codice durante l'esecuzione e di individuare gli errori.

È inoltre usanza comune durante il test di accettazione che il cliente richieda delle modifiche alle funzionalità dell'applicazione per ottimizzare il software esattamente in base alle proprie esigenze. Lo sviluppatore implementerà tali modifiche, solitamente in base alla revisione dei requisiti e a uno studio dettagliato delle conseguenze delle modifiche sul resto del software. Un progetto iniziale ben strutturato che distingua correttamente le responsabilità di ciascun componente semplificherà l'implementazione delle modifiche senza influire su altre parti dell'applicazione.

Il ciclo di vita di sviluppo del software è un processo ripetitivo e molte delle attività descritte vengono ripetute durante lo sviluppo. Ad esempio, durante lo sviluppo il team potrebbe creare diverse versioni con parti completate del software o componenti e migliorarli o modificarli in base ai risultati dei test e ai suggerimenti del cliente.

Lavorare all'interno di un team

Alcuni sviluppatori lavorano in autonomia o in piccoli gruppi, mentre altri lavorano in grossi team organizzati. In autonomia o in un piccolo team, lo sviluppatore potrebbe essere responsabile di tutte le attività associate al ciclo di vita di sviluppo, tra cui la progettazione, il test, la distribuzione e la manutenzione. Nei team di grosse dimensioni solitamente sono presenti gruppi separati responsabili della progettazione, del test, della distribuzione e della manutenzione; pertanto, lo sviluppatore si concentrerà sull'attività principale di scrittura del codice.

I team di dimensioni più grandi solitamente lavorano in modo strutturato al fine di gestire e monitorare il ciclo di vita e il processo di sviluppo. Esistono diversi approcci alla gestione dello sviluppo del software in un team, tra cui i ciclo di progettazione tradizionale basato su attività pianificate che si susseguono (noto come approccio "a cascata") e l'approccio più orientato ai commenti e ai suggerimenti in cui la pianificazione avviene in parallelo alle attività di sviluppo in base all'input regolare del cliente (noto come approccio "flessibile"). Nella Figura 4 vengono illustrati questi due approcci principali allo sviluppo del software.

processi di sviluppo "a cascata" e "flessibili" 

Figura 4. Confronto tra i processi di sviluppo "a cascata" e "flessibili"

A prescindere dall'approccio di sviluppo utilizzato, una buona comunicazione tra i membri del team e i responsabili di progetto è essenziale. Benché molti team si trovino nella stessa sede, è sempre più comune che nei team siano compresi membri geograficamente dislocati in un'altra sede e che per le riunioni vengano utilizzati strumenti per conferenze telefoniche e video. Riunioni regolari a cui partecipano tutti i membri del team, tra cui sviluppatori, progettisti software, tester e responsabili di progetto vengono utilizzate per discutere sullo stato di avanzamento, pianificare le attività e ricevere i commenti e i suggerimenti da altri membri del team e dai clienti. Ciò garantisce che gli sviluppatori rimangano costantemente informati sull'inevitabile evoluzione del software e possano agire in base ai commenti e suggerimenti ricevuti che potrebbero influire sull'implementazione del software.

Lo sviluppo di software è un lavoro interessante se non entusiasmante che può rivelarsi particolarmente gratificante. Richiede un approccio logico e strutturato e comporta delle attività non correlate al semplice apprendimento di linguaggi di codice. C'è sempre qualcosa di nuovo da apprendere, nuovi requisiti che richiedono attività di ricerca e nuove tecnologie da sperimentare. È gratificante vedere l'applicazione software finale in funzione e sapere di aver preso parte allo sviluppo. Il software crea il mondo moderno e, in qualità di sviluppatore di software, sarà possibile controllare il futuro.