Lo sviluppo software ovvero come si crea il software

Sviluppo Software Sviluppo Software

Il software è un linguaggio universale che si evolve a una velocità impressionante. Il software è, infatti, creato attraverso i cosiddetti linguaggi di programmazione.

Nel corso del tempo sono stati elaborati centinaia di linguaggi di programmazione, come ad esempio Assembly, C, C++, C#, Java, BASIC, Pascal, Fortran, ALGOL, COBOL, SQL, Perl, Php, Ruby, Python, Javascript, per citare i più conosciuti. In effetti i linguaggi più usati dai programmatori sono qualche decina, sia perché alcuni sono molto specialistici sia perché altri sono diventati anacronistici o sono stati sostituiti da varianti più evolute.

I linguaggi di programmazione si evolvono per un verso in funzione della crescita esponenziale di potenza dei microprocessori, che ha consentito di integrare nei circuiti istruzioni sempre più estese e complesse, e per l’altro verso in funzione degli obiettivi che ci si propone di raggiungere sviluppando software o applicando particolari metodologie di sviluppo.

I linguaggi di programmazione sono stati creati per scrivere in modo comprensibile istruzioni che altrimenti andrebbero scritte in codice binario, ovvero insiemi di combinazioni di 0 e 1 che nel complesso formano il cosiddetto linguaggio macchina.

In sintesi, il linguaggio macchina è costituito da un insieme di istruzioni direttamente eseguibili dai microprocessori mentre il linguaggio di programmazione è un insieme di istruzioni più facilmente comprensibile all’uomo, ovvero che può essere usato, modificato ed elaborato con relativa facilità.

Il codice scritto in un linguaggio di programmazione deve quindi essere tradotto in linguaggio macchina prima di poter essere eseguito dai microprocessori. Questo lavoro di traduzione viene effettuato dal compilatore, uno speciale software che è parte integrante del linguaggio di programmazione poiché costituisce la base dati che mette in corrispondenza le stringhe di codice del linguaggio macchina con le stringhe di codice del linguaggio di programmazione.

In altre parole, eventuali modifiche alle modalità di traduzione del compilatore determinano modifiche alla sintassi del linguaggio di programmazione e viceversa.

Una volta compilato, ovvero tradotto dal compilatore, il programma software diventa eseguibile dal dispositivo digitale. Lo stesso programma software esiste quindi in almeno due versioni:

  • la versione non compilata, detta codice sorgente;
  • la versione compilata, detta codice eseguibile.

Generalmente, quando si installa un software si utilizza la versione eseguibile del programma mentre il codice sorgente non viene fornito, anzi il codice sorgente è protetto dal diritto d’autore, dal copyright.

Esiste tuttavia una metodologia di sviluppo e distribuzione del software che include il codice sorgente e ne consente la visualizzazione e la modifica a condizione di rendere disponibili agli altri il codice con le modifiche apportate.

Questa metodologia di sviluppo definita “Open Sources” - sorgenti aperti - raccoglie in realtà un insieme di licenze d’uso che la differenziano sia dal software chiuso, ovvero protetto dal copyright, che dal software libero - freeware - ovvero non protetto da alcuna licenza d’uso.

Il software libero, infatti, può essere modificato e poi chiuso da chi detiene i diritti d’autore delle modifiche. Le modifiche al software Open Sources, invece, non possono essere protette da copyright e devono essere rese disponibili al pubblico adottando le stesse licenze d’uso del software originale, per cui si parla di copyleft in contrapposizione al copyright.

Generalmente, l’acquisizione delle licenze d’uso di software chiuso è a pagamento mentre le licenze d’uso di software open sources sono distribuite gratuitamente, essendo il codice sorgente liberamente accessibile. Entrambe le modalità di sviluppo presentano dei pro e dei contro per i produttori, tuttavia l’open sources ha trovato una sua specifica collocazione nell’industria del software poiché consente uno sviluppo collaborativo su scala planetaria, una veloce diffusione dei software su vasta scala, una maggiore trasparenza e solidità dei programmi in certi campi di applicazione, una maggiore capacità di adattamento e di personalizzazione.

Per quanto riguarda la sostenibilità economica del modello di sviluppo open sources occorre evidenziare che gran parte dei guadagni delle società di sviluppo software, in particolare in ambito aziendale, generalmente derivano dalla vendita di servizi associati all’uso dei software piuttosto che dalla vendita delle licenze d’uso.

La differenza tra codice eseguibile - software compilato - e codice sorgente - software scritto in un linguaggio di programmazione - consente di evidenziare un’ulteriore tipo di codice, ovvero codice scritto per essere interpretato e non compilato.

