Motivi astratti ramificati in blu e bianco che ricordano canali fluviali o vene in un landscape dalla texture particolare.

Cos'è la gestione del codice sorgente?

Definizione di gestione del codice sorgente

La gestione del codice sorgente comprende le pratiche, i processi e gli strumenti per controllare, gestire e tenere traccia delle modifiche apportate a una codebase nel tempo. Chiamato anche SCM, rappresenta la fonte di verità definitiva per i team di sviluppo software e altri stakeholder, tra cui team DevOps, ingegneri QA o addetti ai test, specialisti della sicurezza e redattori tecnici.

Man mano che progetti e prodotti software crescono, il relativo codice sorgente potrebbe diventare complesso e ingombrante. L'SCM aiuta a trasformare complessità e ingombro in un sistema più gestibile, favorendo agilità e scalabilità.

Caratteristiche principali della gestione del codice sorgente

La gestione del codice sorgente comprende queste caratteristiche principali:

  • Repository

  • Controllo versione

  • Ramificazione

  • Commit

  • Unificazione

Repository

Un repository, detto anche repo, contiene il codice sorgente di un progetto e altri artefatti correlati, come script di compilazione, file di configurazione, script di database, documentazione, test di integrazione e test unitari. Pensa ai repository come a spazi di storage organizzati o warehouse per prodotti software.

Questo repository condiviso e centralizzato può essere ospitato on-premise o nel cloud. I repository privati vengono generalmente utilizzati per software proprietario o a codice chiuso, mentre il software open source si avvale di repository pubblici.

I team di sviluppo software possono scegliere tra due architetture di repository principali:

  • Monorepo: un monorepo contiene più progetti all'interno di un unico repository. In genere si applica ai componenti strettamente accoppiati.

  • Polyrepo: i polyrepo mantengono i progetti separati nei repository. Questa architettura è comunemente utilizzata per componenti debolmente accoppiati, come i microservizi.

Controllo versione

Il controllo delle versioni consente ai team di mantenere una cronologia della codebase. Tiene traccia di varie versioni di file di codice sorgente e artefatti in modo da rendere possibile il tracciamento delle modifiche e la retention permanente. Gli sviluppatori possono confrontare il codice sorgente corrente con la cronologia delle versioni, ripristinando le versioni precedenti se necessario e contribuendo con il debug. Questa cronologia delle versioni può inoltre costituire la base delle note di rilascio, che vengono pubblicate insieme ai lanci o agli aggiornamenti software.

Ramificazione

Una ramificazione è una copia separata del repository del codice sorgente che può essere prelevata e clonata nell'ambiente locale dello sviluppatore. Un repository può essere suddiviso in diverse ramificazioni modificabili singolarmente senza influenzare il repository centrale. Grazie alla ramificazione, i membri del team possono lavorare simultaneamente su diverse parti della codebase, facilitando lo sviluppo parallelo.

Un ramo principale funge da "tronco" da cui tutti i rami hanno origine e si fondono di nuovo. Contiene l'ultima versione stabile o la versione del codice pronta per la produzione.

I team di ingegneria del software possono adottare una strategia di ramificazione adatta alle loro esigenze. Ad esempio, possono creare una ramificazione dedicata per ogni nuova caratteristica e un'altra ramificazione solo per le correzioni, oppure seguire un workflow che si dirama dalle modifiche precedenti in modo che le modifiche al codice si costruiscano una sopra l'altra.

Commit

Un commit registra una serie di modifiche al codice sorgente e alla cronologia del repository. Come best practice, i commit atomici rappresentano una singola modifica logica che riguarda un solo compito specifico, supera tutti i test richiesti e viene compilata o creata senza errori, lasciando la codebase in uno stato valido. I commit devono essere accompagnati da messaggi chiari e significativi che descrivano cosa è cambiato e perché.

Unificazione

L'unificazione si riferisce all'incorporazione di modifiche di codice revisionate e approvate da un ramo al ramo principale. La maggior parte delle modifiche può essere automaticamente unificata. In caso di conflitti, ad esempio quando due modifiche distinte interessano le stesse righe di codice, l'operazione di unificazione dovrà essere eseguita manualmente per risolvere i conflitti.

Qual è la differenza tra la gestione del codice sorgente e il controllo della versione?

La gestione del codice sorgente e il controllo delle versioni sono spesso usati in modo intercambiabile, ma riflettono scopi diversi.

Il controllo delle versioni costituisce solo una parte della gestione del codice sorgente. Si concentra sul monitoraggio e sulla gestione della cronologia delle versioni, conferendole un ambito ristretto.

