Cos'è lo sviluppo del software?

Scopri gli elementi essenziali dello sviluppo del software e come aiuta le aziende a innovare e competere

Side view portrait of contemporary African-American man looking at computer screen while working late at night writing code, copy space

Cos'è lo sviluppo del software?

Sviluppo del software si riferisce a una serie di attività relative all'informatica dedicate al processo di creazione, progettazione, implementazione e supporto del software.

Il software stesso rappresenta la serie di istruzioni o programmi che indicano a un computer cosa fare. È indipendente dall'hardware e rende i computer programmabili. Esistono tre tipi di base di software:

software di sistema per fornire le principali funzioni come sistemi operativi, gestione dischi, programmi di utilità, gestione hardware e altre esigenze operative.

Software di programmazione per fornire ai programmatori strumenti quali editor di testo, compilatori, linker, debugger e altri strumenti per la creazione del codice.

Software applicativo (applicazioni o app) per aiutare gli utenti a eseguire attività. Le suite di produttività per uffici, il software di gestione dei dati, i lettori multimediali e i programmi di sicurezza rappresentano degli esempi. Per applicazioni si intendono anche applicazioni Web e per dispositivi mobili come quelle utilizzate per fare acquisti su Amazon.com, socializzare con Facebook o pubblicare immagini su Instagram.1

Un possibile quarto tipo è rappresentato dal software integrato. Il software di sistemi integrato viene utilizzato per controllare macchine e dispositivi che in genere non vengono considerati computer, reti di telecomunicazioni, automobili, robot industriali e altro ancora. Questi dispositivi, e il loro software, possono essere connessi come parte di IoT (Internet of Things).2

Lo sviluppo del software viene eseguito principalmente da programmatori, ingegneri del software e sviluppatori del software. Questi ruoli interagiscono e si sovrappongono e le dinamiche tra loro variano notevolmente tra i reparti e le comunità di sviluppo.

I programmatori, o codificatori, scrivono il codice sorgente per programmare i computer per attività specifiche come l'unione di database, l'elaborazione di ordini online, l'instradamento di comunicazioni, l'esecuzione di ricerche o la visualizzazione di testo e grafici. I programmatori in genere interpretano le istruzioni degli sviluppatori e degli ingegneri del software e utilizzano linguaggi di programmazione come C ++ o Java per eseguirle.

Gli ingegneri del software applicano principi di ingegneria per creare software e sistemi e risolvere i problemi. Usano il linguaggio di modellazione e altri strumenti per individuare soluzioni che spesso possono essere applicate ai problemi in modo generale, invece di limitarsi a risolvere un'istanza o un client specifico. Le soluzioni di ingegneria del software aderiscono al metodo scientifico e devono funzionare nel mondo reale, come con ponti o ascensori. La loro responsabilità è aumentata man mano che i prodotti sono diventati sempre più intelligenti con l'aggiunta di microprocessori, sensori e software. Non solo più prodotti si affidano al software per differenziarsi sul mercato, ma il loro sviluppo software deve essere coordinato con il lavoro di sviluppo meccanico ed elettrico del prodotto.

Gli sviluppatori di software hanno un ruolo meno formale degli ingegneri e possono essere strettamente coinvolti in aree di uno specifico progetto, inclusa la scrittura del codice. Allo stesso tempo, eseguono l'intero ciclo di vita dello sviluppo del software, compreso il lavoro con i team funzionali per trasformare i requisiti in caratteristiche, gestendo team e processi di sviluppo e conducendo i test e la manutenzione del software.3

Il lavoro di sviluppo del software non si limita ai programmatori o ai team di sviluppo. Professionisti come scienziati, fabbricanti di dispositivi e produttori di hardware creano codice software anche se non sono principalmente sviluppatori di software. Ciò non si limita ai settori tradizionali di tecnologia dell'informazione come le aziende di software o semiconduttori. Infatti, secondo il Brookings Institute (link esterno a ibm.com), quelle aziende "rappresentano meno della metà delle società che effettuano sviluppo del software".

