Vista dal basso della cupola circolare in vetro della famosa Galleria Vittorio Emanuele II a Milano.

Che cos'è COBOL?

COBOL, spiegato

COBOL (Common Business Oriented Language) è un linguaggio di programmazione compilato di alto livello, simile all'inglese, sviluppato specificamente per le esigenze di trattamento dei dati aziendali.

COBOL è stato progettato pensando alla versatilità ottimale; la sua verbosità consente ai programmatori di utilizzare un linguaggio di programmazione leggibile e facilmente gestibile che può funzionare su computer mainframe e sistemi operativi. In effetti, è stato uno dei primi linguaggi di programmazione standardizzati dall'American National Standards Institute (ANSI) e dall'International Organization for Standardization (ISO).

Uno dei maggiori punti di forza di COBOL è il suo solido supporto per i calcoli decimali a punto fisso ad alta precisione, una caratteristica non sempre presente in molti linguaggi di programmazione tradizionali. Questa capacità ha contribuito a differenziare COBOL e a promuoverne l'adozione da parte di molte grandi istituzioni finanziarie.

Sebbene COBOL sia considerato un sistema legacy, molte organizzazioni governative e del settore privato continuano a utilizzarlo per eseguire applicazioni finanziarie, amministrative e aziendali. Di fatto, la configurazione imperativa, procedurale e (nelle sue versioni più recenti) orientata agli oggetti di COBOL si trova alla base di oltre il 40% di tutti i sistemi bancari online.1

Supporta inoltre l’80% delle transazioni con carte di credito effettuate di persona, gestisce il 95% di tutte le operazioni agli sportelli automatici e alimenta sistemi che generano più di 3 miliardi di USD di commercio ogni giorno.1 Grazie alla sua superiore stabilità e capacità di elaborazione, continua a svolgere un ruolo fondamentale nell’aiutare le aziende a mantenere applicazioni e programmi nelle architetture esistenti.

Per mantenere la compatibilità con i sistemi più recenti, molte aziende che utilizzano o si basano su sistemi COBOL stanno intraprendendo o valutando la la modernizzazione COBOL, ovvero il processo di aggiornamento o trasformazione delle applicazioni COBOL. La modernizzazione può contribuire a preservare la logica di base che garantisce le capacità di elaborazione di dati affidabili, stabili e ad alto volume di COBOL, migliorando al contempo l’interoperabilità con le tecnologie moderne.

In alcuni casi, la modernizzazione COBOL può comportare la traduzione del codice COBOL in un linguaggio di programmazione più recente. Tuttavia, concentrarsi esclusivamente sulla traduzione del linguaggio ignora il componente della piattaforma, ovvero ciò su cui l'applicazione viene eseguita e con cui si integra. Una strategia completa di modernizzazione COBOL deve includere l'ingegneria a livello di sistema che affronti la riprogettazione dell’architettura dei dati, la sostituzione del runtime e l’integrità dell’elaborazione delle transazioni, oltre ad altre considerazioni legate alla piattaforma.

Storia di COBOL

COBOL è stato sviluppato da un consorzio di organizzazioni governative e aziendali chiamate Conference on Data Systems Languages (CODASYL), formatosi nel 1959. Parzialmente derivato da FLOW-MATIC, un linguaggio creato dalla dottoressa Grace Hopper, pioniera dell'informatica, COBOL è stato creato come parte di un'iniziativa del Dipartimento della Difesa degli Stati Uniti che spingeva per la creazione un linguaggio di programmazione in grado di funzionare su tutti i sistemi operativi (Linux, Windows, Unix, z/OS ecc.) e gli ambienti hardware.

La prima versione del linguaggio di programmazione COBOL è stata rilasciata nel 1960. E sebbene la programmazione COBOL fosse originariamente destinata a servire come misura di ripiego, il Dipartimento della Difesa si rese rapidamente conto della sua utilità e incaricò i produttori di computer di offrirla.