Nel frattempo, la gestione del codice sorgente include il controllo delle versioni ma coinvolge anche i workflow e l'organizzazione del codice. Ha una portata più ampia e tocca diverse fasi del ciclo di vita dello sviluppo del software (SDLC).

Gestione del codice sorgente nell'SDLC

La gestione del codice sorgente è vitale per la maggior parte delle fasi del ciclo di vita dello sviluppo software. L'SCM promuove una gestione adeguata del codice durante tutto il ciclo di vita dello sviluppo software (SDLC).

Progettazione

Questa fase prevede la definizione del progetto, che include anche la scelta e la configurazione dell'architettura del repository. I team tracciano una struttura preliminare per il repository basandosi su componenti, funzionalità o tappe definite nel documento di progettazione o nel documento di specifica dei requisiti. La prototipazione può aiutare i team a comprendere e visualizzare come il codice sorgente del progetto e i file di supporto verranno memorizzati e organizzati.

Codifica

La fase di sviluppo è quella in cui vengono creati i rami. Gli sviluppatori scrivono ed eseguono il commit del codice quindi creano delle pull request per segnalare le modifiche suggerite per la revisione del codice. I revisori valutano le modifiche prima di unificarle per mantenere la qualità del codice.

Test

L'SCM funziona in sinergia con l'integrazione continua (CI), la prima parte della pipeline CI/CD e uno dei tratti distintivi della metodologia DevOps. Quando il codice sorgente viene inviato al repository, i server CI come CircleCI, GitHub Actions, GitLab CI/CD e Jenkins attivano il processo di build, automatizzando la compilazione e il packaging del codice. Gli strumenti CI eseguono dei test automatizzati per garantire che le modifiche non compromettano la codebase e per identificare eventuali problemi prima ancora che vengano propagati in produzione.

Distribuzione

La gestione del codice sorgente si integra con la distribuzione continua (CD), che riprende da dove termina il CI. Gli strumenti SCM aiutano a garantire che vengano implementate solo versioni del codice sorgente stabili e valide, mentre gli strumenti CD automatizzano la distribuzione delle modifiche al codice che è possibile distribuire dopo aver superato i test automatizzati.

Attraverso l'implementazione continua, le modifiche validate con successo vengono automaticamente implementate in produzione. Nel caso in cui una distribuzione presenti degli errori, tutti questi sistemi (SCM, CI/CD e distribuzione continua) si aggregano per tornare senza problemi a una versione stabile precedente.

Manutenzione

L'SCM facilita cicli più fluidi per le future versioni. È parte integrante della gestione delle codebase man mano che si evolvono con correzioni di bug, miglioramenti, nuove caratteristiche, patch, ottimizzazioni delle prestazioni, refactoring e altri aggiornamenti.

 
I benefici della gestione del codice sorgente

I team di ingegneria del software possono ottenere questi vantaggi dai sistemi SCM:

  • Controllo degli accessi e audit

  • Backup della codebase

  • Miglioramenti della qualità del codice

  • Collaborazione efficiente

  • Rapidi rilasci del software

Controllo degli accessi e audit

La gestione del codice sorgente può limitare l'accesso a un repository, assicurando che solo gli utenti autenticati e autorizzati possano apportare delle modifiche. Questo approccio aiuta a proteggere la proprietà intellettuale di un'organizzazione e si rivela particolarmente prezioso per settori come la finanza e la sanità, in cui la tutela dei dati sensibili rimane cruciale.

Questi sistemi sono utili anche per le attività di audit. L'SCM conserva una cronologia completa delle versioni di tutte le modifiche al codice, fornendo una traccia di audit chiara. In questo modo gli sviluppatori riescono a capire cosa è stato cambiato e perché (tramite messaggi di commit), chi l'ha implementato e quando è stato applicato, rendendo il debug più semplice e veloce.

Backup della codebase

Alcuni strumenti SCM e sistemi di controllo della versione offrono funzionalità per il backup dei repository, offrendo un modo per ripristinare le codebase in caso di guasti critici o interruzioni improvvise ed evitando ai team di dover ricominciare da zero.

Miglioramenti della qualità del codice

La gestione del codice sorgente ne semplifica i miglioramenti della qualità. Le pull request fungono da checkpoint, assicurandosi che i commit vengano approvati prima di essere uniti al ramo principale. I sistemi SCM possono anche funzionare con i linter per verificare la presenza di problemi di formattazione o stilistici, con strumenti di analisi statica del codice per individuare difetti logici ed errori di sintassi e con strumenti CI per svolgere scansioni di sicurezza e assicurarsi che le modifiche al codice superino i test.

