Codice sorgente

Il codice sorgente (spesso detto semplicemente sorgente o codice o listato [1]), in informatica, è il testo di un algoritmo di un programma scritto in un linguaggio di programmazione da parte di un programmatore in fase di programmazione, compreso all'interno di un file sorgente. Esso definisce dunque il flusso di esecuzione del programma stesso.

Il sorgente scritto dovrà essere opportunamente elaborato per arrivare a un programma eseguibile dal processore ponendosi dunque come punto di partenza ("sorgente") dell'intero processo che porta all' esecuzione del programma stesso da parte dell'hardware della macchina, e che può includere altre fasi come precompilazione, compilazione, interpretazione, caricamento e linking (a seconda del tipo di linguaggio di programmazione utilizzato) per concludersi con l' installazione.

Per estensione, l'espressione "codice sorgente" viene utilizzata anche per riferirsi a testo scritto in linguaggi informatici non di programmazione, come i linguaggi di markup ( HTML, XML e via dicendo) o i linguaggi di database (es. SQL).

Nel caso di software proprietario il codice sorgente non è normalmente fornito all'utente dallo sviluppatore come lo è sempre il codice eseguibile per programmi compilati o il bytecode nel caso di programmi interpretati/semiinterpretati, mentre invece è disponibile nel caso di software open source e software libero.

Caratteristiche

Scrittura

Esempio di codice sorgente in Python. L' evidenziazione di alcune parti di codice è uno strumento comune fra i programmatori per orientarsi fra il codice. Visibile anche l' indentazione, le strutture condizionali e iterative.