Il COBOL è stato infine standardizzato come linguaggio informatico nel 1968, dopo di che i programmatori COBOL hanno implementato diverse revisioni e modernizzazioni, tra cui COBOL-61, COBOL-68, COBOL-74 e COBOL-85. COBOL 2002 mirava a rendere le applicazioni COBOL più compatibili con le moderne pratiche di sviluppo software, introducendo nel linguaggio delle funzionalità orientate agli oggetti e altri paradigmi di programmazione avanzati. Questa versione, tuttavia, ha sofferto della mancanza di supporto e della scarsa richiesta da parte degli utenti per le sue nuove caratteristiche. 

COBOL 14 ha introdotto nuovi cambiamenti, inclusa la sostituzione dei risultati aritmetici portatili con tipi di dati IEEE 754, mentre l'ultimo standard, COBOL 2023, ha fornito nuove caratteristiche aggiuntive orientate al miglioramento dell'interoperabilità di COBOL con i sistemi moderni.

AI Academy

Quale futuro per i mainframe e l'AI?

In questo episodio della AI Academy, Christian Jacobi spiega quanto i mainframe siano parte integrante dell'IT aziendale e come, con nuove integrazioni e miglioramenti, stiano consolidando il proprio ruolo vitale nell'IT moderno.

Struttura COBOL

Il programma COBOL ha una struttura gerarchica che comprende divisioni, sezioni, paragrafi, frasi, verbi e stringhe di caratteri. La natura divisionale di un sistema COBOL (che comprende quattro divisioni) consente una netta separazione delle preoccupazioni all'interno dei programmi COBOL.

Le divisioni di COBOL sono le seguenti:

Divisione di identificazione

La divisione di identificazione è la prima divisione di un programma COBOL ed è obbligatoria. Assegna al programma un nome e fornisce altre informazioni identificative, come l’autore, la data di creazione e una breve descrizione dello scopo del programma.

I programmi COBOL necessitano di un paragrafo PROGRAM-ID per funzionare all'interno della divisione di identificazione. Ad esempio:

IDENTIFICATION DIVISION.

 

PROGRAM-ID. YourProgramName

 

AUTHOR. Your name

 

DATE-WRITTEN. YYYYMMDD

 

COMMENT. “Short description of the program”

Divisione ambientale

La divisione specifica l'ambiente di runtime per un programma e definisce le risorse di input e di output che utilizzerà. È suddivisa in due sezioni.

Non sorprende che la sezione di configurazione fornisca informazioni sulla configurazione del sistema, comprese le funzionalità del computer e del compilatore che sta utilizzando. Tuttavia, a causa dei progressi negli strumenti di compilazione, le sezioni di configurazione sono diventate un po' obsolete nei moderni sistemi COBOL, che in genere possono dedurre e adattarsi automaticamente al loro ambiente.

La sezione input-output specifica i file e i dispositivi associati con cui il programma può interagire. Include il paragrafo FILE-CONTROL, che associa i nomi dei file all'interno del programma ai file esterni, e il paragrafo I-O-CONTROL, che in genere contiene informazioni sull'ottimizzazione o sulla sequenziazione per le operazioni di input-output.

Divisione dei dati

La divisione dei dati contiene tutte le definizioni di variabili, file e costanti del programma. Proprio come la divisione ambiente, anche la divisione dati è suddivisa.

La sezione file elenca tutti i file da cui il programma leggerà o su cui scriverà. Una voce di descrizione del file definisce ogni file e descrive la struttura dei record nel file.

La sezione spazio di lavoro definisce le variabili che mantengono i loro valori durante l'esecuzione del programma, inclusi counter, accumulatori, costanti e qualsiasi altro data storage non pertinente ai file I-O.

Introdotta nelle iterazioni successive di COBOL, la sezione di archiviazione locale definisce le variabili allocate al momento della distribuzione del programma o del metodo e deallocate al termine, rendendo l'archiviazione locale particolarmente utile per algoritmi ricorsivi e programmi rientranti.

Infine, la sezione del linkage definisce gli elementi di dati che passano da un programma a un altro.

Divisione procedurale

La suddivisione delle procedure contiene il codice eseguibile del programma, ovvero suddiviso in paragrafi e sezioni che strutturano il codice in blocchi di codice per una migliore leggibilità e una più semplice manutenzione.