Collaborazione efficiente

Con la gestione del codice sorgente, più sviluppatori possono contribuire a progetti software. Non devono aspettarsi l'uno con l'altro per finire prima di iniziare il loro compito. Tutte le loro modifiche vengono infine unificate, risolvendo eventuali modifiche contrastanti.

I team distribuiti in diverse località possono costruire sul lavoro degli altri senza il timore di sovrascrivere le modifiche apportate. I membri possono condividere le modifiche tra loro tramite pull request, mentre le recensioni tra pari favoriscono la trasmissione di conoscenze e di feedback.

Rapide release del software

Tramite l'SCM, ogni membro del team può lavorare separatamente ma contemporaneamente. E poiché la gestione del codice sorgente si integra perfettamente con le pipeline CI/CD, i cicli di consegna diventano più rapidi. I team di sviluppo possono rispondere rapidamente ai problemi di produzione e rilasciare le patch prima.

Strumenti di gestione del codice sorgente

Una delle prime iterazioni degli strumenti SCM è stata il codice sorgente Control System (SCCS), sviluppato da Marc Rochkind, programmatore informatico dei Bell Labs negli anni '70. L'SCCS ha applicato un rigoroso meccanismo di blocco, consentendo a una sola persona alla volta di modificare un file, con le revisioni memorizzate come copie complete. Il suo successore, il Revision Control System (RCS), ha migliorato l'SCCS, mantenendo l'ultima versione di un file ma memorizzando solo le differenze tra le versioni precedenti.

Negli anni '80 è emerso il sistema di versioni concorrenti (CVS). È stato costruito su RCS e adottava un modello di repository client-server che introduceva la concorrenza e il merging.

Subversion (SVN) è nato all'inizio degli anni 2000 con l'obiettivo di essere un "CVS migliore". Ha mantenuto gran parte delle funzionalità di CVS, aggiungendo funzionalità come i commit atomici e le directory versionate. Ufficialmente noto come Apache Subversion, è attualmente gestito come progetto open source dalla Apache Software Foundation e continua ad essere ampiamente utilizzato.

La metà degli anni 2000 ha visto l'ascesa dei sistemi di controllo delle versioni decentralizzati. Linus Torvalds, il creatore di Linux, ha guidato lo sviluppo di Git, un sistema di controllo di versione distribuito e open source originariamente creato per il kernel Linux. Invece di memorizzare i file e le relative modifiche, Git salva istantanee dello stato di un progetto nel tempo. Può essere utilizzato da solo eseguendo i comandi Git sulla riga di comando, ma ha anche un ricco ecosistema di strumenti, tra cui GUI e integrazioni IDE.

Git funge da base per alcuni degli strumenti di gestione del codice sorgente attualmente più diffusi, tra cui Bitbucket, GitHub e GitLab. Tuttavia, dato che gli agenti AI ora generano grandi quantità di codice, alcune aziende stanno ripensando all'SCM. Ad esempio, Cursor's Origin si definisce "una fucina Git per l'era agentica", mentre il DeltaDB di Zed collega i cambiamenti di codice alla conversazione degli agenti che li ha generati. Allo stesso modo, GitLab sta lavorando a quella che definisce "gestione del codice sorgente di nuova generazione" per flotte di agenti di codifica.

AI Academy

Diventa un esperto di AI

Acquisisci le conoscenze necessarie per dare priorità agli investimenti nell'AI alla base della crescita aziendale. Inizia oggi stesso con la nostra AI Academy gratuita e guida il futuro dell'AI nella tua organizzazione.

Autori

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

Soluzioni correlate
IBM® Bob

Accelera la distribuzione del software con IBM® Bob, il tuo partner AI per uno sviluppo sicuro e consapevole degli intenti.

Esplora IBM Bob
Soluzioni di AI per sviluppatori

Sviluppa, implementa e gestisci le applicazioni AI più velocemente con strumenti pensati per le aziende.

Esplora l'AI per sviluppatori
Servizi di modernizzazione delle applicazioni

Reinventa i sistemi legacy con la modernizzazione intelligente dell'AI.

Scopri i servizi di modernizzazione delle applicazioni
Fasi successive

Utilizza l'AI generativa e l'automazione avanzata per fornire codice enterprise-ready con maggiore velocità e coerenza. I modelli Bob arricchiscono le competenze degli sviluppatori, semplificando i workflow di modernizzazione e i compiti di sviluppo complessi.

  1. Scopri l'agente di AI coding
  2. Esplora le soluzioni di AI per sviluppatori