È importante distinguere tra sviluppo del software personalizzato e sviluppo del software commerciale. Lo sviluppo del software personalizzato è il processo di progettazione, creazione, implementazione e manutenzione del software per un insieme specifico di utenti, funzioni o organizzazioni. Al contrario, il software commerciale off-the-shelf (COTS) è progettato per un ampio insieme di requisiti, il che consente di impacchettarlo e commercializzarlo e distribuirlo.


Fasi del processo di sviluppo del software

Lo sviluppo del software in genere prevede i seguenti passaggi:

  • Raccolta dei requisiti per capire e documentare ciò che è richiesto dagli utenti e da altre parti interessate.
  • Scelta o creazione di un'architettura come struttura sottostante entro cui funzionerà il software.
  • Sviluppo di un progetto relativo alle soluzioni ai problemi presentati dai requisiti, spesso coinvolgendo modelli di processo e storyboard.
  • Creazione di un modello con uno strumento che utilizza un linguaggio di modellazione come SysML o UML per eseguire in anticipo la convalida, la creazione di modelli e la simulazione del progetto.
  • Costruzione di un codice nel linguaggio di programmazione appropriato. Comporta la revisione tra colleghi e il team per eliminare i problemi in anticipo e produrre software di qualità più velocemente.
  • Test con scenari pre-pianificati come parte della progettazione e della codifica del software ed esecuzione di test delle prestazioni per simulare un test di carico dell'applicazione.
  • Gestione di configurazione e difetti per comprendere tutte le risorse del software (requisiti, progettazione, codice, test) e creazione di versioni diverse del software. Stabilire priorità di garanzia della qualità e criteri di rilascio per affrontare e tenere traccia dei difetti.
  • Distribuzione del software per l'uso e per rispondere e risolvere i problemi degli utenti
  • Migrazione dei dati al software nuovo o aggiornato da applicazioni o origini dati esistenti, se necessario.
  • Gestione e misurazione del progetto per mantenere qualità e distribuzione per tutto il ciclo di vita dell'applicazione e valutare il processo di sviluppo con modelli come il Capability Maturity Model (CMM).

Le fasi del processo di sviluppo del software rientrano nella gestione del ciclo di vita dell'applicazione (ALM). La soluzione IBM Engineering Management è un superset di ALM che permette la gestione dello sviluppo meccanico, elettrico e software in parallelo.

  • Analisi e specifica dei requisiti
  • Progettazione e sviluppo
  • Test
  • Distribuzione
  • Manutenzione e supporto

Le fasi del processo di sviluppo del software possono essere raggruppate nelle fasi del ciclo di vita, ma l'importanza del ciclo di vita è che viene ripetuto per consentire un miglioramento continuo. Ad esempio, i problemi degli utenti che emergono nella fase di manutenzione e supporto possono diventare requisiti all'inizio del ciclo successivo.


Perché lo sviluppo del software è importante?

Lo sviluppo del software è importante perché è pervasivo. Come vice presidente e blogger di IBM, Dibbe Edwards sottolinea: "Il software è emerso come differenziatore chiave in molti prodotti, dalle automobili alle lavatrici e ai termostati, con un IoT (Internet of Thins) che li collega".