Componenti aggiuntivi

Ogni divisione di un sistema COBOL può includere sezioni e paragrafi, analogamente a sezioni e paragrafi in lingue umane. Le sezioni sono le suddivisioni logiche nominate all'interno di ciascuna divisione che contengono uno o più paragrafi; fungono da unità modulari di codice che possono essere chiamate o invocate all'interno del programma.

I paragrafi sono raccolte di frasi, le più piccole unità eseguibili di un programma COBOL, che svolgono una funzione particolare e sono identificate da un nome unico. Ogni dichiarazione o frase COBOL all'interno di un paragrafo inizia con un verbo COBOL (come MOVE, DISPLAY e ADD) che indica come deve essere eseguito il codice.

L'unità più elementare e indivisibile del linguaggio COBOL è un carattere. Le stringhe di caratteri sono caratteri o sequenze di caratteri contigui che formano una parola COBOL, un valore letterale o una voce di commento, delimitata da separatori.

Sintassi COBOL

La sintassi simile all'inglese di COBOL è autodocumentante e quasi autoesplicativa, con un'enfasi sulla verbosità e sulla leggibilità. Questa caratteristica lo distingue dai linguaggi più concisi, come FORTRAN. Può anche supportare diversi tipi di dati (numerici, alfanumerici e modificati, ad esempio), ma si basa su alcuni componenti sintattici aggiuntivi per eseguire un programma.

Frasi e affermazioni

Le frasi sono righe di codice COBOL che consistono in una o più istruzioni terminate da un punto. Le dichiarazioni, invece, sono le singole istruzioni che orchestrano i processi di gestione dei file e dei dati (utilizzando verbi come ADD, START, DISPLAY e WRITE, tra gli altri).

Ad esempio, le istruzioni MOVE trasferiscono i dati da una parte della memoria del sistema a un'altra, le istruzioni COMPUTE eseguono operazioni aritmetiche e memorizzano i risultati come variabili, mentre le istruzioni READ recuperano i record dai file di input.

Clausole

Le clausole sono componenti di istruzioni che possono modificare o qualificare l'esecuzione di un'istruzione. Una clausola immagine come "PIC 9(3)", come un esempio, definisce una variabile numerica che può contenere fino a tre cifre.

Strutture di controllo

Le strutture di controllo iterativo e condizionale in COBOL consentono al sistema di controllare il flusso di dati.

Le strutture IF ... ELSE implementano, ad esempio, la logica condizionale in COBOL, permettendo al programma di eseguire diversi blocchi di codice a seconda della valutazione di una condizione di sistema. Inoltre, l’istruzione PERFORM esegue un paragrafo o una sezione un numero specifico di volte o fino a quando non viene soddisfatta una condizione, in modo simile ai cicli presenti in altri linguaggi di programmazione.

Programmi secondari

COBOL può facilitare la programmazione modulare utilizzando programmi secondari, che vengono distribuiti dal programma principale o da altri programmi secondari. Mentre quelli interni sono definiti nello stesso codice sorgente del programma chiamante (scritto nella divisione procedure), i programmi secondari esterni vengono compilati separatamente e collegati secondo necessità.

Creazione di un programma COBOL

Il processo di creazione di un programma con COBOL varia a seconda delle circostanze organizzative. Tuttavia, comporta alcuni passaggi chiave.

Scrittura del programma. Se un ingegnere del software volesse scrivere il programma di base "Hello, world!", per esempio, scriverebbe:

IDENTIFICATION DIVISION.   PROGRAM-ID.   hello-world.   PROCEDURE DIVISION.   DISPLAY  "Hello, world!"    

L'utilizzo di un ambiente di sviluppo integrato (IDE) compatibile con COBOL o di un editor di testo può aiutare nel processo.

Compilazione del programma. Come altri linguaggi di programmazione di alto livello, il codice COBOL deve essere compilato prima di essere eseguito. I compilatori COBOL (come GnuCOBOL, Micro Focus e IBM COBOL Compiler Family) traducono i programmi in codice macchina, affinché la CPU del computer possa comprenderlo ed eseguirlo.

