30 Marzo 2022

Sviluppo Software: cos’è e come funziona?

Home / News / Wavepedia / Sviluppo Software: cos’è e come funziona?

Autore

Team di Wave Informatica

Categoria

Wavepedia

Tags

software

Lo Sviluppo Software è un procedimento complesso e articolato, che comprende varie fasi, metodologie, attività, e che coinvolge diverse professionalità.

In questa guida troverai informazioni su tutti gli aspetti più importanti dello Sviluppo Software, dalle metodologie di sviluppo alle fasi del suo ciclo di vita.

Cos’è il Software?

Il Software, definito anche programma informatico o supporto logico, è un insieme di componenti, procedure e istruzioni che compongono un sistema di elaborazione dati.

A differenza dell’hardware, dunque, il Software è la parte immateriale, non tangibile di un sistema informatico.

Chi realizza il Software?

Il Software solitamente viene realizzato da Aziende Informatiche specializzate, dette Software House.

L’articolo che stai leggendo, per esempio, è scritto dal team di Wave Informatica, un’azienda informatica di Torino specializzata nella Progettazione e Sviluppo di Software completamente personalizzati e che, quindi, può essere definita una Software House.

Professionalità coinvolte nello Sviluppo del Software 

Passiamo ora a descrivere brevemente chi sono le persone che, in pratica, realizzano il Software: 

  • Programmatore informatico, o sviluppatore software: è un tecnico che, attraverso la programmazione, crea le funzionalità richieste. In pratica, scrive il codice che serve per far funzionare una o più parti del Software e, oltre a sviluppare il codice necessario, può apportare un contributo importante alla visione d’insieme del progetto. Lo sviluppatore può essere di tre tipologie principali:
    • Sviluppatore front-end, o “frontendista”: sviluppa la parte di front-end del Software, ovvero la parte che l’utente finale vede e con cui può interagire;
    • Sviluppatore back-end, o “backendista”: a differenza del front-end developer, si occupa della parte nascosta dell’applicativo, cioè le parti di codice che permettono al Software di funzionare ma che l’utente finale non vede;
    • Sviluppatore full-stack, o full-stack developer: questa figura unisce le due precedenti, quindi sviluppa sia il back-end che il front-end dell’applicativo.
  • Systems architect o software architect: proprio come un architetto, questa figura progetta il Software in modo che tutti i requisiti vengano soddisfatti. Valuta la fattibilità del progetto, definisce le fasi del ciclo di vita del Software e le tecnologie da utilizzare, disegna la struttura del sistema e i processi di controllo; 
  • Analista aziendale, o business analyst: un professionista che analizza un’organizzazione, di solito un’azienda, osservando e documentando processi, attività, modello di business e livello di integrazione tecnologica. Questa figura entra spesso in gioco quando l’azienda deve identificare le soluzioni tecnologiche che le servono per raggiungere obiettivi di business specifici, fornendo un ponte di collegamento fra le tematiche aziendali e le soluzioni tecnologiche disponibili o da sviluppare; 
  • Project manager: fondamentale per la buona riuscita di qualsiasi progetto è la figura di un responsabile di progetto. Il PM si occupa di avviare il progetto e assicurarsi che gli obiettivi vengano raggiunti, nel rispetto delle tempistiche, del budget e delle aspettative del cliente;  
  • Web designer: a seconda delle necessità del progetto, può essere necessaria la figura di un Web Designer, ovvero una persona che progetta e sviluppa un sito web. La figura del Web Designer è piuttosto ibrida rispetto alle precedenti, in quanto deve occuparsi sia del Design del sito web, sia dell’implementazione del codice necessario; 
  • User experience designer, o UX designer: per User Experience si intende l’esperienza d’uso di un qualsiasi prodotto, cioè l’insieme di sensazioni, emozioni e valori che l’utente vive quando utilizza – nel nostro caso – il Software. Questo aspetto non è da sottovalutare, anzi, negli ultimi anni è diventato sempre più rilevante sia per lo sviluppo di Software che per la realizzazione di siti web e applicazioni mobile, e sono nate figure professionali dedicate proprio a garantire che la user experience di un prodotto digitale sia efficace.

    Per saperne di più leggi questo approfondimento sulla User Experience.

    Lo UX Designer si assicura che il Software sia facilmente utilizzabile da tutti e che l’utente riesca a raggiungere i suoi obiettivi facilmente. Solitamente, lo UX Designer coincide con lo UI Designer, ovvero la persona che disegna fisicamente le varie schermate dell’interfaccia grafica dell’applicativo. 

Quali tipologie di Software esistono?

