Cos'è lo sviluppo di software?  
Esplora le soluzioni di sviluppo software di IBM Abbonati per ricevere gli aggiornamenti cloud
Grafico che mostra i diversi elementi dello sviluppo del software dalla creazione, analisi, messa in sicurezza fino all'implementazione di soluzioni
Cos'è lo sviluppo di software?

Lo sviluppo software si riferisce a una serie di attività informatiche dedicate al processo di creazione, progettazione, implementazione e supporto del software.

Per software si intende la serie di istruzioni o programmi che indicano a un computer cosa fare. È indipendente dall'hardware e rende programmabili i computer. Esistono fondamentalmente tre tipi di software:

Software di sistema: fornisce le funzioni principali come sistemi operativi, gestione del disco, utility, gestione dell'hardware e altre necessità operative.

Software di programmazione: fornisce ai programmatori strumenti come editor di testo, compilatori, linker, debugger e altri strumenti per la creazione di codice.

Software applicativo (applicazioni o app): consente agli utenti di eseguire attività. Ne sono esempi le suite di produttività per ufficio, i software di gestione dei dati, i lettori multimediali e i programmi di sicurezza. Il termine applicazioni si riferisce anche alle applicazioni per il web e per i dispositivi mobili, come quelle che si usano per fare acquisti su Amazon.com, socializzare con Facebook o pubblicare foto su Instagram.1

Un quarto tipo di software può essere considerato il cosiddetto software embedded. I software di sistema embedded si usano per controllare macchine e dispositivi non tipicamente considerati computer, come ad esempio reti di telecomunicazioni, automobili, robot industriali e altro ancora. Questi dispositivi e il relativo software possono essere connessi nell'ambito dell'Internet of Things (IoT).2

Lo sviluppo del software viene condotto principalmente dai programmatori, dagli ingegneri informatici e dagli sviluppatori di software. Sono figure che interagiscono e si sovrappongono, e le dinamiche tra di loro variano notevolmente tra i vari reparti e comunità di sviluppatori.  

I programmatori scrivono il codice sorgente per la programmazione dei computer per attività specifiche come l'unione di database, l'elaborazione di ordini online, l'instradamento di comunicazioni, la conduzione di ricerche o la visualizzazione di testo e grafica. Di solito, i programmatori interpretano le istruzioni fornite dagli sviluppatori di software e dagli ingegneri informatici e per attuarle utilizzano linguaggi di programmazione come C++ o Java.

Gli ingegneri informatici applicano i principi ingegneristici per creare software e sistemi per la risoluzione di problemi. Utilizzano il linguaggio di modellazione e altri strumenti per ideare soluzioni che spesso possono essere applicate ai problemi in modo generale, anziché limitarsi a soluzioni applicabili solo a un'istanza o a un cliente specifico. Le soluzioni di ingegneria informatica aderiscono al metodo scientifico e devono essere utilizzabili nel mondo reale, per esempio con ponti o ascensori. Man mano che i prodotti sono diventati sempre più intelligenti, grazie all'aggiunta di microprocessori, sensori e software, la responsabilità degli ingegneri informatici è aumentata. Infatti, non solo il numero dei prodotti che si basano sul software per differenziarsi sul mercato è in continua crescita, ma il loro sviluppo software deve essere coordinato con l'attività di sviluppo meccanico ed elettrico.

Gli sviluppatori software svolgono un ruolo meno formale rispetto agli ingegneri e possono essere strettamente coinvolti in aree specifiche del progetto, inclusa la scrittura di codice. Allo stesso tempo, guidano l'intero ciclo di vita dello sviluppo software, compresa la collaborazione con i vari team funzionali per trasformare i requisiti in funzioni, gestire i team e i processi di sviluppo e condurre le operazioni di test e manutenzione del software.3

L'attività di sviluppo del software non è limitata agli sviluppatori o ai team di sviluppo: anche professionisti come scienziati, fabbricanti di dispositivi e produttori di hardware creano codice software, benché non siano in primo luogo sviluppatori. E nemmeno si limita ai tradizionali settori informatici, come le aziende produttrici di software o di semiconduttori. Tant'è che, secondo il Brookings Institute (link esterno a ibm.com), queste aziende “rappresentano meno della metà delle aziende che si occupano di sviluppo software”.

Una distinzione importante si ha tra lo sviluppo di software personalizzato e quello di software commerciale. Per sviluppo di software personalizzato si intende il processo di progettazione, creazione, implementazione e gestione di software destinato a un gruppo specifico di utenti, funzioni o organizzazioni. Per contro, il software commerciale pronto all'uso (COTS) viene progettato per soddisfare un'ampia serie di requisiti e può dunque essere confezionato, commercializzato e distribuito sul mercato.

Ottieni flessibilità sul posto di lavoro con DaaS