Si tratta di un tipo di software il cui codice sorgente viene eseguito dal computer direttamente, senza una preventiva traduzione in linguaggio macchina, attraverso un apposito software di interpretazione. Questa soluzione presuppone che sul dispositivo digitale che esegue il codice scritto con questi particolari linguaggi di programmazione, detti di scripting, sia installato il software interprete di quello specifico linguaggio. L’interprete è quindi una sorta di traduttore simultaneo, un compilatore in tempo reale o più propriamente un software in grado di eseguire le funzioni di volta in volta richiamate nel codice sorgente. Questa modalità di esecuzione del codice dei linguaggi di scripting è stata resa possibile sia dall’architettura a strati del software, sia dall’accresciuta potenza dei microprocessori, poiché l’insieme dei processi di interpretazione ed esecuzione richiede una quantità di risorse maggiore rispetto alla sola esecuzione di codice preventivamente tradotto in linguaggio macchina.

Per contro i linguaggi di scripting consentono modalità di programmazione più flessibili e immediate e soprattutto una maggiore portabilità del codice. In sostanza, i linguaggi di scripting possono essere eseguiti in qualsiasi ambiente software, purché sia presente l’apposito interprete. I linguaggi di programmazione compilati, invece, richiedono compilazioni ad hoc per ogni ambiente software, o Sistema Operativo, e frequentemente modifiche sostanziose al codice sorgente al fine di “portare” ovvero far funzionare il software su altre piattaforme.

L’industria dello sviluppo software si avvale di diversi strumenti, ovviamente anch’essi software, in grado di facilitare e velocizzare la creazione dei programmi informatici. Gli strumenti per la creazione di software sono spesso integrati tra loro e costituiscono il cosiddetto ambiente di sviluppo.

L’ambiente di sviluppo software può essere più o meno funzionale alle diverse metodologie di sviluppo, ovvero a particolari e diverse suddivisioni delle fasi di sviluppo che, come accade in altri settori produttivi, sono studiate e ottimizzate per massimizzare i risultati.

Il processo di sviluppo software è infatti abbastanza complesso poiché bisogna tenere traccia di tutte le modifiche al codice sorgente, valutare il funzionamento delle interazioni tra le diverse parti di codice e tra i diversi strati software - come a esempio le librerie di codice - nonché le eventuali variazioni appportate da aggiornamenti, effettuare test a ogni cambiamento con un processo iterativo che oltre a verificare il funzionamento e la stabilità del software al mutare di determinate condizioni ne verifica anche le prestazioni per ottimizzarle.

Come accennato i cambiamenti in ambito software sono molto veloci e per non invecchiare precocemente i software devono continuamente essere aggiornati anche dopo la commercializzazione. Bisogna quindi pensare ai software, sia le piccole app che i grandi sistemi software aziendali, come a prodotti in costante evoluzione e aggiornamento.

Gli aggiornamenti sono importanti anche per la sicurezza del software, poiché eventuali bachi o debolezze nel codice potrebbero essere sfruttate da malintenzionati per sabotare i dispositivi digitali nei quali il software è installato o per appropriarsi dei dati ivi custoditi, inclusi i dati personali degli utenti.

Dalla ideazione del progetto di un software, alla creazione del prototipo alle fasi di rilascio e assistenza post vendita o distribuzione si susseguono diverse versioni del software che seguono regole consolidate.

Dalla versione cosiddetta Alfa, che indica un software sostanzialmente incompleto o altamente instabile, si passa alla versione Beta, che indica un software funzionante ma ancora instabile e non completamente testato, quindi alla versione RC ovvero Release Candidate, che indica un software completo e testato ma che potrebbe presentare dei malfunzionamenti inaspettati (bug) per cui gli sforzi degli sviluppatori sono tesi a scovare e risolvere eventuali bug. Superate queste fasi il software è pronto per il rilascio finale (indicato dalle sigle RTM ovvero Release To Manufacturing o anche GA ovvero General Availability) che comunque non esclude successivi aggiornamenti indicati come Update, quando le modifiche non incidono sulle funzionalità del prodotto, oppure Upgrade, quando al prodotto vengono aggiunte nuove funzionalità.

La scrittura di programmi informatici complessi, addirittura in grado di svolgere funzioni di autoapprendimento attraverso l’applicazione di algoritmi e l’analisi di gigantesche basi dati (ovvero le attuali implementazioni della cosiddetta intelligenza artificiale), richiede gruppi di lavoro consistenti, competenti e specializzati. Tuttavia, le attività di programmazione sono molto più diffuse di quanto si possa immaginare e sono svolte anche da modeste software house, piccoli gruppi di lavoro e singoli individui, professionisti, studenti e dilettanti. Si vanno infatti evolvendo nuove tecnologie che consentono agli utenti con poca o nessuna esperienza di programmazione di creare software.

La capacità di utilizzare uno o più linguaggi di programmazione, ovvero di fare “coding” (tradotto in italiano “codifica”), sta diventando sempre più una competenza trasversale a tantissime discipline, una competenza senza la quale diventerà sempre più difficile capire un mondo che si appoggia sempre di più sul software.

Il coding - ovvero la programmazione informatica con le sue strutture di controllo (sequenza, alternativa, iterazione e annidamento), gli operatori logici, le tipologie e le strutture di dati, le interfacce grafiche - è ormai il denominatore comune della società dell’informazione, della conoscenza e delle reti.