I Software possono essere distinti secondo varie classificazioni.

Di seguito trovi alcune delle classificazioni più comuni.

Classificazione per Prossimità di linguaggio  

Con questa classificazione possiamo distinguere i Software in base a chi li utilizzerà: un essere umano o una macchina. 

Esistono quindi due macro-categorie: 

  • Software di Sistema: ovvero un Software progettato per fornire supporto ad un altro Software. I sistemi operativi (OS), come macOS, Android, Microsoft Windows e GNU/Linux sono tutti esempi di Software di sistema, così come i motori di ricerca o i motori grafici. 
  • Software applicativi: sono i programmi applicativi che ci aiutano a svolgere determinate funzioni, come ad esempio l’elaborazione di immagini, la scrittura di testi e la gestione di dati. Questi Software vengono definiti Applicativi Web quando sono accessibili e fruibili, appunto, via web e non necessitano quindi dell’installazione sul proprio computer, smartphone o tablet. 

Classificazione per Licenza

Un’altra importante distinzione si basa sul grado di permissività della licenza.

Si definisce Software Libero, o Open Source, un Software che può essere utilizzato, studiato, modificato e/o redistribuito da chiunque, a seconda del tipo di licenza (MIT, LGPL, Apache-2.0, ecc…), mentre un Software Proprietario può essere utilizzato solo a certe condizioni e non può essere modificato, studiato o sottoposto a ingegneria inversa.

Classificazione per funzione 

Forse la classificazione comunemente più utilizzata, serve a distinguere i Software in base alle loro funzionalità principali. 
Fra le più comuni: 

  • Videoscrittura – ad esempio Microsoft Word, Pages, Libre Office;
  • Foglio elettronico – ad esempio Microsoft Excel;
  • Database Management System – ad esempio PostgreSQL, My sql, MariaDB;
  • Content Management System – i più famosi sono WordPress, Joomla!, Drupal;
  • Elaborazione Grafica – ad esempio Adobe Photoshop, GIMP e Paint; 
  • Sistema Operativo – i più diffusi sono sicuramente Microsoft Windows, Apple Mac OS e Linux;
  • Web Browser – Google Chrome, Firefox, Safari e Microsoft Edge sono i più usati;
  • Lettore Multimediale – come VLC media player e Windows Media player;
  • Posta Elettronica – ad esempio Mozilla Thunderbird, Microsoft Outlook e Gmail.
Schermata del Software di videoscrittura Microsoft Word
Schermata del Software di videoscrittura Microsoft Word
Schermata del Software di Content Management System WordPress
Schermata del Software di Content Management System WordPress
Schermata del Web Browser Firefox
Schermata del Web Browser Firefox

Industria del Software: i settori maggiormente interessati

Abbiamo visto cos’è un Software e per cosa può essere utilizzato. Ma quali sono i settori maggiormente interessati all’acquisto e all’utilizzo di questo prodotto informatico?

Come avrai intuito, un Software può avere moltissime funzionalità diverse: qualunque sia la necessità a cui trovare una soluzione informatica, è quasi sicuro che una Software House possa realizzare il programma adatto, o addirittura è possibile che quel programma già esista!

Per questo i Software oggi vengono utilizzati da privati e aziende di molti settori diversi, dall’intrattenimento al turismo, dalla finanza all’istruzione.

Le Software House spesso si specializzano in pochi settori specifici. Noi di Wave Informatica, ad esempio, siamo specializzati nello Sviluppo di Software e Applicazioni Web per la Pubblica Amministrazione e aziende del settore Automotive, oltre a numerosi progetti di Ricerca e Sviluppo e di Outsourcing per aziende ICT.

I Framework per Software e per Applicazioni Web

Oggi è praticamente impossibile parlare di Sviluppo di Software e di Applicazioni Web senza citare i Framework.

Il Software, infatti, può essere sviluppato da zero oppure partendo da un Framework, ovvero una struttura di supporto che consente di sfruttare parti di codice già pronte, sicure e aggiornate, diminuendo notevolmente i tempi di sviluppo e di manutenzione.

Esempi di Framework per lo sviluppo di Applicazioni Web molto famosi sono Symfony, Angular, ReactJS, Laravel, mentre i CSS Framework più famosi sono Bootstrap, Foundation e Tailwind CSS.

Il Ciclo di Vita del Software 

Quando si parla di Ciclo di Vita del Software, o anche Systems Development Life Cycle in inglese, ci si riferisce al modo in cui la progettazione e lo sviluppo del prodotto Software vengono scomposti in sotto-attività.  