Alcuni esempi:

  • Soul Machines (link esterno a ibm.com) utilizza il software per creare consulenti online artificiali che migliorano servizio clienti ed efficienza. I consulenti hanno volti, espressioni e voci umane che reagiscono in modo intelligente, empatico ed efficiente alle domande e alle esigenze dei clienti. Possono rispondere a più del 40% delle richieste dei clienti senza intervento umano e imparano dalle loro interazioni per migliorare nel tempo. Utilizzando IBM Watson Assistant per incorporare le capacità di intelligenza artificiale (IA) nel processo di sviluppo, Soul Machines può creare e lanciare un consulente artificiale in circa 8-12 settimane.
  • "Questa è una gara", dice Erik Bak-Mikkelsen. "Dobbiamo stare al passo con quello che succede nel mercato." Bak-Mikkelsen è a capo delle operazioni cloud in car2go (link esterno a ibm.com). Intuisce che fornire nuove caratteristiche e funzioni alle app e ai veicoli di ride-sharing di car2go è la chiave per ottenere risultati e stare al passo. Per farlo, car2go ha spostato le operazioni di sviluppo su un cloud di servizi gestito e ha adottato un modello di sviluppo DevOps. Il risultato è un ciclo di sviluppo accelerato, un time to market più rapido e la capacità di scalare per la crescita futura.
  • Lavorare con le linee elettriche può essere mortale. Per stare al sicuro, gli ingegneri impostano dei "lockout" elettrici usando etichette e blocchi fisici per deviare l'energia dai luoghi di lavoro. La società energetica francese Enedis (link esterno a ibm.com)  ha collaborato con IBM Garage for Cloud per sviluppare il software che utilizza questi blocchi e queste etichette e li lega in una rete condivisa. Le etichette e i blocchi vengono rilevati ogni volta che vengono rimossi dal veicolo di un tecnico e comunicano l'ora e la geo-localizzazione. Man mano che il tecnico collega i blocchi, la loro ubicazione viene registrata su una mappa digitale. Tutte le parti interessate condividono una visualizzazione della mappa per garantire sicurezza, ridurre il tempo di inattività e facilitare le riparazioni. L'approccio di sviluppo collaborativo di IBM Cloud Garage ha permesso a Enedis di sviluppare prototipi pronti da utilizzare in tre mesi.

Caratteristiche principali di sviluppo efficace del software

Utilizzare lo sviluppo del software per differenziare le marche e ottenere un vantaggio competitivo richiede competenza con le tecniche e le tecnologie che possono accelerare la distribuzione, la qualità e l'efficacia del software.

  • Intelligenza artificiale (IA):  l'Intelligenza artificiale consente al software emulare il processo decisionale e l'apprendimento umano. Reti neurali, apprendimento automatico, elaborazione del linguaggio naturale e capacità cognitive presentano agli sviluppatori e alle aziende l'opportunità di offrire prodotti e servizi che sconvolgono i mercati e superano la concorrenza. IBM Watson offre agli sviluppatori un modo per collegare e utilizzare i servizi di intelligenza artificiale come parte delle loro applicazioni, attraverso le interfacce di programmazione delle applicazioni o API. È possibile anche utilizzare IBM Watson per migliorare i requisiti di prodotto controllando ambiguità, elementi poco chiari, requisiti composti o negativi, unità o tolleranze mancanti, requisiti incompleti e quantità non specifiche.
  • Sviluppo nativo del cloud: lo sviluppo nativo del cloud è un modo di creare applicazioni per utilizzare ambienti cloud. Un'applicazione nativa del cloud è costituita da componenti discreti e riutilizzabili noti come microservizi, progettati per integrarsi in qualsiasi ambiente cloud. Questi microservizi fungono da elementi di base e sono spesso impacchettati in contenitori. Grazie a questa architettura, le applicazioni native del cloud possono utilizzare gli ambienti cloud per migliorare le prestazioni, la flessibilità e l'estensibilità delle applicazioni.
  • Sviluppo basato su cloud: come le organizzazioni IT guardano al cloud per migliorare la gestione delle risorse e ridurre i costi, così fanno le organizzazioni di sviluppo del software. In questo modo, il cloud può essere utilizzato come un IDE (Integrated Development Environment) rapido, flessibile ed efficace in termini di costi o come un PaaS (Platform as a service) di sviluppo. Gli ambienti di sviluppo basati su cloud possono supportare la codifica, la progettazione, l'integrazione, i test e altre funzioni di sviluppo. Possono anche offrire accesso ad API, microservizi, DevOps e altri strumenti di sviluppo, servizi e competenze. 
  • Blockchain:  la blockchain è un registro sicuro e collegato digitalmente che elimina costi e vulnerabilità introdotti da parti come banche, enti regolatori e altri intermediari. Sta trasformando le aziende liberando capitale, accelerando i processi, abbassando i costi di transazioni e altro ancora.  La blockchain rappresenta una straordinaria opportunità per lo sviluppo del software. Gli sviluppatori stanno lavorando con registri distribuiti e tecnologia open source Hyperledger (link esterno a ibm.com)  per modificare il modo di lavorare delle aziende.
  • Codice basso: Forrester definisce codice basso: "Prodotti e/o servizi cloud per lo sviluppo di applicazioni che impiegano tecniche visive e dichiarative anziché la programmazione e sono disponibili per i clienti a costi bassi o gratuitamente e senza alcuna formazione..." 4 In breve, si tratta di una pratica di sviluppo che riduce la necessità di codifica e consente ai non codificatori o ai cittadini sviluppatori di creare o aiutare a creare applicazioni rapidamente e a costi ridotti.
  • Analisi: la domanda annuale di scienziati di dati, sviluppatori di dati e ingegneri di dati raggiungerà quasi 700.000 aperture entro il 2020. La domanda indica quanto sia fondamentale per le aziende ottenere comprensione e valore dall'esplosione di dati. Di conseguenza, gli sviluppatori di software stanno integrando funzionalità di analisi avanzate nelle loro applicazioni. I servizi basati sul cloud e le API semplificano l'esplorazione dei dati, automatizzano l'analisi predittiva e creano dashboard che forniscono nuove informazioni e migliorano il processo decisionale.
  • MBSE (Model Based Systems Engineering): in MBSE, i linguaggi di modellazione del software vengono utilizzati per eseguire la produzione di modelli, la simulazione e l'analisi di progetti software per la convalida anticipata. Creare progetti in MBSE consente di analizzare ed elaborare requisiti di progetti e passare rapidamente dalla progettazione all'implementazione.  
  • Dispositivi mobili: Molte di queste esperienze si verificano in ambienti di dispositivi mobili. Una funzionalità principale per gli sviluppatori di software è la creazione di app per dispositivi mobili con connessioni profonde ai dati che arricchisce ed eleva le esperienze degli utenti. Forrester ha scoperto che "l'integrazione profonda dei dati dei clienti digitali/mobili ha un forte effetto su come i clienti interagiscono con i marchi".

 