La scrittura del codice sorgente presuppone la risoluzione (a monte o di pari passo) del problema iniziale da risolvere e automatizzare sotto forma di algoritmo risolutivo (eventualmente ricorrendo ad un diagramma di flusso o ad uno pseudolinguaggio), di cui la fase di scrittura del codice rappresenta la fase implementativa (programmazione) ad opera di un programmatore tramite un editor di testo (spesso compreso all'interno di un ambiente di sviluppo integrato) rispettando lessico e sintassi del particolare linguaggio di programmazione scelto/utilizzato.

Il programmatore esperto salta spesso la fase di sviluppo in termini di algoritmo e passa direttamente alla fase successiva pensando direttamente la soluzione algoritmica del problema dato in termini di linguaggio di codifica ovvero linguaggio di programmazione o in pseudocodice.

Inoltre molti linguaggi per semplificare e velocizzare la stesura del codice mettono a disposizione una serie di librerie software che consentono di richiamare codice già scritto ( riuso di codice) sotto forma di funzioni utili e ricorrenti raggruppate in cosiddette API ( application programming interface) che vengono fornite al programmatore anche sotto forma di documentazione. In fase di compilazione il cosiddetto linker "collega" il programma scritto con le librerie richiamate. Spesso per la scrittura del codice si fa uso di un software development kit (SDK) e più spesso di un IDE a cui è possible agganciare la piattaforma software per lo sviluppo compresa nell'SDK.

Tipicamente la scrittura del codice è una parte dell'intera fase di sviluppo ( progettazione, realizzazione e testing) del software, gestita in tutti i suoi aspetti tramite conoscenze dell' ingegneria del software da una squadra di sviluppatori. Precede la scrittura del codice l'analisi dei requisiti e la strutturazione del software in moduli, mentre la segue la fase di debugging ovvero l'individuazione e risoluzione degli eventuali bug del codice stesso (ad es. tramite debugger) secondo le regole della sintassi e della semantica del linguaggio e l'effettiva rispondenza alle specifiche iniziali richieste ( testing).

Nell'ambito dello sviluppo software il codice sorgente di un programma e la sua complessità è valutato in termini di linee di codice prodotte o da produrre, mentre i tempi di realizzazione in anni-uomo nell'ipotesi puramente indicativa-comparativa di un singolo sviluppatore.

Struttura

Magnifying glass icon mgx2.svg Lo stesso argomento in dettaglio: Ambiente (programmazione).

Tipicamente un codice sorgente si compone di dichiarazioni di variabili (locali e/o globali), eventuale inizializzazione di queste tramite assegnamento, costanti, istruzioni e funzioni che agiscono sulle variabili, strutture di controllo del flusso di esecuzione, secondo un certo paradigma di programmazione. Particolare rilevanza teorica al riguardo assume il teorema di Böhm-Jacopini che afferma che qualunque algoritmo può essere implementato utilizzando tre sole strutture, la sequenza, la selezione ed il ciclo ( iterazione), da applicare ricorsivamente alla composizione di istruzioni elementari.

In linea teorica un buono stile di programmazione prevede la stesura del codice sorgente cercando un compromesso tra la leggibilità del codice, a vantaggio della manutenibilità, e l'efficienza computazionale in termini di tempo di esecuzione e consumo di risorse ( memoria e processore). Secondo la best practices si cercherà dunque di eliminare o evitare il più possibile codice ridondante e codice morto.

Esecuzione

L'esecuzione del codice, una volta precompilato, compilato e/o interpretato, avviene sequenzialmente nel rispetto di selezioni/controlli e iterazioni/iterazioni; spesso inoltre il codice risulta altamente concatenato ovvero il risultato di una certa istruzione (ad es. il valore di una certa variabile) è sfruttato come input o è propedeutico a istruzioni successive secondo la logica del divide et impera.

Norme

Nella scrittura del codice, per migliorare la leggibilità e intelligibilità del codice sorgente a favore di chi non ha scritto il codice e favorire l'eventuale debugging, è buona prassi come regole di stile:

  • evidenziare parti di codice, tramite grassetto o a colori, operazione tipicamente effettuata di default dall'editor di testo del codice sorgente;
  • indentazione del codice mettendo in risalto con opportuni livelli di tabulazione (rientro) le varie parti del codice stesso;
  • inserire commenti ovvero righe di testo che non fanno parte del codice in sé (cioè dell'algoritmo risolutivo codificato in linguaggio di programmazione), ma che ne commentano il significato/funzionalità almeno nei suoi passi fondamentali. La corretta sintassi per l'inserimento dei commenti (marcatore del commento) varia tipicamente da linguaggio di programmazione ad un altro con possibilità di inserimento di commento su una o più righe.

Errori

Magnifying glass icon mgx2.svg Lo stesso argomento in dettaglio: Bug (informatica).

Alla fine della stesura dl codice il programmatore opera una prima fase di test valutando se l'output del programma è quello atteso compilando/interpretando ed eseguendo il codice. Durante lo sviluppo e l'esecuzione di un codice sorgente possono verificarsi i cosiddetti "errori di programmazione" che si possono distinguere essenzialmente in tre principali categorie: errori di sintassi, errori di logica ed errori di runtime.

  • Gli errori di sintassi sono gli errori che si commettono nella fase di scrittura del programma nel linguaggio scelto, fase successiva alla progettazione dell'algoritmo. Sono In genere errori di ortografia nella scrittura del codice o nella sintassi delle istruzioni. Gli errori di sintassi impediscono la compilazione del programma da parte del compilatore che quindi tipicamente segnalerà la presenza dell'errore. Questo tipo di errore è spesso segnalato al programmatore direttamente dall'editor dell' ambiente integrato di sviluppo (IDE) utilizzato, risultando dunque di facile individuazione e soluzione.
  • Gli errori di logica (o semantica) sono gli errori che si commettono nella fase di progettazione dell' algoritmo: possono essere causati da una mancata comprensione del problema da calcolare o dei vincoli che i dati in input devono rispettare, o ancora nella valutazione del test dell'algoritmo. Questi errori conducono tipicamente alla progettazione di un algoritmo che non fornisce l'output richiesto nell'ambito di una o più istanze del problema da risolvere. Sono difficili da individuare e spesso si deve ricorrere al debugging tramite il debugger dell'IDE.
  • Gli errori di runtime sono errori che possono verificarsi nella fase di esecuzione del programma, anche se l'algoritmo è corretto e il codice viene compilato correttamente. Spesso sono relativi all'utilizzo della memoria da parte del programma stesso, che tenta ad esempio di scrivere ad una locazione di memoria alla quale non ha accesso. Questi errori si verificano principalmente nell'utilizzo dei puntatori e in programmazione dinamica.
En otros idiomas
Afrikaans: Bronkode
العربية: كود مصدري
asturianu: Códigu fonte
azərbaycanca: Mənbə kodu
беларуская: Зыходны код
беларуская (тарашкевіца)‎: Крынічны код
български: Изходен код
বাংলা: সোর্স কোড
bosanski: Izvorni kod
català: Codi font
Mìng-dĕ̤ng-ngṳ̄: Nguòng-dâi-mā
čeština: Zdrojový kód
dansk: Kildekode
Deutsch: Quelltext
English: Source code
Esperanto: Fontkodo
español: Código fuente
eesti: Lähtekood
euskara: Iturburu kode
فارسی: کد منبع
français: Code source
עברית: קוד מקור
हिन्दी: मूल कोड
hrvatski: Izvorni kod
Bahasa Indonesia: Kode sumber
한국어: 소스 코드
Кыргызча: Баштапкы код
lietuvių: Išeitinis kodas
latviešu: Pirmkods
олык марий: Тӱҥалтыш код
Bahasa Melayu: Kod sumber
Mirandés: Código fuonte
မြန်မာဘာသာ: ဆို့စ်ကုတ်ဒ်
Nederlands: Broncode
norsk nynorsk: Kjeldekode
norsk: Kildekode
Pälzisch: Kwälldegschd
português: Código-fonte
Runa Simi: Pukyu qillqa
română: Cod sursă
русский: Исходный код
srpskohrvatski / српскохрватски: Izvorni kod
Simple English: Source code
slovenčina: Zdrojový kód
slovenščina: Izvorna koda
српски / srpski: Изворни код
svenska: Källkod
Türkçe: Kaynak kodu
українська: Початковий код
اردو: سورس کوڈ
Tiếng Việt: Mã nguồn
中文: 源代码
Bân-lâm-gú: Goân-sú-bé
粵語: 原始碼