Esecuzione del programma. Quando il programma viene compilato, il programmatore può eseguirlo sul sistema di destinazione. Supponendo che non ci siano bug, il programma seguirà la logica di trattamento dei dati definita nella divisione della procedura per elaborare i dati. Il processo di esecuzione in genere prevede la lettura di dati da file e database, l'esecuzione di calcoli o trasformazioni dei dati e quindi la scrittura dei risultati in file o database.

Debug del programma (se necessario). Se ci sono errori o bug nel programma, i programmatori devono identificarli e correggerli (un processo chiamato debugging). Affidarsi a strumenti e tecniche di debug può semplificare questo processo.

Vantaggi della programmazione COBOL

Ora meno popolare di linguaggi più moderni (come Python, Java e JavaScript), COBOL era un tempo il linguaggio più utilizzato nella programmazione informatica per le applicazioni aziendali. Tuttavia, lo sviluppo di COBOL rimane una parte funzionale e critica dell'infrastruttura tecnologica globale, in particolare per gli istituti bancari, le compagnie assicurative e gli enti governativi.

Come dimostra la sua longevità, COBOL offre numerosi benefici (nonostante la relativa scarsità di programmatori COBOL1) tra cui:

Stabilità

COBOL è noto per le sue prestazioni stabili e affidabili nelle applicazioni mission-critical. I sistemi scritti in COBOL tendono ad avere tempi di attività elevati e subiscono pochi guasti, il che è fondamentale per le operazioni ininterrotti degli istituti finanziari e dei servizi governativi.

Scalabilità

Gli sviluppatori possono scalare le applicazioni COBOL per gestire workload crescenti senza apportare modifiche significative alla base di codice, consentendo alle organizzazioni di far crescere i propri sistemi basati su COBOL insieme alle proprie attività, senza frequenti riscritture o migrazioni verso altri linguaggi.

Gestione dei dati ed elaborazione dei file

COBOL offre funzionalità di elaborazione dei file eccezionali. È in grado di gestire dati di transazioni complessi e su larga scala e di supportare più metodi di accesso ai file, tra cui la gestione sequenziale, indicizzata e dei file di dati relativi. La robustezza di COBOL nell'automazione dei processi lo rende ideale per i lavori di elaborazione in blocco, come l'elaborazione di transazioni finanziarie, la gestione di database e la generazione di report.

Interoperabilità

Attraverso aggiornamenti di modernizzazione, COBOL può comunicare con applicazioni web moderne e microservizi, scambiare dati in formati moderni, mantenere la compatibilità con i database, interagire con servizi virtuali e cloud (come Amazon Web Services (AWS), Microsoft Azure e IBM Cloud), integrarsi con strumenti e workflow DevOps e supportare standard di sicurezza moderni (come la crittografia TLS o OAuth).

Autori

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Michael Goodwin

Staff Editor, Automation & ITOps

IBM Think

Soluzioni correlate
Server e software mainframe IBM zSystems

IBM zSystems è una famiglia hardware z/Architecture moderno che utilizza i software z/OS, Linux, z/VSE, z/TPF, z/VM e zSystems.

Esplora Z
Soluzioni Enterprise Business Server

Costruiti per gestire workload mission-critical mantenendo la sicurezza, l'affidabilità e il controllo dell'intera infrastruttura IT.

Esplora le soluzioni
Servizi di modernizzazione del mainframe

Accelera la trasformazione digitale modernizzando le tue applicazioni mainframe con IBM.

Servizi per mainframe
Fai il passo successivo

Sblocca la potenza di IBM Z e Telum per proteggere i tuoi dati, ottimizzare le prestazioni e generare insight di AI in tempo reale. Crea il futuro della tua azienda con soluzioni mainframe e processori leader di settore, progettati per velocità, scalabilità e sicurezza.

Esplora le funzionalità di IBM Z Scopri Telum per l'accelerazione AI
Note a piè di pagina

1 Serain, JD. “The World Depends on 60-Year-Old Code No One Knows Anymore”, PCMag, dicembre 2023.