Scopri in che modo il Desktop as a Service (DaaS) consente alle aziende di raggiungere lo stesso livello di prestazioni e sicurezza della distribuzione delle applicazioni on-premise.

Contenuti correlati

Registrati per ricevere la guida sull'hybrid cloud

Fasi del processo di sviluppo software

Lo sviluppo di software tipicamente prevede le seguenti fasi:

  • Selezione di una metodologia per stabilire un framework di applicazione delle varie fasi di sviluppo del software. Descrive un processo di lavoro generale o roadmap del progetto. Tra le metodologie si possono citare sviluppo agile, DevOps, Rapid Application Development (RAD), Scaled Agile Framework (SAFe) e modello a cascata.
  • Raccolta dei requisiti al fine di comprendere e documentare cosa richiedono gli utenti e gli altri stakeholder.
  • Scelta o creazione di un'architettura come struttura sottostante all'interno della quale opererà il software.
  • Sviluppo di un progetto relativo alle soluzioni ai problemi presentati dai requisiti, che spesso prevede modelli di processo e storyboard.
  • Creazione di un modello con uno strumento che utilizza un linguaggio di modellazione come SysML o UML per eseguire la convalida iniziale, la prototipazione e la simulazione del progetto.
  • Creazione di codice nel linguaggio di programmazione appropriato. Prevede la revisione da parte di colleghi e team per eliminare tempestivamente i problemi e produrre software di qualità in tempi più rapidi.
  • Test con scenari pre-pianificati come parte della progettazione e della codifica del software, oltre all'esecuzione di test sulle prestazioni per simulare i test di carico dell'applicazione.
  • Gestione di configurazione e difetti per comprendere tutti gli artefatti software (requisiti, progettazione, codice, test) e creare versioni distinte del software. Definizione di priorità di garanzia della qualità e criteri di rilascio per correggere e monitorare i difetti.
  • Distribuzione del software per l'uso e risposta o risoluzione dei problemi degli utenti.
  • Migrazione dei dati al software nuovo o aggiornato da applicazioni o origini dati esistenti, ove necessario.
  • Gestione e misurazione del progetto per mantenere qualità e distribuzione lungo 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 delle applicazioni (ALM). La soluzione IBM® Engineering Management è un superset di ALM che consente la gestione in parallelo dello sviluppo meccanico, elettrico e software.

  • Analisi e specifica dei requisiti
  • Progettazione e sviluppo
  • Test
  • Implementazione
  • 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 di software è importante?

Lo sviluppo di software è importante anche perché è pervasivo. Dibbe Edwards, vice presidente e autrice per il blog di IBM, sottolinea: "Il software è emerso come differenziatore chiave in molti prodotti, dalle automobili alle lavatrici, ai termostati, connessi sempre più attraverso l'Internet of Things".

Qualche esempio:

  • 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 alcun intervento umano e imparano dalle loro interazioni per migliorare nel tempo. Utilizzando IBM watsonx Assistant per incorporare le funzionalità di intelligenza artificiale (AI) nel processo di sviluppo, Soul Machines può creare e implementare un consulente artificiale in circa 8-12 settimane.
  • "È una gara", dice Erik Bak-Mikkelsen. "Dobbiamo stare al passo con quanto avviene sul mercato". Bak-Mikkelsen è a capo delle operazioni cloud presso car2go (link esterno a ibm.com). Intuisce che fornire nuove funzioni e caratteristiche alle app e ai veicoli di ride-sharing di car2go è fondamentale per ottenere risultati e stare al passo. A questo scopo, car2go ha spostato le operazioni di sviluppo su servizi cloud gestiti e ha adottato un modello di sviluppo DevOps. Il risultato è un ciclo di sviluppo velocizzato, un time to market più rapido e la scalabilità in vista di una crescita futura.
  • Lavorare con le linee elettriche può essere mortale. Per garantire la sicurezza, gli ingegneri impostano "esclusioni" elettriche utilizzando etichette e blocchi fisiche 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 allo sviluppo di un 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 localizzazione geografica. Man mano che il tecnico collega i blocchi, la loro ubicazione viene registrata su una mappa digitale. Tutti gli stakeholder condividono una visualizzazione della mappa per garantire la 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 dello sviluppo di software efficace