In poche parole, si intende l’insieme delle fasi e delle attività necessarie per realizzare il Software. 

Ogni azienda o professionista ha il proprio metodo e sviluppa una propria roadmap di development, che può anche variare in base alle caratteristiche del Software e alle necessità del progetto, ma di solito le fasi del Ciclo di Vita sono: 

1. Analisi 

L’indagine preliminare che serve a definire contesto, caratteristiche, funzionalità principali del Software. 

2. Progettazione 

A questo punto si entra nel dettaglio di come la soluzione deve essere costruita, definendo architettura e struttura dei singoli componenti. 

3. Programmazione o Implementazione 

Si passa alla creazione vera e propria del Software, attraverso la scrittura di codice di programmazione. 

4. Collaudo e Debugging 

Lo Sviluppo del Software passa alla fase di Collaudo, detta anche Testing, per verificare che i requisiti definiti in fase di analisi vengano rispettati e che non si verifichino errori. 

Nel caso in cui il collaudatore riscontri delle anomalie, definite bug, sarà compito dello sviluppatore effettuare il debugging, cioè risolvere i problemi del codice che causano tali bug. 

5. Deployment 

Il prodotto è pronto per essere rilasciato, cioè pubblicato in una versione stabile e messo a disposizione degli acquirenti o di qualsiasi utilizzatore, a seconda del tipo di licenza stabilito.  

Questa fase può prevedere anche l’installazione e la configurazione del Software sulle macchine che compongono l’infrastruttura tecnologica che verrà utilizzata dall’utente finale. 

Il termine deployment si riferisce anche al rilascio del Software in un ambiente di test, necessario per procedere con il collaudo e il debugging.

6. Manutenzione 

Dopo che il prodotto è stato deployato (cioè rilasciato) e gli utenti hanno iniziato ad utilizzarlo, lo sviluppatore (o la Software House) si occupa di fare gli aggiustamenti necessari a migliorare il prodotto. 

La manutenzione può essere di varie tipologie: 

  • Manutenzione correttiva, cioè rilasciare delle parti di codice dette Patch che vanno a correggere bug ed errori sfuggiti al collaudo; 
  • manutenzione adattiva, per adattare il prodotto ad altri ambienti (ad esempio un nuovo sistema operativo o una nuova versione di un browser);
  • manutenzione evolutiva, che estende le funzionalità o converte il Software per funzionare con un’altra struttura, ad esempio Framework o piattaforme diverse. 

I modelli di Sviluppo Software 

Come già detto all’inizio di questa guida, non esiste un unico metodo di Sviluppo Software, utilizzato dalle Software House di tutto il mondo.

Non solo ogni sviluppatore può avere il proprio metodo, ma ogni singolo progetto può richiedere delle modifiche al modo in cui si è soliti realizzare il Software. 

Nella storia dell’Informatica, sono stati creati e utilizzati vari metodi, ognuno con i suoi vantaggi e svantaggi, e ancora oggi non esiste un unico modello di riferimento, sebbene possiamo affermare che quelli oggi universalmente più apprezzati appartengano alla famiglia della Metodologia Agile

Vediamo quali sono i modelli di Sviluppo Software più famosi: 

Modello a Cascata 

Il più tradizionale, diffusissimo negli anni ‘70 e ancora oggi ampiamente insegnato agli studenti di ingegneria informatica. 

Questo modello prevede una sequenza lineare di fasi tipiche della produzione manifatturiera, che sono: analisi dei requisiti, progettazione, sviluppo, collaudo, test di integrazione, manutenzione. 

Il Modello a Cascata viene criticato soprattutto per la sua rigidità e per la sua monoliticità.

Infatti, seguendo questa metodologia di sviluppo, tutte le fasi devono essere percorse linearmente e non è possibile andare a ritroso fra una fase e l’altra. L’intero percorso di Sviluppo si concentra su una data di rilascio, spesso posta a mesi o anni dall’inizio del progetto, e ogni variazione può causare slittamenti considerevoli di questa data, dilatando i tempi e aumentando i costi. 

Modello a Cascata nello sviluppo software
Il Modello a Cascata nello sviluppo software

Modello Evolutivo 

Questo modello introduce il concetto di Prototipazione, che consente di accorciare i tempi di verifica del Software grazie ad una versione semplificata dello stesso.  

Si basa principalmente su cicli composti da quattro fasi: 

  1. Costruzione del prototipo;
  2. consegna del prototipo all’utente; 
  3. feedback e valutazioni;
  4. modifica del progetto in base dai feedback ricevuti.