Un glossario rapido

  • Sviluppo agile suddivide i requisiti in funzioni utilizzabili e fornisce rapidamente tali funzioni attraverso lo sviluppo incrementale. Un ciclo di feedback consente di trovare e correggere i difetti mentre la funzionalità continua a essere distribuita.
  • CMM (Capability Maturity Model) valuta il livello di competenza dei processi di sviluppo del software. Tiene traccia dei progressi da azioni ad hoc a passaggi definiti fino a risultati misurati e processi ottimizzati.
  • DevOps, una combinazione di sviluppo e operazioni, è un approccio basato sull'agilità che riunisce lo sviluppo del software e le operazioni IT nella progettazione, nello sviluppo, nell'implementazione e nel supporto del software.

  • RAD (Rapid application development) è un approccio non lineare che condensa la progettazione e la costruzione del codice in un unico passaggio interconnesso.

  • SAFe (Scaled Agile Framework) fornisce un modo per scalare la metodologia agile in un team di sviluppo software o in un'organizzazione più ampia.

  • Waterfall, spesso considerata la metodologia tradizionale di sviluppo del software, è un insieme di passaggi lineari a cascata dalla pianificazione e dalla raccolta dei requisiti fino alla distribuzione e alla manutenzione.

Strumenti e soluzioni di sviluppo del software

IBM Engineering Systems Design Rhapsody

Una soluzione comprovata per le attività di modellazione e progettazione che aiuta a fornire sistemi e software di qualità superiore più velocemente.

IBM Engineering Workflow Management

Controllo avanzato della versione software, gestione dello spazio di lavoro, controllo delle risorse distribuito e supporto di sviluppo parallelo per singoli utenti e team per migliorare la produttività monitorando in modo automatico le modifiche alle risorse. Il software attiva una funzione di sospensione e ripristino virtualmente illimitata per gestire le interruzioni del lavoro.

IBM Engineering Lifecycle Optimization – Adattatori integrati

Fornisce connessioni tra strumenti di IBM Engineering Lifecycle Management strumenti e strumenti di terze parti come Git, GitLib e GitHub per la gestione del controllo delle versioni del software.