Utilizzare lo sviluppo di software per differenziare i brand e ottenere un vantaggio competitivo richiede la padronanza delle tecniche e delle tecnologie che possono accelerare la distribuzione, la qualità e l'efficacia del software.

  • Intelligenza artificiale (AI): l'AI consente al software di emulare il processo decisionale e l'apprendimento umano. Reti neurali, machine learning, elaborazione del linguaggio naturale e funzioni 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 connettersi e utilizzare i servizi di intelligenza artificiale come parte delle loro applicazioni attraverso le application programming interface, o API. È anche possibile utilizzare IBM Watson per migliorare i requisiti di prodotto verificando la presenza di ambiguità, elementi poco chiari, requisiti composti o negativi, unità o tolleranze mancanti, requisiti incompleti e quantità non specifiche.
  • Sviluppo cloud-native: lo sviluppo cloud-native è un modo di creare applicazioni per utilizzare gli ambienti cloud. Un'applicazione cloud-native è 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 cloud-native può 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 software. In questo modo, il cloud può essere utilizzato come un IDE (Integrated Development Environment) veloce, flessibile ed economico, o come una piattaforma PaaS (Platform as a Service) di sviluppo. Gli ambienti di sviluppo cloud-based possono supportare la codifica, la progettazione, l'integrazione, i test e altre funzioni di sviluppo. Possono inoltre offrire accesso ad API, microservizi, DevOps e altri strumenti, servizi e competenze di sviluppo. 
  • Blockchain: la blockchain è un registro sicuro e collegato digitalmente che elimina i costi e la vulnerabilità introdotti da soggetti come banche, enti regolatori e altri intermediari. Sta trasformando le aziende liberando capitale, accelerando i processi, riducendo i costi di transazione e altro ancora.  La blockchain rappresenta una straordinaria opportunità per lo sviluppo di software. Gli sviluppatori stanno lavorando con registri distribuiti e tecnologia open source Hyperledger (link esterno a ibm.com) per cambiare il modo di lavorare delle aziende.
  • Uso limitato di codice: Forrester definisce l'uso limitato di codice come "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 basso costo o gratuitamente e senza necessità di formazione ..." 4 In breve, si tratta di una pratica di sviluppo che riduce la necessità di codifica e consente ai non programmatori o ai cittadini sviluppatori di creare o contribuire a creare applicazioni rapidamente e a costi ridotti.
  • Analytics: la domanda annuale di data scientist, 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 insight e valore dall’esplosione di dati. Di conseguenza, gli sviluppatori di software stanno integrando nelle loro applicazioni funzionalità di analytics avanzate. I servizi cloud-based e le API semplificano l'esplorazione dei dati, automatizzano l'analytics predittiva e creano dashboard che forniscono nuovi insight e migliorano il processo decisionale.
  • Model Based Systems Engineering (MBSE): in MBSE, i linguaggi di modellazione software vengono usati per eseguire la prototipazione iniziale, la simulazione e l'analisi dei progetti software per la prima convalida. La creazione di progetti in MBSE consente di analizzare ed elaborare i requisiti di progetto e di passare rapidamente dalla progettazione all'implementazione.  
  • Dispositivi mobili: Una funzionalità essenziale 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 digitali/mobili dei clienti influisce fortemente sulle modalità di interazione dei clienti con i brand".

 

Un breve glossario
  • 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 dalle azioni ad hoc ai passaggi definiti, fino ai risultati misurati e ai 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 creazione di 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.

  • Modello a cascata: spesso considerata la metodologia di sviluppo del software tradizionale, è 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 software
IBM Engineering Systems Design Rhapsody

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

Esplora IBM Engineering Systems Design Rhapsody
IBM Engineering Workflow Management

Il controllo avanzato della versione del software, la gestione dello spazio di lavoro, il controllo distribuito del codice sorgente e il supporto allo sviluppo parallelo per singoli e team migliorano la produttività tracciando automaticamente le modifiche agli artefatti. Il software consente una funzione di sospensione e ripresa pressoché illimitata per gestire le interruzioni del lavoro.

Esplora IBM Engineering Workflow Management
IBM Engineering Lifecycle Optimization – Adattatori integrati

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

Esplora IBM Engineering Lifecycle Optimization
Risorse per lo sviluppo di software Sviluppo di software su IBM Developer

Codice, contenuti, community e altro ancora.

Newsletter per sviluppatori IBM

Iscriviti agli argomenti che ti interessano di più.

Cinque passaggi fondamentali per una distribuzione software efficace

Soddisfa esigenze aziendali complesse in modo rapido e agile attraverso la connessione dei tuoi strumenti di sviluppo software.

Leggi le pubblicazioni di IBM Research

Oggi, la ricerca nel campo delle scienze informatiche è incentrata sulla scoperta di innovazioni rivoluzionarie nell'ambito dell'automazione, dell'elaborazione delle informazioni e del calcolo.

Fasi successive

IBM Engineering Lifecycle Management (ELM) può aiutarti ad adottare un approccio di gestione end-to-end ai tuoi sistemi e sviluppo software. Risolvi le complessità dalla progettazione all'esecuzione, unisci i team attraverso il thread digitale, sfrutta la modellazione e il riutilizzo, sfrutta gli insight provenienti dal reporting automatizzato e opera con sicurezza su larga scala.

Esplora ELM Prenota una demo live