Il prototipo può anche essere un semplice mock up, cioè un’interfaccia grafica semplice – che non prevede, dunque, un funzionamento completo, ad esempio il salvataggio di informazioni in un database –.  

Esempio di un mock up a bassa fedeltà (detto anche wireframe)
Esempio di un mock up a bassa fedeltà (detto anche wireframe)

Esempio di prototipo cartaceo

Questo modello consente, dunque, di ridurre i tempi nella fase di valutazione dei requisiti minimi ed è utile per valutare gli aspetti di progettazione prima di iniziare lo sviluppo, ma non migliora in alcun modo la fase di programmazione vera e propria. 

Meta Modello a Spirale 

Come puoi intuire dal nome, il modello a spirale prevede che lo sviluppo avvenga non più in maniera lineare, come nel modello a cascata, bensì attraverso un ciclo iterativo continuo delle fasi di creazione del Software, fino al raggiungimento dell’obiettivo. 

Si tratta di un meta modello, poiché può essere applicato a qualsiasi altro modello di sviluppo del Software e rappresenta una sorta di Framework, uno schema da seguire. 

Un aspetto importante di questo approccio è la valutazione dei rischi, che viene inclusa in ogni ciclo di interazione e consente di ridurre al minimo le possibilità che il progetto, soprattutto se di grandi entità, possa fallire. 

Metodologia Agile 

Le Metodologie Agile sono oggi le più diffuse e le più celebri, non solo in ambito di Sviluppo Software ma anche in applicazione ad altri settori, in particolare nel project management

Questo approccio si contrappone drasticamente ai tradizionali metodi di sviluppo a cascata, ponendo l’obiettivo principale di soddisfare il cliente con rilasci rapidi ed efficaci di modifiche al Software

Quando parliamo di Agile non ci riferiamo tanto ad un modello di sviluppo preciso e con regole da seguire alla lettera, quanto piuttosto ad un insieme di pratiche che permettono di creare un prodotto soddisfacente in tempi rapidi, con gruppi di lavoro autonomi e interazioni efficaci con il cliente

Modello Agile nello sviluppo software
La metodologia Agile prevede uno sviluppo del software suddiviso in cicli brevi reiterati

I linguaggi di programmazione più usati 

Secondo un report di Statista sui linguaggi più utilizzati nel 2021, la classifica dei 10 linguaggi più usati nel mondo è la seguente: 

  1. JavaScript
  2. HMTL/CSS (anche se non si tratta propriamente di linguaggi di programmazione)
  3. Python
  4. SQL
  5. Java
  6. Node.js
  7. TypeScript 
  8. C# 
  9. Bash/Shell 
  10. C++ 
Esempio di codice JavaScript

Per ciò che riguarda, invece, i framework di sviluppo più utilizzati nel mondo, la classifica di riferimento pubblicata su Statista è la seguente:

  1. React.js
  2. jQuery
  3. Express
  4. Angular
  5. Vue.js
  6. ASP.NET Core
  7. Flask
  8. ASP.NET
  9. Django
  10. Spring

FAQ sullo Sviluppo Software

Cos’è un Software?

Il Software è un insieme di componenti, procedure e istruzioni che compongono un sistema di elaborazione dati. Può servire a scrivere testi, elaborare immagini, organizzare dati, e molto altro. 

Quali sono le fasi di Sviluppo del Software? 

Generalmente, le fasi di sviluppo del Software sono: 
1. Analisi  
2. Progettazione  
3. Programmazione o Implementazione  
4. Collaudo e Debugging  
5. Deployment  
6. Manutenzione 

Chi sviluppa i Software?

Le figure coinvolte nello sviluppo del Software sono, principalmente: 
– Programmatore Informatico, o Sviluppatore Software
– Analista aziendale o Business Analyst 
– Project Manager 
– Web Designer 
– User Experience Designer, o UX Designer

Quanto tempo è necessario per sviluppare il Software? 

È molto difficile determinare delle tempistiche standard, in quanto ogni progetto ha caratteristiche differenti che influiscono sui tempi di sviluppo. 
In generale, lo sviluppo di un Software può richiedere dalle 4 settimane ai 12 mesi. 

Quali sono i principali linguaggi di programmazione? 

I linguaggi di programmazione più utilizzati oggi sono: 
1. JavaScript 
2. HMTL/CSS (anche se non si tratta propriamente di linguaggi di programmazione) 
3. Python 
4. SQL 
5. Java 
6. Node.js 
7. TypeScript 
8. C# 
9. Bash/Shell 
10. C++ 

Stai cercando un partner per lo Sviluppo Software? Scopri la software house Wave Informatica!

Vai al servizio di Sviluppo Software